2

Metroスタイルアプリ(MyCompany.Windowsなど)で独自の名前空間の一部としてWindowsを使用しようとすると、Windowsではなく名前空間でWinRTのものを探し始めるため、コンパイラーがオフになるようです。

たとえば、App1という名前の空のWindows Metroスタイルアプリを作成し、App1名前空間の名前をApp1.Windowsに変更してコンパイルしようとすると、エラーが発生します。

タイプまたは名前空間の名前「UI」が名前空間「App1.Windows」に存在しません(アセンブリ参照がありませんか?)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からいくつかのガイダンスがありますか(1つを見つけることができないようです)?それとも、将来のバージョンでこれを解決する計画がありますか?それとも私は何かが足りないのですか?

4

2 に答える 2

2

この問題を確認したところ、生成されたコードでglobal::を使用する必要があります。これは修正済みであり、VisualStudioの次のリリースで利用できるようになります。

于 2012-07-03T23:08:39.423 に答える
1

これは、C#言語仕様の既知の動作です。基本的に、名前空間が「using」句に含まれる場合は常に、システムは名前空間内のすべての要素を、using名前空間の一部であるかのように扱います。2つの回避策があります。タイプの内部ノードから「Windows」という名前を削除するか、「using」ディレクティブを削除します。

残念ながら、これはWinRTの問題ではありません。純粋なCLRアプリケーションでも同じことが起こる可能性があります。

于 2012-07-02T21:27:07.750 に答える