在VS(本例中为2008)中添加对Web应用程序项目的引用时,将创建csproj文件中的"hintpath"作为相对引用.有没有办法(使用GUI,而不是手动编辑文件)使其成为绝对引用(即C:\ Temp\DllName.dll)?
我遇到的问题是当单独的构建机器具有项目的不同工作目录时.当引用是相对的,并且引用的dll不在项目工作目录中时,相对引用可能不指向两台机器上的相同位置.
这是一个老问题,但它仍然是相关的.我在寻找解决方案时偶然发现了它如何从第三方软件的全局存储库中引用程序集.
我现在的方法类似于thinkOfaNumber写的答案.我更喜欢将环境变量嵌入到.csproj文件中,而不是使用硬编码的绝对路径.然后环境变量保存绝对路径.例:
$(THIRDPARTY_ROOT)\foo\3.1.0\bin\foo.dll
这种额外的间接级别可以灵活地在不同的构建机器上拥有不同的路径(例如开发人员系统与构建服务器).
不过,我仍然需要手动编辑.csproj文件来执行此操作.
我发现这样做的唯一方法是在添加引用后手动编辑csproj文件.
False C:\absolute\path\foo.dll
是的,我讨厌绝对路径和它创建的所有自动部署疯狂,但在这种情况下,我必须引用一个.NET包装器,它使用必须"安装"的COM dll并对注册表执行操作等等.绝对路径是唯一的出路.
默认情况下,Visual Studio在最初添加引用时使用相对引用,因为它假定引用是指工作副本中其他位置的文件.
这曾经让我疯了,但我用三种不同的方式解决了它:
通过将我的源代码保存在我的D:驱动器上,意味着C:驱动器上引用的DLL无法与相对路径一起存储.
通过说服权力,可以为所有开发人员工作站使用单个图像/脚本.既然它们都是一样的,那么这些文件都在C:驱动器上的相同位置.
通过意识到您可以向AssemblyFolders
注册表项添加文件夹,这意味着您不再需要使用任何类型的路径来引用已知程序集.