Reflection 在windows phone 7上获取程序集版本

Reflection 在windows phone 7上获取程序集版本,reflection,windows-phone-7,Reflection,Windows Phone 7,在我的c#应用程序中,我通常使用以下代码获取版本(向客户显示): System.Reflection.Assembly.GetExecutingAssembly().GetName().Version 这在WindowsPhone7中不起作用(它会挂起仿真器,手机崩溃对MS来说是不允许的) 那么,如何在WindowsPhone7设备上获取执行的版本 [更新]如下面的评论所述,在wp7应用程序中调用GetName()似乎是个问题。解析它是出于 Assembly.GetExecutionGasse

在我的c#应用程序中,我通常使用以下代码获取版本(向客户显示):

System.Reflection.Assembly.GetExecutingAssembly().GetName().Version
这在WindowsPhone7中不起作用(它会挂起仿真器,手机崩溃对MS来说是不允许的)

那么,如何在WindowsPhone7设备上获取执行的版本

[更新]如下面的评论所述,在wp7应用程序中调用GetName()似乎是个问题。

解析它是出于

Assembly.GetExecutionGassembly().FullName

为你工作

输出示例:SomeApp,版本=1.0.0.0,区域性=中立,PublicKeyToken=null

编辑:不需要浏览ManifestModule

尝试以下操作:

    private static string GetVersionNumber()
    {
        var asm = Assembly.GetExecutingAssembly();
        var parts = asm.FullName.Split(',');
        return parts[1].Split('=')[1];
    }

首先,我认为使用程序集的文件版本信息将应用程序版本传递给用户更合适。看

第二,这样做怎么样:

using System;
using System.Linq;
using System.Reflection;

public static class AssemblyExtensions
{
    public static Version GetFileVersion(this Assembly assembly)
    {
        var versionString = assembly.GetCustomAttributes(false)
            .OfType<AssemblyFileVersionAttribute>()
            .First()
            .Version;

        return Version.Parse(versionString);
    }
}
使用系统;
使用System.Linq;
运用系统反思;
公共静态类AssemblyExtensions
{
公共静态版本GetFileVersion(此程序集)
{
var versionString=assembly.GetCustomAttributes(false)
第()类
.First()
版本
返回Version.Parse(versionString);
}
}
公共静态字符串GetVersion()
{
返回Regex.Match(Assembly.GetExecutingAssembly().FullName,@“Version=(?[\d\.]*)”).Groups[“Version”].Value;
}

也相当干净。

我一定会向微软报告这一点。您的代码是正确的,挂起肯定是由模拟器中的.NET或整个.NET for WP7中的错误引起的!!嗯,这基本上和我上面写的一样,它就像我的版本一样挂起手机。@Sam这在市场上的应用程序中为我工作。我不得不从全名中解析版本号,因为
version
对我不起作用。你得到了什么错误?啊,我查过了,我没有使用全名,而是使用GetName。每当我在应用程序中调用GetName时,模拟器、设备和调试器都会挂起—不是在点击GetName时挂起,而是在应用程序启动时挂起!因此,即使没有调用GetName,只要它存在于代码中就足以使程序崩溃#奇怪的一篇帖子:我甚至没有走那么远:似乎反射的使用扼杀了手机。在三星泰勒原型设备系统上测试。诊断。调试。WriteLine(Assembly.getExecutionGassembly().FullName);。。。没问题。是的,你是对的,我错误地使用了GetName而不是FullName。问题是它返回AssemblyInfo.cs中设置的特定字符串,这意味着如果使用通配符修订和生成,则会得到类似于“1.2.*”的内容,而不是MSDN中的“1.2.3.4”()通配符不支持AssemblyFileVersionAttribute,这样做会发出一个编译器警告,因为在这种情况下它是没有意义的。对版本使用通配符仅适用于AssemblyVersion()
 public static string GetVersion()
    {
        return Regex.Match(Assembly.GetExecutingAssembly().FullName, @"Version=(?<version>[\d\.]*)").Groups["version"].Value;
    }