2009-01-20 341 views
32

我知道我可以將HintPath添加到外部DLL,以幫助Visual Studio/TFS在構建時找到dll。在Visual Studio中添加參考的HintPath

我在想什麼是...是否可以添加多個HintPath

例如...開發人員有一個地方的DLL,我們在服務器上的不同位置執行GetLatest這些DLL,因此需要多個HintPath

你認爲世界是什麼?

回答

14

此答案不再有效。正如Sardaukar's comment所說,Visual Studio總是盲目地使用最後的HintPathAlex's answer支持這一點。


好的。這次我比Stackoverflow快。我試圖添加它,它似乎工作正常。

所以多個HintPath是可能的。

當你有這樣的:

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

您可以簡單地添加更多的提示路徑那樣:

<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

你剛剛添加了多個HintPath條目,還是在單個條目中有多個路徑? – 2009-10-01 17:07:49

+1

如果是單個條目,是逗號分隔還是分號? – Maslow 2010-06-11 13:14:10

+2

您能告訴我們這有可能嗎? – Nick 2010-07-16 16:23:17

8

您可以使用該環境變量。例如。

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

對不起,您不能使用多個HintPath的。 Visual Studio/MSBuild僅使用最後的<HintPath>定義,並將忽略任何以前的。在VS2010和VS2012中確認。

2

以下內容添加到您的項目文件的底部只是註釋掉目標部分之後:

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

更換YOUR_FIRST_PATHYOUR_SECOND_PATH與你的路。

這一點很重要這正好以下行之後,或者您的設置將被覆蓋:

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

用在你的路徑字符串的DLL結束時$(AssemblySearchPaths)條目將覆蓋正常的分辨率。如果將它移動到開頭,則首先嚐試正常分辨率,然後檢查其他路徑以查找未找到的任何路徑。正常分辨率包括<HintPath>部分,因此如果您的路徑優先,則無需將其刪除。

3

使用條件,您可以:

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

在條件計算爲true的最後HintPath將被使用。