如何使用 PowerShell 获取 Visual Studio 中的项目版本?

How can I get with PowerShell the project version in Visual Studio?

我正在编写一个简单的 PowerShell 脚本,用于在 Post-build 事件上创建 NuGet 包。为此,我想将包版本自动设置为项目版本。目前它在我的命令中被硬编码:

nuget pack .\MyProject.csproj -properties configuration=release -version 1.0.0 -outputdirectory .\NuGet\Packages

有没有办法把上面的命令改成这样(伪代码):

var currentVersion = Get-ProjectVersion();
nuget pack .\MyProject.csproj -properties configuration=release -version $currentVersion$ -outputdirectory .\NuGet\Packages

然后将相同版本的包推送到NuGet服务器?

nuget push .\MyProject.$currentVersion$.nupkg -configfile .\NuGet.config

您可以通过从 Assembly.cs

获取项目版本来完成此操作
function Get-ProjectVersion([string] $ProjectName)
{
    $project = Get-Project -Name $ProjectName
    $assemblyPath = $project.ProjectItems.Item("Properties").ProjectItems.Item("AssemblyInfo.cs").Properties.Item("FullPath").Value

    $assemblyInfo = Get-Content -Path $assemblyPath
    if (!$assemblyInfo)
    {
        return $null
    }                

    $versionMatches = [regex]::Match($assemblyInfo, "\[assembly\: AssemblyVersion\(`"((\d+)\.(\d+)\.(\d+)\.?(\d*)){1}`"\)\]")

    if (!$versionMatches -or !$versionMatches.Groups -or $versionMatches.Groups.Count -le 0)
    {
        return $null
    }

    return $versionMatches.Groups[1].Value
}

这样调用和使用

$currentVersion = Get-ProjectVersion -ProjectName "MyProject"
nuget pack ".\MyProject.csproj" -properties "configuration=release" -version "$currentVersion" -outputdirectory ".\NuGet\Packages"
nuget push ".\MyProject.$currentVersion.nupkg" -configfile ".\NuGet.config"

警告:

$project = Get-Project -Name $ProjectName 只能在 Visual Studio 中的 包管理器控制台 中使用。作为替代方案,您可以将程序集文件位置添加为参数。