오류 CS8357 지정된 버전 문자열에 와일드 카드가 포함되어 있지만 결정성과 호환되지 않습니다. 버전 문자열에서 와일드카드를 삭제하거나 이 컴파일에서 결정성을 사용 중지합니다.

소개



Visual Studio를 버전 15.8.1 당으로 올린 다음 제목과 같은 오류가 발생하고 문제가 발생했을 때 해결책을 찾았으므로 공유합니다.
참고로 영어 오류 메시지는 "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"입니다.




원인



어셈블리의 버전 지정에 와일드 카드(빌드 마다 자동 번호 매기기)를 사용하고 있는 경우 발생합니다(나는 매우 편리하고 있었습니다만...)

「『결정론적』인 빌드」되는 것이 디폴트로 유효화되었기 때문이라고 하고, 「결정론적」이라고 하면 테스트 실행이 고속화되거나 하는 이점이 있거나 하는 것 같습니다. 그러나 반면 이번과 같은 영향도 나옵니다.

.NET Core를 사용하면 결정론적 빌드가 기본적으로 활성화된다는 정보도 찾을 수 있지만 .NET Framework에서 프로젝트를 생성해도 이 문제가 발생합니다. 내부에서 .NET Core를 사용하고 있습니까?

대처법



(이하 C# Windows Forms Application (.NET Framework) 프로젝트를 만들고 시도하고 있습니다)

"<프로젝트 이름>.csproj"파일을 직접 열고 요소 내에 있는 요소의 값이 true이므로 false로 다시 작성하고 저장합니다.



csproj 파일 업데이트 후 프로젝트 탐색기에 "(사용할 수 없음)"이 표시되므로 프로젝트 항목을 마우스 오른쪽 버튼으로 클릭하고 "프로젝트 다시로드"를 선택하면 정상적으로로드되고 개발 작업이 가능합니다. 됩니다.



덧붙여서, csc 또는 msbuild 컴파일 옵션에서도 결정 론적 빌드를 사용할지 여부를 지정할 수있는 것 같습니다 (Visual Studio에서 빌드 할 때 csproj 파일에서 결국 컴파일 옵션을 지정했을 것입니다)

결론



Visual Studio의 진화가 최근 현저하고 기쁜 반면, 업데이트하고 나서 알 수 없는 컴파일 에러가 되기도 합니다. 당연하지만, 납기가 가까울 때 툴류의 업데이트는 삼가하는 것이 현명하네요.

참고 정보



  • Auto Versioning in Visual Studio 2017 (.NET Core) --- Stack Overflow

  • Determinism end-user experience is poor - GitHub

  • 픽업 Roslyn 2/10 --- ++C++; // 미확인 비행 C

  • -deterministic (C# Compiler Options) --- Microsoft Docs
  • 좋은 웹페이지 즐겨찾기