我有一个写入Trace的.NET DLL。但似乎当我从VB6 EXE调用我的DLL时,跟踪无效。
我在EXE文件夹中使用跟踪配置创建了一个myApp.config
文件,但这并没有解决问题。
我也尝试在代码中创建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
如果我从.NET EXE调用我的DLL它可以工作,即使我在EXE文件夹中没有app.config,因为如果找不到配置,我会在代码中设置它。
答案 0 :(得分:4)
如果您的VB6应用程序名为MyApp.exe,则应将配置文件称为MyApp.exe.config
。 (MyApp.config
有时也会起作用,具体取决于.NET Framework版本和服务包。)
在该配置文件中,您的设置应该有效。
我在我的代码中跟踪从VB6通过COM运行正常工作。
运行VB6代码时,您的权限是否有可能不同?
最后,如果您在VB6 IDE中调试VB6应用程序,则需要将设置添加到VB6.exe文件夹中的VB6.exe.config
,然后重新启动VB6以确保注意到更改。
答案 1 :(得分:-2)
我认为问题是VB6正在使用COM来加载托管DLL。
.NET代码不会加载.config文件,因为它为所有COM Interop使用单个“shim”处理程序。
您可以做的最好的事情是在machine.config文件中添加一些内容(但大多数人不喜欢这样做)。
在代码中初始化跟踪应该可行。从托管的.EXE中删除跟踪配置,并在调试器中运行它以检查代码版本是否也在那里工作。