Не удалось загрузить файл или журнал сборки 4net из консоли приложения CLI / C ++ - PullRequest
0 голосов
/ 27 марта 2020

У меня есть проект в C#, который использует 'log 4net'. Я должен использовать эту C# DLL из C ++ проекта, который является основной программой. Итак, я реализовал проект оболочки в CLI / C ++, но я получаю сообщение об ошибке с этим журналом 4net .dll.

У меня проблема с 'log 4net', когда я вызываю C# dll из проекта консольного приложения CLR. Я знаю, что мой C# проект отлично работает с журналом 4net, потому что я протестировал его с консольным приложением в C#, делая то же самое, что я хочу сделать в качестве оболочки. В обоих проектах (приложение консоли в C# и CLR) я скопировал журнал 4net .dll в папку процесса .exe.

В качестве тестового примера, чтобы понять, что я имею в виду ... Для C# консольное приложение У меня есть этот тестовый код:

static void Main(string[] args)
    {
        GeneratorStatus genStatus = new GeneratorStatus();
        string log = genStatus.GetGenStatusMessage();
    }

Для консольного приложения CLI / C ++ у меня есть этот код:

int main(array<System::String ^> ^args){
GeneratorStatus^ genStatus = gcnew GeneratorStatus();
String^ log = genStatus->GetGenStatusMessage();}

В этом последнем случае я получаю эту ошибку:

System.IO.FileLoadException: журнал «Не удалось загрузить файл или сборку» 4net, версия = 1.2.15.0, культура = нейтральная, PublicKeyToken = 669e0ddf0bb1aa2a 'или одна из ее зависимостей. Определение манифеста обнаруженной сборки не соответствует ссылке на сборку. (Исключение из HRESULT: 0x80131040) '

Я понял, что в проекте консольного приложения C# есть файл App.config, в котором указано следующее о log 4net:

<dependentAssembly>
    <assemblyIdentity name="log4net" publicKeyToken="669e0ddf0bb1aa2a" culture="neutral"/>
    <bindingRedirect oldVersion="0.0.0.0-2.0.8.0" newVersion="2.0.8.0"/>
</dependentAssembly>

У меня нет такого файла для проекта CLI / C ++. В другом посте я видел, что мне нужно определить файл app.config для моего приложения C ++ и включить в него конфигурацию log 4net. Однако я не знаю, как это сделать. Не могли бы вы помочь мне? Или если у вас есть другие советы ...

1 Ответ

0 голосов
/ 28 марта 2020

В конце проблема заключалась в том, что Visual Studio не создает файл .exe.config для проекта консольного приложения CLR с информацией о перенаправлении привязки. у которого было консольное приложение в C#.

Итак, я создал ConsoleApplication.exe.config как тот, который VS создает для консольного проекта C#:

<?xml version="1.0" encoding="utf-8"?>
<configuration>
 <runtime>
  <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
   <dependentAssembly>
    <assemblyIdentity name="log4net" publicKeyToken="669e0ddf0bb1aa2a" culture="neutral"/>
    <bindingRedirect oldVersion="0.0.0.0-2.0.8.0" newVersion="2.0.8.0"/>
   </dependentAssembly>
  </assemblyBinding>
 </runtime>
<startup><supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.6.2"/></startup></configuration>
...