C ++ MetroアプリとC#デスクトップアプリの両方からアクセスしたいWinRTコードの複雑なフレームワークがあるシナリオを想像してみてください。
非メトロアプリケーションにWinMDを含める方法はありますか?
C ++ MetroアプリとC#デスクトップアプリの両方からアクセスしたいWinRTコードの複雑なフレームワークがあるシナリオを想像してみてください。
非メトロアプリケーションにWinMDを含める方法はありますか?
更新:これはWindows8でのみ機能します。MicrosoftはWindows8.1でこれを無効にしました。
はいあります。参照マネージャーを介してそれらを追加しようとしたときのブロックは、VisualStudio自体の内部に実装されているように見えます。追加されると、VisualStudioは参照されたファイルを他のWinMDファイルと同じように扱います。
注:この回避策は、MICROSOFTではサポートされていません。
カスタムWinMDファイルをMetro以外のアプリケーションに追加するには、最初に.NET4.5をターゲットにしていることを確認する必要があります。これは、以前のバージョンの.NETFrameworkでは機能しません。
.NET 4.5をターゲットにしたら、プロジェクトファイルをアンロードし、編集のために開きます。<PropertyGroup>
次に、プロジェクトファイルの最後の後に次のコードを追加します。
<PropertyGroup>
<TargetPlatformVersion>8.0</TargetPlatformVersion>
</PropertyGroup>
次に、<ItemGroup>
参照を含むを見つけて、以下を追加します。
<Reference Include="{Namespace}">
<HintPath>{Path to WinMD file}</HintPath>
</Reference>
これを行っても問題が発生しないことを保証することはできませんが、CLRを使用しているフレームワークプロファイルに関係なく同じアセンブリをロードしているという事実についてMicrosoftが非常に明確にしていることを考えると、これによって問題が発生することはないと強く思います。危害。
クラスライブラリに関する注意。WinMDをMetro以外のクラスライブラリに含めてから、Metro以外のアプリケーションでそのライブラリを参照する場合。アプリケーションでWinMDファイルを参照するか、ラッパータイプを提供しないと、クラスライブラリが公開するカスタムWinRTタイプにアクセスできなくなります。