Прежде всего, файлы проекта (csproj
) на самом деле являются файлами MSBuild, поэтому мы можем использовать переменные MSBuild.
Проблема в том, что когда мы компилируем все решение (sln
), мы неу нас нет файла MSBuild для объявления переменных и изменения поведения по умолчанию для MSBuild Build
target.
Так что на первом шаге нам нужно будет создать файл MSBuild для sln
:
Вы можете изменить эту переменную среды, чтобы генерировать файл MSBuild из процесса сборки:
Set MSBuildEmitSolution=1
msbuild {yourSlnFile}.sln
В корневой папке теперь должен быть файл с .sln.metaproj
, который можно скомпилироватьрешение с ним (msbuild {yourSlnFile}.sln.metaproj /t:Build
)
Ссылка
Вы можете создать свой собственный файл MSBuild для компиляции решения с ним, и онбудет чище из первого варианта:
<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<Target Name="Build">
<Message Text="$([System.DateTime]::Now.ToString(`yyyy.MMdd`))"></Message>
<MSBuild Projects="{yourSlnFile}.sln" Properties="Configuration=$(Configuration); Platform=$(Platform)" />
</Target>
</Project>
Ссылка
Теперь, в вашем собственном файле MSBuild для сборки sln
,Вы можете объявить тег в PropertyGroup
, и этот тег будет содержать DateTime
в вашем файле:
<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<PropertyGroup>
<StartCommandTime>$([System.DateTime]::Now.ToString(`yyyy.MMdd`))</StartCommandTime>
</PropertyGroup>
<Target Name="Build">
<Message Text="$(StartCommandTime)"></Message>
<MSBuild Projects="{yourSlnFile}.sln" Properties="Configuration=$(Configuration); Platform=$(Platform)" />
<Message Text="$(StartCommandTime)"></Message>
</Target>
</Project>