9

Win8(両方のRC)でVS2012を使用して、C++で新しいMetroSplitアプリを作成しました。すべてがコンパイルされ、箱から出して動作しました。次に、変更して、生成された名前空間を自分のものに変更しました。いくつかの試行錯誤の末、警告、エラー、メッセージなしですべてをコンパイルできました。アプリ(プロジェクトテンプレートに含まれている)は正常に実行されます。

ただし、生成されたxamlファイル(ItemsPage.xamlまたはSplitPage.xaml)のいずれかを編集しようとすると、最初の行に「マークアップエラー」が表示されます。

「LayoutAwarePage」という名前は、「using:ABProduct.Client.Common」という名前空間に存在しません。

クラスの定義は次のとおりです。

namespace A{ namespace B { namespace Product { namespace Client { namespace Common

コードは正常にコンパイルされ、正常に実行されます。これは、デザインモードでのみ発生します。

更新:新しいxamlファイルを追加し、(名前空間を再度修正した後)すべてが機能しました。

追加情報が必要な場合はお知らせください。

4

2 に答える 2

6

プロジェクトによって生成されるWinMDファイルの名前は、パブリックWinRTタイプが定義されている名前空間のプレフィックスである必要があります。タイプがA.B.Product.Client.Common名前空間にある場合、WinMDファイルには次のいずれかの名前が必要です。

A.winmd
A.B.winmd
A.B.Product.winmd
A.B.Product.Client.winmd
A.B.Product.Client.Common.winmd

パブリックタイプは、名前空間と一致する最長のプレフィックスを使用してWinMDファイルでも定義する必要があります。したがって、 A.winmdABwinmdの両方がある場合は、タイプをABwinmdA.B.MyClassで定義する必要があります。

では、なぜコードは実行時に機能するのにデザイナーでは機能しないのでしょうか。パブリック型の命名規則は、Windowsランタイムコンポーネント(C ++、DLLファイル用)で定義された型にのみ適用され、アプリケーション(EXE)には適用されません。

ただし、ユーザー定義の型(を含む)をインスタンス化できるようにするにLayoutAwarePageは、デザイナーがプロジェクトのEXEをDLLとしてロードするため、命名規則に従う必要があります。

于 2012-06-12T21:33:52.147 に答える
3

同様のバグがありましたが、VSを閉じ、.suoを削除し、プロジェクトをリロードすると、すべてが正常に機能しました。

于 2012-11-13T04:48:49.800 に答える