6

登録不要のCOM参照を.NETアプリに追加したいと思います。登録なしとは、ユーザーがCOMコンポーネントをシステムに登録せずにアプリを実行できることを意味します。

このトピックに関する記事(MSDNこのS / Oの質問など)をいくつか見つけましたが、具体的な手順が含まれているものはありません。これが私が試したがうまくいかなかったことです:

  1. この回答foo.dllで説明されているように、mt.exeを使用してCOM dll(たとえば)のマニフェストを生成します。
  2. 「ビルドアクション」=「コンテンツ」および「出力ディレクトリにコピー」=「常にコピー」としてアプリに追加foo.dllします。foo.dll.manifest
  3. interop.foo.dllに付属しているものへの参照を追加しfoo.dllます。
  4. このセクションでアプリマニフェストファイルを追加します。

    <dependency>
      <dependentAssembly>
        <assemblyIdentity type="win32" name="foo" />
      </dependentAssembly>
    </dependency>
    
  5. ビルドして実行します。

アプリケーションの構成が正しくないというエラーがあります。<assemblyIdentity>運が悪かったので、さまざまな値を試しました。

誰かが経験を共有できますか?ありがとう。

4

2 に答える 2

5

ハンスの答えには正しい情報がありますが、最初に読んだときはどうしたらよいかわかりませんでした。多くの異なることを試した後、私はついにそれを機能させました、そしてそれは非常に簡単です:

  1. COMクラスを開発者のマシンに登録します。
  2. アプリプロジェクトで、COM参照を追加します。
  3. 参照プロパティで、次を設定します。
    • 分離=真
    • ローカルコピー=True
    • 相互運用タイプの埋め込み=False(コメントで、これは不要であると指摘されていますが、確認していません)

これらの手順に従うinterop.foo.dllと、アプリマニフェストが自動的に生成されます。これにより、ユーザーは登録なしでCOMコンポーネントを使用できます。

反対に、開発マシンにCOMを登録しない場合でも、interop.foo.dll(COMクラスが登録されてコピーされたマシンで生成できる)への参照を追加することでアプリを開発およびビルドできますが、ビルド結果は、COMコンポーネントが登録されているマシンでのみ実行できます。これを回避する解決策があるかもしれませんが、MSBuildがCOM参照でどのように機能するかについてのより深い知識が必要であり、私は調査に時間を費やしませんでした。

つまり、ランタイム登録不要のCOMの鍵は、開発マシンにCOMクラスを登録することです。

于 2012-06-02T05:10:54.857 に答える
3

マニフェストが正しくありません。<file>要素の代わりに要素が含まれている必要があり<dependentAssembly>ます。<comClass>作成可能なコクラスを宣言する要素を使用します。

マニフェストの生成は、VSビルドシステムに組み込まれている機能です。これを機能させるには、COMコンポーネントを開発マシンに正しくインストールする必要があります。マシン上にマニフェストがなくても機能させることができない限り、reg-free COMマニフェストを試さないでください。1つではなく、 2つの問題と戦うことになります。したがって、初心者の場合は、ベンダーのインストーラーまたは展開手順を使用して、サーバーが適切にインストールされていることを確認してください。また、オブジェクトを作成してメソッドを呼び出すテストプログラムが正しく動作することを確認してください。

これを実行すると、どのマシンでも使用できる正常なCOMサーバーを使用できるので便利です。コンソールアプリケーションプロジェクトテンプレートから新しいプロジェクトを作成します。プロジェクト+参照の追加、[参照]タブ、c:\ windows \ system32\shell32.dllを選択します。追加されたShell32参照を選択し、そのIsolatedプロパティをTrueに変更します。ビルド+再構築。

プロジェクトのbin\Debugビルドディレクトリを確認し、メモ帳でapp.exe.manifestファイルを開きます。file要素とcomClass要素を観察します。これは、ファイル要素にも必要です。これで問題が解決しない場合は、COMサーバーの所有者に相談してください。所有者は、必要なマニフェストを提供できるはずです。

于 2012-06-01T23:56:36.440 に答える