在Unity上解决UWP包的构建问题
在Unity上解决UWP包的构建问题
如果你正在Unity中构建游戏和项目,并针对Universal Windows Platform(UWP),你可能已经注意到,最近的Unity发行版本有一定的问题。你在visual studio中构建UWP项目会看到的下面显示的错误:
The
command “”C:\
Assembly-CSharp-firstpass
C:\
如果你进一步挖掘研究,可能会找到底层错误代码:
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)
解决方法:
修复这个问题的是很易的。但是修复却是一个耗时的操作,因为它主要需要更新到最新的Unity和Visual 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,对于混合现实构建,你将需要的最低版本API为15063。确保选择适合你目标的版本。
当你选择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构建上(x86或Arm并不行)
设置好上面的内容后,剩下就是建立项目。默认情况下,Unity选择ARM作为默认平台,所以我们需要更改到x64平台上。