5

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

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

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

bool IsFullDotNetVersion()
{

}

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

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

4

3 回答 3

3

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

这是一些适用于我的机器的代码。

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));
}
于 2013-01-02T11:59:29.893 回答
1

可能重复。如何检测安装了哪些 .NET Framework 版本和服务包?简短的回答是您需要阅读注册表

于 2013-01-02T01:13:37.643 回答
0

我建议您与其尝试检测客户端计算机的 .net 版本,不如将完整的 .net 安装程序捆绑到您的安装程序中。

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

于 2013-01-02T02:15:33.847 回答