unity编译webgl的时候提示错误,找不到netstandard 2.0.0.0

596 阅读3分钟

一台新机器,安装了win10系统,主要作为Jenkins的Slave工作节点,编译Unity相关项目。结果悲剧的是,频频提示找不到netstandard 2.0.0.0

错误信息

错误信息如下,最主要的信息已经标红

***Player size statistics***
Level 0 'Assets/Scenes/InIt.unity' uses 0.5 MB compressed / 1.6 MB uncompressed.
Level 1 'Assets/Scenes/Loading.unity' uses 0.9 MB compressed / 1.4 MB uncompressed.
Level 2 'Assets/Scenes/OnlineScene/Brand_A1.unity' uses 27.8 MB compressed / 55.2 MB uncompressed.
Total compressed size 29.2 MB. Total uncompressed size 58.2 MB.
DisplayProgressbar: Scripting
DisplayProgressbar: Building Player
Invoking UnityLinker with arguments: -out=E:/jenkins/workspace/Unity-AssetBundle-Package/TestUnity/OnlineWeb_0312/Temp/StagingArea/Data/Managed/tempStrip -x=C:/Users/win10/AppData/Local/Temp/tmp1c329766.tmp -x=E:/jenkins/workspace/Unity-AssetBundle-Package/TestUnity/OnlineWeb_0312/Temp/StagingArea/Data/Managed/TypesInScenes.xml -d=E:/jenkins/workspace/Unity-AssetBundle-Package/TestUnity/OnlineWeb_0312/Temp/StagingArea/Data/Managed --include-unity-root-assembly=E:/jenkins/workspace/Unity-AssetBundle-Package/TestUnity/OnlineWeb_0312/Temp/StagingArea/Data/Managed/Assembly-CSharp.dll --include-unity-root-assembly=E:/jenkins/workspace/Unity-AssetBundle-Package/TestUnity/OnlineWeb_0312/Temp/StagingArea/Data/Managed/Unity.RenderPipelines.Core.Runtime.dll --include-unity-root-assembly=E:/jenkins/workspace/Unity-AssetBundle-Package/TestUnity/OnlineWeb_0312/Temp/StagingArea/Data/Managed/UnityEngine.UI.dll --include-unity-root-assembly=E:/jenkins/workspace/Unity-AssetBundle-Package/TestUnity/OnlineWeb_0312/Temp/StagingArea/Data/Managed/Unity.Postprocessing.Runtime.dll --dotnetruntime=il2cpp --dotnetprofile=unityaot --use-editor-options --include-directory=E:/jenkins/workspace/Unity-AssetBundle-Package/TestUnity/OnlineWeb_0312/Temp/StagingArea/Data/Managed --rule-set=Conservative --editor-data-file=E:/jenkins/workspace/Unity-AssetBundle-Package/TestUnity/OnlineWeb_0312/Temp/StagingArea/Data/Managed/EditorToUnityLinkerData.json --platform=WebGL --engine-modules-asset-file="C:/Program Files/Unity/Editor/Data/PlaybackEngines/WebGLSupport/Whitelists/../modules.asset"
C:\Program Files\Unity\Editor\Data\il2cpp\build/deploy/net471/UnityLinker.exe exited after 3010 ms.
Failed running C:\Program Files\Unity\Editor\Data\il2cpp\build/deploy/net471/UnityLinker.exe -out=E:/jenkins/workspace/Unity-AssetBundle-Package/TestUnity/OnlineWeb_0312/Temp/StagingArea/Data/Managed/tempStrip -x=C:/Users/win10/AppData/Local/Temp/tmp1c329766.tmp -x=E:/jenkins/workspace/Unity-AssetBundle-Package/TestUnity/OnlineWeb_0312/Temp/StagingArea/Data/Managed/TypesInScenes.xml -d=E:/jenkins/workspace/Unity-AssetBundle-Package/TestUnity/OnlineWeb_0312/Temp/StagingArea/Data/Managed --include-unity-root-assembly=E:/jenkins/workspace/Unity-AssetBundle-Package/TestUnity/OnlineWeb_0312/Temp/StagingArea/Data/Managed/Assembly-CSharp.dll --include-unity-root-assembly=E:/jenkins/workspace/Unity-AssetBundle-Package/TestUnity/OnlineWeb_0312/Temp/StagingArea/Data/Managed/Unity.RenderPipelines.Core.Runtime.dll --include-unity-root-assembly=E:/jenkins/workspace/Unity-AssetBundle-Package/TestUnity/OnlineWeb_0312/Temp/StagingArea/Data/Managed/UnityEngine.UI.dll --include-unity-root-assembly=E:/jenkins/workspace/Unity-AssetBundle-Package/TestUnity/OnlineWeb_0312/Temp/StagingArea/Data/Managed/Unity.Postprocessing.Runtime.dll --dotnetruntime=il2cpp --dotnetprofile=unityaot --use-editor-options --include-directory=E:/jenkins/workspace/Unity-AssetBundle-Package/TestUnity/OnlineWeb_0312/Temp/StagingArea/Data/Managed --rule-set=Conservative --editor-data-file=E:/jenkins/workspace/Unity-AssetBundle-Package/TestUnity/OnlineWeb_0312/Temp/StagingArea/Data/Managed/EditorToUnityLinkerData.json --platform=WebGL --engine-modules-asset-file="C:/Program Files/Unity/Editor/Data/PlaybackEngines/WebGLSupport/Whitelists/../modules.asset"
#--------- 错误重要提示信息,这块是我标注的信息--------------
# 以下乱码产生字 重定向的日志文件,在unity中不是乱码,大致意思是找不到 netstandard.dll 2.00
stdout:
stderr:

