-1

最初,我们正在开发 .Net Framework 3.5。因此 GAC 路径在代码中被硬编码为

C:\Windows\assembly\GAC_64\{0}\1.0.0.0__008145f79b9aec14\{0}.dll

后来我们迁移到 .Net Framework 4.0。现在所需的路径应该是

C:\Windows\Microsoft.NET\assembly\GAC_64\{0}\v4.0_1.0.0.0__008145f79b9aec14\{0}.dll

目前可以通过将第二条路径放入我的代码中来解决问题。但是当微软发布下一组框架时,它可能会失败。

所以我想知道是否有任何方法可以独立于.Net Framework 访问 GAC 二进制文件。

对此的任何评论都会有所帮助。谢谢

4

2 回答 2

5

如果要从 GAC加载程序集,请使用其完全限定名称加载它

Assembly.Load("SampleAssembly, Version=1.0.2004.0, Culture=neutral, PublicKeyToken=8744b20f8da049e3");

如果在 GAC 中找到它,它将从那里加载。

永远不应该在任何地方硬编码 GAC 的路径。它可能随时发生变化,甚至在服务包或补丁之间也是如此,而且它是一个您不能依赖的实现细节。

于 2012-05-09T10:54:31.350 回答
2

不要对它们进行硬编码

我猜你不需要在 GAC 中使用它的路径加载程序集(这会有一个很大的原因)所以也许你必须手动检查二进制文件而不加载它(例如列出可用的程序集或检查他们的元数据)。

如果您需要访问 GAC,请不要依赖路径,这对您来说将是地狱(Windows 目录更改,GAC 结构并非微不足道,有效路径取决于环境、程序集类型等)。

有一个非托管 API 可以使用:在 MSDN 上查看此处以供参考。例如,要获取 GAC 的路径,您可以编写:

GetCachePath(ASM_CACHE_GAC, pPath, MAX_PATH);
于 2012-05-09T10:57:44.690 回答