Установить AssemblyInformationalVersion в AssemblyInfo.cs через msbuild Параметры
Первый , вы должны отметить, что свойства MSBuild, такие как $MyInfoText
, могут использоваться только в xxxx.xxproj
файла и в вашей ситуации, он может использоваться только в myProject.csproj
файле, а не в файле CS.
Чтобы реализовать ваши требования , вы можете попытаться использовать цель, эквивалентную повторное развертывание параметров в файле assembly.cs в MSBuild. Основываясь на этом, вы можете переопределить его свойства из командной строки в MSBuild. Только свойства в файле XML могут быть переопределены значениями, указанными в командной строке msbuild.
Решение
1) установить пакет nuget с именем MSBuildTasks в ваш проект.
2) импортируйте MSBuild.Community.Tasks.Targets
, который существует в папке lib пакета nuget. Для меня, я добавляю его в файл xxxx.csproj
в верхней части файла:
<Import Project="C:\Users\Admin\source\repos\ConsoleApp\packages\MSBuildTasks.1.5.0.235\tools\MSBuild.Community.Tasks.Targets" />
3) Помимо , добавьте эти:
<PropertyGroup>
<ProductName>$(AssemblyName)</ProductName>
<CompanyName></CompanyName>
<Version>1.0.0.0</Version>
<MyInfoText>xxx</MyInfoText>
</PropertyGroup>
<ItemGroup>
<AssemblyVersionFiles Include="$(MSBuildProjectDirectory)\Properties\AssemblyInfo.cs" />
</ItemGroup>
<Target Name="AssemblyVersion" Inputs="@(AssemblyVersionFiles)" Outputs="UpdatedAssemblyVersionFiles" BeforeTargets="Build">
<Attrib Files="%(AssemblyVersionFiles.FullPath)" Normal="true" />
<AssemblyInfo
CodeLanguage="CS"
OutputFile="%(AssemblyVersionFiles.FullPath)"
AssemblyProduct="$(ProductName)"
AssemblyTitle="$(ProductName)"
AssemblyCompany="$(CompanyName)"
AssemblyCopyright="Copyright $(CompanyName), All rights reserved."
AssemblyVersion="$(Version)"
AssemblyFileVersion="$(Version)"
AssemblyInformationalVersion="$(MyInfoText)">
<Output TaskParameter="OutputFile" ItemName="UpdatedAssemblyVersionFiles" />
</AssemblyInfo>
</Target>
4) После этого вы можете использовать msbuild myProject.csproj /p:MyInfoText=xxxxxx
для его перезаписи.
Обновление 1
Поскольку вы не хотите устанавливать этот пакет nuget, я предлагаю вы можете переместить его содержимое из папки инструментов в ваш проект, чтобы он стал частью вашего проекта.
1) создать папку с именем newtool в вашем проекте
2) скопируйте содержимое папки tool из пакета nuget в папку newtool в вашем проекте.
3) изменить, чтобы использовать этот тег импорта в вашем xxx.csproj
файле
<Import Project="$(ProjectDir)newtool\MSBuild.Community.Tasks.Targets" />
Тогда вы сможете реализовать его и гораздо удобнее.
Надеюсь, это поможет вам.