アセンブリの境界を越えて埋め込まれた相互運用機能タイプを渡す複数のアセンブリC#Excelアドインがあります。.NET 3.5を使用するように構成されたExcelプロセスでこれを実行すると、すべて問題ありません。.NET 4.0を使用するように構成されたExcelプロセスでこれを実行すると、アドインアセンブリ自体で定義されたアプリケーションロジックを持つコントロールのみが読み込まれます。.NET 4.0では埋め込み相互運用機能タイプの処理が大幅に変更されたため、アセンブリの境界を越えてはならない理由を理解していると思います。私を混乱させているのは、.NET 4.0では、CLRの複数のインスタンスを単一のWindowsプロセスでホストできると思ったことです。アドインが.NET3.5を対象としている場合、Excelが所有する.NET 3.5 CLRインスタンスで実行できないのはなぜですか?Excelが.NET4.0でアドインを実行しようとしているのはなぜですか?アドインを書き直すことは実際にはオプションではありませんが、
2 に答える
あなたのタイトルの質問に対する答えは「はい」です。.NETランタイムバージョン2.0(.NET Framework 2.0、3.0、および3.5で使用されるランタイムバージョン)は、.NETランタイムバージョン4.0(これもバージョン番号になります)とのプロセスで並行して実行できます。アップグレードされた.NETFramework4.5で使用されます)。
ただし、ExcelとVSTOランタイムの間で何をロードするかを決定するための相互作用があるため、VSTOの場合はそれほど単純ではありません。VSTO 4には、基本的に、.NET 3.5(.NET 2.0ランタイムの下)と.NET4.0を対象とするOffice拡張機能の個別のバージョンが含まれています。ターゲットとするVSTO4Office拡張機能のバージョンに応じて、クラス(古いVSTOと互換性があります)または主にインターフェイスを使用するため、VSTO 4 Office拡張機能のバージョンに応じて、VSTOAPIの設計とコードも少し異なります。あなたが使う。次に、VSTOアドインの展開と読み込みは、対象とするVSTOOffice拡張機能のバージョンによって異なります。
そのため、VSTO 4アドインがロードする.NETランタイムのバージョンは、アドインの作成方法にリンクされています。詳細はこちら: http://msdn.microsoft.com/en-us/library/bb608603( v = vs.100).aspxおよびhttp://msdn.microsoft.com/en-us/library/ee712596.aspx。
他のCOMコンポーネントがある場合は、COMコンポーネントが別のバージョンのランタイム(たとえば2.0ランタイム)でアクティブ化されており、4.0ランタイムベースのアドインからアクセスできない可能性があります。ランタイムがGUIDなどに基づいて異なるアセンブリから定義されたタイプを「同じ」として正しく識別するようになったため、.NET4.0でCOM相互運用機能のタイプが変更された方法は通常物事をより良く機能させます。
生活を楽にするために、Excel-DNA(私が開発したもの)を提案することもできます。これは、VSTOを使用せずに.NETでフル機能のExcelアドインを作成するための無料で簡単なアドインライブラリです。Excel-DNAを使用すると、任意のバージョンのExcel、および任意の2.0以降のバージョンの.NETをターゲットにできます。
私はExcelアドインの開発に精通していませんが、そうすることはできます。
ただし、同じプロセスで異なるバージョンのclrを使用すると、自動的に実行されます。
詳細はこちらでご覧いただけます。