我有一个包含许多项目的解决方案,其中大约十几个已安装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文件中硬编码项目名称,但这变得脆弱和笨拙,我们想修复它。
答案 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)。