Microsoft MVP성태의 닷넷 이야기
글쓴 사람
정성태 (techsharer at outlook.com)
홈페이지
첨부 파일
 

Visual Studio 2019 - This extension uses deprecated APIs and is at risk of not functioning in a future VS update.

블로그를 위해 정의해 둔 비주얼 스튜디오 확장 도구가,

Visual Studio 확장(VSIX)을 이용해 사용자 매크로를 추가하는 방법
; https://www.sysnet.pe.kr/2/0/11186

2019 Preview 버전에 설치하니 다음과 같은 경고가 뜹니다.

This extension uses deprecated APIs and is at risk of not functioning in a future VS update.

문제는, "deprecated" 되었다는 API가 어떤 것인지 알려주지 않는다는 점입니다. ^^; 그래서 비교를 위해 새롭게 Visual Studio 2019에서 "Custom Command" 확장을 생성했더니, 결정적인 차이점으로 Package 객체가 AsyncPackage로 바뀌어 전체적인 동작이 비동기로 변경된 것입니다.

그래서 제 코드도 AsyncPackage를 사용하도록 변경했고 이후 설치를 하니 "deprecaged" 경고가 없어졌습니다.




아울러 AsyncPackage 적용을 위해 몇 가지 부가 작업이 함께 따르게 됩니다. 우선, csproj의 패키지 참조가 다음과 같이 바뀌고,

<ItemGroup>
	<PackageReference Include="Microsoft.VisualStudio.SDK" Version="15.9.3" ExcludeAssets="runtime" />
	<PackageReference Include="Microsoft.VSSDK.BuildTools" Version="16.0.298" />
</ItemGroup>

ProvideAutoLoad를 사용한 경우 PackageAutoLoadFlags도 함께 적용해야 합니다.

[ProvideAutoLoad(UIContextGuids80.EmptySolution, PackageAutoLoadFlags.BackgroundLoad)]

마지막으로 기존에 작성되었던 동기 호출 방식의 코드를 모두 비동기로 만들어야 하는데 이때 Visual Studio DOM을 호출하는 코드는 동기식으로 작성해야 하므로 다음과 같이 SwitchToMainThreadAsync 호출을 사전에 꼭 호출하는 코드를 넣어야 합니다.

private async Task DoSomeActionAsync(DTE2 dte, AsyncPackage package)
{
    await ThreadHelper.JoinableTaskFactory.SwitchToMainThreadAsync(package.DisposalToken);

    dte.ActiveDocument.Save(""); // Visual Studio UI Thread에서 이 코드가 실행되어야 하므로.

	...[생략]...
}

이 정도의 변경을 거치고 나면 2019 Preview 버전에서도 잘 동작하게 됩니다.




참고로, AsyncPackage로 변경했는데 Visual Studio에서 로딩 시 다음과 같은 오류가 발생할 수 있습니다.

The 'MacroCommandPackage' package did not load correctly.

The problem may have been caused by a configuration change or by the installation of another extension. You can get more information by examining the file '%USERPROFILE%\AppData\Roaming\Microsoft\VisualStudio\16.0_d362fc82\ActivityLog.xml'.

Restarting Visual Studio could help resolve this issue.

로딩 시 실행되는 코드 중에 ThreadHelper.JoinableTaskFactory.SwitchToMainThreadAsync 코드를 적절한 위치에 넣어주지 않은 경우 예외가 발생한 문제였습니다. 코드를 꼼꼼히 확인해 주셔야 합니다. ^^




본문과는 상관없지만, 제가 가지고 있는 또 다른 VSIX 패키지를 마이그레이션 중에 "Microsoft.VisualStudio.TextTemplating.VSHost.11.0.dll"이 없어서 빌드를 못하는 문제가 있었습니다. 관련 버전을 담은 Visual Studio SDK를 삭제했던 것 같은데요. 검색해 보면, Visual Studio 2015 설치 파일에서 구할 수 있다고 하며 다음과 같이 명령행에서 실행하면 된다는 글이 있습니다.

vs_enterprise.exe /s /installSelectableItems VS_SDK_GROUPV1  

음... 그런데 실제로 해보니 ^^; Visual Studio 2015를 설치만 하고 SDK는 설치하지 않았습니다. 그래서 다시 vs_enterprise.exe를 실행해 "Visual Studio Extensibility Tools Update 3" 항목을 직접 선택하여 설치할 수 있었습니다.




[이 글에 대해서 여러분들과 의견을 공유하고 싶습니다. 틀리거나 미흡한 부분 또는 의문 사항이 있으시면 언제든 댓글 남겨주십시오.]







[최초 등록일: ]
[최종 수정일: 2/20/2019]

