2009-01-20 7 views
32

Ich weiß, dass ich eine HintPath zu einer externen DLL hinzufügen kann, um Visual Studio/TFS zu helfen, die DLL zu finden, wenn es erstellt.HintPath auf eine hinzugefügte Referenz in Visual Studio

Was ich fragte ist, ist ... ist es möglich, mehrere HintPath hinzuzufügen?

Zum Beispiel ... Entwickler haben ihre DLLs für einen Ort und wir tun GetLatest dieser DLLs an einem anderen Ort auf dem Server daher die Notwendigkeit für mehrere HintPath.

Was denkst du, Welt?

Antwort

14

Diese Antwort ist nicht mehr gültig. Wie Sardaukar's comment sagt, Visual Studio verwendet immer blind den letzten HintPath. Alex's answer unterstützt dies.


In Ordnung. Ich bin diesmal schneller als Stackoverflow. Ich habe versucht, es hinzuzufügen, und es scheint gut zu funktionieren.

Also mehrere HintPath IS möglich.

Wenn Sie dies:

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

Sie können einfach mehr Hinweis Pfad so dass hinzufügen:

<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> 
+1

Haben Sie einfach mehrere HintPath-Einträge hinzugefügt oder mehrere Pfade in einem einzigen Eintrag? –

+1

wenn Einzeleintrag, war es Komma getrennt oder Semikolon? – Maslow

+2

Können Sie uns bitte sagen, wie es möglich ist? – Nick

8

Sie Umgebungsvariablen für das verwenden können. Z.B.

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

Sorry, Sie kann nicht Verwendung mehrerer HintPath Jahren. Visual Studio/MSBuild nimmt nur die letzte<HintPath> Definition und ignoriert alle vorherigen. Bestätigt in VS2010 und VS2012.

+5

Diese Antwort sollte die akzeptierte sein, da die andere falsche Informationen gibt. –

+1

Sie können mehrere HintPaths mit jeweils einer Bedingung verwenden. Überprüfen Sie meine Antwort unten. – Wolf5

+0

Bestätigt, dass in VS2015 nur der letzte HintPath verwendet wird. –

2

folgendes an der Unterseite der Projektdatei hinzufügen kurz nach dem Zielabschnitt auf Kommentar:

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

Ersetzen YOUR_FIRST_PATH und YOUR_SECOND_PATH mit deinen Wegen.

Es ist wichtig, dies geht nach der folgenden Zeile oder Ihre Einstellung überschrieben werden:

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

Mit dem $(AssemblySearchPaths) Eintrag am Ende der Zeichenfolge DLLs in Ihren Pfaden wird die normale Auflösung außer Kraft setzen. Wenn Sie es an den Anfang verschieben, wird zuerst die normale Auflösung versucht, und die zusätzlichen Pfade werden auf nicht gefundene Pfade überprüft. Normale Auflösung enthält <HintPath> Abschnitte, so dass es nicht notwendig ist, sie zu entfernen, wenn Ihre Pfade zuerst kommen.

3

Zustand verwenden Sie können:

<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> 

Die letzte HintPath, wo die Bedingung true verwendet.

+0

Funktioniert das mit der obigen Beobachtung über den letzten Hinweisweg? Ignoriert es Hinweiswege mit falschen Bedingungen und nimmt den letzten mit einem wahren Wert? –

+0

Es ignoriert alle außer dem letzten, wo die Bedingung wahr ist. – Wolf5

Verwandte Themen