6

在我的 .csproj 上,我想根据从任务计算的路径导入 .target 文件。

有可能做这样的事情吗?

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


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

我尝试从另一个目标执行此操作,但它不起作用,因为在目标评估之前调用了导入。

4

2 回答 2

3

您不能在导入目标之前调用目标,但您仍然可以动态生成从属性组导入的路径。

当您创建 Web 项目时,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这样做,所以你也可以。

于 2014-07-30T14:10:08.050 回答
1

不,
首先 MSBuild 导入所有“扩展”,然后构建依赖关系图,最后运行任务

于 2014-01-28T10:55:07.537 回答