Unity csc.rsp文件
试验版本 Unity2020.3
编译符号,就是#if UNITY_ANDROID
这个东西,在处理多平台多分支的情况下挺有用的,但是在ProjectSettings里面设置比较麻烦,不主动代码调用保存的话就要关编辑器才保存,有的非技术同事那里有时莫名其妙就变了,然后编译报错。csc.rsp
这个东西一直有点印象但是了解不深,为了省点事还是要看下。
这个东西官方文档也是语焉不详的,2020.2文档里面有的,2020.3文档就没了。不同的Unity版本也对应不同的文件。
大概是 Unity5 smcs.rsp(runtime) & gmcs.rsp(editor)
-> Unity2017 mcs.rsp
-> Unity2020 csc.rsp
2021.1文档里面又有了, 2021.2文档里面又没了, 估计这里的文档没人维护...
mcs.rsp
这个文件实际已经过时了,C#的API兼容性等级不论是.NET Standard 2.0
还是.NET 4.x
,使用的都是csc.rsp
文件
但是有一个比较坑的点,官方文档的说明:
As an example, if you include the single line -define:UNITY_DEBUG in your mcs.rsp file, the #define directive UNITY_DEBUG exists as a global #define for C# scripts, except for Editor scripts.
文档里面说,在mcs.rsp
里面设置编译符号,对编辑器代码是无效的,那么实际有没有效果?
现在已经用Assets/csc.rsp
了,修改rsp文件后,能看到重新编译dll了,查看Temp文件夹下的编译器参数也是有rsp文件的内容的,应该是有效果的
可以用更直观的可视化方法测试下
csc.rsp文件内容
-define:TEST_RSP
编辑器代码内容
[MenuItem("测试/rsp文件")]
public static void TestRsp()
{
#if TEST_RSP
EditorUtility.DisplayDialog("", "有效", "确定");
#else
EditorUtility.DisplayDialog("", "无效", "确定");
#endif
}
应该是可以看到有效的
Every time you make changes to .rsp files, you need to recompile in order for them to be effective. You can do this by updating or reimporting a single script (.js or .cs) file.
这里应该也是过时的文档,现在保存之后是会立即进行编译的。(需要unity窗口失去焦点才会编译)
如果代码直接通过File.WriteAllText()
等非Unity的API来写rsp文件,需要调用AssetDatabase.RefreshAll()
来立即执行编译。但是这样的话,csproj文件又需要收到点生成。
如果调用Unity.CodeEditor.CodeEditor.CurrentEditor.SyncAll();
就可以执行编译,生成csproj文件一条龙服务
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?