2012-04-30 3 views
4

У меня есть сборка C# Excel addin, которая передает встроенные типы взаимодействия по границам сборки. Когда я запускаю это в процессе Excel, настроенном на использование .NET 3.5, все в порядке. Когда я запускаю это в процессе Excel, настроенном на использование .NET 4.0, управляет только логикой приложения, определенной в самой загрузке сборки addin. Думаю, я понимаю, почему, поскольку обработка встроенных типов взаимодействия значительно изменилась в .NET 4.0, так что они не должны пересекать границы сборок. Что меня смущает, так это то, что я думал, что в .NET 4.0 несколько экземпляров CLR могут быть размещены в одном процессе Windows. Если мой addin нацелен на .NET 3.5, почему он не может быть запущен в экземпляре .NET 3.5 CLR, принадлежащем Excel? Почему Excel пытается запустить мой addin в .NET 4.0? На самом деле это не вариант для перезаписи добавления, но его нужно установить для клиента, который также использует дополнения .NET 4.0, поэтому не играть в файлы реестра или файлы Excel.exe.config. Любая помощь будет ДЕЙСТВИТЕЛЬНО оценили!Могу ли я иметь экземпляр .NET 4.0 CLR и экземпляр .NET 3.5 для CLR в том же процессе Windows?

+0

Что такое версия VSTO, которую вы используете? –

+0

Я использую VSTO 4.0, который поддерживает .NET 4.0 и .NET 3.5. Я не знаю, поддерживает ли он одновременно. – richardstartin

ответ

3

Ответ на вопрос в вашем названии - «да». Версия среды выполнения .NET 2.0 (которая является версией среды выполнения, используемой .NET Framework 2.0, 3.0 и 3.5), может работать бок о бок в процессе с .NET runtime version 4.0 (который является номером версии, который также будет используемый обновленной .NET Framework 4.5).

Однако случай VSTO не так прост, так как между Excel и VSTO существует взаимодействие, чтобы решить, что загрузить. VSTO 4 в основном включает отдельные версии расширений Office, предназначенные для .NET 3.5 (в среде исполнения .NET 2.0) и .NET 4.0. В зависимости от того, какую версию расширений вашего офиса VSTO 4 вы нацеливаете, вы используете классы (совместимые со старыми VSTO) или, в основном, интерфейсами, поэтому дизайн VSTO API и ваш код также немного отличаются, в зависимости от того, какая версия расширений офиса VSTO 4 ты используешь. Затем развертывание и загрузка вашей надстройки VSTO зависит от версии вашей версии VSTO Office, на которую вы нацеливаетесь.

Таким образом, версия среды выполнения .NET, с которой загружаются дополнительные компоненты VSTO 4, связана с тем, как вы сделали надстройку. Подробнее читайте здесь: 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-runtime. Способ COM Interop тип изменен в .NET 4.0, как правило, делать работу лучше , так как среда теперь правильно идентифицирует типы, определенные из разных сборок, как «то же» на основе GUIDs и т.д.

Чтобы сделать жизнь проще, я может также предложить Excel-DNA (который я разрабатываю). Это бесплатная и простая библиотека надстройки для создания полнофункциональных надстроек Excel в .NET без использования VSTO. Excel-DNA позволяет настроить таргетинг на любую версию Excel и любую версию 2.0.

+0

В предпоследнем абзаце - у меня есть вещи в этом дополнении, где в одной сборке есть команда класса с командой c-tor (приложение MSExcel.Application). Затем у меня есть класс сборки ConcreteCommand, c-tor ConcreteCommand (приложение MSExcel.Application): base (приложение). Я думал, что вам нужен PIA до .NET 4.0, чтобы эти два компонента могли совместно использовать определение MSExcel.Application. Я думал, что компоненты не появляются, потому что в .NET 4.0 PIA не просматривается, и поэтому две сборки могут не согласиться с тем, что MSExcel.Приложение даже i – richardstartin

+0

продолжалось ... две сборки могут не согласиться с тем, что MSExcel.Application, я думал, что это то, что сделал PIA, - это дало общее определение типа COM всем коммуникационным сборкам. Это порочное понимание? Возможно, это связано с тем, что у меня есть (благодаря наследию deisgn) встроенные типы взаимодействия как параметры типового типа в этом дополнении, пересекающем сборки, которые даже не компилируются с .NET 4.0. – richardstartin

+2

В .NET 4, если вы не выбрали «Вставить типы Interop», PIA будет использоваться как в .NET 3.5 (есть только один тип MSExcel.Application). Если вы скомпилировали библиотеку для целевой .NET 3.5 с ссылкой на PIA, а затем загрузили библиотеку в надстройку .NET 4 с встроенными типами взаимодействия, ссылка на PIA также будет загружена, но среда выполнения .NET 4 будет достаточно умным, чтобы понять, что типы «одинаковы». – Govert

0

Я не знаком с разработкой дополнений excel, но да, вы можете это сделать.
Однако использование разных версий clr в том же процессе выполняется автоматически.
Вы можете прочитать подробную информацию here.

Смежные вопросы