【问题标题】:Could not load file or assembly log4net from CLI/C++ console aplication无法从 CLI/C++ 控制台应用程序加载文件或程序集 log4net
【发布时间】:2020-07-07 17:31:10
【问题描述】:

我有一个使用“log4net”的 C# 项目。我必须使用 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();}

在最后一种情况下,我得到了这个错误:

System.IO.FileLoadException:'无法加载文件或程序集'log4net,版本=1.2.15.0,Culture=neutral,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++ 项目,我没有这样的文件。我在另一个post 中看到我需要为我的 C++ 应用程序定义一个 app.config 文件并在其中包含 log4net 配置。但是,我不知道该怎么做。你可以帮帮我吗?或者,如果您有其他提示...

【问题讨论】:

  • Version=1.2.15.0 与绑定重定向中提到的版本相同吗?
  • 不知道1.2.15.0版本是从哪里来的。因为在我的 C# 项目中,我安装了 log4net 2.0.8.0。如果我使用 C# 控制台应用程序对其进行测试,它工作正常......当我尝试从 CLR 控制台应用程序项目中执行相同操作时,问题就出现了。我那里没有带有绑定重定向的 app.config。 VS 没有创建它。
  • 项目>添加新项目>实用程序节点>“配置文件(app.config)”

标签: c# c++ c++-cli log4net clr


【解决方案1】:

最后的问题是,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>

【讨论】:

    猜你喜欢
    • 2022-09-25
    • 2014-12-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多