2015-03-24 5 views
1

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

В моем проекте я получаю dll в корневой папке вывода, а не в папке «Bin», которая имеет три уровня, поэтому я действительно не вижу смысла. Я предпочел бы получить полное объяснение, чем решение моей одноразовой проблемы. Заранее спасибоЧто именно делает цель ResolveReferences в msbuild?

<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>.

+0

Спасибо, но это действительно не помогает. Я получаю нужные DLL в папке bin, но когда я добавляю эту цель, я также получаю кучу DLL в корневой папке. Мне действительно не нужны эти DLL, но я хочу, чтобы файлы dll, используемые в папке bin, были перестроены. Я действительно хочу понять, что происходит, почему эти файлы копируются и почему в корневую папку. Другой вариант - надеяться, что все будет хорошо во время развертывания, и мы пытаемся избежать этого. В общем, я не люблю использовать технологии, которые я не понимаю, и, к сожалению, я ничего не нашел о тегах, от которых это зависит. –

+0

@ user2033402 Не могли бы вы изменить свой вопрос, чтобы включить соответствующие части вашего файла .csproj (или другого проекта)? Было бы необычно называть «ResolveReferences» явно, потому что процесс сборки по умолчанию уже вызывает его, поэтому это поможет, если я смогу понять, что вы пытаетесь сделать. – Andrew

+0

Обновлено. Возможно, это поведение вызвано комбинацией ResolveReferences и _CopyWebApplication, но я хочу знать, почему –

Смежные вопросы