Unity 2019.3.7f1 iOS打包失败:未引用System.Windows.Forms.dll却报错
System.Windows.Forms.dll引用报错问题 我经常碰到这类“明明自己没用到却报错”的情况——大概率是第三方插件、编辑器工具或者间接依赖的包悄悄引入了这个程序集。给你几个实用的排查和解决步骤:
先定位引用来源
别瞎猜,直接用全局搜索工具(比如用VS Code打开项目根目录,搜索System.Windows.Forms),看看哪个脚本、插件配置文件里出现了这个引用。另外,去Edit > Project Settings > Player > Other Settings > Configuration里检查Api Compatibility Level,如果选的是.NET Framework,改成.NET Standard 2.0试试——桌面版的.NET框架会带很多iOS不支持的程序集,切换到标准库能减少这类问题。排查第三方插件
很多编辑器专用的插件(比如批量导出工具、自定义编辑器窗口)会在代码里引用System.Windows.Forms,哪怕你只在编辑时用,Unity打包时也会检测到。试试逐个禁用最近添加的插件,打包测试,找出问题插件。找到后,把这个插件移到Editor文件夹里,Unity打包时会自动忽略编辑器目录下的代码,就不会带进去了。手动排除程序集(谨慎使用)
如果实在找不到来源,可以在Assets目录下新建一个link.xml文件,强制Unity打包时跳过这个程序集。文件内容如下:<linker> <assembly fullname="System.Windows.Forms" ignore="true" /> </linker>注意:用这个方法前要确认没有任何运行时代码依赖它,不然iOS运行时会崩溃。
清理Unity缓存
有时候缓存抽风也会导致奇怪的引用问题。关闭Unity,删除项目根目录的Library文件夹(记得先备份项目!),然后重新打开Unity让它重新生成缓存,再试打包。检查NuGet包依赖
如果你用了NuGet管理包,有些包可能偷偷依赖System.Windows.Forms。打开NuGet包管理器,查看每个包的依赖关系,把不必要的包删掉,或者换成iOS兼容的替代包。
内容的提问来源于stack exchange,提问作者Dima Hubenko

