Трассировка не работает в .NET DLL, загруженной из VB6 EXE - PullRequest
6 голосов
/ 11 февраля 2010

У меня есть .NET DLL, которая пишет в Trace. Но кажется, что когда я вызываю мою DLL из VB6 EXE, трассировка не работает.

Я создал файл myApp.config в папке EXE с конфигурацией трассировки, но это не решает проблему.

Я также пытался создать объекты Trace в коде, но не работает:

Dim _traceSrc As TraceSource = New TraceSource("myTraceSorce")
Dim flListener As FileLogTraceListener = New FileLogTraceListener("myFileLogTraceListener")
Dim tSwitch As SourceSwitch = New SourceSwitch("mySwitch")
tSwitch.Level = _logLevel

Если я вызываю мою DLL из .NET EXE, она работает, даже если у меня нет app.config в папке EXE, потому что я устанавливаю его в коде, если конфигурация не найдена.

Ответы [ 2 ]

4 голосов
/ 15 марта 2010

Если ваше приложение VB6 называется MyApp.exe, тогда файл конфигурации должен называться MyApp.exe.config. (MyApp.config также иногда работает в зависимости от версий .NET Framework и пакетов обновления.)

Внутри этого конфигурационного файла ваши настройки должны работать.

У меня есть трассировка в моем коде, работающем с VB6 через COM, который работает нормально.

Также есть ли вероятность, что ваши привилегии отличаются при использовании кода VB6?

Наконец, если вы отлаживаете приложение VB6 в IDE VB6, вам нужно добавить настройки в VB6.exe.config в папке VB6.exe и перезапустить VB6, чтобы убедиться, что изменения замечены.

0 голосов
/ 11 марта 2010

Я думаю, что проблема в том, что VB6 использует COM для загрузки вашей управляемой DLL.

.NET-код не загружает ваш файл .config, так как он использует один обработчик 'shim' для всех COM-взаимодействий.

Лучшее, что вы можете сделать, это добавить что-то в ваш файл machine.config (но большинству людей это не нравится).

Хотя инициализация трассировки в коде должна работать. Удалите конфигурацию трассировки из управляемого .EXE и запустите ее в отладчике, чтобы проверить, что версия кода там тоже работает.

...