Что именно делает целевой 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>
возвращается.