Я пытаюсь обновить файл AssemblyInfo.cs, чтобы отразить следующую версию проекта Publish ПЕРЕД любыми другими шагами сборки.
в файле моего проекта, который я добавил до конца:
<Import Project="$(ProjectDir)Properties\PublishVersion.proj" />
PublishVersion.proj выглядит так:
<?xml version="1.0" encoding="utf-8"?>
<Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
<Import Project="$(MSBuildExtensionsPath)\MSBuildCommunityTasks\MSBuild.Community.Tasks.Targets"/>
<Target Name="BeforeBuild">
<FormatVersion Version="$(ApplicationVersion)" Revision="$(ApplicationRevision)">
<Output TaskParameter="OutputVersion" PropertyName="SetVersion" />
</FormatVersion>
<FileUpdate Files="$(ProjectDir)Properties\AssemblyInfo.cs"
Regex="\d+\.\d+\.\d+\.\d+"
ReplacementText="$(SetVersion)" />
</Target>
</Project>
Теперь он выполняется где-то до завершения сборки, но определенно не до его запуска, потому что когда я смотрю на сгенерированный exe-файл, у него есть версия файла, которая была в AssemblyInfo.cs ДО начала сборки, но файл .application и файл манифеста имеют различные ссылки на новую версию.
результирующий файл манифеста (1.0.0.0 до начала сборки, 1.0.0.4 после сборки):
<?xml version="1.0" encoding="utf-8"?>
<asmv1:assembly ...>
<asmv1:assemblyIdentity name="BHTechSupport.exe" version="1.0.0.4" ... />
...
<entryPoint>
<assemblyIdentity name="BHTechSupport" version="1.0.0.0" ... />
...
</entryPoint>
...
<dependency>
<dependentAssembly ... codebase="BHTechSupport.exe" ...>
<assemblyIdentity name="BHTechSupport" version="1.0.0.0" ... />
...
</dependentAssembly>
</dependency>
...
</asmv1:assembly>
так, как я могу гарантировать, что моя цель будет выполнена раньше, чем ВСЕ?
внесение изменений в PublishVersion.proj иногда, кажется, не вступает в силу, и мне нужно очистить решение и перезапустить Visual Studio, прежде чем действовать.