質問

ここで何かが欠けているだけかもしれませんが、Excel Interopのコードを書いたとき、それがどのように進むかがあります。

  • Excel comライブラリへの参照を追加します。
  • vsは、PIA -Microsoft.Office.Interop.excel ....(TLBIMP Right経由?)を作成します。
  • exeとinterop(pia)dllを任意のマシン(.netを使用)にコピーすると機能しますか?

PIAを展開/登録する必要があるシナリオはありますか?それとも、ここで何か間違ったものを持っています。なぜなら、メインアセンブリにPIAを埋め込むことは大きな大きな機能のようには見えないからです。

もしあれば、私の無知を許してください。


アップデート:
そこで、私はいくつかのテストを行い、Excelを開き、セルに「Hello」を追加してファイルを保存するアプリを書きました。

Office 2003がインストールされているWin7 Dev Machineで作成しました(2003年のLibsを参照しました)。興味深いことに、埋め込まれたPIAにはアプリがありません 9kb (3 PIAの合計1.32MBまで)。埋め込まれたpiaのexeです 13kb.

第二に、 埋め込まれたPIA、アプリはオフィスのあるマシンで動作しました 2007年と2010年。それなし 埋め込まれたPIA、winxp+office2007では、PIAがEXEのディレクトリになかった場合にのみ失敗しました。

どんな方法でも、何らかの動的解像度があると思いますか?そして、なぜそれはexeディレクトリにPIAを使用せずにWin7で動作したのですが、Winxpでは失敗しました(PIAがEXEの監督になかった場合にのみ)、Win7ボックスはPIAのプロリーがグローバルに展開されていましたか?

ありがとう
ギデオン

役に立ちましたか?

解決

実際にPIAを必要とするのはそれほど一般的ではありません。パブリッククラスの1つでExcelタイプライブラリからインターロップタイプを公開する場合は、1つを使用する必要があります。これは、他のコードがクラスを使用し、同じInteropライブラリを使用しない場合に問題が発生します。 .NETのタイプは、同じアセンブリから来た場合にのみ同一です。 「アプリケーションにアプリケーションをキャストできない」などのエラーメッセージを解釈するのが難しいでしょう。 PIAは、誰もが同じタイプを使用していることを保証します。誰もが同じPIAバージョンを使用している限り、それ自体が難しい問題です。これを避けることができれば、アプリと一緒に独自のInterop DLLを展開することは問題ありません。ほとんどのシナリオでは難しくありません。

この問題は、「型等価」と呼ばれる機能を介して.NET 4.0で解決されました。これは、COMインターフェイスタイプに固有のものであり、CLRは、どのアセンブリが含まれているかに関係なく、同じ[GUID]と同じ宣言を持っている場合、それらを互換性があると見なします。これは、「embed Interopタイプ」機能(「No PIA」と同じ)を使用して利用され、コンパイラはアセンブリのメタデータに挿入されます。あなたが実際に使用するものだけ。

そのため、もうInteropライブラリを出荷する必要はなく、PIAを必要としません。そして、実際に使用しているタイプのみを支払うので、それははるかに小さいです。それはです 多く 強く推奨されています。

他のヒント

私は自分自身をあまり互換していませんでしたが、私はそれを信じています:

  • PIAが非常に大きくなる場合があります。アプリ自体が非常に小さい場合、piaはそれをwarることができます
  • No-PIAアプローチは、バージョンのバージョンのバージョンによって提供されたメンバーのみを使用する限り、バージョン化に関してより柔軟です。 実際に いれば、あなたは大丈夫です...私はPIAアプローチでは、ターゲットマシン上のものと同じバージョンのcomオブジェクトにPIAを使用する必要があると思いますが

Nopiaについて理解すべき重要なことの1つは、PIAをアセンブリに埋め込ませず、アプリケーションが使用するPIAの部分のみを埋め込むことです。これは非常に細かい粒度でこれを行います(メソッドレベルまでずっと)。結果は通常、アプリケーションの展開サイズを非常に大幅に削減します。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top