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。
我有很多项目的解决方案,其中大约有十几个安装了 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。