无法从CLI/C++控制台应用程序加载文件或程序集log4net



我在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>

最新更新