gpt4 book ai didi

windows-phone-7 - 获取 "main"程序集版本号

转载 作者:行者123 更新时间:2023-12-02 00:13:46 24 4
gpt4 key购买 nike

我有一个包含库 (DLL) 的解决方案,这些库用于 2 个相同的项目(一个用于 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.GetExecutingAssembly() 代码,这段代码返回了库本身的版本号。如何获得 MAIN 程序集版本而不是 DLL?

最佳答案

这是一个关于 WP7 和 WP8 之间代码共享的好问题。

最简单的方法是在运行时读取 AppManfiest.xml 文件,获取 EntryType 并使用它来获取入口点 Assembly 实例。下面是一个示例 AppManfiest.xml 在 MSBuild 对其施展魔法后的样子:

<Deployment xmlns="http://schemas.microsoft.com/client/2007/deployment" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" EntryPointAssembly="myAssembly" EntryPointType="myNamespace.App" RuntimeVersion="4.7.50308.0">
<Deployment.Parts>
<AssemblyPart x:Name="myAssembly" Source="myAssembly.dll" />
</Deployment.Parts>
</Deployment>

下面是读取文件、获取属性、然后获取入口点类型和最后入口点程序集的方式:

private void MainPage_Loaded(object sender, RoutedEventArgs e)
{
var appManfiest = XElement.Load("AppManifest.xaml");
var entryAssemblyName = appManfiest.Attribute("EntryPointAssembly").Value;
var entryTypeName = appManfiest.Attribute("EntryPointType").Value;
Type entryType = Type.GetType(entryTypeName + "," + entryAssemblyName);
Assembly entryAssembly = entryType.Assembly;
}

这是一个简单的解决方案,而且行之有效。然而,这并不是最干净的架构解决方案。我实现此解决方案的方式是在共享库中声明一个接口(interface),WP7 和 WP8 都实现该接口(interface)并使用 IoC 容器注册它们的实现。

例如,假设您需要在平台版本特定的共享库中“做某事”。首先,您将创建一个 IDoSomething 接口(interface)。我们还假设您有一个 IoC 待命。

public interface IDoSomething
{

}

public static class IoC
{
public static void Register<T>(T t)
{
// use some IoC container
}

public static T Get<T>()
{
// use some IoC container
}
}

在您的 WP7 应用程序中,您将实现 WP7 的共享接口(interface),并在 WP7 启动后注册它。

public App()
{
MainPage.IoC.Register(new MainPage.DoSomethingWP7());
}

private class DoSomethingWP7 : IDoSomething
{
}

您还将在 WP8 应用程序中对 WP8 执行相同的操作。然后在您的共享库中,您可以请求相关接口(interface),而不管其平台版本特定实现如何:

IDoSomething sharedInterface = IoC.Get<IDoSomething>();

关于windows-phone-7 - 获取 "main"程序集版本号,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14224032/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com