为什么不将.NET Framework 4.0 DLL添加到GAC?

时间:2012-06-01 21:57:53

标签: .net dll gac

我注意到.NET DLL的位置有些奇怪。我试图调试System.ServiceModel.dll的问题,我注意到即使我安装了.NET 4.0,我的GAC中也只安装了3.0版本的ServiceModel DLL(我通过探索C:\ Windows进行了检查) \部件)。但是,如果我导航到“C:\ Program Files \ Reference Assemblies \ Microsoft \ Framework.NETFramework \ v4.0 \ Profile \ Client”,则4.0版本就位于此处。那么为什么.NET不将4.0版本安装到GAC中呢?

考虑到它没有,我的4.0程序如何知道在哪里可以找到4.0 DLL?我上面给出的文件路径是自动探测的吗?我回头看了我的应用程序,它使用4.0 DLL来确认它不会在本地复制DLL,所以它似乎必须从GAC获取它(现在我知道DLL不在那里),或者在探测.NETFramework文件夹。这让我很困惑......

编辑:我遵循MystereMan的建议并运行“Gacutil.exe / l System.ServiceModel”,但它仍然只显示3.0版本。这是否意味着.NET 4毕竟没有将DLL安装到GAC中?

编辑#2和解决方案:我的PATH中的gacutil.exe是一个无法看到4.0程序集的旧版本。通过搜索我的计算机,我在这里找到了4.0版本的gacutil.exe:C:\ Program Files \ Microsoft SDKs \ Windows \ v7.0A \ bin \ NETFX 4.0 Tools。使用它,我终于可以看到列出了System.ServiceModel.dll的4.0。谢谢大家的帮助!

谢谢,

-Robert

1 个答案:

答案 0 :(得分:3)

.Net 4.0在Windows\Microsoft.Net\assembly中使用不同的GAC。

Reference Assemblies中的文件是空的存根,仅用于过滤Visual Studio中针对不同目标框架的IntelliSense。
如果你在ILSpy中打开它们,你会发现所有方法都是空的。