HintPath在Visual Studio中添加了引用

Max*_*ler 33 tfs build-process visual-studio-2008

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

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

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

你怎么看,世界?

Ale*_*lex 38

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

  • 这个答案应该是被接受的答案,因为另一个答案是提供虚假信息. (5认同)
  • 您可以在每个HintPath上使用多个HintPath.检查我的答案如下. (2认同)

Max*_*ler 14

这个答案不再有效.正如Sardaukar的评论所说,Visual Studio总是盲目地使用最后一个HintPath.亚历克斯的回答支持这一点.


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

因此可以使用多个HintPath.

当你有这个:

<Reference Include="System.ComponentModel.Composition.Codeplex">
    <HintPath>..\..\..\MEF2_Preview2\bin\System.ComponentModel.Composition.Codeplex.dll</HintPath>
</Reference>
Run Code Online (Sandbox Code Playgroud)

你可以简单地添加更多的提示路径:

<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>
Run Code Online (Sandbox Code Playgroud)

  • (在解决hintpaths的问题时发现了这个问题,我必须纠正上面的答案).你的答案是有缺陷的.是的,您可以手动将多个提示路径添加到csproj文件中,但Visual Studio将仅使用最后一个hintpath元素.它可能适用于您的情况,因为您的第二个提示路径可以解决.通过交换你的提示路径来尝试它,以便d:\ MEF\System.ComponentModel.Composition.CodePlex.dll是第一个.然后编译.您可能会看到Visual Studio现在将尝试引用最后一个提示路径. (15认同)
  • @ jon-eric我很欣赏你正在尝试做的事情,但是只需要一个简单的免责声明就可以了.在这样一个大的免责声明中明确要求downvotes或upvotes是一条危险的道路. (7认同)
  • 你能告诉我们怎么可能吗? (2认同)

小智 8

您可以使用环境变量.例如

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


Wol*_*lf5 7

使用条件,您可以:

<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>
Run Code Online (Sandbox Code Playgroud)

将使用 Condition 评估为 true 的最后一个 HintPath。