一个项目引用不同版本DLL

今天研究了一下.net的web api,写了几个测试方法,运行报错,上网查找问题后发现,Newtonsoft.Json作者答复4.5版本的dll无法完成web api里ef entity序列化工作,于是升级json库到6.0后,本地调试通过,再将程序发布到测试机上,报了久违了的黄白页(自从改造成angularjs后基本没有黄白页了)

按理说已经将项目引用的DLL升级到6.0了,怎么还会报找不到4.5的错呢?经过同事提醒,可能是别的DLL还在依赖4.5,他还建议用Reflector查看引用来确认,果不其然

主程序居然引用了同名的两不同版本的DLL,但是本机能运行,为什么丢到测试机上就报错,原来在我升级dll时系统自动在web.config中加入了一下节点

  <runtime>
    <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
      <dependentAssembly>
        <assemblyIdentity name="Newtonsoft.Json" publicKeyToken="30ad4fe6b2a6aeed" culture="neutral" />
        <bindingRedirect oldVersion="0.0.0.0-6.0.0.0" newVersion="6.0.0.0" />
      </dependentAssembly>
    </assemblyBinding>
  </runtime>

用这个方法来兼容老版本的Json,这个方法适合于新版本dll兼容老版本dll的情况,如果碰到了一个项目中确实要同时引用两个不同版本的DLL时,譬如要用到老版本DLL中的数据导出方法,又要同时用到新版本DLL中的数据导入方法时,就需要修改成以下节点形式

<configuration>
    <runtime>
        <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
            <dependentAssembly>
                <assemblyIdentity name="Castle.DynamicProxy2" publicKeyToken="407dd0808d44fbdc" />
                <codeBase version="2.1.0.0" href="v2.1\Castle.DynamicProxy2.dll" />
                <codeBase version="2.2.0.0" href="v2.2\Castle.DynamicProxy2.dll" />
            </dependentAssembly>
            <dependentAssembly>
                <assemblyIdentity name="Castle.Core" publicKeyToken="407dd0808d44fbdc" />
                <codeBase version="1.1.0.0" href="v2.1\Castle.Core.dll" />
                <codeBase version="1.2.0.0" href="v2.2\Castle.Core.dll" />
            </dependentAssembly>
        </assemblyBinding>
    </runtime>
</configuration>

http://stackoverflow.com/questions/2460542/using-different-versions-of-the-same-assembly-in-the-same-folder

时间: 2024-10-16 18:54:56

一个项目引用不同版本DLL的相关文章

eclipse中一个项目引用另一个项目的方法

有时候我们一个项目会依赖于另一个项目的类库和资源,如下图项目pds-prrs依赖于pds-fw和pds-srv中的类和包 想要在pds-prrs中引入其他两个项目的方法为: 右键pds-prrs->build path->configure build path->project选项卡->.点击add,将另外两个项目加入即可 效果如下

错误 NETSDK1007 找不到“E:\Project\MyProject\MyProject.Common\MyProject.Utility.csproj”的项目信息。这可以指示缺少一个项目引用。 MyProject.Data C:\Program Files\dotnet\sdk\2.2.107\Sdks\Microsoft.NET.Sdk\targets\Microsof

因为对MyProject.Data引用的项目MyProject.Common进行了重命名为MyProject.Utility,导致这个错误 解决办法: 1.找到MyProject.Data中的E:\Project\MyProject\MyProject.Data\obj\project.assets.json文件,然后把里面的MyProject.Common替换为MyProject.Utility,保存 2.删除MyProject.Utility项目下\obj\Debug.\bin\Debug下

同一个解决方案或有依赖关系的两个项目引用同名但不同版本的DLL

问题描述 我们最近在使用Redis作Session的集中化,中间碰到了一个如下问题:我们有一些项目比较老,引用了NewtonJson的4.0.3.0版本的DLL,但是Redis提供的C#集成DLL引用的是NewtonJson的7.0.0.0版本的DLL,但我们要在老项目中引用Redis集成DLL,因而就碰到了NewtonJson的版本冲突问题. 解决方案一 我们可以通过配置web.config(或者app.config)来帮助我们解决这个问题.需要在web.config中配置如下节点: 1 <r

