Visual Studio: относительные пути ссылок на сборку


97

При добавлении ссылки на сборку, расположенную в каталоге решения, есть ли способ добавить ее относительно, чтобы при возврате и выходе из репозитория на нее правильно ссылались в проектах?


13
Если это не совсем работает из пользовательского интерфейса, помните, что вы можете просто вручную отредактировать файл .proj напрямую и изменить путь на относительный. Если вы измените его в любом случае, он останется таким, каким вы его поставили.
Павел Минаев

1
В Visual Studio 2010 ссылочные пути по умолчанию сохраняются как относительные, поэтому, если это происходит с вами, что-то еще не так. В моем случае я просто игнорировал библиотеки DLL из системы контроля версий, чтобы я мог скомпилировать решение, но мои коллеги не смогли.
Джайлс Робертс

Ответы:


125

Чтобы расширить исходный комментарий Павла Минаева: графический интерфейс для Visual Studio поддерживает относительные ссылки при условии, что ваш .sln является корнем относительной ссылки. Итак, если у вас есть решение C:\myProj\myProj.sln, любые ссылки, которые вы добавляете в подпапкиC:\myProj\ , автоматически добавляются как относительные ссылки.

Чтобы добавить относительную ссылку в отдельный каталог, например C:/myReferences/myDLL.dll, выполните следующие действия:

  1. Добавьте ссылку в графический интерфейс Visual Studio, щелкнув проект правой кнопкой мыши в обозревателе решений и выбрав Добавить ссылку ...
  2. Найдите * .csproj, где есть эта ссылка, и откройте его в текстовом редакторе.
  3. Измените <HintPath>, чтобы он был равен

    <HintPath>..\..\myReferences\myDLL.dll</HintPath>

Это сейчас ссылки C:\myReferences\myDLL.dll.

Надеюсь это поможет.


21
Я понимаю, что это полезно и правильно, но разве графический интерфейс VS серьезно не предоставляет способ добавить относительную ссылку?
kdbanman 08

4
В VS 2015 я получил такое поведение по умолчанию (относительный путь)
Mugen

2
Я был убежден, что он добавил абсолютный путь, пока не последовал вашим указаниям из любопытства. VS показал абсолютный путь в ссылочных свойствах, но <HintPath> уже был относительным. Оказывается, мне не хватало файлов О_о lolimaderp!
donutguy640 06

@ donutguy640 Это меня тоже запутало. Они также должны показывать относительный путь на панели свойств
Александр Дерк,

1
Вам не нужно напрямую редактировать файл проекта. Выберите «Обзор» в диалоговом окне добавления ссылки, перейдите к папке с файлом вашего проекта, затем добавьте относительный путь к вашей DLL. Хотя в окне свойств отображается абсолютный путь, относительный путь сохраняется в файле проекта. VS действительно должен отображать путь так же, как он сохранен в файле проекта.
needfulthing

9

Да, просто создайте в своем решении каталог, например lib /, а затем добавьте свою dll в этот каталог в файловой системе и добавьте ее в проект (Добавить-> Существующий элемент-> и т. Д.). Затем добавьте ссылку на ваш проект.

Я делал это несколько раз под svn и под cvs.


5
Вам не нужно добавлять dll в сам проект, просто добавьте на нее ссылку. Лучше всего добавить весь каталог lib в систему управления версиями. См code.google.com/p/projectpilot/source/browse/#svn/trunk как пример
Игоря Brejc

1
Ты прав. Я проверил старый проект, и ни каталог, ни библиотеки не были добавлены в сам проект, а только в репозиторий. И ссылка тогда относится к проекту. Извини за это.
Freddy

3

В VS 2017 это автоматически. Так что простоAdd Reference как обычно.

Обратите внимание, что Reference Propertiesпуть отображается в абсолютном, а в .vbproj/.csprojотносительном.

<Reference Include="NETnetworkmanager">
      <HintPath>..\..\libs\NETnetworkmanager.dll</HintPath>
      <EmbedInteropTypes>True</EmbedInteropTypes>
</Reference>

2

Вероятно, самый простой способ добиться этого - просто добавить ссылку на сборку и затем (вручную) исправить текстовое представление ссылки в соответствующем файле проекта Visual Studio (расширение .csproj), чтобы оно стало относительным.

Я делал это много раз в VS 2005 без каких-либо проблем.


3
Думаю, нет необходимости вручную изменять файл проекта. По моему опыту, Visual Studio всегда использует относительные пути. Единственный раз, когда мне приходилось изменять файл проекта вручную, это когда я хотел поделиться ключевым файлом (.snk). Visual Studio всегда просто копирует ключевой файл в каталог проекта, в результате чего получается несколько копий ключевого файла.
Stefan Egli

1

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

Ссылочные пути в VS20xx

Таким образом, я могу скопировать свои библиотеки DLL (готовые к публикации) в эту папку, и теперь каждый разработчик получает обновленную DLL каждый раз, когда она собирается из этой папки.

Если dll находится в Решении, разработчик должен отдать приоритет локальной версии над опубликованной командной версией.


К сожалению, это хранится в файле csproj.user и не является относительным.
Джейми Китсон,

0

Как упоминалось ранее, вы можете вручную редактировать свой проект .csproj файл чтобы применить его вручную.

Я также заметил, что Visual Studio 2013 пытается применить относительный путь к ссылочному пути подсказки, вероятно, из-за попытки сделать файл проекта более переносимым.

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.