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

Kir*_*rst 6 c# reflection silverlight version methodaccessexception

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

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

我可以毫无问题地获得执行组装,但是调用GetName()返回MethodAccessException带有此消息的a

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

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

Jas*_*ley 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;
    }
Run Code Online (Sandbox Code Playgroud)


小智 6

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

不要在您的应用程序中使用此成员.如果这样做,您的代码将抛出MethodAccessException.该成员是安全关键的,它限制它由.NET Framework for Silverlight类库内部使用.[安全关键]

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