6

まず、使用する必要のあるサードパーティのActiveXコントロールがあります。

次に、stdoleライブラリを使用して、サードパーティがいくつかの画像を制御できるようにする必要があります。デフォルト設定でコンパイルすると、いくつかの警告が表示されます。

warning CS1762: A reference was created to embedded interop assembly 'c:\Windows\assembly\GAC\stdole\7.0.3300.0__b03f5f7f11d50a3a\stdole.dll' because of an indirect reference to that assembly created by assembly 'XXX\obj\x86\Release\Interop.ThirdPartyControl.dll'. Consider changing the 'Embed Interop Types' property on either assembly.
warning CS1762: A reference was created to embedded interop assembly 'c:\Windows\assembly\GAC\stdole\7.0.3300.0__b03f5f7f11d50a3a\stdole.dll' because of an indirect reference to that assembly created by assembly 'XXX\obj\x86\Release\AxInterop.ThirdPartyControl.dll'. Consider changing the 'Embed Interop Types' property on either assembly.

簡単です。そのアドバイスに従い、stdoleリファレンスのEmbedInteropTypesをfalseに設定します。私が今クライアントマシンに行くまで、すべてが良さそうです。突然、アプリケーションがこれをスローします。

Could not load file or assembly 'stdole, Version=7.0.3300.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a' or one of its dependencies. The system cannot find the file specified.

だから、それは起こらないと思います(stdoleの埋め込み相互運用機能を削除すると、ライブラリが完全に見つからなくなる効果があるのか​​どうかはわかりませんが)。

さて、逆に行き、EmbedInteropですべてをtrueとマークしましょう。おっと!コンパイルエラー:

Error   2   Cannot embed interop types from assembly 'XXX\obj\x86\Release\AxInterop.ThirdPartyControl.dll' because it is missing either the 'ImportedFromTypeLibAttribute' attribute or the 'PrimaryInteropAssemblyAttribute' attribute XXX\obj\x86\Release\AxInterop.ThirdPartyControl.dll XXX
Error   1   Cannot embed interop types from assembly 'XXX\obj\x86\Release\AxInterop.ThirdPartyControl.dll' because it is missing the 'GuidAttribute' attribute  XXX\obj\x86\Release\AxInterop.ThirdPartyControl.dll XXX

では、警告を取り除き、構築して実行できるものを用意する方法について何かアドバイスはありますか?

アップデート

ハンス・パッサントは、実際に問題を解決する答えをコメントとして投稿しました。彼が答えとしてそれを再投稿するならば、私はそれを受け入れます。残念ながら、ローカルコピーに設定されたDLLがプロジェクトのリリースフォルダーに適切にコピーされるという標準的な問題もありますが、ソリューションの最終リリースフォルダー(別の実行可能ファイル)に移動しません。実行可能ファイルにstdoleへの参照を追加することで、今のところそれを解決しました。おそらくそれで十分だと思います。

4

2 に答える 2

3

ハンス・パッサントによる回答:

ActiveXコンポーネントのタイプを埋め込むことはできません。ターゲットマシンにstdoleのPIAがありません。ローカルコピープロパティをtrueに設定して、生成されたstdole.dllもコピーしてみてください。

于 2013-03-29T04:29:48.663 に答える
-2

VS10で新しいプロジェクトを作成する場合、デフォルトで.NET Framework 4クライアントプロファイルを使用する場合があります。プロジェクトのプロパティ->[アプリケーション]タブページで、ターゲットフレームワークを.NETFramework4に設定できます。

于 2013-10-08T08:18:58.647 に答える