我有一个包含许多项目的解决方案,其中大约有十几个项目安装了Octopack,当TeamCity运行msbuild /p:RunOctoPack=true /p:OctoPackEnforceAddingFiles=true时,软件包被正确地生成。从p:/OctoPackEnforceAddingFiles标志可以看出,安装了Octopack的每个项目都有一个nuspec文件。
我们遇到的问题是,Octopack没有遵守https://learn.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文件中硬编码了项目名称,但是这个名称变得脆弱和难以处理,我们想要修复它。
发布于 2018-03-08 11:08:36
通过将以下内容添加到csproj文件中,我就可以做到这一点
<PropertyGroup>
<OctoPackNuGetProperties>id=$(AssemblyName)</OctoPackNuGetProperties>
</PropertyGroup>这将程序集名称通过as id传递给Octo.exe,后者将通过其-Properties参数将其传递给NuGet.exe。
发布于 2018-03-08 10:25:05
您试过而不是在NuSpec中提供$id$部分吗?Octopack应该尝试并生成它(它知道它被应用于什么?)?
另一种方法可以是使用$(ProjectName)宏的预构建事件来更新相关的nuspecs。在您的情况下,取决于您的构建过程,可能会坚持解决方案范围的预构建过程来更新所有nuspec。
我个人放弃使用八达通,目前使用的是假的(F# Make)。
https://stackoverflow.com/questions/49154721
复制相似问题