在我的.csproj上,我想根据从任务计算的路径导入.target文件。
是否可以做这样的事情?
<PropertyGroup>
<TargetPath>/*Some calculation from task*/</TargetPath>
</PropertyGroup>
<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
<Import Project="$(TargetPath)\Custom.targets" />
我尝试从另一个目标执行此操作,但由于在目标评估之前调用了导入,因此无效。
答案 0 :(得分:3)
在导入目标之前无法调用目标,但仍可以动态生成从属性组导入的路径。
Visual Studio在您创建Web项目时执行此操作,如本示例中的一个项目所示:
<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这样做,所以你也可以。
答案 1 :(得分:1)
不,首先,MSBuild导入所有“扩展”,然后构建依赖图,最后运行任务