【发布时间】:2017-03-18 16:15:46
【问题描述】:
我有一个 ASP.NET Core 1.1 应用程序,它从使用 project.json 的 Visual Studio 2015 升级到使用 MsBuild csproj 标准的 Visual Studio 2017。该应用程序部署到 linux 上的 docker 容器,其中使用了 official images from microsoft。 BundlerMinifier 不见了。但仅在 docker 上,不在 Visual Studio 2017 中,也不在 Windows 10 上使用 dotnet publish。
我发现捆绑包已生成。但在解决方案的wwwroot 文件夹中,而不是在发布输出文件夹中(由--output 传递给dotnet publish)。可以说,我有/app,我的 VS 解决方案位于 docker 容器中。现在我运行dotnet publish --output /app/output。我的捆绑文件现在位于/app/src/{projectName}/wwwroot,而不是我需要它们的/app/output/wwwroot。
我在bundleconfig.json 中使用这样的相对路径:
[
{
"minify": { "enabled": false },
"outputFileName": "wwwroot/site.min.css",
"inputFiles": [
"wwwroot/lib/my-input-file.css"
]
}
]
要创建捆绑包,我的 csproj 文件中有以下发布脚本
<Target Name="PrepublishScript" BeforeTargets="PrepareForPublish">
<Exec Command="bower install" />
<Exec Command="dotnet bundle" />
</Target>
我对 MsBuild 不是很熟悉。但根据一些研究,以下几行似乎负责将文件复制到输出目录(如 wwwroot)
<ItemGroup>
<None Update="wwwroot\**\*;Views\**\*.cshtml;Areas\**\*.cshtml">
<CopyToPublishDirectory>PreserveNewest</CopyToPublishDirectory>
</None>
</ItemGroup>
由于此处已包含 wwwroot 并且可以复制 Views 等其他文件,因此我认为执行顺序存在问题。像 MsBuild 这样的东西会在 MsBuild 发布文件之前复制文件。但从逻辑上看这似乎是不可能的,因为这是在PrepareForPublish 目标之前完成的,根据Microsoft docs,这是正确的方法。
【问题讨论】:
标签: css msbuild asp.net-core csproj asp.net-core-1.1