BundlerMinifierCore文件未在dotnet发布

时间:2017-03-18 16:15:47

标签: css msbuild asp.net-core csproj asp.net-core-1.1

我有一个ASP.NET Core 1.1应用程序,它使用Project.json从Visual Studio 2015升级到带有MsBuild csproj标准的Visual Studio 2017。该应用程序部署到linux上的docker容器中,其中使用了official images from microsoftBundlerMinifier失踪了。但仅限于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 - 正确的方式。

1 个答案:

答案 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_modulesnpm_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>

由于您不应在视图和区域中包含任何不相关的文件,因此也可以更轻松地复制整个文件夹。