Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/tfs/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Tfs &引用;Nuget pack“;似乎忽略了BasePath参数_Tfs_Msbuild_Nuget_Tfsbuild_Nuget Package - Fatal编程技术网

Tfs &引用;Nuget pack“;似乎忽略了BasePath参数

Tfs &引用;Nuget pack“;似乎忽略了BasePath参数,tfs,msbuild,nuget,tfsbuild,nuget-package,Tfs,Msbuild,Nuget,Tfsbuild,Nuget Package,我正在尝试使用我们的TFS 2013构建创建一个NuGet包。我基本上遵循了这些步骤,在本地一切正常。 但是我们的构建没有使用默认的输出目录,这似乎使nuget-pack命令崩溃。 在我的本地计算机上,所有内容都构建到SOLUTION/PROJECT/bin/Release,但TFS构建使用Build/Sources/SOLUTION/PROJECT作为源,并将Build/Binaries/Release作为其输出目录。运行生成时,我收到以下日志/错误: 构建包: D:\BUILD\Source

我正在尝试使用我们的TFS 2013构建创建一个NuGet包。我基本上遵循了这些步骤,在本地一切正常。
但是我们的构建没有使用默认的输出目录,这似乎使
nuget-pack
命令崩溃。
在我的本地计算机上,所有内容都构建到
SOLUTION/PROJECT/bin/Release
,但TFS构建使用
Build/Sources/SOLUTION/PROJECT
作为源,并将
Build/Binaries/Release
作为其输出目录。运行生成时,我收到以下日志/错误:

构建包:
D:\BUILD\Sources\SOLUTION\.nuget\nuget.exe“pack”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”。确保项目已经完成

然后,我将
-BasePath“$(TargetDir)”
添加到
NuGet.targets
中的
BuildCommand
,但仍然没有更改:

<BuildCommand>$(NuGetCommand) pack "$(ProjectPath)" -Properties "Configuration=$(Configuration);Platform=$(Platform)" $(NonInteractiveSwitch) -OutputDirectory "$(PackageOutputDir)" -symbols -NoPackageAnalysis -BasePath "$(TargetDir)"</BuildCommand>
$(NuGetCommand)pack“$(ProjectPath)”-Properties“配置=$(配置);平台=$(平台)”$(非交互式开关)-OutputDirectory“$(PackageOutputDir)”-symbols-NoPackageAnalysis-BasePath“$(TargetDir)”
如何告诉NuGet使用TFS加载正确的文件?

更新:
我找到了一个解决方法:如果我将项目的构建输出路径设置为与我们的TFS构建使用的相同的“相对路径”,它就会工作…

但这不可能是解决方案,对吗?

我在自己的TFS构建中遇到了与您相同的问题。问题是,当使用
csproj
文件调用
NuGet-pack
时,它实际上将
csproj
作为MSBUILD文件进行计算,并且默认的
OutDir
MSBUILD属性设置为
{ProjectDir}\bin\{ConfigurationName}

但是对于TFS构建,输出目录通常设置为一个暂存位置,例如在您的情况下
BUILD/Binaries/Release

您缺少的是
OutDir
属性到
NuGet-pack
,下面是一个适用于您的示例:

$(NuGetCommand)pack“$(ProjectPath)”-Properties“Configuration=$(Configuration);Platform=$(Platform);OutDir=$(OutDir)”$(非交互式开关)-OutputDirectory“$(PackageOutputDir)”-symbols-NoPackageAnalysis-BasePath“$(TargetDir)”


使用此附加的
OutDir
属性,NuGet应该能够找到新构建的二进制文件并将它们添加到包中。

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

对我们有效的是为
nuget-pack
指定
-Build
选项。发件人:

生成:确定是否应在生成包之前生成项目


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

感谢您的输入,但此“项目”现在处于“搁置”状态,因为它目前正在使用变通方法,而TFS 2015本机支持此类操作(NuGet pack和push),所以我们不会再花更多的时间在“手工操作”;-)上。。。from:OutDir必须以反斜杠\(在Windows上)结尾。当OutDir包含空格时,它必须被引用,但在命令行解析中还有另一个错误/特性-引号前的反斜杠必须加倍。完整的解决方法是-Properties OutDir=“$(OutDir.Trim('\\'))\\”这对我来说很有效。我必须在$(TargetDir)后面添加一个空格:$(NuGetCommand)pack“$(ProjectPath)”-Properties“配置=$(配置);平台=$(平台);OutDir=$(OutDir.Trim('\\'))\\“$(非交互式开关)-OutputDirectory”$(PackageOutputDir)–符号-BasePath“$(TargetDir)”无效:使用
-Build
会导致nuget.exe创建新的输出文件,而不是查找由TFS生成代理创建的文件。多次生成从来都不是一个好主意,但更重要的是:NuGet.exe不会传递与TFS生成代理相同的MSBuild参数。