.net 如何与AppVeyor一起使用dotnet pack?
我正在自动化我的.NET标准项目(VS 2017的新csproj格式),以便在构建之后生成nuget包 问题是,我希望解决方案中的所有项目都遵循AppVeyor build的版本,而不是csprojs包属性中设置的版本(默认为1.0.0) 另一件需要考虑的事情是,我的项目在它们之间有引用,并且应该保持AppVeyor构建版本 有没有简单的方法?怎么做?更新:现在就可以了.net 如何与AppVeyor一起使用dotnet pack?,.net,nuget,pack,appveyor,.net,Nuget,Pack,Appveyor,我正在自动化我的.NET标准项目(VS 2017的新csproj格式),以便在构建之后生成nuget包 问题是,我希望解决方案中的所有项目都遵循AppVeyor build的版本,而不是csprojs包属性中设置的版本(默认为1.0.0) 另一件需要考虑的事情是,我的项目在它们之间有引用,并且应该保持AppVeyor构建版本 有没有简单的方法?怎么做?更新:现在就可以了 有几个选择: 使用PowerShell手动修补.NET标准.csproj文件。在本示例中,我们更新了版本,但您也可以通过这种
有几个选择: 使用PowerShell手动修补.NET标准
.csproj
文件。在本示例中,我们更新了版本,但您也可以通过这种方式更新其他设置
$xmlPath = "$env:appveyor_build_folder\MyProject\MyProject.csproj"
$xml = [xml](get-content $xmlPath)
$propertyGroup = $xml.Project.PropertyGroup | Where { $_.Version}
$propertyGroup.Version = $env:appveyor_build_version
$xml.Save($xmlPath)
msbuild %appveyor_build_folder%\MyProject\MyProject.csproj /t:pack
或者,如果您想继续使用.nuspec
文件,可以使用如下命令打包:
msbuild %appveyor_build_folder%\MyProject\MyProject.csproj /t:pack /p:Configuration=%CONFIGURATION%;NuspecFile=MyProject\MyProject.nuspec;PackageVersion=%APPVEYOR_BUILD_VERSION%
当然,您可以使用dotnetpack
,但我们认为今后msbuild
仍将是主要工具,因此我们尝试使用它编写所有脚本
不用说,AppVeyor中的我们应该不需要此脚本,我们会在中跟踪此脚本。您可以将版本作为MSBuild属性传递给
dotnet pack
:
dotnet pack MyProject.csproj --configuration Release /p:Version="1.2.3"
(这也适用于dotnet构建
)
下面是中的一个示例
要获取AppVeyor版本号,请使用AppVeyor\u build\u版本
另一件需要考虑的事情是,我的项目在它们之间有引用,并且应该保持AppVeyor构建版本
这不应该是一个问题,因为您没有在
元素中指定版本。我认为csproj不应该有version
属性。根据,它应该是PackageVersion
。根据,对于PackageVersion
,默认值为$(Version),即项目中属性版本的值。所以据我所知,Version
仍然有效,但是PackageVersion
更具体地针对Nuget打包。另外:我认为,对于AppVeyor中的自动修补,我们应该建议同时修补和实际修补.csproj
中真正存在的内容的选项。这对*.csproj
文件非常有效,但对*.fsproj
文件不也有效吗?我可以让程序集信息补丁对这两个文件都起作用,但是dotnet pack
似乎只对*.csproj
文件运行。