문제

I want to display my application version number within my application, and the simplest way to do this is to use the version number for the assembly.

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

I can get the executing assembling without problem, but the call to GetName() returns a MethodAccessException with this message

Attempt by security transparent method 'MainPage..ctor()' to access security critical method 'System.Reflection.Assembly.GetName()' failed.

Why is this happening, is there anything I can do about it, and if not is there another means of retrieving the assembly version?

도움이 되었습니까?

해결책

The Assembly.GetName is marked with SecurityCriticalAttribute attribute try using GetCallingAssembly().FullName and scrape the version info out of it.

Do not use this member in your application. If you do, your code will throw a MethodAccessException. This member is security-critical, which restricts it to internal use by the .NET Framework for Silverlight class library. [SECURITY CRITICAL]

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

다른 팁

I got this from Stackoverflow (Getting runtime version of a Silverlight assembly) ... works for me:

    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;
    }
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top