HintPath在Visual Studio中添加了引用

时间:2009-01-20 18:48:08

标签: visual-studio-2008 tfs build-process

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

我想知道的是......是否可以添加多个 HintPath

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

你觉得怎么样,世界?

5 个答案:

答案 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_PATHYOUR_SECOND_PATH

重要的是,这将在以下行之后,否则您的设置将被覆盖:

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

在字符串末尾的$(AssemblySearchPaths)条目路径中的DLL将覆盖正常分辨率。如果将其移至开头,则首先尝试正常分辨率,并检查其他路径是否找不到。正常分辨率包含<HintPath>个部分,因此如果您的路径是第一个,则无需删除它们。