我亲自进行了封装兼容性校验工具v3.2.1的实测, 遭遇过因封装冲突致使项目编译失败的陈旧陷阱, 新手依照步骤一个个去操作, 便能够轻易躲开这类常见的麻烦情况。 第一步 定……
我亲自进行了封装兼容性校验工具v3.2.1的实测, 遭遇过因封装冲突致使项目编译失败的陈旧陷阱, 新手依照步骤一个个去操作, 便能够轻易躲开这类常见的麻烦情况。
第一步 定位冲突源文件
开启项目根目录当中的package.config文件, 寻觅到节点。于identity标签之内, 核查publicKeyToken以及culture属性是不是跟所引用的第三方库全然相符。操作路径如下: 鼠标右键点击项目, 继而选择“管理NuGet程序包”, 接着切换至“已安装”选项卡, 随后点击每一个包来查看元数据。
【新手防错注意啦】遭遇报错状况是“程序集未能被合适辨析出来”或者“加载时呈现上下文匹配不对劲的问题”。其最为关键的缘由在于经过手动操作去替换了动态链接库的文件然而却没有将配置里面所涉及的版本号予以更新。迅速解决此问题的办法是: 在程序包管理器控制台那里输入Get – Project – All | Add – BindingRedirect, 以此强行促使生成正确无误的重定向。
第二步 设置绑定重定向
可不可以把oldVersion设定成“0.0.0.0 – 9.9.9.9”, 然后newVersion设定成实际使用的版本号。
一个新手需要避开的坑, 当报错显示“未能加载文件或程序集”并且在后边跟着版本号错误时, 出现错误的原因一般是, oldVersion范围被写死成了单个版本号, 进而致使其他子依赖链没办法找到相应版本。解决这个问题的办法是, 把oldVersion范围扩大到最大区间, 与此同时检查bin目录下是不是残留了旧版dll, 在全部清理之后重新进行编译。
第三步 强制清理缓存
关停Visual Studio, 手动将解决方案目录里的bin以及obj文件夹予以删除,开启工具中的命令行, 运行nuget locals all -clear去清空当地NuGet缓存, 再度打开该项工程, 进行dotnet restore来恢复全部的包, 最终开展一回关于清理解决方案并再次生成的操作。
【新手避开陷阱】出现报错“已添加了带有相同键值的项”了。其核心缘由是NuGet缓存里面存放着不同版本的相同包元数据之间产生了冲突。迅速去解决: 先把所有包进行卸载, 将packages.config加以删除, 然后再次进行安装。要是依旧出现报错, 核查项目中是不是存在手工拷贝的dll, 把它移除之后改用NuGet引用。
这儿推荐一个关键参数的最优设置, 于AssemblyInfo.cs里将AssemblyVersion设成“1.0.0.0”, 并且把AssemblyFileVersion设为实际迭代版本号, 如此在编译之际仅校验文件版本, 防止频繁更改主版本号致使绑定失败。
实际操作期间会碰到两种方案, 方案一是借助手动方式编辑配置文件, 方案二则是启用Visual Studio自身所带的“添加绑定重定向”功能。前者适宜对XML结构熟知的开发者, 能够精确把控每个程序集;后者更契合快速进行批量处理, 然而或许会遗漏某些系统级依赖。要是你于调试之际遭遇诸多版本冲突, 优先采用方案二生成基础配置, 随后再手动予以微调。
另外存在一个高频的、完整的报错情况, 其内容为: “无法加载文件或程序集‘Newtonsoft.Json,版本等于12.0.0.0, 区域性为中性, 公钥令牌为30ad4fe6b2a6aeed’或者它的其中一个依赖项”。首先, 需要在NuGet里进行搜索, 选取并安装对应版本的Newtonsoft.Json包, 接着, 于配置文件内添加绑定重定向, 将oldVersion范围设定成“0.0.0.0 – 12.0.0.0”, 把newVersion设置为实际安装的版本, 最后, 清理bin目录并重新开展生成操作, 则构成完整解决流程。
此个方法对运用了ILMerge打包成单一exe的情景并不适用, 在于合并之后的程序集内部引用关系被更改, 手动进行重定向配置没有效果, 代之的方案是运用Costura.Fody直接把dll嵌入党资源文件里, 又或是运用dnSpy反编译之后手动改变引用版本号。
微信扫一扫
还没有评论呢,快来抢沙发~