Windows phone 7 获得;“主要”;程序集版本号

Windows phone 7 获得;“主要”;程序集版本号,windows-phone-7,windows-phone-8,.net-assembly,Windows Phone 7,Windows Phone 8,.net Assembly,我有一个带有库(DLL)的解决方案,用于两个相同的项目(一个用于WP7,另一个用于WP8)。在其中一个库中,我有确定应用程序版本的代码 private static Version mVersion; public static Version Version { get { if (mVersion == default(Version)) { var lcAssembly = Assembly.GetEx

我有一个带有库(DLL)的解决方案,用于两个相同的项目(一个用于WP7,另一个用于WP8)。在其中一个库中,我有确定应用程序版本的代码

    private static Version mVersion;
    public static Version Version {
        get {
            if (mVersion == default(Version)) {
                var lcAssembly = Assembly.GetExecutingAssembly();
                var parts = lcAssembly.FullName.Split(',');
                var lcVersionStr = parts[1].Split('=')[1];
                mVersion = new Version(lcVersionStr);
            }
            return mVersion;
        }
    }

问题是,由于此
Assembly.getExecutionGassembly()
代码,此代码返回库本身的版本号。如何获得主程序集版本而不是DLL?

这是WP7和WP8之间代码共享的一个重要问题

要做到这一点,最简单的方法是在运行时读取AppManfiest.xml文件,获取EntryType并使用它在入口点获取程序集实例。以下是MSBuild在AppManfiest.xml上发挥神奇作用后示例的外观:


下面是如何读取文件,获取属性,然后获取入口点类型,最后是入口点程序集:

private void主页\u已加载(对象发送方、路由目标方)
{
var appManfiest=XElement.Load(“AppManifest.xaml”);
var entryAssemblyName=appManfiest.Attribute(“EntryPointAssembly”).Value;
var entryTypeName=appManfiest.Attribute(“EntryPointType”).Value;
类型entryType=Type.GetType(entryTypeName+,“+entryAssemblyName);
Assembly entryAssembly=entryType.Assembly;
}
这是一个简单的解决方案,而且很有效。然而,这并不是最干净的体系结构解决方案。我实现此解决方案的方法是在共享库中声明一个接口,WP7和WP8都实现该接口,并将其实现注册到IoC容器中

例如,假设您需要在共享库中“DoSomething”,这是平台版本特定的。首先,您将创建一个IDOSthing接口。让我们假设你有一个国际奥委会在待命

公共接口
{
}
公共静态类IoC
{
公共静态无效登记簿(T)
{
//使用一些IoC容器
}
公共静态不获取()
{
//使用一些IoC容器
}
}  
在您的WP7应用程序中,您将实现WP7的共享接口,并在WP7启动后进行注册

public应用程序()
{
MainPage.IoC.Register(新的MainPage.DoSomethingWP7());
}
私有类DoSomethingWP7:idoothing
{
}
您还可以在WP8应用程序中对WP8执行相同的操作。然后,在共享库中,您可以要求提供相关接口,而不考虑其特定于平台版本的实现:

IDoSomething sharedInterface=IoC.Get();

我有一个更简单的答案。我认为你对你正在做的事情很了解。我只是修改了一下你的代码,这样我就可以用Telerik控件了。这就是我所做的。我在我的项目的应用程序类(App.Xaml的codebehind)中找到了您的代码。我做了一个改变,我认为会解决你的问题:

private static Version mVersion;
public static Version Version {
    get {
        if (mVersion == default(Version)) {
            var lcAssembly = typeof(App);
            var parts = lcAssembly.FullName.Split(',');
            var lcVersionStr = parts[1].Split('=')[1];
            mVersion = new Version(lcVersionStr);
        }
        return mVersion;
    }
}
现在我可以通过调用“App.version”获取版本号了。

这对我来说很有效:

var appAssembly=Application.Current.GetType().Assembly;
var appAssemblyVersion=appAssembly.GetName().Version;
我使用WP7.1和WP8.0进行了测试