【发布时间】:2017-05-07 04:32:24
【问题描述】:
所以我正在编写一个 C# 库,它将通过 COM 进行交互。该库使用 log4net 进行日志记录。现在这个 COM 库可能必须根据主机应用程序的安装版本加载不同版本的 log4net,所以我试图让它加载它安装目录中可用的任何版本的 log4net。现在我熟悉使用 BindingRedirects,但我以前从未在库中使用过它们,所以不知道如何使用。在 StackOverflow 上查找“相关”问题我遇到了控制程序集加载的解决方案。这是我尝试过的一个示例。
Assembly assembly = null;
AppDomain.CurrentDomain.AssemblyResolve += (sender, args) =>
{
string name = new AssemblyName(args.Name).Name;
if (name.Equals("log4net"))
{
return assembly;
}
return null;
};
assembly = Assembly.LoadFrom("log4net.dll");
并编辑了 csproj,因此没有引用特定版本。
<Reference Include="log4net">
<HintPath>..\packages\log4net.1.2.10\lib\2.0\log4net.dll</HintPath>
<SpecificVersion>False</SpecificVersion>
</Reference>
但不管我做什么(我已经尝试了上面代码的几种变体)我都会得到这个异常:
无法加载文件或程序集'log4net,版本=1.2.10.0, Culture=neutral, PublicKeyToken=1b44e1d426115821' 或其之一 依赖关系。定位程序集的清单定义不 匹配程序集引用。 (HRESULT 异常:0x80131040)
我有一种感觉,我在这里尝试完成的事情是可能的,但我只是走错了路。如果我能以这种方式应用 BindingRedirects,我也会选择一种使用专门为库量身定制的 app.config 文件的方法。我将不胜感激任何人对此提出的任何建议,无论好坏。
【问题讨论】: