2013-11-13 3 views
6

На моем .csproj я хотел бы импортировать файл .target в зависимости от пути, вычисленного из задачи.MSBuild импортировать проект динамически

Можно ли сделать что-то подобное?

<PropertyGroup> 
    <TargetPath>/*Some calculation from task*/</TargetPath> 
</PropertyGroup> 


<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" /> 
<Import Project="$(TargetPath)\Custom.targets" /> 

Я попытался сделать это с другой целью, но он не работает, так как импорт вызывается перед целевой оценкой.

ответ

0

Нет,
во-первых MSBuild импортировать все «расширения», а затем построить граф зависимостей, и, наконец, выполнять задачи

3

Вы не можете ссылаться на цели прежде, чем цели будут импортированы, но вы можете динамически генерировать путь для импорта группу свойств.

Visual Studio делает это при создании веб-проекта, как в этом примере одного из моих проектов:

<PropertyGroup> 
    <VisualStudioVersion Condition="'$(VisualStudioVersion)' == ''">12.0</VisualStudioVersion> 
    <VSToolsPath Condition="'$(VSToolsPath)' == ''">$(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v$(VisualStudioVersion)</VSToolsPath> 
</PropertyGroup> 
<Import Project="$(VSToolsPath)\WebApplications\Microsoft.WebApplication.targets" Condition="'$(VSToolsPath)' != ''" /> 
<Import Project="$(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v12.0\WebApplications\Microsoft.WebApplication.targets" /> 

Таким образом, можно однозначно определить свойства, используя условия:

<PropertyGroup> 
    <ImportPath Condition="Exists('path\to\some\thing.targets')">path\to\some\thing.targets</ImportPath> 
</PropertyGroup> 
<Import Project="$(ImportPath)" Condition=" '$(ImportPath)' != '' "/> 

Microsoft.Bcl.Build делает это, так что вы тоже можете.

Смежные вопросы