msbuild vs reflection
От: vaa https://www.youtube.com/playlist?list=PLtrvASfI1KW7VOYRKjglcagQzWLoxlncl
Дата: 20.05.22 03:15
Оценка:
решил синхронизировать AssemblyVersion c Version который юзается при публикации(кстати, в чем суть этой версии? она пишется в метаданные сборки?).
<Project Sdk="Microsoft.NET.Sdk">

  <PropertyGroup>
    <OutputType>Exe</OutputType>
    <GenerateAssemblyInfo>false</GenerateAssemblyInfo>
    <TargetFramework>net6.0</TargetFramework>
    <ImplicitUsings>enable</ImplicitUsings>
    <Nullable>enable</Nullable>
    <Version Condition=" $(AssemblyVersion) != '' ">$(AssemblyVersion.SubString(0,$(AssemblyVersion.LastIndexOf('.'))))</Version>
  </PropertyGroup>
  <Target Name="OnPublish" AfterTargets="Build">
    <Message Text="START BUILD TO ZIP $(AssemblyVersion)" Importance="high" />
  </Target>
</Project>

AssemblyVersion всегда пуст!
при этом команда dotnet publish /p:AssemblyVersion=4.3.2.1 -v 5 успешно задает значение,
но в свойствах exe красуется номер из атрибута установленного в .cs.
Никак не обойти?
не хочется копированием заниматься.

Вот так удалось задать Version, но публикация остается 1.0.0

<Project Sdk="Microsoft.NET.Sdk">
  <PropertyGroup>
    <OutputType>Exe</OutputType>
    <GenerateAssemblyInfo>false</GenerateAssemblyInfo>
    <TargetFramework>net6.0</TargetFramework>
    <ImplicitUsings>enable</ImplicitUsings>
    <Nullable>enable</Nullable>

  </PropertyGroup>
<Target Name="OnBuild" BeforeTargets="Build">
  <GetAssemblyIdentity AssemblyFiles="$(TargetPath)">
    <Output TaskParameter="Assemblies" ItemName="fooAssemblyInfo"/>
  </GetAssemblyIdentity>
  <PropertyGroup>
     <ApplicationVersion>%(fooAssemblyInfo.Version)</ApplicationVersion>
  </PropertyGroup>
  <PropertyGroup>
    <Version Condition=" $(ApplicationVersion) != '' ">$(ApplicationVersion.SubString(0,$(ApplicationVersion.LastIndexOf('.'))))</Version>
  </PropertyGroup>
    <Message Text="AFTER $(Version)" Importance="high" />
</Target>
  <Target Name="OnPublish" BeforeTargets="Publish" AfterTargets="Build">
    <Message Text="START PUBLISH $(TargetPath) AS $(Version)" Importance="high" />
  </Target>
</Project>


РЕШЕНО: <Target Name="OnBuild" BeforeTargets="Build"> заменил на BeforeTargets="Compile"
Отредактировано 20.05.2022 4:17 vaa . Предыдущая версия . Еще …
Отредактировано 20.05.2022 4:05 vaa . Предыдущая версия .
Отредактировано 20.05.2022 3:47 vaa . Предыдущая версия .
Re: msbuild vs reflection
От: RushDevion Россия  
Дата: 20.05.22 10:23
Оценка: 90 (2)
Посмотри https://andrewlock.net/version-vs-versionsuffix-vs-packageversion-what-do-they-all-mean
Re[2]: msbuild vs reflection
От: vaa https://www.youtube.com/playlist?list=PLtrvASfI1KW7VOYRKjglcagQzWLoxlncl
Дата: 21.05.22 05:49
Оценка:
Здравствуйте, RushDevion, Вы писали:

RD>Посмотри https://andrewlock.net/version-vs-versionsuffix-vs-packageversion-what-do-they-all-mean

посмотрел, но вроде version из кода не задать, только каr свойство или аргументом.
Re[3]: msbuild vs reflection
От: RushDevion Россия  
Дата: 21.05.22 10:59
Оценка: 90 (2)
RD>>Посмотри https://andrewlock.net/version-vs-versionsuffix-vs-packageversion-what-do-they-all-mean
vaa>посмотрел, но вроде version из кода не задать, только каr свойство или аргументом.

Так Version (свойство) в атрибутах сборки (читай, в коде) никак и не фигурирует
Оно просто используется для генерации FileVersion, AssemblyVersion, InformationalVersion.

Я,честно скажу, не особо вникал в твою задачу.
Но вот сейчас перечитал. Имхо, есть 2 варианта:

1. Удалить *Version-атрибуты из AssemblyInfo.cs. Задавать Version в файле проекта (или в командной строке).
При этом Version-атрибуты сгенерятся автоматом на основе переданного Version. Это рекомендованный способ для .NET Core проектов.
2. Отключить генерацию Version-атрибутов в файле проекта: GenerateAssemblyInfo=false и задавать их по старинке в AssemblyInfo.cs (CI/CD соответственно, должен патчить/генерить этот файл).

Смешивать эти подходы (т.е. задать часть свойств через атрибуты, часть в проекте и пытаться их как-то переопределять через command-line) — не рекомендуется.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.