如果您尝试在 Metro 风格的应用程序(例如 MyCompany.Windows)中将 Windows 用作您自己的命名空间的一部分,它似乎会关闭编译器,因为它们开始在您的命名空间而不是 Windows.* 下寻找 WinRT 内容。
例如,如果您创建一个名为 App1 的空白 Windows Metro 风格应用程序并将 App1 命名空间重命名为 App1.Windows 并尝试编译它,您将收到错误消息:
命名空间“App1.Windows”中不存在类型或命名空间名称“UI”(您是否缺少程序集引用?) F:\temp\App1\App1\obj\Debug\App.gics
生成文件的顶部如下所示:
namespace App1.Windows
{
#if !DISABLE_XAML_GENERATED_MAIN
public static class Program
{
[System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.Windows.UI.Xaml.Build.Tasks"," 4.0.0.0")]
[System.Diagnostics.DebuggerNonUserCodeAttribute()]
static void Main(string[] args)
{
Application.Start((p) => new App());
}
}
#endif
partial class App : Windows.UI.Xaml.Application
问题是编译器开始在 App1.Windows 下寻找 Windows.UI。
现在这已经不是什么新鲜事了,如果您将命名空间命名为 App1.System,那么您可能会在某些时候遇到类似的麻烦。问题是那里有相当多的 WPF/Silverlight/Windows Phone 代码使用 MyCompany.Windows.Xyz 命名空间,并且可能容易受到这种麻烦的影响。
Microsoft 是否有一些关于如何处理这些命名空间的指导(似乎找不到)?或者也许有一些计划在未来的版本中解决这个问题?还是我只是错过了什么?