目标ResolveReferences在msbuild中到底做了什么?

时间:2015-03-24 11:12:13

标签: msbuild build-process msbuild-4.0

我在堆栈溢出中找到了很多答案,并且在网络上建议使用它的提示,我意识到它假设将引用的dll复制到输出文件夹。我想了解目标的逻辑以及如何正确使用它,到目前为止,我无法在网络上找到解释它的任何内容。在MSDN上有一行。

在我的项目中,我在根输出文件夹中获取了dll,而不是在“Bin”文件夹中,这是三个级别,所以我真的没有看到它的重点。我宁愿得到一个完整的explenation而不是解决我的一次性问题。 提前致谢

<Target Name="BuildSolutionWithConfig">
    <Message Text="Build: $(BuildType) $(SolutionFileName)"></Message>
    <MSBuild Projects="$(SolutionFileName)" Targets="_CopyWebApplication; ResolveReferences" Properties="Configuration=$(BuildType);OutputPath=$(BuildOutputPath);"></MSBuild>
    <JsAndCssUpdater Path="$(FullPath)" Version="$(JsVersion)" PathToSaveLogAndBackup="$(PathToSaveLogAndBackup)"/>
    <MSBuild.ExtensionPack.Compression.Zip ZipFileName="$(BuildOutputPath)\..\$(BuildType).zip" CompressPath="$(BuildOutputPath)" TaskAction="Create"/>
</Target>

1 个答案:

答案 0 :(得分:1)

默认情况下,至少在MSBuild 12.0中,ResolveReferences目标本身并不执行任何操作。它只取决于许多其他目标。来自%PROGRAMFILES%\MSBuild\12.0\Bin\Microsoft.Common.CurrentVersion.targets

  <!--
    ============================================================
                                        ResolveReferences
    ============================================================
    -->
  <PropertyGroup>
    <ResolveReferencesDependsOn>
      BeforeResolveReferences;
      AssignProjectConfiguration;
      ResolveProjectReferences;
      FindInvalidProjectReferences;
      ResolveNativeReferences;
      ResolveAssemblyReferences;
      GenerateBindingRedirects;
      ResolveComReferences;
      AfterResolveReferences
    </ResolveReferencesDependsOn>
  </PropertyGroup>
  <Target
      Name="ResolveReferences"
      DependsOnTargets="$(ResolveReferencesDependsOn)"/>

据我所知,$(ResolveReferencesDependsOn)中的所有默认目标都没有实际将文件复制到输出目录中。相反,这些目标确定文件的位置,并且在某些情况下,导致构建其他项目以使文件可用。由于<MSBuild>任务可以指定其输出的位置,因此只要(例如)ResolveProjectReferences目标可以从{{1}的路径访问它们,目标实际放置文件的位置无关紧要返回。