You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Unity移动端打包出现CS0246错误:找不到InitializeOnLoadMethod

解决Unity打包手机时InitializeOnLoadMethod找不到的错误

错误原因

[InitializeOnLoadMethod]是Unity编辑器专用的属性,属于UnityEditor命名空间——这类代码只在Unity编辑器环境下生效,打包到手机等目标平台时,Unity会自动排除Editor相关代码,导致编译时找不到这个属性。而Visual Studio里会编译所有代码(包括Editor代码),所以编辑器里运行正常,打包就报错。

另外,你手动修改VS的.NET版本是错误操作,Unity项目的.NET版本要和Unity编辑器的设置保持一致,乱改只会引发更多兼容性问题。

解决步骤

1. 将Editor专用代码移到Editor文件夹

Unity默认会把Editor文件夹下的所有代码排除在打包之外,只在编辑器中编译运行:

  • 在项目根目录新建一个名为Editor的文件夹(如果没有的话)。
  • 把包含[InitializeOnLoadMethod]的逻辑拆分出来,放到Editor文件夹下的单独脚本里。比如:
// 放在Editor文件夹下的PropertyInitializer.cs
using System.Linq;
using System.Reflection;
using UnityEditor;

public static class PropertyInitializer
{
    [InitializeOnLoadMethod]
    private static void OnInitialized()
    {
        var propTypes = Assembly.GetAssembly(typeof(Property)).GetTypes().Where(myType => myType.IsClass && !myType.IsAbstract && myType.IsSubclassOf(typeof(Property)));
        EntityBuild.PROP_NAMES = propTypes.Select(type => type.ToString()).ToList();
    }
}
  • 原来的ExecuteOnRefresh类如果没有其他运行时需要的逻辑,可以直接删除;如果有ExecuteInEditMode相关的运行时逻辑,保留不需要Editor属性的部分即可(因为继承MonoBehaviour的类属于运行时代码,不能放在Editor文件夹)。

2. 恢复.NET版本设置

  • 打开Unity编辑器,依次点击Edit > Project Settings > Player > Other Settings > Configuration。
  • 把Api Compatibility Level改回.NET Framework 4.7.1,VS里的解决方案版本会自动和Unity同步,不需要手动修改VS的设置。

3. 验证修复

  • 先清理项目:点击Unity顶部菜单Assets > Reimport All,再重启Unity和VS。
  • 尝试重新打包,应该不会再出现InitializeOnLoadMethod找不到的错误。

内容的提问来源于stack exchange,提问作者Stefan Carpeliuc

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.14 19:31:09