我知道我可以在外部DLL中添加 HintPath ,以帮助Visual Studio / TFS在构建时找到它。
我想知道的是......是否可以添加多个 HintPath ?
例如......开发人员将DLL放在一个地方,我们在服务器的不同位置执行这些DLL的GetLatest,因此需要多个 HintPath 。
你觉得怎么样,世界?
答案 0 :(得分:38)
抱歉,您无法使用多个HintPath。 Visual Studio / MSBuild仅采用最后 <HintPath>
定义,并将忽略任何以前的定义。在VS2010和VS2012中确认。
答案 1 :(得分:14)
此答案不再有效。正如Sardaukar's comment所说, Visual Studio总是盲目地使用最后一个HintPath 。 Alex'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>
答案 2 :(得分:8)
您可以使用环境变量。 E.g。
<Reference Include="System.ComponentModel.Composition.Codeplex">
<HintPath>$(PathToDLLs)\MEF2_Preview2\bin\System.ComponentModel.Composition.Codeplex.dll</HintPath>
</Reference>
答案 3 :(得分: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>
将使用Condition评估为true的最后一个HintPath。
答案 4 :(得分:2)
在注释掉的目标部分之后,将以下内容添加到项目文件的底部:
<Target Name="BeforeResolveReferences">
<CreateProperty Value="YOUR_FIRST_PATH;YOUR_SECOND_PATH;$(AssemblySearchPaths)">
<Output TaskParameter="Value" PropertyName="AssemblySearchPaths" />
</CreateProperty>
</Target>
用您的路径替换YOUR_FIRST_PATH
和YOUR_SECOND_PATH
。
重要的是,这将在以下行之后,否则您的设置将被覆盖:
<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
在字符串末尾的$(AssemblySearchPaths)
条目路径中的DLL将覆盖正常分辨率。如果将其移至开头,则首先尝试正常分辨率,并检查其他路径是否找不到。正常分辨率包含<HintPath>
个部分,因此如果您的路径是第一个,则无需删除它们。