“Nuget pack”似乎忽略了BasePath参数

时间:2015-04-15 15:43:32

标签: tfs msbuild nuget tfsbuild nuget-package

我正在尝试使用我们的TFS 2013版本创建一个NuGet包。我基本上遵循THIS步骤,在当地一切正常 但是我们的构建不使用默认输出目录,这似乎使nuget pack命令崩溃 在我的本地机器上,所有内容都构建到SOLUTION/PROJECT/bin/Release,但TFS Build使用BUILD/Sources/SOLUTION/PROJECT作为源,BUILD/Binaries/Release作为其输出目录。运行构建我得到以下日志/错误:

  

BuildPackage:
   " d:\ BUILD \源头\ SOLUTION \ .nuget \ NuGet.exe"打包" D:\ BUILD \ Sources \ SOLUTION \ PROJECT \ PROJECT.csproj" -Properties" Configuration = Release; Platform = AnyCPU" -NonInteractive -OutputDirectory" D:\ BUILD \ Binaries \ Release" -symbols -NoPackageAnalysis -BasePath" D:\ BUILD \ Binaries \ Release"     试图从PROJECT.csproj'中构建软件包。

     

D:\ BUILD \ Sources \ SOLUTION \ .nuget \ NuGet.targets(133,5):错误:无法找到' D:\ BUILD \ Sources \ SOLUTION \ PROJECT \ bin \ Release \ PROJECT。 DLL&#39 ;.确保项目已经建成。

然后我将-BasePath "$(TargetDir)"添加到BuildCommand中的NuGet.targets,但仍然没有变化:

<BuildCommand>$(NuGetCommand) pack "$(ProjectPath)" -Properties "Configuration=$(Configuration);Platform=$(Platform)" $(NonInteractiveSwitch) -OutputDirectory "$(PackageOutputDir)" -symbols -NoPackageAnalysis -BasePath "$(TargetDir)"</BuildCommand>

如何告诉NuGet使用TFS加载正确的文件?

更新:
我找到了一个解决方法:如果我将项目的构建输出路径设置为相同的&#34;相对路径&#34;正如我们的TFS构建所使用的那样...... 但这不是解决方案,对吗?

2 个答案:

答案 0 :(得分:8)

我在自己的TFS版本中遇到了与您完全相同的问题。问题是当使用NuGet pack文件调用csproj时,它会将csproj计算为MSBUILD文件,默认OutDir MSBUILD属性设置为{{1 }}

但是使用TFS构建时,输出目录通常设置为临时位置,例如{ProjectDir}\bin\{ConfigurationName}

您缺少的是BUILD/Binaries/Release属性OutDir,这是一个适合您的示例:

NuGet pack

使用这个额外的<BuildCommand>$(NuGetCommand) pack "$(ProjectPath)" -Properties "Configuration=$(Configuration);Platform=$(Platform);OutDir=$(OutDir)" $(NonInteractiveSwitch) -OutputDirectory "$(PackageOutputDir)" -symbols -NoPackageAnalysis -BasePath "$(TargetDir)"</BuildCommand>属性,NuGet应该能够找到新构建的二进制文件并将它们添加到包中。

答案 1 :(得分:-1)

设置OutDir或其他路径相关参数可能不够。例如,如果.nuspec按相对路径包含文件,则无法找到它们。

对我们有用的是为-Build指定nuget pack选项。来自the docs

  

构建:确定在构建包之前是否应该构建项目。

它将首先尝试构建项目(使用默认参数+提供的属性),并将正确查找包含所有包含文件的输出文件。