Что именно делает целевой ResolveReferences в msbuild?

Я нашел много много ответов в переполнении стека и советы по сети, рекомендующие использовать это, и я понимаю, что он предполагает скопировать ссылочные библиотеки DLL в выходную папку. Я хочу понять логику этой цели и то, как правильно ее использовать, и до сих пор я не мог найти в Интернете ничего, объясняющего это. В MSDN была одна строка

В моем проекте я получаю DLL в корневой выходной папке, а не в папке "Bin", которая находится на три уровня ниже, поэтому я не вижу в этом смысла. Я предпочел бы получить полное объяснение, чем решение моей единовременной проблемы. заранее спасибо

<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 ответ

По умолчанию, по крайней мере в 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 цель может получить к ним доступ с путей, которые <MSBuild> возвращается.

Другие вопросы по тегам