加入Plastic SCM后Newtonsoft.Json.dll出现问题

2023-10-09 18:50

本文主要是介绍加入Plastic SCM后Newtonsoft.Json.dll出现问题,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

加入Plastic SCM后Newtonsoft.Json.dll出现问题

​ 前阵子自己新开了个人项目,由于是新项目,所以想什么东西都用最新的。所以,版本控制这块我使用了Unity官方推出的Plastic SCM。
​ 一开始安装这个插件了,没啥毛病,使用起来也还算OK。但是随着项目代码越堆越多,嗯,问题出现了。

​ 由于我使用到了强大的 Newtonsoft.json库。把它加入工程后,前几天用着没啥毛病,能正常使用,但后来我在编辑器部分的代码里使用到了这个库时,引用了Newtonsoft.json命名空间,发现问题出来了,Unity一直报错:

请添加图片描述

工程里Newtonsoft.json存在了倆。这让我莫名其妙了,定位之下,发现Plastic SCM 这个包里也有个Newtonsoft.json库:

请添加图片描述

好家伙!你还给人家改了个名字,#¥%@#¥,好歹你也改下命名空间呀……你这还藏了个大惊喜!好吧,那我认了,谁叫我用你的东西咧

既然你是铁了心用的了,那我就想想怎么解决咯。由于之前我在非编辑器代码里没问题,可能是因为SCM包里的Json库本身就仅Editor模式运行,而我们写的编辑器部分代码,在引用时,便引用了SCM包里的这个库了……无语……

请添加图片描述

目前我的解决方案:

方案1:

​ 删除原有的库,拷贝Plastic SCM里的到工程,以保持两个dll的版本一致:

​ 1、删除工程里我们自己引用的Json库

​ 2、右键找到Plastic SCM里的Json库的物理路径:

请添加图片描述

请添加图片描述

3、找到它并复制它到我们工程的Plugins目录下,并修改其名字为:Newtonsoft.Json.dll

请添加图片描述

4、再进入工程,等待编译完成即可

方案2:

​ 不删除自己放到工程里的json库,保留它和Plastic SCM共存,但对代码文件的物理路径的存放位置有要求,因为要用到.asmdef。

​ 1、整理好我们编辑器部分的代码,在代码的相对根目录下,创建一个asmdef文件(程序集定义文件):

请添加图片描述

​ 例如我的项目里,我在做一个关卡编辑器,所以我把关卡编辑器的代码都整理到了一个LevelMaker/Scripts目录下,然后在LevelMaker目录下右键创建了asmdef:

请添加图片描述

关于整理代码这块,如果你前期在目录规划上做的好的话,这个应该没什么问题。至于一个asmdef文件囊括多少代码,这个看项目情况,有的项目细粒度会大点。而关于编辑器部分的代码,我一般都会喜欢按每个工具来做划分。

2、创建.asmdef文件后,Unity会把我们编辑器代码括起来,最终编译成一个独立的dll。在这里要勾选.asmdef的设置里的Override Reference选项,会出现Assembly References设置项:

请添加图片描述

3、点积+号增加一个引用,选择我们需要指定引用的dll文件,Apply之后等待编译即可

请添加图片描述

请添加图片描述

4、最后别忘了勾选下设置里的平台选项,不然在发布时编译会出现问题……

请添加图片描述

方案3:

​ 这个方法不推荐,因为我也没用过。只是想到的……

​ 把Plastic SCM单独拷出来,不受PackagesManager维护,放到Plugins目录下,我们就可以对其为所欲为了……比如把它所引用到的Json库替换成我们自己的……嗯,这个听起来和方案1有点像……事实上unity对它所引用的json库也做了修改的……

​ 我不推荐吧,毕竟PackagesManager维护挺香的,有什么版本迭代也能尽快更新到……毕竟,Plastic SCM也仅仅是个工具而已……

方案4:

​ 找到 Json 库源码,改改之后,自己编译自己的 Json 库……嗯……
Newtonsoft.Json库源码:https://github.com/JamesNK/Newtonsoft.Json

