1

私は本当に厄介な状況に巻き込まれています。

シナリオ: .NET 4.0 ライブラリを (ExcelDna 経由で) 呼び出す Excel オートメーション VBA アドインがあります。この 4.0 ライブラリは、2.0 混合モード ライブラリのいくつかのメソッドを呼び出します。したがって、「BindAsLegacyV2Runtime」を 4.0 CLR に設定する必要がありました。これを 4.0 ライブラリに設定し、Excel がこのライブラリをインスタンス化すると、CLR はこの属性セットをロードし、すべて正常に動作します (このリンクを参照)。運用マシンでは拒否されているため、excel.exe.config を変更できません。

バッチ ファイルから Excel プロセスを開始し、アドインを次のようにロードします。

Start Excel.exe my4.0addin.xla

問題: 一部のユーザー コンピューターではこれが機能しないことがわかり、問題を調査して、Excel がパラメーターとして渡されたアドインをロードする前に、プレインストールされたアドインを最初にコンピューターにロードしていたことがわかりました。したがって、4.0 アドインが読み込まれる前に、Excel は他のアドインのために 2.0 CLR を読み込んでいました。したがって、属性の設定に失敗し、ロジックはトスになります。

Excel.exe.config を変更して (config に属性を追加するため)、アドインを登録することはできません。これは、どちらもユーザー マシンの管理者権限が必要であり、私の環境では不可能であるためです。

したがって、アドインのロードをExcelで制御する方法、またはこれを機能させる方法はありますか?

4

2 に答える 2

2

最も簡単なのは、混合モードアセンブリをターゲットの.NET4に再コンパイルすることです。

もう少し冒険的なのは、.NETターゲットバージョンが混合モードアセンブリにどのように格納されているかを理解し、バイナリを適切に編集することです。

于 2011-11-07T19:57:14.843 に答える
0

これが私がこれを機能させた方法です。誰かのために役立つかもしれません。

4.0 の機能を公開する WCF サービスを作成しました。これは .NET 4.0 (4.0 CLR) にあります。

生成されたプロキシ経由で wcf サービスを使用する 2.0 クライアントを作成しました。これは .NET 3.5 にあります。(2.0 CLR)。次に、アドインで .NET 3.5 に変換し、.NET 3.5 にもあるこのクライアントを使用しました。アドインでは、2.0 混合モード アセンブリを直接使用できるようになり、wcf サービスを介して 4.0 機能にもアクセスできます。

したがって、バインディング属性を回避し、アドインを 2.0 に保つことができました。

于 2011-11-22T14:00:47.500 に答える