Я пытаюсь перенести свой проект с Unity 2017 LTS на 2018 LTS и MRTK2. Все шло довольно гладко, пока я не попытался запустить проект на эмуляторе HoloLens 1.
Я получаю следующую ошибку:
1> System.Exception: Failed to resolve System.Reflection.BindingFlags
1> at Unity.ModuleContext.Retarget(TypeReference type, GenericContext context)
1> at Unity.ModuleContext.Retarget(MethodReference method, GenericContext context)
1> at Unity.FixReferencesStep.Visit(MethodDefinition method, GenericContext context)
1> at Unity.FixReferencesStep.Visit(TypeDefinition type)
1> at Unity.TypeDefinitionDispatcher.DispatchType(TypeDefinition type)
1> at Unity.TypeDefinitionDispatcher.DispatchType(TypeDefinition type)
1> at Unity.TypeDefinitionDispatcher..ctor(ModuleDefinition module, ITypeDefinitionVisitor visitor)
1> at Unity.FixReferencesStep.ProcessModule()
1> at Unity.ModuleStep.Execute()
1> at Unity.FixReferencesStep.Execute()
1> at Unity.Step.Execute(OperationContext operationContext, IStepContext previousStepContext)
1> at Unity.Operation.Execute()
1> at Unity.Program.Main(String[] args)
Поиск этой ошибки мне ничего не дал, я не менял проект, который строит Unity. Я запускаю его в Debug
и для x86
. Я строю через обычное окно Unity Build.
Использование Minimum Platform Version 10.0.17134.0
и Target SDK Version 10.0.18362.0
Это также происходит с новым пустым проектом Unity, сборка примера также выдаст эту ошибку.
В Единстве? У меня есть Scripting Runtime Version
в .Net 4.x Equivalent
Scripting Backend
в .NET
и Api Compatibility Level
в .Net 4.x
@AndreyChistyakov Я только что протестировал, и это также происходит с совершенно новым проектом. Пустой проект Unity только с МРТК 2, сборка примера также выдаст эту ошибку.
У меня была похожая проблема, и чтобы ее исправить, я перешел на бэкэнд il2cpp.
Это сработает, за исключением того, что мне нужно немного дольше находиться в бэкэнде .net.
Понимая, что это может быть не только я, я отправил проблема в гитхабе МРТК. Оказывается, это ошибка в Visual Studio, и они работают над ее исправлением вместе с Microsoft.
Есть два способа решить это, укажите версию Windows 15063 в качестве минимальной версии или измените файл ваш проект.csproj.
Если вы не хотите менять минимальную версию, выполните следующие действия:
Откройте ваш проект.csproj в текстовом редакторе.
Найдите строку <Target Name = "BeforeResolveReferences" Condition = "'$(BuildingProject)' == 'true'">
Заменить:
<UsingTask TaskName = "FixProjectJson" TaskFactory = "CodeTaskFactory" AssemblyFile = "$(MSBuildToolsPath)\Microsoft.Build.Tasks.Core.dll">
<ParameterGroup />
<Task>
<Using Namespace = "System" />
<Using Namespace = "System.IO" />
<Code Type = "Fragment" Language = "cs">
<![CDATA[File.WriteAllText("project.lock.json", File.ReadAllText("project.lock.json").Replace("ref/netstandard1.5/System.Reflection.TypeExtensions.dll", "ref/netstandard1.3/System.Reflection.TypeExtensions.dll"));]]>
</Code>
</Task>
</UsingTask>
<Target Name = "BeforeResolveReferences" Condition = "'$(BuildingProject)' == 'true'">
Найдите строку <Message Importance = "high" Text = "Running AssemblyConverter..." />
Заменить:
<Message Importance = "high" Text = "Running AssemblyConverter..." />
<FixProjectJson />
После этого мой проект наконец скомпилировался, и я смог запустить его в эмуляторе HoloLens 2.
версия dotNET обновлена?