再次问候,
继我之前的问题之后,我试图最大限度地提高我的C#编写的Windows扩展的兼容性。特别是,我有兴趣确保它在安装了.NET 4并且没有安装.NET 3.5及更低版本的环境中工作。有人会认为没有问题,但很明显这并不是那么简单.
有两个问题。首先,非.NET-4目标程序集如果没有指定的.config文件,就不会在CLR 4中加载<supportedRuntime version="v4.0" />。即使试图在它们上使用ngen,如果没有这个.config文件,也会失败。但我的DLL进入了GAC。我如何在那里也得到一个.config文件?其他人也问了同样的问题,并得出结论:“好吧,我只是做一个静态设置类来代替。”显然我不能那样做..。
第二个问题:当我向regasm.exe注册我的DLL,然后打开注册表查看它写了什么时,我会在它的CLSID条目下看到RuntimeVersion = v2.0.50727。这也阻止了DLL的加载。只有在我手动将RuntimeVersion值更改为v4.0.30319之后,才会加载DLL。
那么我要让我的安装程序在这里做什么呢?对于第一个我不知道。对于第二个问题,我想我必须让安装程序手动将注册表的RuntimeVersion设置为安装的任何.NET版本?这似乎太古怪了,不可能是真的.
发布于 2010-12-07 05:04:15
如果我没记错的话,.Net 2.03.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中。然而,如果这确实有效的话,那将是很有趣的。我不相信它在实时环境中,但它确实会非常有趣。
https://stackoverflow.com/questions/4373482
复制相似问题