Вопрос

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