Изменение политики активации .NET 4 для Dll в коде C ++ - PullRequest
2 голосов
/ 30 августа 2011

Мы разработали модуль C # 4.0, к которому нужно обращаться из неуправляемой программы C ++ (а также из программы на Фортране). DLL загружается правильно, и метод доступен для программы на C ++, но возникает исключение при вызове метода, который указывает на код C #. Для визуализации:

[Unmanaged C++ / Fortran Projects]  
  -> controller.dll (unmanaged C++ within the C++ project)    
     -> managed_wrapper.dll (managed C++ within the C# project)
        -> C# 4.0 Project

Исключение выдается, когда контроллер пытается вызвать управляемый C ++ (используя .NET 4.0 framework).

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

<configuration>
  <startup useLegacyV2RuntimeActivationPolicy="true">
    <supportedRuntime version="v4.0"/>
  </startup>
</configuration>

Я применил его правильно для вышеупомянутого доказательства концепции, но это было на автономном консольном приложении. Поскольку неуправляемая программа C ++ огромна, а настройки не являются универсальными для каждого модуля, я не могу создать файл MyApplication.exe.config с вышеуказанной конфигурацией и назвать его day.

У меня такой вопрос: возможно ли применить эту конфигурацию к определенной DLL?

1 Ответ

2 голосов
/ 30 августа 2011

Насколько я понимаю, это невозможно.

Проблема в том, что параметр конфигурации, который необходимо применить (useLegacyV2RuntimeActivationPolicy), в основном говорит: «Для всего этого приложения, независимо от того, что запрашивает сборка, используйте вместо него CLR 4.

Если бы вы могли применить его к одной DLL, вы бы нарушили здесь цели - поскольку цель состоит в том, чтобы заставить все сборки использовать CLR 4.


Редактировать:

После дальнейшего изучения существует способ сделать это в некоторых ограниченных сценариях. Я написал об этом в своем блоге , но в основном вы можете использовать CLR Hosting API, чтобы получить некоторый доступ к настройке этого из библиотеки.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...