我尝试使用来自TFS post构建脚本的nuget打包和发布库。似乎TFS构建不使用标准项目输出路径,因此它使事情变得复杂。我想要做的就是构建项目(它所做的),然后用nuget打包和发布。
这是我的剧本。它在我的本地机器上运行得很好。
param([string]$project, [string]$version)
if (-not $project)
{
Write-Error ("The project parameter is required.")
exit 1
}
if (-not $version)
{
$version = $Env:TF_BUILD_BUILDNUMBER
}
if (-not $version)
{
Write-Error ("Either the version parameter or the TF_BUILD_BUILDNUMBER environment variable is required.")
exit 1
}
$projectFile = "$project\$project.csproj"
$packageFile = "$project.$version.nupkg"
$nugetPath = ".nuget\NuGet.exe"
if ($Env:TF_BUILD_SOURCESDIRECTORY)
{
# relative paths won't work on the build server
$projectFile = "$Env:TF_BUILD_SOURCESDIRECTORY\$projectFile"
$packageFile = "$Env:TF_BUILD_SOURCESDIRECTORY\$packageFile"
$nugetPath = "$Env:TF_BUILD_SOURCESDIRECTORY\$nugetPath"
}
else
{
$nugetPath = ".\$nugetPath"
}
Write-Host ("packing $projectFile...")
& $nugetPath pack "$projectFile" -Version $version -Symbols -IncludeReferencedProjects
这就是我遇到的错误。
& : The term '.\.nuget\NuGet.exe' is not recognized as the name of a cmdlet, function, script file, or operable
program. Check the spelling of the name, or if a path was included, verify that the path is correct and try again.
At C:\a\src\project\.build\PublishPackage.ps1:85 char:3
+ & $nugetPath pack "$projectFile" -Version $version -Symbols -IncludeReferencedPr ...
+ ~~~~~~~~~~
+ CategoryInfo : ObjectNotFound: (.\.nuget\NuGet.exe:String) [], CommandNotFoundException
+ FullyQualifiedErrorId : CommandNotFoundException
我简化了脚本,因此行号不匹配,但您可以看到它是导致错误的最后一行。我使用Visual Studio Online和托管构建控制器。
答案 0 :(得分:2)
为什么不使用标准机制?
<!-- Property that enables building a package from a project --> <BuildPackage Condition=" '$(BuildPackage)' == '' ">true</BuildPackage>
编辑您想要从
生成nuget包的解决方案中的每个项目右键点击该项目 - &gt; &#34;卸载项目&#34;
再次右键点击该项目&#34;编辑[NameofYourProject]&#34;
通过将以下内容添加到第一个PropertyGroup
<BuildPackage>true</BuildPackage>
保存文件并重新加载项目
提交您的更改队列新构建,您应该在构建结果中看到您的包。
这将基本上使用项目文件(对于C#.csproj)来创建包
如果您需要更多地控制包创建,可以在项目中包含.nuspec文件 您可以在其中指定更多元数据属性,例如:依赖项,标记,标题,所有者等
甚至可以使用
之类的参数<version>$version$</version>
将nuget包版本与实际的程序集版本同步。
如果需要在构建服务器的nuget构建命令中指定OutDir,请修改NuGet.targets文件BuildCommand
定义,如下所示。
<BuildCommand>$(NuGetCommand) pack "$(ProjectPath)" -Properties "Configuration=$(Configuration);Platform=$(Platform);OutDir=$(OutDir)" $(NonInteractiveSwitch) -OutputDirectory "$(PackageOutputDir)" -symbols</BuildCommand>