2015-09-25 36 views
8

私のWPFデスクトップアプリケーションでもWinRTクラスが使用されています。ファイルまたはアセンブリを読み込めませんでしたWindows.winmd '

私はこのチュートリアルhttps://software.intel.com/en-us/articles/using-winrt-apis-from-desktop-applicationsに従います。

うまく動作します。私は(私は、Microsoft InstallerおよびClickOnceのを使用して、両方を試してみました)msiファイルを生成しようとすると、

は今、私はこのエラーを取得しています:

問題は、マニフェストの生成します。ファイルまたはアセンブリ 'C:¥Program Files(x86)¥Windows Kits¥8.1¥References¥CommonConfiguration¥Neutral¥Windows.winmd'またはその依存関係の1つを読み込めませんでした。不正な形式のプログラムを読み込もうとしました。

私はすでにhereとしてClickOnceを無効にして、プロジェクトをクリーニングして、別のNETフレームワークのASP.NET一時的な削除を試してみました。

これは私のapp.configに

私のスタートアップタグである私はVS2015を使用していますが、C# は、どのように私はそれを修正し、私のMSIを生成することができますか?

PS:シンプルなWPFデスクトップアプリケーションで別のmsiを生成する際に問題はありません。

答えて

25

はい、参照として追加したWindows.winmdファイルは、プロジェクトを展開するための障害になります。あなたが使用するツールはその内容について混乱します。は.NETアセンブリのようにと見えます。しかし、そうではありません.winmdファイル形式は、古い形式のCOM形式ライブラリ形式の拡張です。 WinRTの場合、.NETのメタデータ形式を使用してTLBファイル形式の制限を超えました。

これはかなり良いアイデアでしたが、多くの.NETツールでそのままメタデータを使用できます。コンパイラやディスアセンブラのように、インフラストラクチャをすべて配置する必要はありませんでした。しかし、それは厳密に参照アセンブリの役割を果たします。コンパイラだけがその内容を使用し、決して配備すべきではありません。今すぐあなたはあまり良いアイデアが好きではありません:)

しかし、ClickOnceのデプロイメントは非常に簡単に修正できます。プロジェクト/プロパティ/パブリッシュタブ/アプリケーションファイルボタンを使用します。 Windows.winmdの[Publish Status]を[Exclude]に変更します。サンプル・プロジェクトのスクリーンショット:

enter image description here


あなたが「Microsoftインストーラ」によって何を意味するかは非常に明確ではありませんが、私はあなたがセットアッププロジェクトについて話と仮定します。慢性的な問題のためにVisual Studioから削除されましたが、それはまだギャラリーで利用できます。

これは難しい問題です。通常は、[追加]> [プロジェクト出力]コンテキストメニューの項目を使用して依存関係を把握します。それはもう動作しません、それは悲惨な非descriptのエラーメッセージが表示されて死ぬ:

ERROR: An error occurred while validating. HRESULT = '80070057'

エラーコードは、問題を絞り込む助けにはならない「無効なパラメータ」を意味します。しかし、.exeアセンブリ内のWindows.winmd参照を解決しようとすると、安全に消滅すると想定することができます。

回避策はないそれが依存関係を自動検出しますが、それらを自分で選ぶようにすることです。 "File machine on target machine"というエディタ画面で、アプリケーションフォルダを選択します。 「Primary output from ...」を右クリックし、「削除」を選択します。

アプリケーションフォルダ>追加>ファイルを右クリックし、bin \ Releaseフォルダからプロジェクトの.exeファイルを選択します。他のファイルについても同様の操作を繰り返しますが、ClickOnceアプリケーションファイルリストにあるファイルリストをガイドとして使用できます。

プロジェクトをビルドし、あなたが今得る:

完全に良性である

WARNING: Unable to find dependency 'WINDOWS' (Signature='(null)' Version='255.255.255.255') of assembly 'WindowsFormsApplication144.exe'

は、我々はそれを見つけるにしたくない、Setup.exeプログラムが正常に動作します。

+0

ありがとう@HansPassant、明日私はubuntuのラップトップを持っているように私はそれを試してみましょう。はい、「Microsoft Installer」によって、私はセットアッププロジェクトを意味しました。私は、このVisual Studio機能がプログラム「Microsoft Installer」のインストール後に存在するため、それを考えたからです。 – eeadev

+0

ClickOnceで動作しますが、 MSIファイルを生成しない、そうですか? MSIが必要な場合はどうすればいいですか? – eeadev

+0

あなたは、あなたが話していた「Microsoft Installer」からMSIを入手します。それは私がテストしたシナリオで、そこからエラーメッセージをコピー/ペーストします。 –

関連する問題