VS2013与MySql建立连接;您的项目引用了最新实体框架;但是,找不到数据链接所需的与版本兼容的实体框架数据库 EF6使用Mysql的技巧

因为之前都是看别人的项目,而没有自己从头到尾建立一个项目,所以这次尝试搭建时就出现了问题,主要是ASP.Net MVC项目中VS2013和MySql的连接. 第一个问题: 数据库表已建好,相应的数据库处理类已写好,然后在创建实体模型(右键Model->新建项->数据->ADO.NET实体数据模型)时没有MySQl选项,在网上搜了一圈,需要下载 mysql-for-visualstudio,网上搜的时候大家都建议下载mysql-for-visualstudio1.1.1,可是我在官网上没有

mvc项目打包成dll后被其他项目引用带来的路由问题

首先介绍一下问题产生的背景.web项目很多都需要权限系统,因此我将权限系统分离开成一个独立的项目,暂且称为Auth系统,以后有哪个项目需要权限系统,只需要引用Auth系统的dll即可.每新建一个mvc项目,都会有默认的路由,参数有name.url.defaults,默认的路由设置是在项目根目录的App_Start文件夹下的RouteConfig.cs中.这里不再细说,但它还有一个参数namespace,类型是string[].新建项目的默认的路由,里面是没有显示这个参数的,默认值是当前项目Con

您的项目引用了最新实体框架;但是,找不到数据链接所需的与版本兼容的实体框架数据库 EF6使用Mysql的技巧

转载至: http://www.cnblogs.com/Imaigne/p/4153397.html 在vs2013中使用mysql连接entityFramework经常会遇到这个问题:您的项目引用了最新实体框架:但是,找不到数据连接所需的与版本兼容的实体框架数据提供程序.请退出此向导,安装兼容提供程序,重新生成您的项目,然后再执行操作. 在vs中 使用mysql的问题多的会让人蛋疼.在这里给个妥妥的一条龙解说哈. <无耐心看过程讲解的可直接看最下面>   在创建实体模型的时候  数据源选项很

VS2010 项目引用了DLL文件,也写了Using,但是编译时提示:未能找到类型或命名空间名称 &lt;转&gt;

昨天写了一个很小的winform程序,其中引用了自己写的两个dll文件. 本来认为轻松搞定,结果一编译居然提示:未能找到类型或命名空间名称..... 于是删掉两个dll重新引用,再编译结果依旧!很是郁闷. 后来经过调查,终于发现了解决方法: 在项目上点右键-->属性-->应用程序-->目标框架-->修改为.NET Framework 4. 而我原来的设置是.NET Framework 4 Client Profile.问题就出在这里. 以下是MSDN给出的提示: If you ar

vs2010 C# 如何将类做成DLL 再从另一个项目中使用这个类

vs2010 C# 如何将类做成DLL 再从另一个项目中使用这个类 2011-10-20 12:00 486人阅读 评论(0) 收藏 举报 一.将类做成DLL 方法一: 你可以通过在命令行下用命令将以 xxx.cs的文件直接生成为DLL文件 方法二:通过visual studio2010 新建立一个项目,选择为“类库”,然后在这里可以写用户自己的类. 二.引用DLL 在项目中,打开“解决方案资源管理器”,右键“引用”-->“添加引用”-->“浏览” 然后从主机的目录中找到DLL 之后在你的项目

在 Target 中获取项目引用的所有依赖(dll/NuGet/Project)的路径

原文:在 Target 中获取项目引用的所有依赖(dll/NuGet/Project)的路径 在项目编译成 dll 之前,如何分析项目的所有依赖呢?可以在在项目的 Target 中去收集项目的依赖. 本文将说明如何在 Target 中收集项目依赖的所有 dll 的文件路径. 本文内容 编写 Target 以上 Target 的输出 Reference 的输出 ReferencePath 的输出 解读原因 编写 Target <Target Name="WalterlvDemoTarget&