无法从我的Silverlight应用程序调用Assembly.GetName()

时间:2011-10-28 04:25:08

标签: c# silverlight reflection version methodaccessexception

我想在我的应用程序中显示我的应用程序版本号,最简单的方法是使用程序集的版本号。

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

我可以毫无问题地进行正在进行的装配,但是对GetName()的调用会返回MethodAccessException这条消息

  

安全透明方法'MainPage..ctor()'尝试访问安全关键方法'System.Reflection.Assembly.GetName()'失败。

为什么会发生这种情况,有什么我可以做的,如果没有,还有其他方法可以检索汇编版本吗?

2 个答案:

答案 0 :(得分:8)

我从Stackoverflow(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;
    }

答案 1 :(得分:6)

Assembly.GetName标有SecurityCriticalAttribute属性,请尝试使用GetCallingAssembly().FullName并从中删除版本信息。

  

请勿在您的应用程序中使用此成员。如果你这样做,你的代码就会   抛出一个MethodAccessException。该成员对安全至关重要   将其限制为.NET Framework for Silverlight的内部使用   班级图书馆。 [安全关键]

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