visual-studio - 为 Windows 8 Metro 和 Windows Phone 设置项目/解决方案的最佳方法是什么?

标签 visual-studio windows-8 windows-runtime microsoft-metro windows-phone

似乎有相当多的内容可用于将 Windows Phone 应用程序移植到 Metro,但如果您从头开始并且想要构建一个在两个平台上运行的应用程序怎么办?

据我了解,Windows Phone 开发在 Win7 上使用 VS2010,但 Metro 开发在 Win8 上需要 VS2012 RC。有没有办法同时进行两者工作? Windows Phone SDK 在 Windows 8 上的 VS2012 上运行正常吗?

是否可以在一个解决方案中同时拥有两个应用程序的项目(以及共享代码的单独项目 - 在可移植类库中?)?

最佳答案

我自己没有这样做的环境,所以这充其量只是基于互联网研究的部分答案,加上我自己的一些可能相关的经验。

根据this and other sources ,VS2012 RC 无法与当前的 Windows Phone SDK 一起使用,后者仍需要 VS2010。异常(exception)情况是(正如您所提到的)Portable Class Libraries ,它似乎能够创建与 Windows Phone 7+ 兼容的库。然而,要在实际的 WP7 应用程序中使用这些,您需要在 VS2010 中的正确 WP 项目中引用它们。因此,如果 PCL 不足以满足您的需求,并且您想要具有共享代码的实际特定目标项目,那么单独使用 VS2012 并不是一个选择。

但是,这个故事还有其他一些内容可能会让您感兴趣,并且可能会对您有所帮助。

首先是VS2012添加了solution and project backward compatibility 。 VS 解决方案可以包含项目,即使您正在使用的 VS 版本无法加载它们,这意味着您也许可以构建一个同时包含 VS2012 Metro 项目和 VS2010 WP7 项目的解决方案。无论哪种情况,项目都将无法加载(我假设),具体取决于您使用的工具版本。

这可能仍然有值(value)的原因是,您还可以创建共享代码的项目,以便将相同的代码库编译为通常不兼容的项目类型,即使它们不是可移植类库。

它的工作方式是,您可以独立于任何项目创建代码文件,或者使用某种给定类型的项目作为基线,然后将代码文件链接到其他项目和 .在这种情况下,您可能需要 VS2010 WPF 或 Silverlight 5 项目,因为这两个版本都可以打开这些项目。然后,与此项目一起创建 Metro 和 WP7 项目(一开始没有代码)。接下来,使用解决方案资源管理器的“添加现有项”对话框从基准项目中选择文件(但不要单击“添加”)。单击“添加”按钮旁边的向下箭头,您将可以选择“添加为链接”,这就是您想要的。

在两个项目中重复此过程将允许您在一个版本中开发的任何代码或 Assets 流向另一个版本。此外,如果您需要修改或调试基线文件,您可以在任一版本的 VS 中执行此操作,因为基线项目在任一版本中的工作方式相同。

这个故事的最后一部分是,您可以使用条件编译符号和 #if 预处理器指令来进一步调整任何必须根据目标不同的共享代码。然而,为了每个人的理智,应该谨慎使用。

我实际上已经在 VS2010 中以这种方式在 WP7、Silverlight 和其他项目之间共享代码,并且在需要时效果很好。

因此,您仍然需要切换 IDE 来编译和部署您的 Metro 应用程序和 WP 应用程序,但从理论上讲,我认为您可以从 VS 中挤出大量协同作用,即使是目前的形式。

今日新信息

今天在旧金山举行的 Windows Phone 峰会上,微软宣布 Visual Studio 2012 将能够编写针对 Windows 8 和 Windows Phone 7.5/8 的应用程序。这似乎会改变上面给出的信息并提供一个明显且简单的解决方案。所以您还没有这个,但将来要注意它。

关于visual-studio - 为 Windows 8 Metro 和 Windows Phone 设置项目/解决方案的最佳方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10958049/

相关文章:

c# - 为什么我的 bin 发布目录中有 System.*.* dll?

c# - 是否可以在 TableLayoutPanel 的边框上添加 PictureBox

wpf - winforms,WPF和metro之间的区别?

c# - 如何将 C++/CX 结构传递给纯 C++ 方法?

未调用 C++/CX D'tor

c# - 更改 VSPS 的类别名称

c# - 面向 .NET 2.0 的微型应用程序

xaml - XAML 中的中心弹出窗口

c# - 媒体引擎错误,在本地机器上听不到声音

node.js - 无法在 NodeJS 中使用 native Windows 库