Creative Commons License
이 저작물은 크리에이티브 커먼즈 코리아 저작자표시-비영리-변경금지 2.0 대한민국 라이센스에 따라 이용하실 수 있습니다.
by SeongTae Jeong, mailto:techsharer at outlook.com

비밀번호

댓글 작성자
 



2019-02-25 09시01분
정성태

... 151  152  153  154  155  156  157  [158]  159  160  161  162  163  164  165  ...
NoWriterDateCnt.TitleFile(s)
1100정성태8/17/201128923.NET Framework: 236. SqlDbType - DateTime, DateTime2, DateTimeOffset의 차이점파일 다운로드1
1099정성태8/15/201128351오류 유형: 132. 어느 순간 갑자기 접속이 안 되는 TFS 서버
1098정성태8/15/201150358웹: 24. 네이버는 어떻게 로그인 처리를 할까요? [2]
1097정성태8/15/201121657.NET Framework: 235. 메서드의 메타 데이터 토큰 값으로 클래스를 찾아내는 방법
1096정성태8/15/201125797디버깅 기술: 42. Watson Bucket 정보를 이용한 CLR 응용 프로그램 예외 분석 - (2)
1095정성태8/14/201126248디버깅 기술: 41. Windbg - 비정상 종료된 닷넷 프로그램의 StackTrace에서 보이는 offset 값 의미
1094정성태8/14/201130614오류 유형: 131. Fiddler가 강제 종료된 경우, 웹 사이트 방문이 안되는 현상
1093정성태7/27/201124241오류 유형: 130. Unable to connect to the Microsoft Visual Studio Remote Debugging Monitor ... Access is denied.
1092정성태7/22/201126640Team Foundation Server: 46. 코드 이외의 파일에 대해 소스 제어에서 제외시키는 방법
1091정성태7/21/201125680개발 환경 구성: 128. WP7 Emulator 실행 시 audiodg.exe의 CPU 소모율 증가 [2]
1089정성태7/18/201131258.NET Framework: 234. 왜? Button 컨트롤에는 MouseDown/MouseUp 이벤트가 발생하지 않을까요?파일 다운로드1
1088정성태7/16/201124337.NET Framework: 233. Entity Framework 4.1 - 윈도우 폰 7에서의 CodeFirst 순환 참조 문제파일 다운로드1
1087정성태7/15/201127024.NET Framework: 232. Entity Framework 4.1 - CodeFirst 개체의 직렬화 시 순환 참조 해결하는 방법 - 두 번째 이야기파일 다운로드1
1086정성태7/14/201128453.NET Framework: 231. Entity Framework 4.1 - CodeFirst 개체의 직렬화 시 순환 참조 해결하는 방법 [1]파일 다운로드1
1085정성태7/14/201128894.NET Framework: 230. Entity Framework 4.1 - Code First + WCF 서비스 시 EndpointNotFoundException 오류 - 두 번째 이야기파일 다운로드1
1084정성태7/11/201134177.NET Framework: 229. SQL 서버 - DB 테이블의 데이터 변경에 대한 알림 처리 [4]파일 다운로드1
1083정성태7/11/201128222.NET Framework: 228. Entity Framework 4.1 - Code First + WCF 서비스 시 EndpointNotFoundException 오류
1082정성태7/10/201127800.NET Framework: 227. basicHttpBinding + 사용자 정의 인증 구현 [2]파일 다운로드1
1081정성태7/9/201127114VC++: 53. Windows 7에서 gcc.exe 실행 시 Access denied 오류 [2]
1080정성태7/8/201125609웹: 23. Sysnet 웹 사이트의 HTML5 변환 기록 - 두 번째 이야기파일 다운로드1
1079정성태7/6/201130027오류 유형: 129. Hyper-V + Realtek 랜카드가 설치된 시스템의 BSOD 현상 [2]
1078정성태7/5/201137563VC++: 52. Chromium 컴파일하는 방법 [2]
1077정성태6/24/201135189.NET Framework: 226. HttpWebRequest 타입의 HaveResponse 속성 이야기파일 다운로드1
1076정성태6/23/201129322오류 유형: 128. SQL Express - User Instance 옵션을 사용한 경우 발생하는 오류 메시지 유형 2가지
1075정성태6/21/201124946VS.NET IDE: 69. 윈폰 프로젝트에서 WCF 서비스 참조할 때 Reference.cs 파일이 비어있는 경우
1074정성태6/20/201125030.NET Framework: 225. 닷넷 네트워크 라이브러리의 트레이스 기능파일 다운로드1
... 151  152  153  154  155  156  157  [158]  159  160  161  162  163  164  165  ...