Unity 프로젝트를 업그레이드하는 동안 발생한 문제

4969 단어 Unity
개시하다
이번에는 유닛 2017 프로젝트가 유닛 2020으로 업그레이드됐을 때 발생한 문제입니다.
간단한 프로젝트를 제작하고 검증한 결과를 총괄해 보았다.
하지만 무슨 일이 일어났는지 아직 조사가 안 됐으니 탓하지 마세요..
시도된 환경
Windows10
Unity2017.4.10f1(원 프로젝트)
Plaatform은 iOS입니다.
※ 새로운 아이템이 제작되었으며, Asseets 바로 아래에 아래 스크립트가 설치되어 있습니다.
Test.cs
public class Test
{
    public System.Reflection.Emit.ILGenerator test;
}
Unity2019.2.21f1(단계적 업그레이드용)
Unity2020.2.1 f1 (업그레이드하려는 버전)
※ 유니티 가동 2020 시 오류Enter Safe Mode?가 있으면 Ignore 처리
업그레이드 후 프로세스
모드 1(성공 예)
① Unity2017.4.10f1 프로젝트 Unity 2019.2.21f1로 가동.
② 를 시작하면 다음 오류가 발생합니다.
Assets\Test.cs(3,32): error CS0234: The type or namespace name 'ILGenerator' does not exist in the namespace 'System.Reflection.Emit' (are you missing an assembly reference?)
③ 애플 컴퓨터를 켜라.NET 4.x로 변경하면 오류를 제거할 수 있습니다.Unity를 종료합니다.
④ Unity2019.2.21f1 프로젝트 유니티 2020.2.1f1 가동.
⑤ 를 시작하면 다음 오류가 발생합니다.
※ 이때 에이피컴포티빌리티 레벨*은.NET Standard2.0으로 돌아가다.
Deterministic compilation failed. You can disable Deterministic builds in Player Settings
Library\PackageCache\[email protected]\Editor\Tools\Weaver\AssemblyInfo.cs(22,28): error CS8357: The specified version string contains wildcards, which are not compatible with determinism. Either remove wildcards from the version string, or disable determinism for this compilation
⑥ 이를 수정하기 위해 Package Manager의 In Project에서 Multi playerHLAPI 1.0.2를 1.0.8로 업데이트합니다.
또는 멀티플레이어 HLAPI가 필요하지 않으면 삭제합니다.오류를 제거하다.
※ MultipayerHLAPI 존재 시, 1.0.8로 업데이트하기 전에 Api Compotibility Level* 열기
  .NET 4.x로 변경하면 다음 오류가 발생하지만 프로젝트를 다시 시작하면 사라집니다.
Microsoft (R) Visual C# Compiler version 3.5.0-dev-20359-01 (8da8ba0c)
Copyright (C) Microsoft Corporation. All rights reserved.
모드 2(실패 예)
※ 모드 1의 흐름 중 유니티 2019.2.21f1에서 오류가 발생했을 때의 절차를 무시합니다.
① Unity2017.4.10f1 프로젝트 Unity 2019.2.21f1로 가동.
② 를 시작하면 다음 오류가 발생합니다.
Assets\Test.cs(3,32): error CS0234: The type or namespace name 'ILGenerator' does not exist in the namespace 'System.Reflection.Emit' (are you missing an assembly reference?)
③ 오류를 잠시 무시하고 프로젝트를 종료한다.
④ Unity2019.2.21f1 프로젝트 유니티 2020.2.1f1 가동.
⑤ 를 시작하면 다음 오류가 발생합니다.
Deterministic compilation failed. You can disable Deterministic builds in Player Settings
Library\PackageCache\[email protected]\Editor\Tools\Weaver\AssemblyInfo.cs(22,28): error CS8357: The specified version string contains wildcards, which are not compatible with determinism. Either remove wildcards from the version string, or disable determinism for this compilation
⑥ 이를 수정하기 위해 Package Manager의 In Project에서 Multi playerHLAPI 1.0.2를 1.0.8로 업데이트합니다.
또는 멀티플레이어 HLAPI가 필요하지 않으면 삭제합니다.
⑥ 다음 오류가 발생했습니다.
Assets\Test.cs(3,32): error CS0234: The type or namespace name 'ILGenerator' does not exist in the namespace 'System.Reflection.Emit' (are you missing an assembly reference?)
⑥ 애플 컴퓨터를 엽니다.NET 4.x로 변경해도 해결되지 않습니다.
⑥ 해결 방법이 분명하지 않다.
모드 3(실패 예)
① Unity2017.4.10f1 프로젝트 유니티 2020.2.1f1 가동.
② 를 시작하면 다음 오류가 발생합니다.
Assets\Test.cs(3,32): error CS0234: The type or namespace name 'ILGenerator' does not exist in the namespace 'System.Reflection.Emit' (are you missing an assembly reference?)
③ 애플 컴퓨터를 켜라.NET 4.x로 변경해도 해결되지 않습니다.
④ 해결책이 불분명하다.
모드 1과 모드 2의 비교
항목이 어떻게 다른지 확인하고, Library 폴더를 삭제하는 등 모든 파일을 비교합니다.
그런 다음 Project Settings 폴더ProjectSettings.asset는 다음과 같습니다.

왼쪽은 틀리지 않는 공사, 오른쪽은 틀린 공사.
Unity 편집 내에서는 이 항목을 어디에서 변경할 수 있는지 모르겠지만, 직접 다시 쓴 다음
오류가 발생한 프로젝트를 여는 중 오류가 발생했습니다.
※ 모드 2의 검증 후 얼마 지나지 않아, a p i C o m p atibility LevelPerPlatiform: {} 로 바뀌었기 때문에, 만진 것이 있으면 iOS: 6
묻은 것 같은데...NET 4.x근처 만져서 갖다 놓을 때죠...?
결론
아무튼 Unity 2017.4.10f1 시스템.Reflection.Emit을 사용한 프로젝트 Unity 2020.2.1f1
업그레이드 시 Unity 2019.2.21f1로 가동.NET 4.x, Unity 2020이 됩니다.1.1f1 가동 후 해결.
※ 세부 버전 오차의 행위는 불분명하며, 유니티 2019 자동입장 패키지를 사용하지 않으면 삭제해도 OK.
네, Unity 버전의 차이가 커서 무슨 문제가 생길 수 있어요.
같은 현상이 일어나는 사람들에게 참고가 됐으면 좋겠어요.
추기
그러고 보니 업그레이드하기 전에 어떻게 된 일인지 조사한 적이 없어서 찾아봤어요.
Unity2019.4.16f1(iOS) => .Net 4.x로 변경하면 오류가 발생하지 않습니다.
Unity2020.2.1f1(iOS) => .Net 4.x로 변경해도 오류가 발생합니다.
자세히 보면, Unity 2020.2.1은 f1에 있다.Net 4.x로 변경된 mscorlib입니다.dll 참조하면 안 될 것 같은데...
응, 참조할 수 없는 착오가 생겨서 못 한 건 당연하다고 생각해.
(2021/01/27)

좋은 웹페이지 즐겨찾기