Visual Studio:相对程序集引用路径

106

当在解决方案目录中添加一个程序集的引用时,是否有相对添加它的方式,以便在检入和检出存储库时正确地在项目中引用它?


14
如果在用户界面无法正常工作,请记得您可以直接手动编辑.proj文件并将路径更改为相对路径。 一旦以任何方式更改,它将保持您输入的方式。 - Pavel Minaev
1
在 Visual Studio 2010 中,默认情况下引用路径是相对路径,因此如果出现这种情况,那么可能有其他问题。在我的情况下,我已经将 dll 文件从版本控制中忽略了,以便我可以编译解决方案,但是我的同事却不能。 - Giles Roberts
6个回答

134
为了进一步解释Pavel Minaev原始意见--Visual Studio的GUI支持相对引用,假设您的.sln是相对引用的根目录。所以,如果您有一个解决方案 C:\myProj\myProj.sln,在C:\myProj\的子文件夹中添加的任何引用都会自动添加为相对引用。
要在另一个目录中添加相对引用,例如 C:/myReferences/myDLL.dll,请执行以下操作: 1.通过在“解决方案资源管理器”中右键单击项目并选择“添加引用...”,在Visual Studio GUI中添加引用 2.查找存在此引用的*.csproj并在文本编辑器中打开它 3.将< HintPath >编辑为以下内容

<HintPath>..\..\myReferences\myDLL.dll</HintPath>

现在这个引用指向 C:\myReferences\myDLL.dll

22
我明白这很有帮助并且正确,但是VS GUI 真的没有提供添加相对引用的方法吗? - kdbanman
4
在 VS 2015 中,默认情况下我得到了这种行为(相对路径)。 - Mugen
2
我曾经认为它添加了一个绝对路径,直到出于好奇按照您的指示进行操作。VS在引用属性中显示了绝对路径,但<HintPath>已经显示为相对路径。结果发现我缺少了一些文件O_o lolimaderp! - donutguy640
@donutguy640 那也让我感到困惑。他们还应该在属性窗格上显示相对路径。 - Alexander Derck
1
您不必直接编辑项目文件。在添加引用对话框中选择“浏览”,导航到包含项目文件的文件夹,然后添加DLL的相对路径。虽然属性窗口中显示绝对路径,但相对路径保存在项目文件中。VS应该像项目文件中保存的那样显示路径。 - needfulthing

9

是的,只需在您的解决方案中创建一个名为lib/的目录,然后将您的dll添加到该目录中,并在项目中添加它(添加->现有项目->等等)。然后根据您的项目添加引用。

我已经在svn和cvs下多次完成此操作。


5
你不需要将dll文件添加到项目本身中,只需将其作为引用添加即可。最好的做法是将整个“lib”目录添加到你的源代码控制中。可以参考http://code.google.com/p/projectpilot/source/browse/#svn/trunk作为示例。 - Igor Brejc
1
你是对的。我检查了一个旧项目,目录和dll文件都没有被添加到项目本身中,只是添加到了代码库中。然后引用相对于项目。对此我感到抱歉。 - Freddy

5

在VS 2017中,这是自动的。所以只需像往常一样添加引用即可。

请注意,在引用属性中显示绝对路径,但在.vbproj/.csproj中使用相对路径。

<Reference Include="NETnetworkmanager">
      <HintPath>..\..\libs\NETnetworkmanager.dll</HintPath>
      <EmbedInteropTypes>True</EmbedInteropTypes>
</Reference>

error MSB4066: The attribute "Include" in element <Reference> is unrecognized. - IOviSpot

2

最简单的方法可能是将引用添加到程序集中,然后(手动)修补相应的Visual Studio项目文件(扩展名为.csproj)中引用的文本表示形式,使其变得相对。

我在VS 2005中已经多次这样做过,没有任何问题。


3
根据我的经验,我认为没有必要手动修改项目文件。在 Visual Studio 中,通常会使用相对路径。唯一需要手动修改项目文件的情况是当我想共享一个密钥文件 (.snk) 时。Visual Studio 通常会将密钥文件复制到项目目录中,这可能导致多个密钥文件副本的存在。 - Stefan Egli

1
我可能理解有误,但答案似乎很明显:查看项目属性中的引用路径。 在我们的设置中,我将我们的常见仓库文件夹添加到引用路径GUI窗口中,如下所示。

Reference Paths in VS20xx

那么我可以将我的dll(已准备好发布)复制到这个文件夹中,每个开发者现在每次从这个文件夹构建时都会得到更新的DLL。如果在解决方案中找到了dll,则构建器应优先考虑本地版本而不是团队发布的版本。

不幸的是,这个信息被保存在csproj.user文件中,而且不是相对路径。 - Jamie Kitson
根据我的期望,“引用路径”中指定的路径应该在使用F5调试器从VS启动应用程序时作为引用的DLL的附加搜索路径。但事实并非如此。 - Vlad Gonchar

0

如前所述,您可以手动编辑项目的.csproj文件以手动应用它。

我还注意到,Visual Studio 2013尝试将相对路径应用于引用提示路径,可能是为了使项目文件更具可移植性。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接