2011-10-28 10 views
6

アプリケーション内にアプリケーションのバージョン番号を表示したいのですが、これを行う最も簡単な方法はアセンブリのバージョン番号を使用することです。SilverlightアプリケーションからAssembly.GetName()を呼び出すことができません

私は問題なく組み立てる実行得ることができますが、 GetName()への呼び出しは、重要なセキュリティにアクセスするためのセキュリティ透明法「MainPage..ctor()」からのメッセージ

試みでMethodAccessExceptionを返し

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

メソッド 'System.Reflection.Assembly.GetName()'が失敗しました。

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

答えて

6

Assembly.GetNameにはSecurityCriticalAttribute属性が設定されています。GetCallingAssembly().FullNameを使用して試してみてください。

アプリケーションでこのメンバーを使用しないでください。そうした場合、コードは にMethodAccessExceptionをスローします。このメンバはセキュリティ上重要です。 はSilverlight用.NET Framework クラスライブラリの内部使用に制限されています。

から[SECURITY CRITICAL]:私はStackOverflowのからこれを得たhttp://msdn.microsoft.com/en-us/library/9w2wdeze(VS.95).aspx

8

は(Getting runtime version of a Silverlight assembly)は...私の作品:

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; 
    } 
関連する問題