相关疑难解决方法(0)

在同一解决方案中引用2个不同版本的log4net

我正在使用引用log4net 1.2.10.0的NHibernate 2.1.2.400.在同一个项目中,我也使用简单的会计SDK,遗憾的是它仍然使用log4net 1.2.9.0.

所以我可以让NHibernate工作,如果我引用log4net 1.2.10.0但是simpleSDK不起作用.反之亦然......

我猜大多数问题都来自于log4net已经改变了它的汇编密钥.我尝试使用绑定重定向但没有成功:2个DLL没有相同的密钥.

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

处理这个问题的最佳方法是什么?是否有可能解决?

.net nhibernate dll log4net

77
推荐指数
2
解决办法
3万
查看次数

我如何签署一个已经内置到dll特定flute.dll的程序集

我想签署DLL的原因是因为我想将它添加到全局程序集缓存中.程序集是一个用Java编写并移植到J#的css解析引擎.我使用VS2008所以我不能制作J#项目.它没有分配给它的强名称密钥,我现在不知道如何构建它.

有人有主意吗?

asp.net dll assembly-signing visual-studio-2008

25
推荐指数
2
解决办法
2万
查看次数

加载同一程序集的多个版本

我正在使用第三方程序集,不幸的是我现在需要将他们的最新版本和以前的版本加载到我的项目中,所以在运行时我可以决定加载哪一个.我只需要一个,而不是两个.

考虑到这一点,我也依赖于组件提供的类型,因此我不能每次为我想要使用的方法/事件/接口从反射和查询加载.我已经看到一些提到通过AppDomains 处理这个,但我不知道如何继续.

该过程是针对组件的一个版本进行编码,然后在运行时(使用AppDomain)交换我想要使用的正确DLL吗?所以我只会在启动时处理这个问题?

c# assemblies appdomain multiple-versions

17
推荐指数
3
解决办法
4万
查看次数

引用两个相等的程序集,只有公钥不同

我的Visual Studio 2008项目引用了两个(外部)程序集(A + B),这两个程序集恰好引用了相同的第三个程序集(C).但是,程序集A期望程序集C具有一个公钥,该公钥与程序集B期望的公钥不同.

这是一个明显例外的例子:

无法加载文件或程序集'Newtonsoft.Json,Version = 3.5.0.0,Culture = neutral,PublicKeyToken = 9ad232b50c3e6444'或其依赖项之一.定位的程序集的清单定义与程序集引用不匹配.(HRESULT异常:0x80131040)

当然,我不能在同一目录中放置两个版本的C(只有公钥不同),因为它们的文件名是相同的.其次,我发现使用配置文件中的程序集绑定只允许版本映射,而不是公钥映射.

我还尝试将其中一个程序集C放在一个单独的目录中,并将CLR配置为在加载程序集时在该目录中进行搜索.不幸的是,我无法让它工作.

我知道重新编译其中一个外部库(其中一个恰好是开源的)可以解决这个问题,但如果不是绝对必要,我不想将这个负担添加到我的维护计划中.

所以我的问题是:如何引用程序集C的两个"版本",它们只有公钥不同?

UPDATE

我偶然发现了一个相关问题的答案,使用ilmerge提供了一个有趣的解决方案.我还没有检查过它,但对于遇到这个问题的人来说这可能是有用的.

.net assemblies reference visual-studio

7
推荐指数
2
解决办法
9182
查看次数

同一解决方案中的不同EntityFramework版本

我有一个使用EF5的旧Silverlight应用程序,无法升级到EF6.我有另一个项目使用EF6与不同的上下文,但我得到:

无法加载文件或程序集'EntityFramework,Version = 6.0.0.0,Culture = neutral,PublicKeyToken = b77a5c561934e089'或其依赖项之一.定位的程序集的清单定义与程序集引用不匹配.(HRESULT异常:0x80131040)

我假设这是因为EF5已经加载(它在主项目中,不要问我为什么),它仍然指向dll而不是EF6.我怎样才能让它发挥作用?

我补充说:

   <runtime>
    <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
      <dependentAssembly>
        <assemblyIdentity name="EntityFramework" publicKeyToken="b77a5c561934e089" culture="neutral" />
        <codeBase version="5.0.0.0" href="C:\Projects\project\2.1.1EF2\packages\EntityFramework.5.0.0\lib\net45\EntityFramework.dll"/>
        <codeBase version="6.0.0.0" href="C:\Projects\project\2.1.1EF2\packages\EntityFramework.6.1.0\lib\net45\EntityFramework.dll"/>
      </dependentAssembly>
    </assemblyBinding>
  </runtime>
