Unity5 项目不为 PC Standalone 构建,Windows 外部 Visual Studio 版本 (2017)

Unity5 project does not build for PC Standalone, on Windows with external Visual Studio version (2017)

虽然它只是与编程有一定的关系,但它是这样的:

自上周以来,我一直在玩 Unity (5.6.0f3 Community x64) Win 10 (x64) - 使用 Visual Studio (2017 Community) 作为附加编辑器,如 Unity "requires" -,并从 [Unity]: Tutorials(第一个)开始。几天来一切都很好,但是随后,为 PC Standalone 目标构建时停止工作。 Google浏览并查看论坛,无助于查找有关此确切行为的信息:

Build Settings 对话框(移至右侧)所示,没有(Target PlatformArchitecture) 允许指定构建参数的组合框。错误在左侧。

注释(关于当前行为):

为了排除任何可能的疑虑,这里是 DownloadAssistant 屏幕截图:

一切都已检查,有 2 个项目(与本案例不太相关)没有显示(因为 window 不大),但已检查(并且 已安装).

背景资料:

一点点调试显示,当尝试构建 (PC Standalone) 时,Unity 会做这样的事情(不要介意路径,这就是它们在我的机器上的方式),可以从 cmdline:

复制

build_win.bat:

"E:\Install\x64\Unity.6.0f3\Editor\Data\MonoBleedingEdge\bin\mono.exe" "E:\Install\x64\Unity.6.0f3\Editor\Data\MonoBleedingEdge\lib\mono.5\mcs.exe" "@args-win.txt"

args_win.txt:

-debug
-target:library
-nowarn:0169
-langversion:4
-out:Temp/Assembly-CSharp.dll
-unsafe
-optimize
-r:E:/Install/x64/Unity/5.6.0f3/Editor/Data/UnityExtensions/Unity/GUISystem/Standalone/UnityEngine.UI.dll
-r:E:/Install/x64/Unity/5.6.0f3/Editor/Data/UnityExtensions/Unity/Networking/Standalone/UnityEngine.Networking.dll
-r:E:/Install/x64/Unity/5.6.0f3/Editor/Data/UnityExtensions/Unity/UnityAnalytics/UnityEngine.Analytics.dll
-define:UNITY_5_3_OR_NEWER
-define:UNITY_5_4_OR_NEWER
-define:UNITY_5_5_OR_NEWER
-define:UNITY_5_6_OR_NEWER
-define:UNITY_5_6_0
-define:UNITY_5_6
-define:UNITY_5
-define:UNITY_ANALYTICS
-define:ENABLE_AUDIO
-define:ENABLE_CACHING
-define:ENABLE_CLOTH
-define:ENABLE_DUCK_TYPING
-define:ENABLE_GENERICS
-define:ENABLE_PVR_GI
-define:ENABLE_MICROPHONE
-define:ENABLE_MULTIPLE_DISPLAYS
-define:ENABLE_PHYSICS
-define:ENABLE_RUNTIME_NAVMESH_BUILDING
-define:ENABLE_SPRITERENDERER_FLIPPING
-define:ENABLE_SPRITES
-define:ENABLE_TERRAIN
-define:ENABLE_RAKNET
-define:ENABLE_UNET
-define:ENABLE_LZMA
-define:ENABLE_UNITYEVENTS
-define:ENABLE_WEBCAM
-define:ENABLE_WWW
-define:ENABLE_CLOUD_SERVICES_COLLAB
-define:ENABLE_CLOUD_SERVICES_ADS
-define:ENABLE_CLOUD_HUB
-define:ENABLE_CLOUD_PROJECT_ID
-define:ENABLE_CLOUD_SERVICES_UNET
-define:ENABLE_CLOUD_SERVICES_BUILD
-define:ENABLE_CLOUD_LICENSE
-define:ENABLE_EDITOR_METRICS
-define:ENABLE_EDITOR_METRICS_CACHING
-define:ENABLE_NATIVE_ARRAY
-define:INCLUDE_DYNAMIC_GI
-define:INCLUDE_GI
-define:PLATFORM_SUPPORTS_MONO
-define:RENDER_SOFTWARE_CURSOR
-define:INCLUDE_PUBNUB
-define:ENABLE_PLAYMODE_TESTS_RUNNER
-define:ENABLE_SCRIPTING_NEW_CSHARP_COMPILER
-define:ENABLE_VIDEO
-define:UNITY_STANDALONE_WIN
-define:UNITY_STANDALONE
-define:ENABLE_SUBSTANCE
-define:ENABLE_RUNTIME_GI
-define:ENABLE_MOVIES
-define:ENABLE_NETWORK
-define:ENABLE_CRUNCH_TEXTURE_COMPRESSION
-define:ENABLE_UNITYWEBREQUEST
-define:ENABLE_CLOUD_SERVICES
-define:ENABLE_CLOUD_SERVICES_ANALYTICS
-define:ENABLE_CLOUD_SERVICES_PURCHASING
-define:ENABLE_CLOUD_SERVICES_CRASH_REPORTING
-define:ENABLE_EVENT_QUEUE
-define:ENABLE_CLUSTERINPUT
-define:ENABLE_VR
-define:ENABLE_WEBSOCKET_HOST
-define:ENABLE_MONO
-define:NET_2_0_SUBSET
Assets/_Scripts/x.cs
-r:E:\Install\x64\Unity.6.0f3\Editor\Data\Mono\lib\mono\unity\System.Runtime.Serialization.dll
-r:E:\Install\x64\Unity.6.0f3\Editor\Data\Mono\lib\mono\unity\System.Xml.Linq.dll
-r:E:\Install\x64\Unity.6.0f3\Editor\Data\Mono\lib\mono\unity\UnityScript.dll
-r:E:\Install\x64\Unity.6.0f3\Editor\Data\Mono\lib\mono\unity\UnityScript.Lang.dll
-r:E:\Install\x64\Unity.6.0f3\Editor\Data\Mono\lib\mono\unity\Boo.Lang.dll
-sdk:unity

