Windows 8 “使用”一词;“窗口”;作为Metro风格应用程序中您自己名称空间的一部分

Windows 8 “使用”一词;“窗口”;作为Metro风格应用程序中您自己名称空间的一部分,windows-8,windows-runtime,Windows 8,Windows Runtime,如果您试图在Metro风格的应用程序(例如MyCompany.Windows)中使用Windows作为自己名称空间的一部分,这似乎会使编译器无法使用,因为他们开始在您的名称空间而不是Windows下查找WinRT内容。* 例如,如果创建一个名为App1的空白Windows Metro样式应用程序,并将App1命名空间重命名为App1.Windows,然后尝试编译它,则会出现错误: 命名空间“App1.Windows”中不存在类型或命名空间名称“UI”(是否缺少程序集引用?)F:\temp\App

如果您试图在Metro风格的应用程序(例如MyCompany.Windows)中使用Windows作为自己名称空间的一部分,这似乎会使编译器无法使用,因为他们开始在您的名称空间而不是Windows下查找WinRT内容。*

例如,如果创建一个名为App1的空白Windows Metro样式应用程序,并将App1命名空间重命名为App1.Windows,然后尝试编译它,则会出现错误:

命名空间“App1.Windows”中不存在类型或命名空间名称“UI”(是否缺少程序集引用?)F:\temp\App1\App1\obj\Debug\App.g.i.cs

生成的文件的顶部如下所示:

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是否提供了一些指导(似乎找不到)?或者在未来的版本中有解决这个问题的计划?还是我遗漏了什么?

这是C语言规范中的已知行为。基本上,只要名称空间出现在“using”子句中,系统就会将名称空间中的所有元素视为using名称空间的一部分。有两种解决方法:从类型的内部节点中删除名称“Windows”或删除“using”指令


不幸的是,这不是winrt问题,纯CLR应用程序也会出现同样的情况。

我研究了这个问题,我们应该在生成的代码中使用global::。我们已经解决了这个问题,并将在Visual Studio的下一个版本中提供。

这是编译器自动生成的代码。我无法控制它。那么现在不要使用Windows。将bug提交到connect.microsoft.com,也许在RTM中,您将获得修复是的,但这可能不是bug。如果在自己的名称空间中使用顶级名称空间(如System),则在任何版本的.NET中都会遇到同样的问题。只是很多人在WPF/SL/WPin数据集生成器或XSD.exe MS use global::)中使用了Windows。也许现在他们选择约定而不是配置方法谢谢。是的,我在问题中说过,它不是WinRT的新名称或特定名称,只是以前没有顶级Windows名称空间,WPF/SL/WP7库使用MyCompany.Windows样式的名称空间是很常见的。现在他们不得不改名以避免麻烦。哦,好吧,我想没有别的办法了。这很不幸。FWIW,当我们在SDK中创建Windows.winmd文件时,我不得不重写一堆内部代码,我遇到了同样的问题-处理这些代码并不有趣。