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

重複の可能性があります。インストールされている.NETFrameworkのバージョンとサービスパックを検出するにはどうすればよいですか?簡単な答えは、レジストリを読む必要があるということです

于 2013-01-02T01:13:37.643 に答える
0

クライアント コンピューターに搭載されている .net のバージョンを検出するのではなく、完全な .net インストーラーをインストール プログラムにバンドルすることをお勧めします。

つまり、インストール時にそれを検出し、適切なアクションを実行します。これは、欠落している可能性のあるフレームワーク パーツを処理する通常の方法です。

于 2013-01-02T02:15:33.847 に答える