args_win.txt${PROJECT_ROOT}\Temp\UnityTempFile-*[=201 之一的副本=]s(我将把这样的文件称为 utfile),更准确地说是在开始构建时创建的文件。奇怪的是,它是由另一个(在项目加载时创建的 10 多个相同的文件之一)utfile 创建的(没有进行彻底检查,也许还有其他行) 条带化(和洗牌 (amestecating))一些线。

最明显的(甚至不必检查来源 utfile)是:-r:E:/Install/x64/Unity/5.6.0f3/Editor/Data/Managed/UnityEngine.dll,插入到上述文件中,效果很好。但是我不知道如何指示 Unity 不要剥离它。

其他事实(或多或少相关):

  • 安装了其他几个 VStudio 版本(201020132015),以及更多 VCRedists,但我严重怀疑这些是否会有所作为,因为 VStudio仅用于编辑(例如,在双击脚本时由 Unity 启动)
  • 我的电脑也从 [BT]: Has your Windows 10 Start menu stopped working? How to fix it "suffers"(我每周重启一次;大约 3-4 天后问题再次出现),但是在安装 团结

可能的解决方案

  • 卸载 UnityVStudio,并恢复原始设置(如果它仍然有效)- 不可取
  • 获得答案(在此处或 Unity 论坛上,我将在此处立即 post 相同的问题),并希望能深入了解它
  • 开始debugging/monitoring的痛苦过程([MS.Docs]: Process MonitorProcMon)是一个很好的工具)另外,可能涉及反汇编UnityDownloadAssistant -5.6.0f3.exe,但不能保证它会产生(有利的)结果。无论如何,我认为(暂时隐藏)link 之间:
    • VStudio 复选框在 Assistant 中不存在,而 VStudio 已经安装
    • 缺少 PC Standalone
    • 的构建参数组合框
    • 构建时剥离UnityEngine.dll依赖
  • 解决这个问题的一个可能的工作计划/算法是(只是理论上的):
    • 调试 Assistant 并识别为 VStudio 安装状态查询的资源(注册表值、文件...)
    • 调整资源使 Assistant "think" VStudio 未安装;这将触发 VStudio 安装程序(并使 Assistant "mark" 此安装适用于 PC Standalone 构建),这将检测到以前的安装(当然在此之前,资源(如果相同)需要未调整)并且会失败(这里的另一个远景是 Assistant 不检查 return 代码)
    • 助理完成,希望一切都会好起来

欢迎提出任何想法。

旁注1(与问题无关):While uninstalling/installing Unity, 我注意到了……如果它是 社区版 特定的,我可以(有点)理解它,但如果不是,那么它是一个相当 lame 错误/行为:

说来话长

显然,没有 简单的修复方法(或者至少我找不到),所以我开始了 "extremely challenging" 卸载/重新安装过程UnityVStudio(卸载后重新启动 - 以确保没有 "hidden" 操作挂起)。

我首先查看 Assistant 的内部功能,通过指定自定义下载路径,如下图所示:

注意安装路径和问题中的有点不同,因为我改变了它们(因为我不得不重新安装产品为什么不使用它?),但这些更改无关紧要。

在指定的文件夹中有一堆(~3GB+)下载的文件(可执行文件)和一个批处理脚本是相当于 Assistant.

的命令行

install.bat:

REM Run this script to automatically install or reinstall all packages,
REM as it's performed by the Unity Download Assistant.
REM Needs to be run with superuser permissions.

