MSBuild无法从导入的项目中运行BuildDependsOn任务

11

我有一个导入的 MSBuild 项目 (appconfig.transformation.targets),定义了一些任务并将它们放在 BuildDependsOn 属性中。我将此文件放置在解决方案的顶层文件夹中 (Projects\LibrariesSolution\appconfig.transformation.targets):

<PropertyGroup>
  <BuildDependsOn>
    TransformWebConfig;
    OverrideAppConfigWithTargetPath;
    $(BuildDependsOn);
    CopyTransformedConfig
  </BuildDependsOn>
</PropertyGroup>
<Import Project="$(MSBuildExtensionsPath)\Microsoft\VisualStudio\v10.0\Web\Microsoft.Web.Publishing.targets" />

我在解决方案的子文件夹中的每个csproj文件中导入了这个项目。因此,Projects\LibrariesSolution\Project1\Project1.csproj文件类似于以下内容:

<Project ToolsVersion="4.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
  <Import Project="$(MSBuildExtensionsPath)\MSBuildCommunityTasks\MSBuild.Community.Tasks.Targets"/>
  <Import Project="..\appconfig.transformation.targets" />
  ... the rest of the csproj stuff ...

我这样启动构建:

cd LibrariesSolution
c:\Windows\Microsoft.NET\Framework\v4.0.30319\MSBuild.exe /t:Clean /p:Configuration=Release Project1\Project1.csproj
c:\Windows\Microsoft.NET\Framework\v4.0.30319\MSBuild.exe /t:Build /p:Configuration=Release Project1\Project1.csproj

但是在 BuildDependsOn 中列出的目标似乎没有被调用。当然输出信息太详细了,无法在此展示,但 "TransformWebConfig" 在输出中并没有出现。没有显示任何错误信息。可能出了什么问题?应该如何进一步排除故障?

1个回答

17
你有一个导入订单问题。你正在导入定义属性BuildDependsOn的文件(appconfig.transformation.targets),然后在项目文件后面导入了Microsoft targets,它们重新定义了BuildDependsOn并清除了你的更改,因为它们的定义不包括BuildDependsOn中的任何现有值。
BuildDependsOn在Microsoft.Common.targets中定义,该文件被Microsoft.CSharp.targets为C#项目导入。你的导入应该在导入Microsoft.CSharp.targets之后进行。

谢谢。导入顺序有问题。 - Jake Stevenson

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接