6

アプリケーション内にアプリケーションのバージョン番号を表示したいのですが、これを行う最も簡単な方法は、アセンブリのバージョン番号を使用することです。

var assembly = System.Reflection.Assembly.GetExecutingAssembly();
var name = assembly.GetName();
return String.Format("Version {0}.{1}", name.Version.Major, name.Version.Minor);

実行中のアセンブルは問題なく取得できますが、 を呼び出すと、このメッセージとともにGetName()a が返されます。MethodAccessException

セキュリティ透過メソッド 'MainPage..ctor()' によるセキュリティ クリティカル メソッド 'System.Reflection.Assembly.GetName()' へのアクセスに失敗しました。

なぜこれが起こっているのですか?それについて何かできることはありますか?そうでない場合は、アセンブリバージョンを取得する別の方法がありますか?

4

2 に答える 2

8

Stackoverflow(Silverlightアセンブリのランタイムバージョンの取得)からこれを取得しました...私のために動作します:

    public static string GetVersion()
    {
        string versionNumber = ParseVersionNumber(Assembly.GetExecutingAssembly()).ToString();
        return versionNumber;
    }

    private static Version ParseVersionNumber(Assembly assembly)
    {
        AssemblyName assemblyName = new AssemblyName(assembly.FullName);
        return assemblyName.Version;
    }
于 2011-10-28T23:20:30.453 に答える
6

Assembly.GetName は SecurityCriticalAttribute 属性でマークされており、使用GetCallingAssembly().FullNameしてバージョン情報を取得してみてください。

アプリケーションでこのメンバーを使用しないでください。その場合、コードは MethodAccessException をスローします。このメンバーはセキュリティ クリティカルであるため、.NET Framework for Silverlight クラス ライブラリによる内部使用に制限されます。[セキュリティ クリティカル]

から: http://msdn.microsoft.com/en-us/library/9w2wdeze(VS.95).aspx

于 2011-10-28T05:04:00.287 に答える