Свойство начала сборки MSBuild - PullRequest
0 голосов
/ 20 января 2019

Есть ли в MSBuild свойство или другой способ хранения времени начала сборки?

Я исследовал свои сборки с помощью структурированного средства просмотра MSBuild, но ничего не нашел.

1 Ответ

0 голосов
/ 20 января 2019

Прежде всего, файлы проекта (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> 
...