我正在尝试使用我们的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构建所使用的那样......
但这不是解决方案,对吗?
答案 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:
构建:确定在构建包之前是否应该构建项目。
它将首先尝试构建项目(使用默认参数+提供的属性),并将正确查找包含所有包含文件的输出文件。