这篇关于加入Plastic SCM后Newtonsoft.Json.dll出现问题的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/174840

相关文章

线上Java OOM问题定位与解决方案超详细解析

《线上JavaOOM问题定位与解决方案超详细解析》OOM是JVM抛出的错误,表示内存分配失败,:本文主要介绍线上JavaOOM问题定位与解决方案的相关资料,文中通过代码介绍的非常详细,需要的朋... 目录一、OOM问题核心认知1.1 OOM定义与技术定位1.2 OOM常见类型及技术特征二、OOM问题定位工具

Vue3绑定props默认值问题

《Vue3绑定props默认值问题》使用Vue3的defineProps配合TypeScript的interface定义props类型,并通过withDefaults设置默认值,使组件能安全访问传入的... 目录前言步骤步骤1:使用 defineProps 定义 Props步骤2:设置默认值总结前言使用T

MyBatis-plus处理存储json数据过程

《MyBatis-plus处理存储json数据过程》文章介绍MyBatis-Plus3.4.21处理对象与集合的差异:对象可用内置Handler配合autoResultMap,集合需自定义处理器继承F... 目录1、如果是对象2、如果需要转换的是List集合总结对象和集合分两种情况处理,目前我用的MP的版本

C#下Newtonsoft.Json的具体使用

《C#下Newtonsoft.Json的具体使用》Newtonsoft.Json是一个非常流行的C#JSON序列化和反序列化库,它可以方便地将C#对象转换为JSON格式,或者将JSON数据解析为C#对... 目录安装 Newtonsoft.json基本用法1. 序列化 C# 对象为 JSON2. 反序列化

Python中Json和其他类型相互转换的实现示例

《Python中Json和其他类型相互转换的实现示例》本文介绍了在Python中使用json模块实现json数据与dict、object之间的高效转换,包括loads(),load(),dumps()... 项目中经常会用到json格式转为object对象、dict字典格式等。在此做个记录,方便后续用到该方

GSON框架下将百度天气JSON数据转JavaBean

《GSON框架下将百度天气JSON数据转JavaBean》这篇文章主要为大家详细介绍了如何在GSON框架下实现将百度天气JSON数据转JavaBean,文中的示例代码讲解详细,感兴趣的小伙伴可以了解下... 目录前言一、百度天气jsON1、请求参数2、返回参数3、属性映射二、GSON属性映射实战1、类对象映

Web服务器-Nginx-高并发问题

《Web服务器-Nginx-高并发问题》Nginx通过事件驱动、I/O多路复用和异步非阻塞技术高效处理高并发,结合动静分离和限流策略,提升性能与稳定性... 目录前言一、架构1. 原生多进程架构2. 事件驱动模型3. IO多路复用4. 异步非阻塞 I/O5. Nginx高并发配置实战二、动静分离1. 职责2

解决升级JDK报错:module java.base does not“opens java.lang.reflect“to unnamed module问题

《解决升级JDK报错:modulejava.basedoesnot“opensjava.lang.reflect“tounnamedmodule问题》SpringBoot启动错误源于Jav... 目录问题描述原因分析解决方案总结问题描述启动sprintboot时报以下错误原因分析编程异js常是由Ja

MySQL 表空却 ibd 文件过大的问题及解决方法

《MySQL表空却ibd文件过大的问题及解决方法》本文给大家介绍MySQL表空却ibd文件过大的问题及解决方法,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考... 目录一、问题背景:表空却 “吃满” 磁盘的怪事二、问题复现:一步步编程还原异常场景1. 准备测试源表与数据

解决Nginx启动报错Job for nginx.service failed because the control process exited with error code问题

《解决Nginx启动报错Jobfornginx.servicefailedbecausethecontrolprocessexitedwitherrorcode问题》Nginx启... 目录一、报错如下二、解决原因三、解决方式总结一、报错如下Job for nginx.service failed bec