Visual Studio: ścieżki odwołań do zestawów względnych

98

Czy podczas dodawania odwołania do zestawu znajdującego się w katalogu rozwiązania istnieje sposób na dodanie go względnie, tak aby po wpisaniu i wyrejestrowaniu z repozytorium odwoływanie się do niego w projektach było prawidłowe?

theringostarrs
źródło
13
Jeśli to nie działa z interfejsu użytkownika, pamiętaj, że możesz po prostu ręcznie edytować plik .proj bezpośrednio i zmienić ścieżkę na względną. Kiedy to zmienisz, pozostanie tak, jak to określiłeś.
Pavel Minaev
1
W programie Visual Studio 2010 ścieżki odwołań są domyślnie przechowywane jako względne, więc jeśli tak się dzieje, coś innego jest nie tak. W moim przypadku było to po prostu ignorowanie bibliotek dll z kontroli wersji, więc mogłem skompilować rozwiązanie, ale moi koledzy nie mogli.
Giles Roberts

Odpowiedzi:

125

Aby rozwinąć oryginalny komentarz Pavela Minaeva - interfejs GUI dla programu Visual Studio obsługuje odwołania względne przy założeniu, że plik .sln jest katalogiem głównym odwołania względnego. Więc jeśli masz rozwiązanie C:\myProj\myProj.sln, wszelkie odniesienia dodane w podfolderach C:\myProj\są automatycznie dodawane jako odniesienia względne.

Aby dodać odwołanie względne w oddzielnym katalogu, na przykład C:/myReferences/myDLL.dll, wykonaj następujące czynności:

  1. Dodaj odwołanie w graficznym interfejsie użytkownika programu Visual Studio, klikając prawym przyciskiem myszy projekt w Eksploratorze rozwiązań i wybierając opcję Dodaj odwołanie ...
  2. Znajdź plik * .csproj, w którym istnieje to odniesienie, i otwórz go w edytorze tekstu
  3. Edytuj <HintPath>, aby był równy

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

To teraz odnosi się C:\myReferences\myDLL.dll.

Mam nadzieję że to pomoże.

CrimsonX
źródło
21
Rozumiem, że jest to pomocne i poprawne, ale czy interfejs użytkownika VS poważnie nie zapewnia sposobu na dodanie względnego odniesienia?
kdbanman
4
W VS 2015 otrzymałem to zachowanie domyślnie (ścieżka względna)
Mugen
2
Byłem przekonany, że dodało to absolutną ścieżkę, dopóki nie podążyłem za twoimi wskazówkami z ciekawości. VS pokazał ścieżkę bezwzględną we właściwościach referencyjnych, ale <HintPath> pokazał już jako względną. Okazuje się, że brakowało mi plików O_o lolimaderp!
donutguy640
@ donutguy640 To też mnie zdezorientowało. Powinny również pokazywać ścieżkę względną w panelu właściwości
Alexander Derck,
1
Nie musisz bezpośrednio edytować pliku projektu. Wybierz „Przeglądaj” w oknie dialogowym dodawania odwołania, przejdź do folderu z plikiem projektu, a następnie dodaj ścieżkę względną do biblioteki DLL. Chociaż ścieżka bezwzględna jest wyświetlana w oknie właściwości, ścieżka względna jest zapisywana w pliku projektu. VS naprawdę powinien wyświetlać ścieżkę tak, jak jest zapisana w pliku projektu.
needfulthing
9

Tak, po prostu utwórz katalog w swoim rozwiązaniu, taki jak lib /, a następnie dodaj swoją bibliotekę dll do tego katalogu w systemie plików i dodaj ją do projektu (Dodaj-> Istniejący element-> itd.). Następnie dodaj odniesienie na podstawie projektu.

Robiłem to kilka razy pod svn i pod cvs.

Freddy
źródło
5
Nie musisz dodawać biblioteki dll do samego projektu, po prostu dodaj do niej odniesienie. Najlepszą rzeczą do zrobienia jest dodanie całego katalogu „lib” do kontroli źródła. Zobacz code.google.com/p/projectpilot/source/browse/#svn/trunk jako przykład
Igor Brejc
1
Masz rację. Sprawdziłem stary projekt i ani katalog, ani biblioteki dll nie zostały dodane do samego projektu, tylko do repozytorium. A odniesienie odnosi się wtedy do projektu. Przepraszam za to.
Freddy,
4

W VS 2017 jest to automatyczne. Tak Add Referencejak zwykle.

Zauważ, że w Reference Propertiesbezwzględnej ścieżce jest pokazana, ale w .vbproj/.csprojwzględnej jest używana.

<Reference Include="NETnetworkmanager">
      <HintPath>..\..\libs\NETnetworkmanager.dll</HintPath>
      <EmbedInteropTypes>True</EmbedInteropTypes>
</Reference>
Iurii Vasylenko
źródło
2

Prawdopodobnie najłatwiejszym sposobem osiągnięcia tego jest po prostu dodanie odwołania do zestawu, a następnie (ręcznie) poprawienie tekstowej reprezentacji odwołania w odpowiednim pliku projektu programu Visual Studio (rozszerzenie .csproj), tak aby stało się ono względne.

Robiłem to wiele razy w VS 2005 bez żadnych problemów.

Uwe Honekamp
źródło
3
Myślę, że ręczne modyfikowanie pliku projektu nie jest konieczne. Z mojego doświadczenia wynika, że ​​Visual Studio zawsze używa ścieżek względnych. Jedyny raz, kiedy musiałem ręcznie zmodyfikować plik projektu, był, gdy chciałem udostępnić plik klucza (.snk). Visual Studio zawsze po prostu kopiuje plik klucza do katalogu projektu, co skutkuje kilkoma kopiami pliku klucza.
Stefan Egli
1

Mógłbym się tutaj wyłączyć, ale wydaje się, że odpowiedź jest dość oczywista: spójrz na ścieżki odniesienia we właściwościach projektu. W naszej konfiguracji dodałem nasz wspólny folder repozytorium do okna graficznego interfejsu użytkownika ścieżki referencyjnej, tak jak to

Ścieżki odniesienia w VS20xx

W ten sposób mogę skopiować moje biblioteki DLL (gotowe do publikacji) do tego folderu, a każdy programista otrzymuje teraz zaktualizowaną bibliotekę DLL za każdym razem, gdy kompiluje z tego folderu.

Jeśli dll zostanie znaleziona w rozwiązaniu, konstruktor powinien nadać priorytet wersji lokalnej w stosunku do opublikowanej wersji zespołu.

chrześcijanin
źródło
Niestety jest to przechowywane w pliku csproj.user i nie jest względne.
Jamie Kitson
0

Jak wspomniano wcześniej, możesz ręcznie edytować .csprojplik projektu , aby zastosować go ręcznie.

Zauważyłem również, że Visual Studio 2013 próbuje zastosować ścieżkę względną do ścieżki odniesienia, prawdopodobnie z powodu próby zwiększenia przenośności pliku projektu.

Nick L.
źródło