δ��������쳣:  System.IO.FileNotFoundException: δ�ܼ����ļ�����򼯡�netstandard, Version=2.0.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51��������ijһ�������ϵͳ�Ҳ���ָ�����ļ���
   �� Unity.Linker.UnityDriver..ctor(String[] args)
   �� Unity.Linker.Program.Main(String[] args)

UnityEngine.DebugLogHandler:Internal_Log(LogType, LogOption, String, Object)
UnityEngine.DebugLogHandler:LogFormat(LogType, Object, String, Object[])
UnityEngine.Logger:Log(LogType, Object)
UnityEngine.Debug:LogError(Object)
UnityEditorInternal.Runner:RunProgram(Program, String, String, String, CompilerOutputParserBase)
UnityEditorInternal.Runner:RunManagedProgram(String, String, String, CompilerOutputParserBase, Action`1)
UnityEditorInternal.AssemblyStripper:RunAssemblyLinker(IEnumerable`1, String&, String&, String, String)
UnityEditorInternal.AssemblyStripper:StripAssembliesTo(String, String&, String&, IEnumerable`1, UnityLinkerRunInformation)
UnityEditorInternal.AssemblyStripper:RunAssemblyStripper(UnityLinkerRunInformation)
UnityEditorInternal.AssemblyStripper:StripAssemblies(String, BaseUnityLinkerPlatformProvider, IIl2CppPlatformProvider, RuntimeClassRegistry, ManagedStrippingLevel)
UnityEditorInternal.IL2CPPBuilder:Run()
UnityEditorInternal.IL2CPPUtils:RunIl2Cpp(String, IIl2CppPlatformProvider, Action`1, RuntimeClassRegistry)
UnityEditor.WebGL.WebGlBuildPostprocessor:CompileBuild(BuildPostProcessArgs) (at /Users/builduser/buildslave/unity/build/PlatformDependent/WebGL/Extensions/Unity.WebGL.extensions/BuildPostprocessor.cs:387)
UnityEditor.WebGL.WebGlBuildPostprocessor:PostProcess(BuildPostProcessArgs) (at /Users/builduser/buildslave/unity/build/PlatformDependent/WebGL/Extensions/Unity.WebGL.extensions/BuildPostprocessor.cs:929)
UnityEditor.Modules.DefaultBuildPostprocessor:PostProcess(BuildPostProcessArgs, BuildProperties&)
UnityEditor.PostprocessBuildPlayer:Postprocess(BuildTargetGroup, BuildTarget, String, String, String, Int32, Int32, BuildOptions, RuntimeClassRegistry, BuildReport)
UnityEditor.BuildPipeline:BuildPlayerInternalNoCheck(String[], String, String, BuildTargetGroup, BuildTarget, BuildOptions, Boolean)
UnityEditor.BuildPipeline:BuildPlayerInternal(String[], String, String, BuildTargetGroup, BuildTarget, BuildOptions)
UnityEditor.BuildPipeline:BuildPlayer(String[], String, String, BuildTargetGroup, BuildTarget, BuildOptions)
UnityEditor.BuildPipeline:BuildPlayer(BuildPlayerOptions)
UnityEditor.BuildPipeline:BuildPlayer(String[], String, BuildTarget, BuildOptions)
ProjectBuild:BuildForWebGL() (at Assets\Editor\ProjectBuild.cs:63)
 
(Filename: /Users/builduser/buildslave/unity/build/PlatformDependent/WebGL/Extensions/Unity.WebGL.extensions/BuildPostprocessor.cs Line: 387)

Exception: C:\Program Files\Unity\Editor\Data\il2cpp\build/deploy/net471/UnityLinker.exe did not run properly!

排查问题

搜索国内相关文章,未发现有相关错误,55555,难道是我第一次遇到这坑?

跳到国外,发现有几个长篇大论的文章,只是建议向unity提交错误信息,有人所安装.net core 2.

因为unity编译一次非常慢,本次尝试多次编译,耗费了不少时间。

我安装了.net core 2.1 、.netcore 3.1 ,重新编译,错误依旧。

最后又找到.net 4的安装目录,发现我本机有 netstandard.dll ,随复制到问题机器,重新编译,错误依旧。

再次搜索,发现有人说目录路径的问题,项目路径不要包含_,我重新命名了项目路径,发现问题依旧。不过这里的确碰到过问题,因此路径千万不要含有中文

最后我暴力的把 netstandard.dll直接拷贝到 目录C:\Program Files\Unity\Editor\Data\il2cpp\build\deploy\net471 ,再次重新编译,终于好了。

记下这次故障排查过程,以便后来的同学不用花费大量的时间在重新编译上。