.net 使用并排AutoMapper版本的问题

.net 使用并排AutoMapper版本的问题,.net,automapper,app-config,.net-assembly,.net,Automapper,App Config,.net Assembly,我有一个应用程序,我想在其中使用最新版本的AutoMapper。我还使用了第三方组件,它本身使用AutoMapper 3.1.1.0 如果我允许第三方程序集使用最新版本,它将尝试调用一个不再存在的方法,我得到以下结果: System.TypeInitializationException: 'The type initializer for 'Sif.Framework.Service.Mapper.MapperFactory' threw an exception.' Inner Except

我有一个应用程序,我想在其中使用最新版本的AutoMapper。我还使用了第三方组件,它本身使用AutoMapper 3.1.1.0

如果我允许第三方程序集使用最新版本,它将尝试调用一个不再存在的方法,我得到以下结果:

System.TypeInitializationException: 'The type initializer for 'Sif.Framework.Service.Mapper.MapperFactory' threw an exception.'
Inner Exception
MissingMethodException: Method not found: 'AutoMapper.IMappingExpression`2<!!0,!!1> AutoMapper.Mapper.CreateMap()'.
System.TypeInitializationException:'Sif.Framework.Service.Mapper.MapperFactory'的类型初始值设定项引发异常
内部异常
MissingMethodException:找不到方法:“AutoMapper.IMappingExpression`2 AutoMapper.Mapper.CreateMap()”。
因此,我将3.1.1.0 DLL放在一个子文件夹中,并像这样引用它们。我将它们放在一个奇怪的目录中,以确保codeBase指令实际工作,而不是通过其他方式加载程序集

  <runtime>
    <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
      <dependentAssembly>
        <assemblyIdentity name="AutoMapper" publicKeyToken="be96cd2c38ef1005" culture="neutral" />
        <codeBase version="3.1.1.0" href="C:\OldAutomapper\AutoMapper.dll" />
      </dependentAssembly>
      <dependentAssembly>
        <assemblyIdentity name="AutoMapper.Net4" publicKeyToken="be96cd2c38ef1005" culture="neutral" />
        <codeBase version="3.1.1.0" href="C:\OldAutomapper\AutoMapper.Net4.dll" />
      </dependentAssembly>
    </assemblyBinding>
  </runtime>

如果我从应用程序中删除对6.xDLL的引用,并注释掉使用它的代码,这就行了。第三方DLL拾取引用并正常运行

如果我随后将6.xDLL添加回项目,它仍然可以工作。嘿,我们有进展了

但是,当我取消注释使用AutoMapper的代码时,它会再次抛出TypeInitializationException。请注意,在我的代码中简单地引用AutoMapper就足以做到这一点,所有这些都不必在运行时执行。我可以注释掉除Profile类之外的所有内容,从不实际加载Profile,它仍然会破坏第三方程序集

你知道这是怎么回事吗


编辑:我意识到我应该提到的是,我知道AutoMapper的NuGet安装在app.config中添加了一个
bindingRedirect
,这使得所有版本的AutoMapper重定向到新安装的版本。安装后,我将从配置文件中删除此重定向。

回答我自己的问题。问题在于,从.NET 4.5.1开始,仅针对传统桌面应用程序:

自动的 传统桌面应用程序默认启用绑定重定向 目标是.NET Framework 4.5.1及更高版本。装订 在以下情况下,会将重定向添加到输出配置(app.config)文件: 该应用程序已编译并重写可能会发生错误的程序集统一 否则就会发生。未修改源app.config文件

哎呀,谢谢你们。如果您要以静默方式修改我的配置文件,您至少可以修改源文件,这样我就可以知道它正在发生


一旦我关闭了自动绑定重定向,它就工作了。

回答了我自己的问题。问题在于,从.NET 4.5.1开始,仅针对传统桌面应用程序:

自动的 传统桌面应用程序默认启用绑定重定向 目标是.NET Framework 4.5.1及更高版本。装订 在以下情况下,会将重定向添加到输出配置(app.config)文件: 该应用程序已编译并重写可能会发生错误的程序集统一 否则就会发生。未修改源app.config文件

哎呀,谢谢你们。如果您要以静默方式修改我的配置文件,您至少可以修改源文件,这样我就可以知道它正在发生

一旦我关闭了自动绑定重定向,它就工作了