В моем файле props я передаю BUILD_VERSION
в dotnet msbuild
, используя свойства как /p:BUILD_VERSION=1.2.3.4
.Тем не менее, я получаю ошибки при выполнении Substring
операции со свойством BuildVersion
, которое получает значение от: BUILD_VERSION
.
<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<PropertyGroup>
<IntermediateOutputPath>./obj/</IntermediateOutputPath>
<BuildVersion>$(BUILD_VERSION)</BuildVersion>
<InformationalVersion>$(BuildVersion)</InformationalVersion>
<BuildMajorVersion>$([System.String]::Concat($(BuildVersion.Substring(0, $(BuildVersion.IndexOf('.')))), ".0.0.0"))</BuildMajorVersion>
<AssemblyVersion>$(BuildMajorVersion)</AssemblyVersion>
<AssemblyFileVersion>$(BuildMajorVersion)</AssemblyFileVersion>
</PropertyGroup>
Ошибка, которую я получаю: """.Substring(0,-1)" length should be inside the string
Я проверил, что BUILD_VERSION
присутствует, напечатав в нем Message
.
<Target Name="SetBuildVersions" BeforeTargets="BeforeBuild">
<Message Importance="High" Text="BUILD_VERSION=$(BUILD_VERSION)"/>
</Target>
Он печатает BUILD_VERSION=1.2.3.4
.
Если я хардкод <BuildVersion>1.2.3.4</BuildVersion>
вместо <BuildVersion>$(BUILD_VERSION)</BuildVersion>
ниже, это работает.
Если я использую код Substring
внутри Target
, это работает:
<Target Name="SetBuildVersions" BeforeTargets="BeforeBuild">
<PropertyGroup>
<InformationalVersion>$(BuildVersion)</InformationalVersion>
<BuildMajorVersionOnly>$([System.String]::Concat($(BuildVersion.Substring(0, $(BuildVersion.IndexOf('.')))), ".0.0.0"))</BuildMajorVersionOnly>
<AssemblyVersion>$(BuildMajorVersionOnly)</AssemblyVersion>
<AssemblyFileVersion>$(BuildMajorVersionOnly)</AssemblyFileVersion>
</PropertyGroup>
</Target>
Почему я не могу использовать Substring
внутри обычного PropertyGroup
при передаче BUILD_VERSION
в качестве аргумента свойства в msbuild
?