【问题标题】:What is the correct way to do a "dotnet publish" on Project1 before building Project2在构建 Project2 之前在 Project1 上执行“dotnet publish”的正确方法是什么
【发布时间】:2018-10-12 08:52:07
【问题描述】:

我有一个包含 2 个项目的解决方案。一个是 VSIX,另一个是 .NET Core 2.1 控制台应用程序。

这些项目不直接相互依赖,但我需要确保 VSIX 在构建时嵌入来自其他项目的所有输出文件的新版本,因为它在运行时需要它们。

将以下内容放入用于工作的 VSIX 项目的构建后事件中:

cd "$(SolutionDir)MyCoreConsoleApp"
dotnet publish --configuration $(Configuration)

值得一提的是,这个设置在开始时存在一些奇怪的问题,但是......如果通过直接从解决方案资源管理器发出项目重建来完成,控制台应用程序可以很好地构建。另一方面,从 VSIX 的构建前发出 dotnet publish 会失败并出现错误,基本上是说构建系统无法找到所有必需的文件。

经过一番努力,我确定问题在于控制台应用当时使用了 Fody Costura。移除此依赖后,dotnet publish 开始工作,没有任何问题。

快进到昨天...我在控制台应用程序项目中添加了对 MSBuild 社区任务的依赖项,因为我想使用 Zip 任务将一些内容文件的压缩副本嵌入为 EmbeddedResource。我已经向 csproj 添加了一个自定义目标,并确认它在直接构建项目或从命令行发出 dotnet publish 时工作正常。如果重要,Target 本身看起来像这样:

<Target Name="ZipAndEmbedWwwRoot" BeforeTargets="BeforeBuild">
  <CreateItem Include="wwwroot\**\*">
    <Output ItemName="ZipFiles" TaskParameter="Include" />
  </CreateItem>
  <Zip ZipFileName="$(IntermediateOutputPath)wwwroot.zip" WorkingDirectory="wwwroot" Files="@(ZipFiles)" />
  <ItemGroup>
    <EmbeddedResource Include="$(IntermediateOutputPath)wwwroot.zip">
      <LogicalName>wwwroot.zip</LogicalName>
    </EmbeddedResource>
  </ItemGroup>
</Target>

但现在构建 VSIX 再次开始失败。错误是:

“MSBuild.Community.Tasks.Zip”任务无法从 部件 C:\Users\MyUserName\.nuget\packages\msbuildtasks\1.5.0.235\build\..\tools\MSBuild.Community.Tasks.dll。 无法加载文件或程序集“Microsoft.Build.Utilities.v4.0, 版本=4.0.0.0,文化=中性,PublicKeyToken=b03f5f7f11d50a3a'。 该系统找不到指定的文件。确认 声明是正确的,即大会及其所有 依赖项可用,并且任务包含公共类 实现了 Microsoft.Build.Framework.ITask。

一旦我删除了自定义 Target,一切就又开始工作了。

我开始认为在一个项目上调用 dotnet publish 时可能会遗漏一些东西,该项目具有额外的 msbuild 依赖项。这可能也是 Fody Costura 不起作用的原因。

所以问题是,那么应该我该怎么做呢?

【问题讨论】:

  • 我认为您的问题仅与 zip 任务有关,与您的发布设置无关?如果是这样,请缩小问题范围内的问题
  • @MartinUllrich:直接的目标是调用 Zip 任务,是的。但由于在此之前我与 Fody Costura 也遇到过类似的问题,所以我觉得我可能会提及所有内容,以免忽略各部分之间可能存在的联系。

标签: c# msbuild post-build-event


【解决方案1】:

社区 Zip 任务相当陈旧,不再适用于最新版本的 MSBuild 或跨平台 dotnet CLI。

但是,VS 2017 15.8 和 CLI 2.1.400 引入了您可以使用的内置 ZipDirectory task

【讨论】:

  • 我不知道这些事情。将试一试并报告。谢谢!
猜你喜欢
  • 2021-02-10
  • 2020-11-01
  • 2018-02-02
  • 1970-01-01
  • 2017-10-22
  • 1970-01-01
  • 1970-01-01
  • 2014-07-04
  • 1970-01-01
相关资源
最近更新 更多