我在C#中有一个使用"log4net"的项目。我必须使用这个来自C++项目的C#dll,它是主程序。因此,我在CLI/C++中实现了一个包装器项目,但我在这个log4net.dll中遇到了一个错误。
当我从CLR控制台应用程序项目调用C#dll时,我遇到了有关"log4net"的问题。我知道我的C#项目可以很好地使用log4net,因为我用C#中的控制台应用程序测试了它,做了我想做的包装器的事情。在这两个项目中(C#和CLR中的控制台应用程序(,我都将log4net.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();}
在最后一种情况下,我得到了这个错误:
系统。IO.FileLoadException:"无法加载文件或程序集"log4net,版本=1.2.15.0,区域性=中性,PublicKeyToken=669e0ddf0bb1aa2a"或其依赖项之一。"。找到的程序集的清单定义与程序集引用不匹配。(HRESULT中的异常:0x80131040('
我意识到C#控制台应用程序项目有一个app.config文件,其中指定了以下关于log4net的内容:
<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++项目,我没有这样的文件。我在另一篇文章中看到,我需要为我的C++应用程序定义一个app.config文件,并在其中包含log4net配置。然而,我不知道该怎么做。你能帮我吗?或者如果你有其他暗示。。。
最后的问题是visual studio没有为CLR控制台应用程序项目创建带有绑定重定向信息的.exe.config文件。在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>