Подтвердить что ты не робот

Укажите версию публикации с командной строкой MSBuild в качестве сборной версии проекта

У меня есть простой командный файл, который я запускаю из командной строки DOS, который используется для создания небольшого приложения на С#, которое публикует ClickOnce. Одна строка такова:

msbuild MyApp.csproj /t:publish /property:PublishDir="deploy/"

В настоящее время публикуется приложение, но оно использует версию публикации, которую я установил на вкладке "Опубликовать" на Visual Studio. Я надеюсь, что смогу установить версию публикации в командной строке, и, в частности, я хотел бы использовать версию сборки проекта. Что-то вроде:

msbuild MyApp.csproj /t:publish /property:PublishDir="deploy/" /property:PublishVersion="$(Proj.AssemblyVersion)"

Я надеюсь сделать это без создания настраиваемой задачи, так как это всего лишь временное решение, и я заменил его более подходящей системой сборки позже.

В качестве альтернативы я рассмотрел обновление опубликованной версии манифеста, используя Инструмент командной строки Мага с флагом -Update, но я сделал не знаете, как получить номер версии сборки из проекта или встроенной сборки, не используя PowerShell или какую-то программу, которую необходимо загрузить. Если бы я мог использовать что-то, что поставляется с Visual Studio, это тоже сработало бы.

4b9b3361

Ответ 1

Попробуйте добавить это в ваш .csproj файл. Цель будет извлекать версию из сборки вывода и обновлять ApplicationVersion перед публикацией:

<Target Name="BeforePublish">
  <GetAssemblyIdentity AssemblyFiles="$(TargetPath)">
    <Output TaskParameter="Assemblies" ItemName="fooAssemblyInfo"/>
  </GetAssemblyIdentity>
  <PropertyGroup>
    <ApplicationVersion>%(fooAssemblyInfo.Version)</ApplicationVersion>
  </PropertyGroup>
</Target>

Вероятно, более удобный способ динамического получения имени сборки, но для вашей цели он должен сделать трюк.

Подтвердите этот ответ для синтаксиса GetAssemblyIdentity: fooobar.com/questions/273683/...

Редактор комментариев:

См. комментарий ниже для обновления.

Ответ 2

Чтобы правильно обновить версию, объявленную в манифесте развертывания, вам необходимо изменить ApplicationVersion на шаге "AfterCompile", а не шаг "BeforePublish", поскольку манифест приложения создается во время сборки. Но тогда вы не можете полагаться на свойство $(TargetPath), чтобы указать на сборку, и вместо этого использовать следующий путь: $(ProjectDir) obj\$(ConfigurationName)\$(TargetFileName)

Итак, здесь обновленный фрагмент кода цели, который вы можете добавить в файл .csproj:

<Target Name="AfterCompile">
  <GetAssemblyIdentity AssemblyFiles="$(ProjectDir)obj\$(ConfigurationName)\$(TargetFileName)">
     <Output TaskParameter="Assemblies" ItemName="AssemblyInfo" />
  </GetAssemblyIdentity>
  <PropertyGroup>
    <ApplicationVersion>%(AssemblyInfo.Version)</ApplicationVersion>
  </PropertyGroup>
</Target>

Ответ 3

msbuild xxx.csproj /target:clean;publish /property:ApplicationVersion=1.2.3.4