c# - 在具有外部Visual Studio版本的Windows(2017)上,无法为PC Standalone生成Unity5项目

标签 c# unity3d mono

尽管它仅与编程有关,但它在这里:

自上周以来,我一直在Win 10(x64)上使用Unity(5.6.0f3 Community x64)-使用Visual Studio(2017 Community)作为附加编辑器,因为Unity是“需要”-,并从[Unity]: Tutorials开始(首先)。几天后,一切正常,但随后为PC Standalone目标构建就停止了工作。谷歌搜索论坛,并没有找到有关此确切行为的信息:

PC Standalone build

从“构建设置”对话框(向右移动)中可以看到,没有(目标平台或体系结构)组合框可用于指定构建参数。错误在左侧。

注意事项(关于当前行为):


首先想到的是该教程项目被弄乱了,所以我从头开始创建了一个新项目(一个虚拟的/简单的项目,其中包含一个球体,该球体已附加一个刚体和一个C#脚本,该脚本根据用户输入施加力),但是它的行为是相同(这是上图中的项目构建输出)
WebGL构建运行良好(在浏览器中加载);这是当前使用的解决方法,但需要一段时间才能完成
玩(显然)也可以(不必说在VStudio中一切正常,没有来自csc的抱怨),!!!但是!尝试(失败)构建后,播放不再起作用(重新加载项目是修复它的唯一方法)


要排除任何可能的疑问,请使用以下DownloadAssistant屏幕截图:

Download Assistant

一切都被检查了,有2个项目(与这种情况不太相关)没有显示(因为窗口不大),但已检查(并安装了)。

背景信息:


首次安装Unity时,计算机上不存在VStudio 2017版本,因此它(社区版)是作为Unity安装过程的一部分安装的(我记得(至少)助手中有一个与VStudio相关的组合框)
然后,可以使用VStudio补丁。在准备安装它时,我意识到VStudio已安装在默认路径(在%SYSTEMDRIVE%上)上,这对我不起作用,因为它是一个大型产品,因此:


卸载了
将其重新安装(直接从[VisualStudio]: Visual Studio Downloads)到另一个驱动器上(是的,我知道更改安装路径仍然会在%SYSTEMDRIVE%上安装很大一部分,例如Windows SDK)
由于我认为以上两个步骤会中断Unity与新VStudio之间的链接,因此我也重新安装了Unity。这次,助手中没有与VStudio相关的复选框(似乎很正常,以检查是否需要安装尚未安装的任何软件1)。后来,我还发现了一个持久值(这意味着它在Unity卸载时不会被清除)RegValue(HKEY_CURRENT_USER \ SOFTWARE \ Unity Technologies \ Installer \ Select_VisualStudio)的值为0(与同一条件下的其他值相反)值为1的键)

之后,我几次重新安装了Unity,包括在卸载/安装之间重新启动(不需要),但没有结果(在启动Assistant之前,我还花了很长时间启用上面的RegVaue)


一点调试显示,在尝试构建(PC独立版)时,Unity会执行以下操作(不要介意路径,这就是它们在我的计算机上的样子),可以从cmdline复制:

build_win.bat:


"E:\Install\x64\Unity\5.6.0f3\Editor\Data\MonoBleedingEdge\bin\mono.exe" "E:\Install\x64\Unity\5.6.0f3\Editor\Data\MonoBleedingEdge\lib\mono\4.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\5.6.0f3\Editor\Data\Mono\lib\mono\unity\System.Runtime.Serialization.dll
-r:E:\Install\x64\Unity\5.6.0f3\Editor\Data\Mono\lib\mono\unity\System.Xml.Linq.dll
-r:E:\Install\x64\Unity\5.6.0f3\Editor\Data\Mono\lib\mono\unity\UnityScript.dll
-r:E:\Install\x64\Unity\5.6.0f3\Editor\Data\Mono\lib\mono\unity\UnityScript.Lang.dll
-r:E:\Install\x64\Unity\5.6.0f3\Editor\Data\Mono\lib\mono\unity\Boo.Lang.dll
-sdk:unity


