OctoPack没有在nuspec文件中填充占位符

时间:2018-03-07 14:49:17

标签: octopus-deploy nuspec octopack

我有一个包含许多项目的解决方案,其中大约十几个已安装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在解决方案上运行 ,这对我没有帮助 strong>,但我需要正在打包的 项目 的名称。

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

2 个答案:

答案 0 :(得分:2)

我通过将以下内容添加到csproj文件

来实现此功能
  <PropertyGroup>
      <OctoPackNuGetProperties>id=$(AssemblyName)</OctoPackNuGetProperties>
  </PropertyGroup>

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

答案 1 :(得分:0)

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

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

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