6

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

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

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

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

为什么会发生这种情况,我能做些什么,如果没有,是否有另一种检索程序集版本的方法?

4

2 回答 2

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;
    }
于 2011-10-28T23:20:30.453 回答
6

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

不要在您的应用程序中使用此成员。如果这样做,您的代码将抛出 MethodAccessException。此成员对安全至关重要,这将其限制为供 .NET Framework for Silverlight 类库在内部使用。[安全关键]

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

于 2011-10-28T05:04:00.287 回答