显式设置 NuGet 包中定义的构建目标的顺序

Posted

技术标签:

【中文标题】显式设置 NuGet 包中定义的构建目标的顺序【英文标题】:Explicitly set the order of build targets defined in NuGet packages 【发布时间】:2018-04-09 13:24:35 【问题描述】:

我有一个用于构建 Azure Function App 的 Visual Studio 2017 项目。该项目包含(除其他外)两个 NuGet 包 - Microsoft.NET.Sdk.FunctionsOctoPack。相关项目的 .csproj 文件按此顺序引用这些包。

Microsoft.NET.Sdk.Functions 包包含目标 _GenerateFunctionsPostBuild -

<Target Name="_GenerateFunctionsPostBuild" AfterTargets="Build">...</Target>

OctoPack 包包含目标 Octopack -

<Target Name="OctoPack" Condition="$(RunOctoPack)">...</Target>

在构建时,_GenerateFunctionsPostBuild 目标必须在 OctoPack 目标之前运行,否则 OctoPack 生成的 NuGet 包中没有所需的文件。

由于我无法直接编辑 NuGet 包,因此我无法为 OctoPack 目标明确声明 AfterTarget="_GenerateFunctionsPostBuild"。有什么方法可以强制目标按照我需要的顺序运行?

【问题讨论】:

【参考方案1】:

我想出了一个解决方法来代替答案。我没有使用 OctoPack,而是在构建完成后手动生成 NuGet 包。

NuSpec 文件中,我为%Configuration%%Version% 添加了几个标记,以便我可以根据配置选择要打包的文件,并且显然可以自定义版本.

这就是我正在做的事情 - 显然我在这些行之前制作$version

$dir = (Get-Location).Path
& D:\nuget\4.4.1\nuget.exe pack $dir\AzureFunction\AzureFunction.nuspec -BasePath $dir\AzureFunction -Properties "Configuration=Release;Version=$version"

【讨论】:

以上是关于显式设置 NuGet 包中定义的构建目标的顺序的主要内容,如果未能解决你的问题,请参考以下文章

调试位于 nuget 包中的 C# 接口实现

使用 .targets 替换 NuGet 包中的文件

Team City 自定义 NuGet 包还原未发生

如何从通过 Jenkins 使用 Octopack 构建的 NuGet 包中排除目录和文件?

nuget 没有使用 nuget 包中为 Microsoft.Extensions.Logging 指定的内容解决依赖关系

显式引用***包中的 actionscript 类