Укажите версию публикации с командной строкой 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, это тоже сработало бы.
Ответы
Ответ 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