Кто-нибудь знает, как получить имя ЦЕЛИ (/ t), вызываемой из командной строки MSBuild? Есть несколько типов целей, которые можно вызывать, и я хочу использовать это свойство в уведомлении для пользователей.
Пример:
msbuild Project.proj /t:ApplicationDeployment /p:Environment=DEV
Мне нужен доступ к целевым словам ApplicationDeployment в моем файле .Proj.
Есть ли собственность, к которой я могу получить доступ? Есть какие-нибудь подсказки, как это сделать?
Обновлено: Я не хочу также передавать свойство, чтобы получить это.
Обновлено: Это основано на сценарии развертывания с использованием сценариев MSBuild. Мой сервер сборки не используется для развертывания кода, а только для сборки. На самом сервере сборки есть уведомления о сборке, которые можно использовать.





Я не уверен, как сделать именно то, что вы просите, но не могли бы вы передать эту строку с помощью параметра / p?
msbuild Project.proj /t:ApplicationDeployment /p:Environment=DEV;MyValue=ApplicationDeployment
Единственный другой способ, который я могу сделать, - это использовать условное свойство в каждой цели и, таким образом, установить первую вызываемую цель.
<Target Name = "ApplicationDeployment">
<PropertyGroup>
<InvokedTarget Condition = "'${InvokedTarget}'==''">ApplicationDeployment</InvokedTarget>
</PropertyGroup>
...
</Target>
Спасибо за голосование "против". Я прочитал документацию MSBuild, чтобы проверить, и не верю, что MSBuild предлагает эту информацию. Предлагается обходной путь.
Property Group не работает внутри цели. Как это круто?
Хм, в Microsoft.TeamFoundation.Build.targets есть множество примеров использования PropertyGroup внутри target. Возможно, это предназначено только для TeamBuild.
Может, это вещь MSBuild 2008?
Нет способа сделать это (о чем я знаю). MSBuild не имеет свойства для списка целевых объектов, запрошенных для сборки.
Однако, если вы найдете способ, имейте в виду, что это может быть не одна цель, а список целей для создания.
Я бы рекомендовал использовать такой сервер, как CCNET, для обработки выполнения сборки и уведомления. Конечно, вы можете делать что-то со своим сценарием MSBuild для отправки уведомлений, но этот домен принадлежит серверу сборки.
Я нашел ответ!
<Target Name = "ApplicationDeployment" >
<CreateProperty Value = "$(MSBuildProjectName) - $(Environment) - Application Deployment Complete">
<Output TaskParameter = "Value" PropertyName = "DeploymentCompleteNotifySubject" />
</CreateProperty>
Я хотел бы частично отдать должное апатичным. Не знаю, как это сделать.
Как это ответ на ваш вопрос? Это не даст вам список целей, вызываемых в командной строке, он создаст новое свойство при выполнении конкретной задачи. Ваш вопрос был неправильным?
По сути, это дает тот же конечный результат. Это позволит вам установить свойство, которое может сказать вам, какой была вызванная цель (в моем случае AppDeploy vs DBDeploy). В каждом случае попадания в каждую цель вы можете установить одно и то же свойство. Я разработал еще кое-что, добавив вещи к создаваемой ценности.
Могу, но я хотел бы знать, как получить доступ к самой цели.