.net 如何与AppVeyor一起使用dotnet pack?

.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文件。在本示例中,我们更新了版本,但您也可以通过这种

我正在自动化我的.NET标准项目(VS 2017的新csproj格式),以便在构建之后生成nuget包

问题是,我希望解决方案中的所有项目都遵循AppVeyor build的版本,而不是csprojs包属性中设置的版本(默认为1.0.0)

另一件需要考虑的事情是,我的项目在它们之间有引用,并且应该保持AppVeyor构建版本

有没有简单的方法?怎么做?

更新:现在就可以了


有几个选择:

使用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
文件运行。