args_win.txt是$ {PROJECT_ROOT} \ Temp \ UnityTempFile- * s(我将把它称为utfile)之一的副本,更确切地说是开始构建时创建的副本。有趣的是,它是由另一个文件(在项目加载时创建的10个以上相同文件中的一个)通过utfile创建的(没有进行通过检查,也许也有其他行)进行了条带化​​(并改组(修饰))线。

显而易见的一个(甚至不必检查源utfile)是:-r:E:/Install/x64/Unity/5.6.0f3/Editor/Data/Managed/UnityEngine.dll,插入到上面的文件中,效果很好。但是我不知道如何指示Unity不要删除它。

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


还安装了其他几个VStudio版本(2010、2013、2015),以及更多的VCRedists,但我严重怀疑这是否会有所作为,因为VStudio仅用于编辑(例如,在双击脚本时由Unity启动)
我的计算机也受到[BT]: Has your Windows 10 Start menu stopped working? How to fix it的“折磨”(我大约每周重启一次;大约3-4天后问题再次出现),但这在安装Unity之前已经发生了好几周


可能的解决方案:


卸载Unity和VStudio,然后还原原始设置(如果仍然可以使用)-不理想
得到一个答案(在这里或在Unity论坛上,我将在这里立即发布相同的问题),并希望深入探讨
也要开始痛苦的调试/监视过程([MS.Docs]: Process Monitor(ProcMon)是一个很好的工具),它可能涉及反汇编UnityDownloadAssistant-5.6.0f3.exe,但不能保证会产生(良好的)结果。无论如何,我认为之间存在(暂时隐藏)链接:


已安装VStudio时,助手中不存在VStudio复选框
缺少PC Standalone的构建参数组合框
构建时剥离UnityEngine.dll依赖项

解决这个问题的可能的工作计划/算法是(仅理论上):


调试助手并确定要查询VStudio安装状态的资源(注册表值,文件等)
调整该资源以使助手“认为”未安装VStudio。这将触发VStudio安装程序(并使助手“标记”此安装适用于PC Standalone版本),它将检测到先前的安装(当然,在此之前,资源(如果相同)需要取消调整)和会失败(这里的另一个漫长的尝试是助手不检查返回码)
让助理完成,希望一切都会好起来



任何想法都欢迎。

旁注1(与问题无关):卸载/安装Unity时,我注意到了smth;如果它是Community Edition特有的,我可以(某种程度上)理解它,但是如果不是,则它是一个相当la脚的错误/行为:


安装了Unity(完全如上所述)
运行助手,不要更改以前的安装(我上面提到的RegValue的父RegKey,默认情况下要确保此设置)。它会:


下载(并覆盖???)任何子pkg(例如UnitySetup-Linux-Support-for-Editor-5.6.0f3.exe,FacebookGamesArcade.msi等);对我来说大约是3GB以上(即使文件已经存在)
运行每个指定的(“选中”)pkg /文件
在安装(???)之前,请删除(UnitySetup64.exe)任何现有的安装。

最佳答案

添加Facebook Gameroom构建支持时似乎引入了该问题,并且在2017.3.1f之前尚未解决。

解决方法:


转到Unity文件夹(在Windows x64上为C:\Program Files\Unity
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/

关于c# - 在具有外部Visual Studio版本的Windows(2017)上,无法为PC Standalone生成Unity5项目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43508093/

相关文章:

c# - 使用通过 DI 容器注入(inject)的抽象工厂

linux - 如何在 MonoDevelop 中以 Debug模式执行之前添加导出命令

c# - 程序集定义无法解析来自外部包的命名空间

ios - Unity-iOS : Separating Unity iOS project into any existing iOS Xcode project

iphone - Monotouch - iphone HttpWebRequest 关闭缓存?

c# - 在 .NET 中操作 QueryString

c# - 在 Azure DevOps 中仅运行某些测试

c# - 无法将类型为 'System.Windows.Forms.Form' 的对象转换为类型 'Project.Form1'

c# - MatrixTransform 的矩阵在我看来是转置的

c# - 使用 WebClient 在 Unity3d 中下载大文件