我有一个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这样的其他文件的复制工作,我认为有关执行ordner的问题。在MsBuild发布之前,像MsBuild这样的东西会复制文件。但这似乎不可能来自逻辑,因为这是在PrepareForPublish
目标之前完成的,根据Microsoft docs - 正确的方式。
答案 0 :(得分:3)
那是因为您没有在wwwroot中包含这些文件。
<ItemGroup>
<None Update="wwwroot\**\*;Views\**\*.cshtml;Areas\**\*.cshtml">
<CopyToPublishDirectory>PreserveNewest</CopyToPublishDirectory>
</None>
</ItemGroup>
wwwroot\**\*
只会复制wwwroot子文件夹中的文件(至少旧版project.json结构仍然如此),但您的css文件位于wwwroot/site.min.css
。所以要么将它们移到wwwroot/css/site.min.css
。或者更简单:只需将副本发布到整个wwwroot
文件夹(并将您的libs文件保留在wwwroot之外,如bower_modules
或npm_modules
):
此外,我不确定<None>
是否适合它。在我的项目的csproj中,只有<None Include="App.config" />
,我复制的文件位于<Content>
,如下所示
<ItemGroup>
<None Include="App.config" />
<Content Update="wwwroot;Views;Areas;appsettings.json;web.config">
<CopyToPublishDirectory>PreserveNewest</CopyToPublishDirectory>
</Content>
</ItemGroup>
由于您不应在视图和区域中包含任何不相关的文件,因此也可以更轻松地复制整个文件夹。