Visual Studio: Шляхи посилань щодо відносної асамблеї


96

При додаванні посилання на збірку, розташовану в каталозі рішення, чи є спосіб додати її відносно, щоб при реєстрації та виході зі сховища на неї правильно посилалися в проектах?


13
Якщо це не зовсім працює з інтерфейсом користувача, пам’ятайте, що ви можете просто відредагувати файл .proj вручну та змінити шлях на відносний. Як тільки ви зміните це в будь-який спосіб, воно залишається таким, яким ви його поставили.
Павло Мінаєв

1
У Visual Studio 2010 посилальні шляхи зберігаються як відносні за замовчуванням, тому, якщо це відбувається з вами, щось інше не так. У моєму випадку це було, що я б ігнорував dll з контролю версій, щоб я міг скомпілювати рішення, але мої колеги по роботі не могли.
Giles Roberts,

Відповіді:


124

Щоб розширити оригінальний коментар Павла Мінаєва - графічний інтерфейс для 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.

Сподіваюся, це допомагає.


20
Я розумію, що це корисно і правильно, але чи сервісний інтерфейс VS серйозно не дає способу додати відносне посилання?
kdbanman

4
У VS 2015 я отримав таку поведінку за замовчуванням (відносний шлях)
Муген

2
Я був переконаний, що це додало абсолютний шлях, поки з цікавості не дотримувався ваших вказівок. VS показав абсолютний шлях у посилальних властивостях, але <HintPath> показав як вже відносний. Виявляється, мені бракувало файлів O_o lolimaderp!
donutguy640

@ donutguy640 Це теж мене розгубило. Вони також повинні показати відносний шлях на панелі властивостей
Олександр Дерк,

1
Вам не потрібно безпосередньо редагувати файл проекту. Виберіть "перегляд" у діалоговому вікні додавання посилань, перейдіть до папки з файлом проекту, а потім додайте відносний шлях до вашої DLL. Хоча абсолютний шлях відображається у вікні властивостей, відносний шлях зберігається у файлі проекту. VS дійсно повинен відображати шлях так само, як він збережений у файлі проекту.
needfulthing

9

Так, просто створіть у своєму рішенні каталог, наприклад lib /, а потім додайте свою dll до цього каталогу у файловій системі та додайте його до проекту (Додати-> Існуючий елемент-> тощо). Потім додайте посилання на основі вашого проекту.

Я робив це кілька разів під svn та під cvs.


5
Вам не потрібно додавати dll до самого проекту, просто додайте посилання на нього. Найкраще, що потрібно зробити, це додати весь каталог 'lib' до вашого джерела керування. Див. Code.google.com/p/projectpilot/source/browse/#svn/trunk як приклад
Ігор Брейц,

1
Ти правий. Я перевірив старий проект, і ні каталог, ні dll не були додані до самого проекту, а лише до сховища. І посилання тоді відносно проекту. Вибач за це.
Фредді

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

Я міг би тут не працювати, але, схоже, відповідь цілком очевидна: подивіться на посилальні шляхи у властивостях проекту. Під час налаштування я додав нашу загальну папку сховища до вікна графічного інтерфейсу ref path, приблизно так

Довідкові шляхи у VS20xx

Таким чином я можу скопіювати свої DLL-файли (готові до публікації) в цю папку, і кожен розробник тепер отримує оновлену бібліотеку DLL щоразу, коли вона створюється з цієї папки.

Якщо dll знайдено в Рішенні, розробник повинен надати пріоритет локальній версії над опублікованою груповою версією.


На жаль, це зберігається у файлі csproj.user і не є відносним.
Джеймі Кітсон,

0

Як зазначалося раніше, ви можете вручну редагувати файл проекту, .csprojщоб застосувати його вручну.

Я також помітив, що Visual Studio 2013 намагається застосувати відносний шлях до еталонного підказки, ймовірно, через спробу зробити файл проекту більш портативним.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.