WPF/C#プログラムを作成し、WYSIWYG HTML編集にインターネットコントロールを使用しています。
通常の実行可能プログラムです。
ほとんどのコンピュータで動作しますが、一部のコンピュータでは次のエラーが表示されます。
ファイルまたはアセンブリ 'Microsoft.mshtml、Version = 7.0.3300.0、Culture = neutral、PublicKeyToken = b03f5f7f11d50a3a'またはその依存関係の1つを読み込めませんでした。厳密な名前の検証に失敗しました。
「Microsoft.mshtml.dll」ファイルはプログラムとともに配布されます。これは、exeファイルと同じフォルダーにある他のすべての必須dllと一緒です。
これはFuslogvw
からの出力です
*** Assembly Binder Log Entry (1/14/2010 @ 6:36:51 PM) ***
The operation failed.
Bind result: hr = 0x80070002. The system cannot find the file specified.
Assembly manager loaded from: c:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\mscorwks.dll
Running under executable C:\Documents and Settings\office\Desktop\Database\DATABASE.exe
--- A detailed error log follows.
=== Pre-bind state information ===
LOG: User = CAMPUSREMOTE\office
LOG: DisplayName = Microsoft.mshtml, Version=7.0.3300.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
(Fully-specified)
LOG: Appbase = file:///C:/Documents and Settings/office/Desktop/Database/
LOG: Initial PrivatePath = NULL
LOG: Dynamic Base = NULL
LOG: Cache Base = NULL
LOG: AppName = DATABASE.exe
Calling Assembly : ChabadOnCampusMainFrontEnd, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null.
===
LOG: Start binding of native image Microsoft.mshtml, Version=7.0.3300.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a.
WRN: No matching native image found.
ありがとう
プログラムと共に配布される「Microsoft.mshtml.dll」ファイルが、OfficeファイルではなくPIAファイルであることを確認します。一部のサイトでは、Officeファイルは「遅延署名」されており、PIAファイル(VSインストールでインストールされたもの)は署名付きコピーであると主張しています。私のコンピューターには、「Microsoft.mshtml.dll」ファイルの3つの異なるバージョンがあります(ファイルサイズは同じですが、内容が異なります)。
"c:\ Program Files\Microsoft Visual Studio 9.0\Visual Studio Tools for Office\PIA\Office11\Microsoft.mshtml.dll"
"c:\ Program Files\Microsoft Visual Studio 9.0\Visual Studio Tools for Office\PIA\Office12\Microsoft.mshtml.dll"
「c:\ Program Files\Microsoft.NET\Primary Interop Assemblies\Microsoft.mshtml.dll」
プロジェクトから「Microsoft.mshtml.dll」参照を削除します。 「参照の追加」、「。Net」タブを使用して、PIAファイルを選択し、「ローカルのコピー」オプションを使用します。 (それは私のために働きました...)
アタラ
PIAフォルダーのMicrosoft.mshtml.dllは署名されていません。
プロジェクトに署名した場合、「プライマリ相互運用機能アセンブリ」フォルダからバージョンを取得する必要があります。
それを行うには:
1。 Microsoft.mshtmlへの参照を削除します(プロジェクトに参照がある場合)
2。 「参照の追加」をクリックし、「拡張」ではなく「参照」を選択して「C:\ Program Files(x86)\ Microsoft.NET\Primary Interop Assemblies」(。64ビットマシンの場合)をポイントします-そのバージョンは署名されています。
3。プロパティを編集して(Microsoft.mshtmlリファレンスを選択し、F4キーを押します)、次のように設定します。
相互運用タイプを埋め込む= false
ローカルをコピー= true
4。プロジェクトを再構築する
この問題を追跡する最初のステップは、それが本当にMcirosoft.mshtml.dllであるか、依存関係の1つであるかを判断することです。これを行う最良の方法は、fuslogvwを使用してアセンブリの読み込みエラーを追跡することです。失敗しているアセンブリに関する詳細情報が提供されます。
失敗しているアセンブリを特定したら、結果を投稿してください。
[〜#〜]編集[〜#〜]
その警告メッセージは、操作が最終的に成功したことを示しています。エラーはないようです。
私も同じ問題を抱えていましたが、私の問題はTFSビルド2008を使用していました。ヒントパスは相対パスであり、正確なパスに変更する必要がありました。それ以外の場合は、ビルド中にOffice mshtml.dllを取得し続けました
<HintPath>..\..\..\..\..\..\..\..\Program Files\Microsoft.NET\Primary Interop Assemblies\Microsoft.mshtml.dll</HintPath>
<HintPath>C:\Program Files\Microsoft.NET\Primary Interop Assemblies\Microsoft.mshtml.dll</HintPath>