Есть ли способ контролировать Excel, чтобы загрузить надстройки? (useLegacyV2RuntimeActivationPolicy проблема) - PullRequest
1 голос
/ 07 ноября 2011

Я попал в очень грязную ситуацию.

Сценарий: У меня есть надстройка VBA для автоматизации Excel, которая вызывает библиотеку .NET 4.0 (через ExcelDna).Эта библиотека 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 (чтобы добавить атрибут в конфигурацию) или зарегистрировать мой надстройку, так как оба требуют прав администраторапользовательские машины, и это невозможно в моей среде.

Следовательно, есть ли способ контролировать загрузку надстроек в Excel или любой другой способ заставить это работать?

Ответы [ 2 ]

2 голосов
/ 07 ноября 2011

Проще всего было бы перекомпилировать сборку смешанного режима в целевой .NET 4.

Немного сложнее было бы выяснить, как целевая версия .NET хранится в сборке смешанного режима, и соответствующим образом отредактировать двоичный файл.

0 голосов
/ 22 ноября 2011

Вот способ, которым я получил это работает.Может быть кому-нибудь пригодится.

Я написал службу WCF, которая раскрывает мои функции 4.0.Это в .NET 4.0 (4.0 CLR).

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

Следовательно, я избежал атрибута привязки и сумел сохранить свой плагин в 2.0.

...