sdk 스타일 csproj 파일의 GenerateManifests 관련 문제

3621 단어 dotnetprogramming
아시다시피 .NET Framework 4.x에서 정확한 OS 버전 번호를 얻으려면 Visual Studio를 사용하여 app.manifest 파일을 만든 다음 지원하려는 Windows 버전의 주석을 제거해야 합니다.

<compatibility xmlns="urn:schemas-microsoft-com:compatibility.v1">
<application>
    <!-- A list of the Windows versions that this application has been tested on
        and is designed to work with. Uncomment the appropriate elements
        and Windows will automatically select the most compatible environment. -->

    <!-- Windows Vista -->
    <!--<supportedOS Id="{e2011457-1546-43c5-a5fe-008deee3d3f0}" />-->

    <!-- Windows 7 -->
    <supportedOS Id="{35138b9a-5d96-4fbd-8e2d-a2440225f93a}" />

    <!-- Windows 8 -->
    <supportedOS Id="{4a2f28e3-53b9-4441-ba9c-d69d4a4a6e38}" />

    <!-- Windows 8.1 -->
    <supportedOS Id="{1f676c76-80e1-4239-95bb-83d0f6d0da78}" />

    <!-- Windows 10 -->
    <supportedOS Id="{8e0f7a12-bfb3-4fe8-b9a5-48fd50a15a9a}" />

</application>


이렇게 하면 Visual Studio에서 프로젝트( .csproj ) 파일에 다음 속성을 자동으로 추가합니다.

<PropertyGroup>
    <ApplicationManifest>app.manifest</ApplicationManifest>
</PropertyGroup>


이제 올바른 버전 번호를 얻을 수 있습니다.

var version = Environment.OSVersion.Version;

// Before: 6.2.9200.0
// After: 10.0.19044.0


문제



프로젝트를 새로운 sdk 스타일 프로젝트 파일로 마이그레이션하는 동안 OS 버전 번호가 올바르지 않은 것을 발견했습니다. net48 TFM(Target Framework)을 유지하고 있었기 때문에 문제가 되지 않았습니다.

문제는 매니페스트 파일이 존재하지 않는 경우와 같습니다.

증상



이것은 Visual Studio에서 Build > Publish 메뉴를 사용하여 프로젝트를 게시할 때만 발생했습니다. 그렇지 않으면 모든 것이 잘되었습니다.

try-convert 도구를 사용하여 프로젝트를 마이그레이션했습니다. More Info

try-convert --keep-current-tfms --no-backup



수정



몇 시간 동안 디버깅한 후 내 GenerateManifests 파일의 .csproj 태그가 문제를 일으키는 것을 발견했습니다.

<GenerateManifests>true</GenerateManifests>


왜 이런 일이 발생했는지 정확히 모르겠지만 문제가 해결되어 기쁩니다.

이유를 아시는 분은 댓글로 알려주세요.

좋은 웹페이지 즐겨찾기