在Visual Studio中添加参考的HintPath

问题描述:

我知道我可以将HintPath添加到外部DLL,以帮助Visual Studio/TFS在构建时找到dll。在Visual Studio中添加参考的HintPath

我在想什么是...是否可以添加多个HintPath

例如...开发人员有一个地方的DLL,我们在服务器上的不同位置执行GetLatest这些DLL,因此需要多个HintPath

你认为世界是什么?

此答案不再有效。正如Sardaukar's comment所说,Visual Studio总是盲目地使用最后的HintPathAlex's answer支持这一点。


好的。这次我比*快。我试图添加它,它似乎工作正常。

所以多个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

您可以使用该环境变量。例如。

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

对不起,您不能使用多个HintPath的。 Visual Studio/MSBuild仅使用最后的<HintPath>定义,并将忽略任何以前的。在VS2010和VS2012中确认。

以下内容添加到您的项目文件的底部只是注释掉目标部分之后:

<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>部分,因此如果您的路径优先,则无需将其删除。

使用条件,您可以:

<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将被使用。