【发布时间】: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