c# - 检查是否安装了完整版本的 .net?

标签 c# .net

我正在构建一个需要完整版 .Net(4.0 或 3.5)的 ExcelDNA 插件(我正在使用 System.Web 的某些部分)。因此,只有客户端版本的用户会遇到错误。

如果只安装了客户端版本,我喜欢在启动时用“获取最新”版本弹出窗口提示用户。

有没有什么万无一失的方法来检查是否安装了完整版?通过谷歌搜索,似乎很多人建议检查注册表,但是这似乎很容易出错,因为有很多 .Net 版本。在这种情况下,我需要检查哪些路径来构建:

bool IsFullDotNetVersion()
{

}

检查仅在完整版中可用的功能是否存在可能/好主意吗? IE。是否可以检查环境中是否存在 System.Web? (不包含在 .Net 的客户端版本中,对吧?)

作为附带问题:如何使用系统上安装的不同 .net 版本轻松测试我的应用程序。有没有 .Net 切换器?

最佳答案

在 GAC 中查看 System.Web(或您需要的任何程序集)是否存在。

这是一些代码 works on my machine .

private static const string BasePath = @"c:\windows\assembly";

public static bool HasDotNetFullversion()
{
    var gacFolders = new List<string>()
    {
        "GAC", "GAC_32", "GAC_64", "GAC_MSIL",
        "NativeImages_v2.0.50727_32", "NativeImages_v2.0.50727_64"
    };

    var assemblyFolders = from gacFolder in gacFolders
                          let path = Path.Combine(BasePath, gacFolder)
                          where Directory.Exists(path)
                          from directory in Directory.GetDirectories(path)
                          select directory;

    var hasSystemWeb = assemblyFolders.Any(x =>
        x.EndsWith("system.web", StringComparison.InvariantCultureIgnoreCase));
}

关于c# - 检查是否安装了完整版本的 .net?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14084501/

相关文章:

c# - 为什么选择静态类而不是单例实现?

c# - 是否有离线 MSDN 文档的 API?

c# - 如何在迭代时将 ListItem 添加到列表中 (C#)?

c# - 处置由 WCF ChannelFactory 创建的 Channel

java - .NET 相当于现代 Java Web 架构

c# - 将音频源(并发)动态发送到 ASIO 设备上的特定 channel

.net - 如何让 JSLint.VS Addin 与 Visual Studio 2010 一起使用?

c# - 如何在 C# MVC Controller 操作中将动态对象序列化为 JSON?

c# - ReadOnlyObservableCollection 和 ObservableCollection 之间的区别

c# - 服务器应该如何向富客户端推送数据