显式设置 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.Functions 和 OctoPack。相关项目的 .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 包中定义的构建目标的顺序的主要内容,如果未能解决你的问题,请参考以下文章
如何从通过 Jenkins 使用 Octopack 构建的 NuGet 包中排除目录和文件?
nuget 没有使用 nuget 包中为 Microsoft.Extensions.Logging 指定的内容解决依赖关系