我使用的NHibernate 2.1.2.400引用了log4net 1.2.10.0. 在同一个项目中,我也使用了SIMPLE ACCOUNTING SDK,遗憾的是它仍然在使用log4net 1.2.9.0.

因此,如果我参考log4net 1.2.10.0,我可以让NHibernate工作,但simplySDK不工作.反之亦然...

我猜大多数问题都是因为log4net更改了它的组装键.我try 使用绑定重定向,但没有成功:这两个DLL没有相同的密钥.

我正在考虑重新编译NHibernate以使用log4net 1.2.9.0,但这似乎是错误的做法,我的感觉是Simply Accounting不会很快更新他们的SDK以使用log4net 1.2.10.0.

处理这件事最好的办法是什么?到底有没有可能解决呢?

推荐答案

我用这answer to a similar question块找到了解决方案

在项目中创建两个文件夹,每个文件夹对应于log4net的每个版本.将每个log4net放置.通过将文件添加到解决方案中(不带添加引用),在其相应的文件夹中创建dll.可以将"复制到输出目录"属性设置为"始终复制",以便在生成时自动将其复制到输出文件夹.

然后修改应用程序.通过添加以下内容来配置文件:

<configuration>
  <runtime>
    <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
      <dependentAssembly>
        <assemblyIdentity name="log4net" publicKeyToken="681549d62126b7b8" />
        <codeBase version="1.2.9.0" href="log4netv1.2.9.0\log4net.dll" />
      </dependentAssembly>
      <dependentAssembly>
        <assemblyIdentity name="log4net" publicKeyToken="1b44e1d426115821" />
        <codeBase version="1.2.10.0" href="log4netv1.2.10.0\log4net.dll" />
      </dependentAssembly>
      <dependentAssembly>
        <assemblyIdentity name="log4net" publicKeyToken="669e0ddf0bb1aa2a" />
        <codeBase version="1.2.11.0" href="log4net.dll" />
      </dependentAssembly>
    </assemblyBinding>
  </runtime>
</configuration>

您可以使用sn-T[assemblyName]获取程序集的公钥令牌

.net相关问答推荐

无法在Ubuntu 22.04.3上运行带有Rider 2023和DotNet-8.0的项目

在 Invoke() 中运行时,跨线程操作对表单控件无效 - .NET

双精度的 C++ 和 C# 十六进制值之间的差异

如何计算给定2个字符串的距离相似性度量?

C#.Net 中的可选返回

.NET 中的线程安全集合

编译时禁用 Dll 文化文件夹

一种消耗(所有字节)BinaryReader 的优雅方式?

将笔画应用于 WPF 中的文本块

使用 IIS Express 托管网站(临时)

属性应该与其类型同名吗?

在 JavaScript 中使用 String.Format?

有没有办法从方法返回匿名类型?

强制 XmlSerializer 将 DateTime 序列化为 'YYYY-MM-DD hh:mm:ss'

C# 中的 F# List.map 类似功能?

如何找到二维数组的大小?

在 .NET 中,null 的哈希码是否应该始终为零

ConfigurationManager.AppSettings - 如何修改和保存?

Windows 服务在哪个目录中运行?

如何从 webclient 获取状态码?