4

再次问候,

继我之前的问题之后,我试图最大限度地提高我用 C# 编写的 Windows Explorer 扩展的兼容性。特别是,我有兴趣确保它在安装了 .NET 4且未安装 .NET 3.5 及更低版本的环境中工作。有人会认为没有问题,但显然不是那么简单......

有两个问题。首先,非 .NET-4 目标程序集将不会使用 CLR 4 加载,除非它们有一个.config指定<supportedRuntime version="v4.0" />. 如果没有这个文件,即使尝试使用ngen它们也会失败。.config但我的 DLL 进入 GAC。我如何也可以.config在其中获取文件?其他人也问过同样的问题,并得出结论“好吧,我将改为创建一个静态设置类。” 显然我不能这样做...

第二个问题:当我用 注册我的 DLL regasm.exe,然后打开注册表查看它写的内容时,我RuntimeVersion = v2.0.50727在它的 CLSID 条目下看到。这也可以防止加载 DLL。只有在我手动将RuntimeVersion值更改v4.0.30319为 DLL 加载后。

那么我必须让我的安装程序在这里做什么呢?对于第一个我不知道。第二,我想我必须让安装程序手动将注册表的 RuntimeVersion 设置为安装的任何 .NET 版本?这似乎太古怪了,不可能是真的……

4

1 回答 1

0

如果我没记错的话,.Net 2.0 - 3.5 和 .Net 4.0 有两个不同的 GAC。

“大小问题通过 .NET 4 安装程序 (x86 + x64) 为 54 MB 且未嵌入以前版本的完整运行时安装包得到部分解决。” - http://en.wikipedia.org/wiki/.NET_Framework

因此,如果您安装 .Net 3.5,您将获得以前的 .Net 运行时。这可能与 .NET 4.0 混淆,后者不包括这些以前的运行时。我相信这意味着您需要在 .Net 4.0 旁边安装 .Net 3.5 运行时才能将 <= .Net 3.5 运行时安装到 GAC 中。

我还相信,如果您更改 RuntimeVersion,您会将 .DLL 安装到错误的 GAC 中。但是,如果这确实有效,那将会很有趣。在实时环境中我不会相信它,但它确实会非常有趣。

于 2010-12-07T05:04:15.217 回答