Невозможно передать ApplicationVersion в MSBuild с помощью аргумента командной строки - PullRequest
1 голос
/ 21 января 2020

Я создал простой проект консольного приложения в. Net 4.5 и назначал версию с помощью такой команды:

msbuild ConsoleApplication1.csproj /property:ApplicationVersion=1.0.0.12

Сборка работает нормально. Но когда я печатаю версию, подобную этой:

string version = Assembly.GetExecutingAssembly().GetName().Version.ToString();
Console.Write(version);

0.0.0.0 печатается вместо фактической версии.

Ниже приведен файл проекта:

<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="4.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
    <Import Project="$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props" Condition="Exists('$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props')" />
    <PropertyGroup>
        <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
        <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
        <ProjectGuid>{AD9395EC-0419-482B-8A2E-F7B085AE444F}</ProjectGuid>
        <OutputType>Exe</OutputType>
        <AppDesignerFolder>Properties</AppDesignerFolder>
        <RootNamespace>ConsoleApplication1</RootNamespace>
        <AssemblyName>ConsoleApplication1</AssemblyName>
        <TargetFrameworkVersion>v4.5</TargetFrameworkVersion>
        <FileAlignment>512</FileAlignment>
    </PropertyGroup>
    <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
        <PlatformTarget>AnyCPU</PlatformTarget>
        <DebugSymbols>true</DebugSymbols>
        <DebugType>full</DebugType>
        <Optimize>false</Optimize>
        <OutputPath>bin\Debug\</OutputPath>
        <DefineConstants>DEBUG;TRACE</DefineConstants>
        <ErrorReport>prompt</ErrorReport>
        <WarningLevel>4</WarningLevel>
    </PropertyGroup>
    <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
        <PlatformTarget>AnyCPU</PlatformTarget>
        <DebugType>pdbonly</DebugType>
        <Optimize>true</Optimize>
        <OutputPath>bin\Release\</OutputPath>
        <DefineConstants>TRACE</DefineConstants>
        <ErrorReport>prompt</ErrorReport>
        <WarningLevel>4</WarningLevel>
    </PropertyGroup>
    <ItemGroup>
        <Reference Include="System" />
        <Reference Include="System.Core" />
        <Reference Include="System.Data" />
        <Reference Include="System.Xml" />
    </ItemGroup>
    <ItemGroup>
        <Compile Include="Program.cs" />
        <Compile Include="Properties\AssemblyInfo.cs" />
    </ItemGroup>
    <ItemGroup>
      <None Include="packages.config" />
    </ItemGroup>
    <Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
    <Target Name="EnsureNuGetPackageBuildImports" BeforeTargets="PrepareForBuild">
      <PropertyGroup>
        <ErrorText>This project references NuGet package(s) that are missing on this computer. Enable NuGet Package Restore to download them.  For more information, see http://go.microsoft.com/fwlink/?LinkID=322105.The missing file is {0}.</ErrorText>
      </PropertyGroup>
      <Error Condition="!Exists('..\packages\MSBuildTasks.1.5.0.235\build\MSBuildTasks.targets')" Text="$([System.String]::Format('$(ErrorText)', '..\packages\MSBuildTasks.1.5.0.235\build\MSBuildTasks.targets'))" />
    </Target>
    <Import Project="..\packages\MSBuildTasks.1.5.0.235\build\MSBuildTasks.targets" Condition="Exists('..\packages\MSBuildTasks.1.5.0.235\build\MSBuildTasks.targets')" />
    <!-- To modify your build process, add your task inside one of the targets below and uncomment it. 
         Other similar extension points exist, see Microsoft.Common.targets.
    <Target Name="BeforeBuild">
    </Target>
    <Target Name="AfterBuild">
    </Target>
    -->
    <PropertyGroup>
        <MSBuildCommunityTasksPath>$(SolutionDir)\packages/MSBuildTasks.1.5.0.235\tools</MSBuildCommunityTasksPath>
    </PropertyGroup>

    <PropertyGroup>
        <VersionNumber>1.0.0.1</VersionNumber>
    </PropertyGroup>

    <Import Project="$(MSBuildCommunityTasksPath)\MSBuild.Community.Tasks.Targets" />
    <!-- update standard assembly attribute in all projects -->
    <Target Name="BeforeBuild" >
        <Message Text="Updating AssemblyInfo to Version $(VersionNumber)"></Message>
        <Message Text="Writing to AssemblyInfo files in $(SolutionRoot)"></Message>
        <AssemblyInfo CodeLanguage="C#"
                      AssemblyVersion="$(VersionNumber)"
                      AssemblyFileVersion="$(VersionNumber)"
        >
        </AssemblyInfo>
    </Target>
</Project>

1 Ответ

0 голосов
/ 21 января 2020

Согласно этой документации (поиск ApplicationVersion на странице), похоже, что ApplicationVersion, переданный msbuild через параметр или в файле *.csproj, указывает версия приложения ClickOnce .

Получение версии приложения ClickOnce во время выполнения не представляется выполнимой

edit:

Чтобы установить AssemblyVersion из аргумента командной строки msbuild , необходимо добавить задачу, которая получает значение параметра, и поместить его в AssemblyInfo.cs -подобный файл как это сделано здесь .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...