Подтвердить что ты не робот

HintPath для добавления ссылки в Visual Studio

Я знаю, что я могу добавить HintPath во внешние DLL, чтобы помочь Visual Studio/TFS найти DLL при ее создании.

Мне было интересно, возможно ли добавить несколько HintPath?

Например, разработчики имеют свои библиотеки DLL для одного места, и мы делаем GetLatest из этих DLL в другом месте на сервере, следовательно, необходимо наличие нескольких HintPath.

Как вы думаете, мир?

4b9b3361

Ответ 1

Этот ответ больше не действителен. Как комментарий Sardaukar говорит, Visual Studio всегда слепо использует последний HintPath. Ответ Alex поддерживает это.


Хорошо. На этот раз я быстрее, чем Stackoverflow. Я попытался добавить его, и, похоже, он работает нормально.

Возможно множественное HintPath.

Если у вас есть это:

<Reference Include="System.ComponentModel.Composition.Codeplex">
    <HintPath>..\..\..\MEF2_Preview2\bin\System.ComponentModel.Composition.Codeplex.dll</HintPath>
</Reference>

Вы можете просто добавить еще один путь подсказки:

<Reference Include="System.ComponentModel.Composition.Codeplex">
    <HintPath>..\..\..\MEF2_Preview2\bin\System.ComponentModel.Composition.Codeplex.dll</HintPath>
    <HintPath>D:\MEF\System.ComponentModel.Composition.Codeplex.dll</HintPath>
</Reference>

Ответ 2

Извините, вы не можете использовать несколько HintPath. Visual Studio/MSBuild принимает только определение last <HintPath> и игнорирует предыдущие. Подтверждено в VS2010 и VS2012.

Ответ 3

Для этого вы можете использовать переменные среды. Например.

<Reference Include="System.ComponentModel.Composition.Codeplex">
    <HintPath>$(PathToDLLs)\MEF2_Preview2\bin\System.ComponentModel.Composition.Codeplex.dll</HintPath>
</Reference>

Ответ 4

Добавьте нижеследующий файл проекта сразу после раздела с комментариями:

<Target Name="BeforeResolveReferences">
  <CreateProperty Value="YOUR_FIRST_PATH;YOUR_SECOND_PATH;$(AssemblySearchPaths)">
    <Output TaskParameter="Value" PropertyName="AssemblySearchPaths" />
  </CreateProperty>
</Target>

Замена YOUR_FIRST_PATH и YOUR_SECOND_PATH вашими путями.

Важно, чтобы это произошло после следующей строки или ваша настройка будет перезаписана:

<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />

При записи $(AssemblySearchPaths) в конце строки DLL в ваших путях будет отменено нормальное разрешение. Если вы переместите его в начало, сначала выполняется обычное разрешение, а дополнительные пути проверяются на все, которые не были найдены. Нормальное разрешение включает разделы <HintPath>, поэтому нет необходимости удалять их, если ваши пути идут первыми.

Ответ 5

С помощью условия вы можете:

<Reference Include="TheAssembly">
    <HintPath Condition="Exists('..\My\Assembly\Path')">..\My\Assembly\Path\TheAssembly.dll</HintPath>
    <HintPath Condition="Exists('..\..\My\Assembly\Path')">..\..\My\Assembly\Path\TheAssembly.dll</HintPath>
    <HintPath Condition="Exists('..\..\..\My\Assembly\Path')">..\..\..\My\Assembly\Path\TheAssembly.dll</HintPath>
    <HintPath Condition="Exists('..\..\..\..\My\Assembly\Path')">..\..\..\..\My\Assembly\Path\TheAssembly.dll</HintPath>
    <HintPath Condition="Exists('..\..\..\..\..\My\Assembly\Path')">..\..\..\..\..\My\Assembly\Path\TheAssembly.dll</HintPath>
    <HintPath Condition="Exists('..\..\..\..\..\..\My\Assembly\Path')">..\..\..\..\..\..\My\Assembly\Path\TheAssembly.dll</HintPath>
    <HintPath Condition="Exists('..\..\..\..\..\..\..\My\Assembly\Path')">..\..\..\..\..\..\..\My\Assembly\Path\TheAssembly.dll</HintPath>
    etc...
</Reference>

Будет использоваться последний HintPath, в котором условие будет иметь значение true.