【问题标题】:Copy entire folder to wwwroot using MSBuild task使用 MSBuild 任务将整个文件夹复制到 wwwroot
【发布时间】:2019-07-06 13:12:48
【问题描述】:

我有以下几点:

<Target Name="OnBuild" BeforeTargets="Build" Condition="'$(Configuration)' == 'Debug'">
  <Exec WorkingDirectory="app" Command="npm install" />
  <Exec WorkingDirectory="app" Command="npm run build" />
</Target>

命令“npm run build”创建文件夹“client/dist”。

如何使用 MSBuild 任务将文件夹及其内容复制到“wwwroot”?

我正在使用 ASP.NET Core 2.2 ...

Webpack.config

const path = require('path');

const environment = process.env.NODE_ENV;

const CopyPlugin = require('copy-webpack-plugin');
const MiniCssExtractPlugin = require("mini-css-extract-plugin");
const OptimizeCSSAssetsPlugin = require("optimize-css-assets-webpack-plugin");
const UglifyJsPlugin = require('uglifyjs-webpack-plugin');

module.exports = {

  plugins: [
    new MiniCssExtractPlugin({
      filename: 'main.min.css',
    }),
    new CopyPlugin([
      { from: './assets', to: './assets' }
    ])
  ],

  resolve: {
    extensions: ['.js'],
  },

  entry: path.resolve(__dirname, 'src/app/index.js'),  

  output: {
    path: path.resolve(__dirname, 'dist'),
    filename: 'main.min.js'
  },

  optimization: {
    minimizer: [
      new MiniCssExtractPlugin({}),
      new OptimizeCSSAssetsPlugin({}),      
      new UglifyJsPlugin({
        cache: true,
        parallel: true,
        sourceMap: false
      })
    ]
  },

  module: {
    rules: [
      {
        test: /\.less$/,
        use: [ MiniCssExtractPlugin.loader, 'css-loader', 'less-loader' ]
      },
      {
        test: /\.(png|svg|jpg|gif)$/,
        use: [ 'file-loader' ]
      },
      {
        test: /\.(otf|eot|ttf|woff|woff2)$/,
        use: [ 'file-loader' ]
      }
    ]
  },

  watch: true

};

【问题讨论】:

  • 默认不复制吗?我的意思是发布过程会在client/ 内部创建dist 的副本,而在wwwroot 内部创建另一个副本
  • 就我而言,它不会复制到 wwwroot。不知道为什么...这只是几个 JS 和 LESS 文件...仅此而已。

标签: asp.net-core asp.net-core-2.2


【解决方案1】:

您可以使用它并将RelativePath 修改为所需的相对路径:

<!-- Include the newly-built files in the publish output -->
<ItemGroup>
  <DistFiles Include="$(SpaRoot)build\**" />
  <ResolvedFileToPublish Include="@(DistFiles->'%(FullPath)')" Exclude="@(ResolvedFileToPublish)">
    <RelativePath>wwwroot/%(RecursiveDir)%(Filename)%(Extension)</RelativePath>
    <CopyToPublishDirectory>PreserveNewest</CopyToPublishDirectory>
    <ExcludeFromSingleFile>true</ExcludeFromSingleFile>
  </ResolvedFileToPublish>
</ItemGroup>

【讨论】:

  • 似乎不起作用。我收到错误“错误 MSB3541:文件具有无效值”,我看到文件名由两个连接的完整路径“C:\\C:\
【解决方案2】:

YourProject.csproj 内添加这些行,在Target 标签内:

<!-- Include the newly-built files in the publish output -->

<ItemGroup>
  <DistFiles Include="$(SpaRoot)dist\**; $(SpaRoot)dist-server\**" />
  <ResolvedFileToPublish Include="@(DistFiles->'%(FullPath)')" Exclude="@(ResolvedFileToPublish)">
    <RelativePath>%(DistFiles.Identity)</RelativePath>
    <CopyToPublishDirectory>PreserveNewest</CopyToPublishDirectory>
  </ResolvedFileToPublish>
</ItemGroup>

PS。这段代码是我们在ASP.Net Core中启动一个新的SPA项目时自动生成的

【讨论】:

    猜你喜欢
    • 2011-07-04
    • 2011-04-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-09-20
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多