Unity csc.rsp文件

试验版本 Unity2020.3

编译符号,就是#if UNITY_ANDROID这个东西,在处理多平台多分支的情况下挺有用的,但是在ProjectSettings里面设置比较麻烦,不主动代码调用保存的话就要关编辑器才保存,有的非技术同事那里有时莫名其妙就变了,然后编译报错。csc.rsp这个东西一直有点印象但是了解不深,为了省点事还是要看下。

Unity2020.2文档
Unity2020.3文档

这个东西官方文档也是语焉不详的,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.
这里应该也是过时的文档,现在保存之后是会立即进行编译的。

最后,还有一个坑点:在rsp文件里面修改编译符号并保存,会重新编译,但是不会重新生成csproj文件,需要手动点击重新生成

相关文章

实现Unity AssetBundle资源加载管理器 AssetBundle是实现资源...
Unity3D 使用LineRenderer绘制尾迹与虚线 1.添加LineRendere...
Unity 添加新建Lua脚本选项 最近学习Unity的XLua热更新框架的...
挂载脚本时文件名和类名的关联方式 写过Unity脚本的人应该都...
Unity单例基类的实现方式 游戏开发的过程中我们经常会将各种...
这篇文章主要介绍了Unity游戏开发中外观模式是什么意思,具有...