5

サード パーティのアセンブリを使用する場合、完全な .NET 4 が必要なのか、.NET 4 クライアント プロファイルだけが必要なのかを検出する方法が必要です。

dll の .NET Framework バージョンの決定 で参照されている .NET バージョンを検出する他の方法を見てきましたが、その質問で概説されている方法は、クライアント プロファイルとフルを検出する方法を示していません。出来ますか?

コード/ランタイムソリューションである必要はありません。

4

1 に答える 1

2

以下のソリューションは .NET 4.0 フレームワークに固有のものであり、4.0 の新機能であることに注意してくださいTargetFrameworkAttribue

私は 2 つのアプリケーションをコンパイルしました。1 つは Client Framework に対して、もう 1 つはフルに対してです。両方を ildasm.exe で開いたところ、両方にTargetFrameworkAttribute適用されていることがわかりました。リフレクションを使用して値を確認するだけです。

using System;
using System.Linq;
using System.Runtime.Versioning;

class Program
{
    static void Main(string[] args)
    {
        var a = System.Reflection.Assembly.GetExecutingAssembly();
        var att = a.GetCustomAttributes(false).OfType<TargetFrameworkAttribute>().Single();

        Console.WriteLine(att.FrameworkDisplayName);
        Console.Read();
    }
}

更新:はい、確かに、「.NET Framework 3.5 クライアント プロファイル」に対してアプリケーションをコンパイルすると、その属性が含まれませ(コードはそれを認識できなくなり、ildasm はそれを特徴としません)。この状況でターゲットフレームワークを決定する方法については、リンクした他の回答以外には手がかりがありません。

コード ベースに無意味な制限を課すことを避けるために、私は作業を楽にし、単純に完全なフレームワークをターゲットにします。クライアントがクライアント プロファイルをインストールする権限を持っている場合、フル フレームワークにも同じことが当てはまります。わずかに大きいだけです (15% だけ大きいという情報源を見つけたので、「クライアント パッケージが小さい」という利点の多くが無効になります)。 、48MB ではなく 41MB)。あなたの電話。

于 2012-06-26T13:37:20.557 に答える