Я все время использую задачу AssemblyInfo, как вы описываете в своем комментарии.
<!-- 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 AssemblyInfoFiles="@(AssemblyInfoFiles)"
AssemblyCopyright="$(AssemblyCopyright)"
AssemblyVersion="$(VersionNumber)"
AssemblyFileVersion="$(VersionNumber)"
>
</AssemblyInfo>
</Target>
Значение VersionNumber передается извне файла проекта MSBuild в точности так, как вы описываете:
MSBuild <project_file> /p:VersionNumber=<value>;...
Мы используем цель BeforeBuild, чтобы гарантировать, что все файлы AssemblyInfo.cs будут обработаны до начала сборки.Разве это не то, что вы хотите?