1

我有一个包含许多项目的解决方案,其中大约有十几个安装了 Octopack 并且在 TeamCity 运行时正在正确生成包msbuild /p:RunOctoPack=true /p:OctoPackEnforceAddingFiles=true。正如你可能从p:/OctoPackEnforceAddingFiles标志中看出的那样,每个安装了 Octopack 的项目也有一个 nuspec 文件。

我们遇到的问题是 Octopack 不遵守https://docs.microsoft.com/en-gb/nuget/reference/nuspec#replacement-tokens中指定的 nuspec 占位符。我们现在要使用的$id$那个应该等于正在打包的项目的程序集名称。相反,当我们运行 Octpack 时,该$id$令牌是空的。

我可以在https://octopus.com/docs/packaging-applications/creating-packages/nuget-packages/using-octopack#UsingOctoPack-Replacementtokens看到 Octopack 允许手动覆盖这些令牌,但这对我没有帮助因为 Octopack在解决方案上运行,但我需要正在打包的项目的名称。

我能做些什么来解决这个问题?目前,我们基本上将项目名称硬编码在 nuspec 文件中,但这变得脆弱和笨拙,我们想修复它。

4

2 回答 2

2

我通过将以下内容添加到 csproj 文件来实现此功能

  <PropertyGroup>
      <OctoPackNuGetProperties>id=$(AssemblyName)</OctoPackNuGetProperties>
  </PropertyGroup>

这会将程序集名称作为 id 传递给 Octo.exe,Octo.exe 又将通过其-Properties参数将其传递给 NuGet.exe。

于 2018-03-08T11:08:36.767 回答
0

您是否尝试过在 NuSpec 中根本提供该部分?$id$Octopack 应该尝试生成它(它知道它被应用于什么)?

替代方法是使用带有宏的预构建事件$(ProjectName)来更新相关的 nuspecs。在您的情况下,根据您的构建过程,可能会坚持解决方案范围的预构建过程来更新所有 nuspec。

PS 我个人不再使用 Octopack,目前使用 Fake (F# Make)。

于 2018-03-08T10:25:05.250 回答