.Net Framework项目引用.NetStandard标准库出现版本冲突解决办法

今天在工作中出现一个引用问题,害我找问题找了很久。起因是在一个Winform项目下需要引用一个.NetStandard标准库,标准库引用了System.ComponentModel.Annotations程序集,版本是4.5.0,在Winform项目运行过程中抛出了以下异常:

“未能加载文件或程序集“System.ComponentModel.Annotations, Version=4.2.0.0, Culture=neutral,
PublicKeyToken=b03f5f7f11d50a3a”或它的某一个依赖项。找到的程序集清单定义与程序集引用不匹配。
(异常来自 HRESULT:0x80131040)”

刚出现这个错误时候还不以为然,以为直接在Winform项目的Nuget管理器中将System.ComponentModel.Annotations升级成4.5.0即可。当然结局并不完美~ 然后Google,终于在Github上招到了相关Issues

问题原因

通过Issues也了解了问题的根本,实际上.NetStandard标准库虽然是向下兼容(允许.NetFomework引入),但是也不是完全的“匹配”,有时候需要通过 “版本映射”解决。

解决办法

在Winform启动项的配置文件App.Config下的configuration -->runtime -->assemblyBinding 节点下新增如下配置

<dependentAssembly>
        <assemblyIdentity name="System.ComponentModel.Annotations" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
        <bindingRedirect oldVersion="0.0.0.0-4.2.1.0" newVersion="4.2.1.0" />
</dependentAssembly>

  

如下图:

总结

下次出现引用问题时候,先检查Nuget包是否一致,如果不能通过同步Nuget包解决的话尝试使用版本映射方法。

原文地址:https://www.cnblogs.com/hunanzp/p/10389891.html

时间: 2024-10-02 19:29:14

.Net Framework项目引用.NetStandard标准库出现版本冲突解决办法的相关文章

关于在linux下出现stdio.h文件不存在等gcc标准库不能找到的解决办法

首先说明一下我的系统配置:ubuntu 12.04     gcc 4.6.3 有几天没有使用ubuntu了,今天拿出来编程序,刚开始编译一个uboot1.1.6的代码.出现了stdio.h:没有那么个文件或目录的错误,因为我是用的arm-linux-gcc交叉编译编的,所以我刚开始怀疑是不是我的编译器有问题.后来我去编译以前写的一个网络程序 用gcc -o test test.c  然后还是出现了stdio.h:没有那么个文件或目录的错误.然后就各种google,百度.最后的解决方案是: 我的

用 #include “filename.h” 格式来引用非标准库的头文件

用 #include "filename.h" 格式来引用非标准库的头文件(编译器将 从用户的工作目录开始搜索) 1 #include <iostream> 2 3 /* run this program using the console pauser or add your own getch, system("pause") or input loop */ 4 using namespace std; 5 //参数带有默认值的函数 6 disp(

vs项目,点击.sln文件时出错:“项目所需的应用程序未安装,确保已安装项目类型(.csproj)的应用程序”解决办法

关键词:VS2005程序用VS2008打开 程序无法使用 项目所需的应用程序未安装,确保已安装项目类型(.csproj)的应用程序 在要打开的项目sln文件上右键,打开方式,不要用Micrisoft visual studio version selector,用D:\Program Files\Microsoft Visual Studio 9.0\Common7\IDE\devenv.exe打开. vs项目,点击.sln文件时出错:"项目所需的应用程序未安装,确保已安装项目类型(.cspro

linux上项目报错找不到主机名解决办法

项目报错找不到主机名解决办法 有时候我们的项目在本地运行没问题,但部署到linux服务器上就出错了. 报错:java.net.UnknownHostException: 主机名: 主机名  找不到主机名. 解决方法: 修改服务器上/etc/hosts文件 127.0.0.1  localhost  localhost.localdomain 添加所需的主机名称 或者 127.0.0.1  localhost  localhost.localdomain 127.0.0.1  添加所需的主机名称

dlopen Linux 动态库失败原因与解决办法总结

1.dlopen 动态库失败原因,我碰到主要是以下几点(碰到新问题之后再完善,先打个点) ①动态库位置没有放对地方,dlopen 时候找不到你想操作的动态库 解决办法:放到指定目录. ②头文件没有包全,有不能识别的函数或者标识符 解决办法:加一条打印信息,程序运行到这里,会输出不能识别标识符. if((handle = dlopen(myso, RTLD_NOW)) == NULL) { printf("dlopen - %sn", dlerror()); exit(-1); } 或者

项目适配iOS9遇到的一些问题及解决办法

1.网络请求报错.升级Xcode 7.0发现网络访问失败.输出错误信息 The resource could not be loaded because the App Transport Security policy requires the use of a secure connection. 原因:iOS9引入了新特性App Transport Security (ATS).详情:App Transport Security (ATS)新特性要求App内访问的网络必须使用HTTPS协议

项目适配iOS9遇到的一些问题及解决办法(更新两个小问题)

本文转载至 http://www.bubuko.com/infodetail-1110714.html http://www.jianshu.com/p/631bd7f12a38 1.网络请求报错.升级Xcode 7.0发现网络访问失败.输出错误信息 The resource could not be loaded because the App Transport Security policy requires the use of a secure connection. 原因:iOS9引

缺少libstdc++.so.6库的原因及解决办法

问题原因:系统是64bit,该库是32bit的,在64bit系统上安装32bit库 解决办法:1. 查看哪个安装包包含该库:yum provides libstdc++.so.6   yum install libstdc++-4.8.5-11.el7.i686 [[email protected] cn_telecom_test_tool]# rpm -qa | grep libstdc   libstdc++-4.8.5-4.el7.x86_64 2. 安装 libstdc++-4.4.7-

【解决】缺少libstdc++.so.6库的原因及解决办法

问题原因: 系统是64bit,该库是32bit的,在64bit系统上安装32bit库 解决办法: 1. 查看哪个安装包包含该库:yum provides libstdc++.so.6 libstdc++-4.4.7-4.el6.i686 2. 安装 libstdc++-4.4.7-4.el6.i686 yum install  libstdc++-4.4.7-4.el6.i686 报错: --> Finished Dependency Resolution Error: Protected mu