检查是否安装了完整版的.net?

时间:2012-12-29 18:07:16

标签: c# .net

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

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

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

bool IsFullDotNetVersion()
{

}

检查仅在完整版中可用的功能是否可行/好主意?即是否可以检查System.Web是否存在于环境中? (不包括在.Net的客户端版本中吗?)

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

3 个答案:

答案 0 :(得分:3)

在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));
}

答案 1 :(得分:1)

可能重复。 How to detect what .NET Framework versions and service packs are installed?简短回答是你需要阅读注册表

答案 2 :(得分:0)

我建议您可以将完整的.net安装程序捆绑到安装程序中,而不是尝试检测客户端计算机具有哪个.net版本。

换句话说,在安装点检测它并采取适当的措施。这是处理可能缺少的框架部分的常用方法。