【问题标题】:BundlerMinifierCore files are not copied on dotnet publishBundlerMinifierCore 文件不会在 dotnet publish 上复制
【发布时间】: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 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 等其他文件,因此我认为执行顺序存在问题。像 MsBuild 这样的东西会在 MsBuild 发布文件之前复制文件。但从逻辑上看这似乎是不可能的,因为这是在PrepareForPublish 目标之前完成的,根据Microsoft docs,这是正确的方法。

【问题讨论】:

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


    【解决方案1】:

    那是因为您没有将文件包含在 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 中):

    我也不确定&lt;None&gt; 是否适合它。在我的项目的 csproj 中只有 &lt;None Include="App.config" /&gt;,我复制的文件在 &lt;Content&gt; 中,如下所示

    <ItemGroup>
      <None Include="App.config" />
      <Content Update="wwwroot;Views;Areas;appsettings.json;web.config">
        <CopyToPublishDirectory>PreserveNewest</CopyToPublishDirectory>
      </Content>
    </ItemGroup>
    

    由于视图和区域中不应有任何不相关的文件,因此复制整个文件夹也更容易。

    【讨论】:

    • 谢谢,解决了复制问题。但我发现在PrepareForPublish 之前执行dotnet bundle 似乎存在某种错误。我目前的解决方法是在dotnet publish 之前手动调用dotnet bundle。这与我们的修复一起工作。
    猜你喜欢
    • 1970-01-01
    • 2020-05-13
    • 1970-01-01
    • 1970-01-01
    • 2018-09-09
    • 2018-02-27
    • 2022-01-25
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多