"UnitySetup64.exe" -UI=reduced /D=e:\Install\x64\Unity\Community.6.0f3
"UnityDocumentationSetup.exe" /S /D=e:\Install\x64\Unity\Community.6.0f3
"UnityStandardAssetsSetup.exe" /S /D=e:\Install\x64\Unity\Community.6.0f3
"UnityExampleProjectSetup.exe" /S
"vs_Community.exe" --productId "Microsoft.VisualStudio.Product.Community" --add "Microsoft.VisualStudio.Workload.ManagedGame" --campaign "Unity3d_Unity" --passive
msiexec.exe /i "FacebookGamesArcade.msi" /qr LAUNCHEXE=FALSE
"UnitySetup-Android-Support-for-Editor-5.6.0f3.exe" /S /D=e:\Install\x64\Unity\Community.6.0f3
"UnitySetup-iOS-Support-for-Editor-5.6.0f3.exe" /S /D=e:\Install\x64\Unity\Community.6.0f3
"UnitySetup-AppleTV-Support-for-Editor-5.6.0f3.exe" /S /D=e:\Install\x64\Unity\Community.6.0f3
"UnitySetup-Linux-Support-for-Editor-5.6.0f3.exe" /S /D=e:\Install\x64\Unity\Community.6.0f3
"UnitySetup-Mac-Support-for-Editor-5.6.0f3.exe" /S /D=e:\Install\x64\Unity\Community.6.0f3
"UnitySetup-Metro-Support-for-Editor-5.6.0f3.exe" /S /D=e:\Install\x64\Unity\Community.6.0f3
"UnitySetup-UWP-IL2CPP-Support-for-Editor-5.6.0f3.exe" /S /D=e:\Install\x64\Unity\Community.6.0f3
"UnitySetup-Samsung-TV-Support-for-Editor-5.6.0f3.exe" /S /D=e:\Install\x64\Unity\Community.6.0f3
"UnitySetup-Tizen-Support-for-Editor-5.6.0f3.exe" /S /D=e:\Install\x64\Unity\Community.6.0f3
"UnitySetup-WebGL-Support-for-Editor-5.6.0f3.exe" /S /D=e:\Install\x64\Unity\Community.6.0f3
"UnitySetup-Facebook-Games-Support-for-Editor-5.6.0f3.exe" /S /D=e:\Install\x64\Unity\Community.6.0f3

引起我注意的是与 VStudio 相关的一个:

"vs_Community.exe" --productId "Microsoft.VisualStudio.Product.Community" --add "Microsoft.VisualStudio.Workload.ManagedGame" --campaign "Unity3d_Unity" --passive

由于(某些)启动器参数对我来说意义不大,所以我查找了它们:[MS.Docs]: Use command-line parameters to install Visual Studio 2017。所以,我通过命令行启动了它(没有 --passive 有机会查看选择了哪些功能),我想我明白了:Game development with Unity被选中如下图(之前,当我安装VStudio"normally"时,我没有勾选那个框) :

但是行为 是一样的 !!!

备注:

  • 如果您选择安装此选项(并且还自己安装 Unity),请确保取消选中 Unity editor,以避免安装两次
  • 后来我发现(当然是通过重新安装),选中/取消选中 Game development with Unity 完全没有影响
  • 另外,事实上 VStudio 没有安装在它的默认路径上(在某些时候我变得偏执并认为可能有一些 VStudio Unity 文件中的硬编码路径)不是原因

我做的下一步是重新创建初始场景(它曾经工作过的地方):

  • 使用 "my" 初始选项安装 VStudio(例如,未选中 使用 Unity 进行游戏开发)
  • 使用默认选项安装 Unity - 在安装之前删除其 RegKey(我在问题中提到的)

并且有效 !!!

然后我知道 Unity 组件中的一个组件在乱搞我的设置,所以在基本安装之上(install.bat til vs_Community.exe) 我开始一个一个地安装所有其他选项,在安装每个组件后检查我是否能够执行PC 单机 构建,并且...

短篇小说

事实证明,Facebook Gameroom Build Support(如 Assistant 中所示) 是所有问题的根源我的问题。因此,另一个全新安装(VStudio 和)Unity没有 Facebook 建立支持)很有魅力。

现在,调查才完成一半,我还需要找出为什么会发生这种情况,但我要到此为止了。如果将来我需要为 Facebook 构建,那么我将不得不弄清楚它并让它工作,但现在我不会。
请注意,出于我的(菜鸟)目的,StandalonePC 因为目前我在 Win) 构建就足够了(也许 WebGL 也可以从浏览器进行测试),但我安装了所有其他的以防我想玩弄它们。

问题似乎是在添加 Facebook Gameroom 构建支持时引入的,并且截至 2017.3.1f 尚未解决。

解决方法:

  1. 转到 Unity 文件夹(C:\Program Files\Unity on Windows x64)
  2. Unity/Editor/Data/PlaybackEngines/Facebook 移动到 Unity 文件夹,所以现在 EditorFacebook 彼此相邻

@jura_z 于 https://forum.unity.com/threads/installing-facebook-gameroom-build-support-gives-loads-of-errors-when-building-to-windows-standalone.489495/