GAC 32位与64位的区别

38

我已经搜索了一段时间,尝试更好地理解这个问题,但是没有找到任何直接的答案。

我有一个组件需要添加到GAC中。我的操作系统是Windows 7 64位,为了解决一个问题(SSIS 2005无法识别DLL),我正在努力确保将DLL(.NET 4.0)注册到正确的GAC中。

所以这里是我的几个问题:

  1. 在Windows 7中,64位和32位GAC的物理位置在哪里?我知道C:\ Windows \ assembly,但不确定这是哪一个,以及其他一个在哪里。

  2. 我应该使用哪个版本的gacutil将程序集添加到64位GAC?32位GAC?我知道C:\ Program Files(x86)\ Microsoft Visual Studio 10.0 \ VC,我假设这是32位,但不确定64位的gacutil在哪里。

  3. 是什么决定了应用程序在哪个GAC中查找程序集?我假设这取决于应用程序是64位还是32位,但想知道是否有更多内容。

预先感谢您的帮助。

更新:

在ShaneBlake的回答后,我深入研究了这个问题,我记得.NET 2.0和.NET 4.0 GAC在不同的位置。所以:

.NET 2.0 GAC:
c:\ windows \ assembly(32位和64位?)

.NET 4.0 GAC:
c:\ windows \ Microsoft.NET \ assembly \ GAC_32 (仅32位)
c:\ windows \ Microsoft.NET \ assembly \ GAC_64 (仅64位)
c:\ windows \ Microsoft.NET \ assembly \ GAC_MSIL (32位和64位?)


请注意,如果你要分发你的应用程序,那么在客户端机器上不能使用 gacutil。VS 安装程序/部署项目可以让你将程序集安装到正确的位置。 - 3Dave
2个回答

23

根据编译方式不同,gacutil.exe 应将.dll 安装到正确的位置。你应该能在这里找到文件:%ProgramFiles%\Microsoft SDKs\Windows\v7.0A\bin\NETFX 4.0 Tools\

.NET 4 有自己的程序集文件夹(c:\windows\Microsoft.NET\assembly),其中包含一个名为\GAC_32\GAC_64 的目录...安装完成后,您可以在这里找到您的文件。

希望这能有所帮助......


@David:是的。它被认为是开发人员工具,因此您必须安装SDK。 - ShaneBlake
1
@David 我同意。在我们的 Web 应用程序中,我更喜欢将它们放在\AppLocalResources中,这样它们就会被部署在\bin中,我总是知道我正在使用哪个版本... - ShaneBlake
我相信这些 GAC_MSIL 程序集必须编译为“任何 CPU”,以便它们可以在 x64 和 x86 上运行。 - Sudhanshu Mishra
1
@jrh 嗯,我已经有7年没有涉足这个了。不过没错,gacutil 没有太多外部依赖。祝你好运! - 3Dave
1
@3Dave 刚刚回来汇报,将 x86 和 x64 版本的 gacutil 复制/粘贴到测试 PC 上绝对可行。 - jrh
显示剩余7条评论

0

对于 Windows 10

C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\Bin


我一直想知道的一件事是,有没有不使用最新的SDK的理由?令人困惑的是,我在Windows 10上有v7.0A,在Windows 7上有v10.0A; SDK版本是否有任何影响?也许是向后兼容?还是附加功能? - jrh
1
@jrh 在我们复活僵尸线程的时候,是的,向后兼容性是不使用最新SDK的主要原因。如果您需要部署到Win7,则使用RS5特定的SDK将不会让您获得任何好处。 - 3Dave

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