在Unity上解决UWP包的构建问题

发表于2017-10-29
评论1 3.4k浏览

Unity上解决UWP包的构建问题

如果你正在Unity中构建游戏和项目,并针对Universal Windows PlatformUWP),你可能已经注意到,最近的Unity发行版本有一定的问题。你在visual studio中构建UWP项目会看到的下面显示的错误:

 

The command “”C:\ \Export\UWP\Unity\Tools\SerializationWeaver\SerializationWeaver.exe” “C:\ \Export\UWP\GeneratedProjects\UWP\Assembly-CSharp-firstpass\bin\x64\Debug\Unprocessed\Assembly-CSharp-firstpass.dll” “-pdb” “-verbose” “-unity-engine=C:\ \Export\UWP\Lonely Shadows\Unprocessed\UnityEngine.dll” “C:\ \Export\UWP\GeneratedProjects\UWP\Assembly-CSharp-firstpass\obj\x64\Debug\x64\Debug” “-lock=C:\ \Export\UWP\GeneratedProjects\UWP\Assembly-CSharp-firstpass\project.lock.json” “@C:\ \Export\UWP\GeneratedProjects\UWP\Assembly-CSharp-firstpass\SerializationWeaverArgs.txt” “-additionalAssemblyPath=C:\ \Export\UWP\Lonely Shadows\Unprocessed” “-unity-networking=C:\ \Export\UWP\Lonely Shadows\Unprocessed\UnityEngine.Networking.dll”” exited with code 1.
Assembly-CSharp-firstpass          C:\ \Export\UWP\GeneratedProjects\UWP\Assembly-CSharp-firstpass\Assembly-CSharp-firstpass.csproj   

 

如果你进一步挖掘研究,可能会找到底层错误代码:

 

System.Collections.Generic.KeyNotFoundException: The given key was not present in the dictionary.
   at System.ThrowHelper.ThrowKeyNotFoundException()
   at System.Collections.Generic.Dictionary`2.get_Item(TKey key)
   at UnityEditor.Scripting.Compilers.NuGetPackageResolver.Resolve()
   at Unity.NuGetAssemblyResolver..ctor(String projectLockFile)
   at usw.Weaver.ReaderParameters(String assemblyPath, ConversionOptions options)
   at usw.Weaver.Weave()
   at usw.Program.RunProgram(ConversionOptions options)
   at usw.Program.Main(String[] args)

 

解决方法:

修复这个问题的是很易的。但是修复却是一个耗时的操作,因为它主要需要更新到最新的UnityVisual Studio补丁版本。

 

1:安装Unity 2017.1 p5  或更高版本

首先更新你的Unity

1)如果你在Unity 2017,那么这是  2017.1p5  (或更新)

2)如果你在Unity 2017.2,那么这是  2017.2p9  (或更新)

3)对于5.x版本,只需更新最新的补丁(我还没有测试过)

 

2:将VS 2017更新到15.3.3

Unity是最新版本,你需要更新Visual Studio。如果你的开发环境仍然在VS 2015,那么没有任何办法,你将无法构建较新的UWP包,并且无法构建混合现实平台。

如果你正在进行UWP开发,我强烈建议开发环境更新到VS 2017

打开Visual Studio进行验证,单击菜单中的Help –> About Visual Studio,然后运行  15.3.3  (或更新版本)。如果没有,请检查你的网络并再次运行安装程序。

(可选)3:将项目的播放器设置为.NET.NET4.6  (不是IL2CPP

4:构建面向UWP SDK 14393或更高版本的项目

为了构建UWP,你需要的最低版本API 14393,对于混合现实构建,你将需要的最低版本API15063。确保选择适合你目标的版本。

当你选择Universal Windows Platform时,你将在Build Settings上找到SDK选择:

5:在VS中打开项目

当你构建了项目,请在Visual Studio中打开它。

 

6:更新NETCore  NuGet  5.4以上

在测试中,我发现这个对于现有项目至关重要,或者当你构建第一个UWP项目时,你需要下载最新的NETCore NuGet软件包,否则会失败。

 

检查和更新的NuGe版本, Visual Studio中用鼠标右键单击解决方案资源管理器选择Manage NuGet Packages for Solution

NuGet管理器打开后,你会看到已安装的NuGet软件包,如果有需要更新的版本,则会有相应的通知。

 

7:仅编译和运行在x64构建上(x86Arm并不行)

设置好上面的内容后,剩下就是建立项目。默认情况下,Unity选择ARM作为默认平台,所以我们需要更改到x64平台上。

 

 

如社区发表内容存在侵权行为,您可以点击这里查看侵权投诉指引