Run Code Online (Sandbox Code Playgroud)

到lgos建议后我的主web.config,但现在我收到:

{"[A] System.Data.Entity.Internal.ConfigFile.EntityFrameworkSection无法强制转换为[B] System.Data.Entity.Internal.ConfigFile.EntityFrameworkSection.类型A源自'EntityFramework,Version = 5.0.0.0,Culture =中性,PublicKeyToken = b77a5c561934e089'在上下文'默认'位置'C:\ Windows\Microsoft.NET\Framework\v4.0.30319\Temporary ASP.NET Files\project211ef\_97babe28\e7ea3fa9\assembly\dl3\01275099\70646f08_d86ecf01\EntityFramework.dll'.类型B源自'EntityFramework,Version = 6.0.0.0,Culture = neutral,PublicKeyToken = b77a5c561934e089',位于'默认'位置'C:\ Projects\project\2.1.1EF2\packages\EntityFramework. 6.1.0\LIB \net45\EntityFramework.dll"."}

看起来它仍在尝试使用EF5,尽管它访问EF6实体部分.

我通过添加绑定重定向来修复此问题.在主要web.config我重定向到新版本然后在子web.config重定向到旧版本.

.net c# assemblies entity-framework

6
推荐指数
1
解决办法
3800
查看次数

从第三方依赖项解析/使用多个程序集版本

在我的项目中,我的依赖层次结构存在问题.我在我的代码中使用了一个库(WriteableBitmapExtensions),我还有另一个第三方库,它也使用了WriteableBitmapExtensions.只有其他库与特定的旧版本密切相关,我的代码需要其最新版本的功能.

这是对依赖关系的描述: 依赖树

有类似的问题和解决方案,但他们通过配置文件在运行时使用程序集绑定解决它,但我不认为这与Silverlight应用程序兼容.

在同一解决方案中引用2个不同版本的log4net

在同一文件夹中使用同一程序集的不同版本

第三方库引用不同版本的log4net.dll

如何处理多个版本的依赖项?

那么有没有办法在Silverlight上下文中解决这些不同版本的程序集依赖项?如果没有,我认为我的选择是:

1)我很可能会说服第三方库的供应商更新以使用最新版本的WriteableBitmapExtensions,但我更愿意不依赖它们使其保持最新状态.特别是因为WriteableBitmapExtensions项目仍在更新,我们经常利用他们的新功能.

2)由于WriteableBitmapExtensions是开源的,我想我可以将其源代码重新编译为新的程序集"MyWriteableBitmapExtensions"并在我的源代码中使用它.但是如果两个第三方库引用不同版本的WriteableBitmapExtensions,我将再次遇到这个问题.

我怀疑我将使用选项2,但我想知道在提交/重构之前是否有更好的方法(如其他问题中的运行时程序集绑定).谢谢!

.net silverlight assemblies multiple-versions

5
推荐指数
1
解决办法
1231
查看次数

在项目中使用相同DLL的不同版本

在我的项目中,我必须使用不同版本的AWSSDKdll,为了使这个我接受了这篇文章的帮助.并将我的一个dll添加到V-1bin文件夹中命名的文件夹中.然后像这样进行配置更改

<runtime>
    <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
        <dependentAssembly>        
        <assemblyIdentity name="AWSSDK" publicKeyToken="CD2D24CD2BACE800" culture="neutral" />
            <codeBase version="1.4.8.2" href="V-1\AWSSDK.dll" />
            <codeBase version="2.3.40.0" href="AWSSDK.dll" />
        </dependentAssembly>      
    </assemblyBinding>
</runtime>
Run Code Online (Sandbox Code Playgroud)

但我仍然得到这样的错误

错误2无法加载文件或程序集'AWSSDK,Version = 1.4.8.2,Culture = neutral,PublicKeyToken = cd2d24cd2bace800'或其依赖项之一.该系统找不到指定的文件.E:\ Live\Web.config 129

在web-Config中的这一行

 <add assembly="AWSSDK, Version=1.4.8.2,  Culture=neutral, PublicKeyToken=CD2D24CD2BACE800" />
Run Code Online (Sandbox Code Playgroud)

任何人都可以指出我做错了什么?

.net c# dll

5
推荐指数
1
解决办法
1150
查看次数