我对VS2010中的旧安装项目有疑问。请不要责怪我使用它。这是一个无法改变的公司决定。我不得不处理它。
我认为我们得到的很平常:一些项目的解决方案。项目参考组件。其中一些是第三方组件。它们全部引用/来自SAME个人文件夹(不是GAC或类似C:\ Programs ...)。我们只是不参考已安装的版本。我们想把它们放在一个地方。
这就是重点...项目本身指向我们想要的文件夹。建设和运行很好。 当我检查安装项目时,某些第三方程序集取自我们的特定文件夹,其他程序集取自C:\ Programs ...
我只是不知道为什么。我似乎无法影响这一点。甚至手动编辑.vdproj文件(可以设置为“GAC:FALSE”)也无济于事!我们需要在文件夹中引用特定的* .dll。
有人对此有所了解吗?到目前为止我还没找到什么......
喝彩! 延
答案 0 :(得分:0)
这就是VS的行为方式。即使你告诉他在你自己的文件夹中搜索你的第三方dll,如果它在GAC中找到相同的dll,它会从那里引用它。在不的计算机上有GAC中的dll,它将从您的文件夹中引用它。换句话说,如果部署应用程序的计算机在您引用它们的文件夹中包含所有第三方程序集,并且目标计算机上存在该文件夹,则即使dll不在目标中,应用程序也不会崩溃你在自己的机器上看到,并将使用文件夹中的程序集。
答案 1 :(得分:0)
也许有人在Visual Studio中摆弄了默认的引用路径。如果你看看这篇文章,大约一半时间解释了用于定位引用程序集的注册表项:
http://msdn.microsoft.com/en-us/library/wkze6zky(v=vs.100).aspx
我认为VS搜索机制将在构建时通过此列表,并且您可能最终得到一个相当奇怪的组合,特别是如果某些程序集依赖于其他程序集并且程序集版本不同。因此,如果您从某个需要其他特定版本的程序集开始,它将追踪该目录列表,直到找到它们为止。
我不相信VS会默认从GAC获取程序集以供参考。 .NET运行时将在您运行程序时执行此操作,但在开发时,所有MS程序集都是从SDK安装引用的,而不是从GAC引用的。 GAC是用于运行需要这些程序集的程序的存储库,而不是dev构建的引用。