Visual Studio: Relative Assembly-Referenzpfade

96

Gibt es eine Möglichkeit, einen Verweis auf eine Assembly im Lösungsverzeichnis relativ hinzuzufügen, damit beim Ein- und Auschecken in ein Repository in Projekten korrekt auf ihn verwiesen wird?

Theringostarrs
quelle
13
Wenn es über die Benutzeroberfläche nicht ganz funktioniert, denken Sie daran, dass Sie die .proj-Datei einfach direkt von Hand bearbeiten und den Pfad in relativ ändern können. Sobald Sie es so oder so ändern, bleibt es so, wie Sie es ausgedrückt haben.
Pavel Minaev
1
In Visual Studio 2010 werden Referenzpfade standardmäßig als relativ gespeichert. Wenn Ihnen dies passiert, stimmt etwas anderes nicht. In meinem Fall war es so, dass ich DLLs aus der Versionskontrolle ignoriert hatte, damit ich die Lösung kompilieren konnte, meine Arbeitskollegen jedoch nicht.
Giles Roberts

Antworten:

124

Um Pavel Minaevs ursprünglichen Kommentar zu erweitern: Die GUI für Visual Studio unterstützt relative Referenzen mit der Annahme, dass Ihre .sln die Wurzel der relativen Referenz ist. Wenn Sie also eine Lösung haben C:\myProj\myProj.sln, werden alle Referenzen, die Sie in Unterordnern von hinzufügen, C:\myProj\automatisch als relative Referenzen hinzugefügt.

Gehen Sie wie C:/myReferences/myDLL.dllfolgt vor, um eine relative Referenz in einem separaten Verzeichnis hinzuzufügen, z.

  1. Fügen Sie die Referenz in der Visual Studio-Benutzeroberfläche hinzu, indem Sie mit der rechten Maustaste auf das Projekt im Projektmappen-Explorer klicken und Referenz hinzufügen auswählen ...
  2. Suchen Sie die * .csproj, in der diese Referenz vorhanden ist, und öffnen Sie sie in einem Texteditor
  3. Bearbeiten Sie den <HintPath> so, dass er gleich ist

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

Dies verweist nun C:\myReferences\myDLL.dll.

Hoffe das hilft.

CrimsonX
quelle
20
Ich verstehe, dass dies hilfreich und richtig ist, aber bietet die VS-GUI ernsthaft keine Möglichkeit, eine relative Referenz hinzuzufügen?
Kdbanman
4
In VS 2015 habe ich dieses Verhalten standardmäßig (relativer Pfad)
Mugen
2
Ich war überzeugt, dass es einen absoluten Weg hinzugefügt hatte, bis ich aus Neugier Ihren Anweisungen folgte. VS zeigte einen absoluten Pfad in den Referenzeigenschaften, aber <HintPath> wurde als bereits relativ angezeigt. Es stellte sich heraus, dass mir Dateien fehlten O_o lolimaderp!
Donutguy640
@ donutguy640 Das hat mich auch verwirrt. Sie sollten auch den relativen Pfad im Eigenschaftenbereich
anzeigen
1
Sie müssen die Projektdatei nicht direkt bearbeiten. Wählen Sie im Dialogfeld "Referenz hinzufügen" die Option "Durchsuchen", navigieren Sie zu dem Ordner mit Ihrer Projektdatei und fügen Sie dann den relativen Pfad zu Ihrer DLL hinzu. Obwohl im Eigenschaftenfenster ein absoluter Pfad angezeigt wird, wird der relative Pfad in der Projektdatei gespeichert. VS sollte den Pfad wirklich so anzeigen, wie er in der Projektdatei gespeichert ist.
Needfulthing
9

Ja, erstellen Sie einfach ein Verzeichnis in Ihrer Lösung wie lib / und fügen Sie dann Ihre DLL zu diesem Verzeichnis im Dateisystem hinzu und fügen Sie sie im Projekt hinzu (Hinzufügen-> Vorhandenes Element-> usw.). Fügen Sie dann die Referenz basierend auf Ihrem Projekt hinzu.

Ich habe das mehrmals unter svn und unter cvs gemacht.

Freddy
quelle
5
Sie müssen die DLL nicht zum Projekt selbst hinzufügen, sondern nur einen Verweis darauf hinzufügen. Am besten fügen Sie das gesamte 'lib'-Verzeichnis zu Ihrer Quellcodeverwaltung hinzu. Siehe code.google.com/p/projectpilot/source/browse/#svn/trunk als Beispiel
Igor Brejc
1
Du hast recht. Ich habe ein altes Projekt überprüft und weder das Verzeichnis noch die DLLs wurden dem Projekt selbst hinzugefügt, nur dem Repository. Und die Referenz ist dann relativ zum Projekt. Das tut mir leid.
Freddy
3

In VS 2017 ist es automatisch. Also Add Referencewie immer.

Beachten Sie, dass im Reference Propertiesabsoluten Pfad angezeigt wird, aber .vbproj/.csprojrelativ verwendet wird.

<Reference Include="NETnetworkmanager">
      <HintPath>..\..\libs\NETnetworkmanager.dll</HintPath>
      <EmbedInteropTypes>True</EmbedInteropTypes>
</Reference>
Iurii Vasylenko
quelle
2

Der einfachste Weg, dies zu erreichen, besteht wahrscheinlich darin, einfach den Verweis auf die Assembly hinzuzufügen und dann (manuell) die Textdarstellung des Verweises in der entsprechenden Visual Studio-Projektdatei (Erweiterung .csproj) so zu patchen, dass sie relativ wird.

Ich habe dies in VS 2005 viele Male ohne Probleme getan.

Uwe Honekamp
quelle
3
Ich denke, es ist nicht notwendig, die Projektdatei manuell zu ändern. Nach meiner Erfahrung verwendet Visual Studio immer relative Pfade. Das einzige Mal, dass ich die Projektdatei von Hand ändern musste, war, als ich eine Schlüsseldatei (.snk) freigeben wollte. Visual Studio kopiert die Schlüsseldatei immer nur in das Projektverzeichnis, wodurch mehrere Kopien der Schlüsseldatei erstellt werden.
Stefan Egli
1

Ich könnte hier weg sein, aber es scheint, dass die Antwort ziemlich offensichtlich ist: Sehen Sie sich Referenzpfade in den Projekteigenschaften an. In unserem Setup habe ich unseren allgemeinen Repository-Ordner wie folgt zum Ref-Pfad-GUI-Fenster hinzugefügt

Referenzpfade in VS20xx

Auf diese Weise kann ich meine DLLs (bereit zur Veröffentlichung) in diesen Ordner kopieren und jeder Entwickler erhält jetzt die aktualisierte DLL jedes Mal, wenn er aus diesem Ordner erstellt wird.

Wenn die DLL in der Lösung gefunden wird, sollte der Builder die lokale Version gegenüber der veröffentlichten Teamversion priorisieren.

Christian
quelle
Leider wird dies in der Datei csproj.user gespeichert und ist nicht relativ.
Jamie Kitson
0

Wie bereits erwähnt, können Sie die .csprojDatei Ihres Projekts manuell bearbeiten , um sie manuell anzuwenden.

Ich habe auch festgestellt, dass Visual Studio 2013 versucht, einen relativen Pfad auf den Referenzhinweispfad anzuwenden, wahrscheinlich aufgrund des Versuchs, die Projektdatei portabler zu machen.

Nick L.
quelle