получить версию netCore csproj файл powershell - PullRequest
0 голосов
/ 06 ноября 2018

У меня есть чистый файл проекта ядра. Версия хранится в файле project.csproj. Я использую следующий скрипт для получения строки версии.

$Project = Resolve-Path ".\\source\\Project\\Project.csproj"
$xml = [Xml] (Get-Content $Project)
$version = [Version] ($xml.Project.PropertyGroup.Version)[0]
Write-Host "##teamcity[buildNumber '$version']"

Вот распечатка с выполнения в Windows Powershell ISE:

##teamcity[buildNumber '1.0.1']

Однако, это выдало следующую ошибку в TeamCity:

Cannot index into a null array.
[07:48:01][Step 4/16] At C:\TeamCity\buildAgent\temp\buildTmp\powershell340377043469883282.ps1:3 char
[07:48:01][Step 4/16] :59
[07:48:01][Step 4/16] + $version = [Version] ($xml.Project.PropertyGroup.Version)[ <<<< 0]
[07:48:01][Step 4/16]     + CategoryInfo          : InvalidOperation: (0:Int32) [], RuntimeException
[07:48:01][Step 4/16]     + FullyQualifiedErrorId : NullArray
[07:48:01][Step 4/16]  

В чем проблема?

1 Ответ

0 голосов
/ 08 ноября 2018

Я думаю, что нашел причину своей проблемы. В одном из проектов net core в этом файле csproj содержится более одного элемента PropertyGroup.

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

<PropertyGroup>
  <TargetFramework>netcoreapp2.1</TargetFramework>
  PublishWithAspNetCoreTargetManifest>false</PublishWithAspNetCoreTargetManifest>
  <AssemblyName>CoreApi</AssemblyName>
  <OutputType>Exe</OutputType>
  <PackageId>Project</PackageId>
  <Version>1.0.1</Version>
</PropertyGroup>

 <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|AnyCPU'">
 <TreatWarningsAsErrors>True</TreatWarningsAsErrors>
 <TreatSpecificWarningsAsErrors />
  <DocumentationFile>bin\Release\netcoreapp2.1\CoreApi.xml</DocumentationFile>
 <NoWarn>1701;1702;1705;NU1603</NoWarn>
</PropertyGroup>

Чтобы учесть это, я должен использовать следующий код

$Project = Resolve-Path ".\\source\\Project\\Project.csproj"
$xml = [Xml] (Get-Content $Project)
$propertyGroup = $xml.Project.PropertyGroup
if ($propertyGroup -is [array]) {
  $version = [version] $xml.Project.PropertyGroup[0].Version
  Write-Host "##teamcity[buildNumber '$version']"
}else {
  $version = [version] $xml.Project.PropertyGroup.Version
  Write-Host "##teamcity[buildNumber '$version']"
} 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...