2

アセンブリを生成するのではなく、COMタイプライブラリをC#コードにインポート/変換するツールはありますか?TLBIMPツールとTypeLibaryConverterクラスは、アセンブリのみを生成します。

生成されたInteropアセンブリに対してReflectorを実行し、分解されたソースをコピーして貼り付けることで、C#定義をリッピングすることに成功しましたComImportが、通常、コンパイルする前にかなりの手動パッチを適用する必要があります。

望ましい目標は、衛星相互運用DLLを含まない単一のEXEであるため、おそらく答えは、ILMergeを使用して相互運用DLLをEXEに効果的に埋め込むことです。

私は過去にそのようなツールに出くわしたと確信していました-しかし多分それはそれを夢見ていました:-)

4

3 に答える 3

4

役に立つかどうかはわかりませんが、管理されたバージョンの Tlbimp.exe のソース コードがCodePlex でリリースされています。VS2010 は間違いなくあなたの問題を解決します。

于 2009-01-19T19:48:07.083 に答える
2

これは今日は役に立ちませんが、C# の次のバージョンで機能が追加される予定です。読むプレゼンテーションに応じて、NoPia または Type Embedding と呼ばれます。この機能は基本的に、PIA アセンブリを参照元のプロジェクトにリンクします。最終的な結果は、interop/PIA DLL を展開する必要のない単一の EXE です。

この件に関する Misha の投稿: http://blogs.msdn.com/mshneer/archive/2008/10/28/type-embedding-support-in-c.aspx

ただし、短期的には、ILMerge またはリフレクター + コピー コードを使用する必要がある場合があります。

于 2009-01-19T17:10:06.717 に答える
2

私が最初に思ったように、最善の解決策はILMergeです。埋め込む COM API の部分を選択することはできませんが、十分に機能します。

これは、私が使用しているビルド後のイベント コマンド ラインです。これは、再利用するのに十分簡単なはずです。

set MERGEFILES=Interop.Foo.dll Interop.Bar.dll

if "$(ConfigurationName)" == "Release" (
   ren "$(TargetFileName)" "_$(TargetFileName)"
   "$(ProgramFiles)\Microsoft\ILMerge\ILMerge.exe" /out:"$(TargetFileName)" "_$(TargetFileName)" %MERGEFILES%

   del "_$(TargetFileName)"
   del %MERGEFILES%
)
于 2009-02-03T10:24:09.463 に答える