PowerShell - 从 .csproj 文件获取版本

14

我正在学习PowerShell。目前,我在尝试从.csproj文件中获取Version元素的值。.csproj文件的XML如下所示:

<Project Sdk="Microsoft.NET.Sdk">

  <PropertyGroup>
    <TargetFramework>netcoreapp2.1</TargetFramework>
    <Version>1.2.3</Version>
  </PropertyGroup>

  <ItemGroup>
    <PackageReference Include="MyLibrary" Version="3.2.1" />
  </ItemGroup>

</Project>

为了从这个XML中获取Version元素的值,我编写了以下PowerShell脚本:

$xml = [xml](Get-Content ./MyApp.csproj)

Write-Host "xml: " $xml

$version = $xml.Project.PropertyGroup.Version

Write-Host "version: $version"
当我运行这个脚本时,我看到了以下内容:
xml:

version:

注意,项目XML和版本都没有被写入。起初,我认为引用.csproj时有误。我故意删除了结尾的“j”并抛出了一个错误。因此,我认为我已经正确加载了.csproj内容。但是,我认为我在PowerShell脚本中没有正确解析XML。

如何从PowerShell脚本中获取.csproj值的版本信息?


Write-Host 的输出无法被重定向。 - Bill_Stewart
我已经让你的代码运行了,尝试检查文件权限。只需要像这样修复它:Write-Host "xml: $xml" - Oleg SH
2个回答

19

正如所指出的那样,Write-Host 只能输出内容,不能进行重定向。除此之外,我无法复现这个问题。对我来说,以下代码是有效的:

$xml = [Xml] (Get-Content .\MyApp.csproj)
$version = [Version] $xml.Project.PropertyGroup.Version

(将变量转换为 [Version] 类型可以更轻松地获取版本的各个部分,与其他版本进行比较等。)


有没有一种方法可以将变量值打印到控制台窗口?我认为这就是“Write-Host”的目的。 - Some User
是的,您可以使用“Write-Host”将值输出到控制台,但请注意其限制。 - Bill_Stewart

0
确保您在包含.csproj文件的文件夹中,然后运行以下命令 $xml = [Xml] (Get-Content .\DEPLOY.Cachorro.Api.csproj) $version = [Version] $xml.Project.PropertyGroup.AssemblyVersion
您还需要确保您的版本是否在AssemblyVersion或Version标签中。我正在使用AssemblyVersion enter image description here 然后,您可以执行命令来了解存储在"version"变量中的值
Write-Host "version: $version"
看一下:

enter image description here


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接