OctoPack 不在 nuspec 文件中填充占位符

OctoPack not populating placeholders in nuspec file

我有很多项目的解决方案,其中大约有十几个安装了 Octopack,并且在 TeamCity 运行s 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 是 运行 on解决方案,但我需要正在打包的项目的名称。

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

您是否尝试过 在 NuSpec 中提供 $id$ 部分? Octopack 应该尝试生成它(它知道 what it is being applied to)?

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

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

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

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

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