У меня есть сборка 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?
ответ
Ответ на вопрос в вашем названии - «да». Версия среды выполнения .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.
В предпоследнем абзаце - у меня есть вещи в этом дополнении, где в одной сборке есть команда класса с командой c-tor (приложение MSExcel.Application). Затем у меня есть класс сборки ConcreteCommand, c-tor ConcreteCommand (приложение MSExcel.Application): base (приложение). Я думал, что вам нужен PIA до .NET 4.0, чтобы эти два компонента могли совместно использовать определение MSExcel.Application. Я думал, что компоненты не появляются, потому что в .NET 4.0 PIA не просматривается, и поэтому две сборки могут не согласиться с тем, что MSExcel.Приложение даже i – richardstartin
продолжалось ... две сборки могут не согласиться с тем, что MSExcel.Application, я думал, что это то, что сделал PIA, - это дало общее определение типа COM всем коммуникационным сборкам. Это порочное понимание? Возможно, это связано с тем, что у меня есть (благодаря наследию deisgn) встроенные типы взаимодействия как параметры типового типа в этом дополнении, пересекающем сборки, которые даже не компилируются с .NET 4.0. – richardstartin
В .NET 4, если вы не выбрали «Вставить типы Interop», PIA будет использоваться как в .NET 3.5 (есть только один тип MSExcel.Application). Если вы скомпилировали библиотеку для целевой .NET 3.5 с ссылкой на PIA, а затем загрузили библиотеку в надстройку .NET 4 с встроенными типами взаимодействия, ссылка на PIA также будет загружена, но среда выполнения .NET 4 будет достаточно умным, чтобы понять, что типы «одинаковы». – Govert
Я не знаком с разработкой дополнений excel, но да, вы можете это сделать.
Однако использование разных версий clr в том же процессе выполняется автоматически.
Вы можете прочитать подробную информацию here.
- 1. Автономный .NET CLR Debugger для .NET 4.0?
- 2. Экземпляр Threadpool на одном и том же CLR
- 3. Запуск .NET 3.5 Код В 2.0 CLR
- 4. Использование сборки .NET 3.5 SQL 2005 CLR?
- 5. Использовать .NET 4.0 или .NET 3.5?
- 6. Устанавливает ли IIS/CLR новый экземпляр-объект для всех одновременных вызовов .NET-сервиса .NET?
- 7. есть ли профайлер CLR для .NET 4.0 вокруг?
- 8. VC++ .Net Clr/Safe and Clr/Pure
- 9. .NET CLR InternalCall
- 10. Спецификации NET CLR
- 11. .net CLR относящийся вопрос
- 12. Clr dll .net control
- 13. Как работает .NET CLR?
- 14. Позднее связывание .net CLR в VBA (Access)
- 15. Какие OpCodes были введены в CLR 4.0?
- 16. Взаимодействие языка в .NET (CLR) и Mono
- 17. Конфигурация архитектуры .NET CLR и архитектуры процессора
- 18. NET CLR Счетчики производительности отсутствуют
- 19. Как ссылаться на сборку .NET 4.0 в проектах .NET 3.5
- 20. Является ли «CLR» тем же, что и «.NET runtime»?
- 21. Обновление от/oldSyntax до/CLR - это .Net 4.0 минимальное требование?
- 22. Есть ли CLR, который работает на CLR?
- 23. Настройка использования среды CLR .NET.
- 24. .NET 4.5 RC Framework CLR - Совместимость с Windows XP
- 25. Ограничение использования памяти .Net CLR
- 26. .net clr method table structure
- 27. CLR 2.0 vs 4.0 производительность?
- 28. Действительно ли .NET CLR действительно оптимизируется для текущего процессора
- 29. Невозможно понять .NET clr & coreclr
- 30. 'UnauthorizedAccessException' - 'Global \ .net clr networking'
Что такое версия VSTO, которую вы используете? –
Я использую VSTO 4.0, который поддерживает .NET 4.0 и .NET 3.5. Я не знаю, поддерживает ли он одновременно. – richardstartin