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

Could not load file or assembly 'Microsoft.VisualStudio.TextTemplating.VSHost.15.0, Version=16.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a' or one of its dependencies.

이상하군요, XmlCodeGenerator가 Preview 버전까지만 해도 잘 동작했는데 2022 정식 버전에서는 동작을 하지 않습니다. 디버깅을 해보니, "FileNotFoundException" 예외가 발생하는데요,

System.IO.FileNotFoundException: 'Could not load file or assembly 'Microsoft.VisualStudio.TextTemplating.VSHost.15.0, Version=16.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a' or one of its dependencies. The system cannot find the file specified.'

그러니까, 아예 XmlCodeGenerator 확장 DLL이 저것 때문에 올라오지도 못하고 있었던 것입니다.

=== Pre-bind state information ===
LOG: DisplayName = Microsoft.VisualStudio.TextTemplating.VSHost.15.0, Version=16.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
 (Fully-specified)
LOG: Appbase = file:///C:/Program Files/Microsoft Visual Studio/2022/Enterprise/Common7/IDE/
LOG: Initial PrivatePath = NULL
Calling assembly : XmlCodeGenerator, Version=1.0.0.0, Culture=neutral, PublicKeyToken=8247e1cbdabdbe2d.
===
LOG: This bind starts in LoadFrom load context.
WRN: Native image will not be probed in LoadFrom context. Native image will only be probed in default load context, like with Assembly.Load().
LOG: Using application configuration file: %USERPROFILE%\AppData\Local\Microsoft\VisualStudio\17.0_03677d2cExp\devenv.exe.config
LOG: Using host configuration file: 
LOG: Using machine configuration file from C:\Windows\Microsoft.NET\Framework64\v4.0.30319\config\machine.config.
LOG: Post-policy reference: Microsoft.VisualStudio.TextTemplating.VSHost.15.0, Version=16.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
LOG: The same bind was seen before, and was failed with hr = 0x80070002.

차근히 볼까요? Initial PrivatePath도 null이면 사실상 찾을만한 곳은 Appbase뿐이지만 실제로 devenv.exe가 실행된 프로세스를 보면 다음의 경로에서도 찾는 것을 볼 수 있습니다.

  • C:\Program Files\Microsoft Visual Studio\2022\Enterprise\Common7\IDE\
  • C:\Program Files\Microsoft Visual Studio\2022\Enterprise\Common7\IDE\PublicAssemblies
  • GAC

그리고 저 경로를 모두 살펴보면 "Microsoft.VisualStudio.TextTemplating.VSHost.15.0" 어셈블리가 없기 때문에 오류가 발생하는 것은 맞긴 합니다.




일단, 원인 분석은 되었으니, 이제 문제는 Microsoft.VisualStudio.TextTemplating.VSHost.15.0 어셈블리를 어떻게 vsix에 포함시키느냐입니다. 모든 참조 dll은 "Copy Local" 속성을 "true"로 했기 때문에 포함이 되어야 하는 것이 맞는데요, 이상하게도 vsix에는 오직 XmlCodeGenerator.dll 파일만 있습니다.

다행히 검색해 보면 다음의 글이 나오는데요,

How to add referenced DLLs to VSIX? 
; https://social.msdn.microsoft.com/Forums/sqlserver/en-US/e59b527b-a683-40ea-9a25-5d7acbb48074/how-to-add-referenced-dlls-to-vsix?forum=vsx

따라서, vsixmanifest 파일을 열어 추가해 주면 됩니다.

vsix_dll_1.png

실제로 저렇게 설정하고 빌드하면 vsix에 DLL 파일이 있고, 모든 기능이 정상적으로 잘 동작했습니다.




참고로, 이외에 여러 가지 변화가 있는데 경험상 2022는 바뀐 부분이 너무 많아서 경우에 따라 아예 extension을 2022 전용으로 작성하는 것이 편할 수 있습니다. 그렇지 않고 2019와 2022를 동시에 지원하려면... 상당히 피곤해지실 것입니다. ^^;





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







[최초 등록일: ]
[최종 수정일: 1/8/2022]

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

비밀번호

댓글 작성자
 




... 181  182  183  184  185  186  187  188  189  190  191  192  193  194  [195]  ...
NoWriterDateCnt.TitleFile(s)
69정성태12/5/200417080VS.NET IDE: 9. 다른 컴퓨터(방화벽 설치)에 설치된 SQL Server에 통합 인증을 할 때 필요한 포트
68정성태10/31/200422042.NET Framework: 17. Win32_NTLogEvent를 c#에서 wmi 쿼리할 때..에러..
67정성태10/22/200419257COM 개체 관련: 12. Microsoft.XMLHTTP 개체에서 Microsoft.XMLDOM 개체를 전송할 때 charset 지정 문제?
66정성태10/16/200420427.NET Framework: 16. [닷넷 리모팅] 프록시가 죽은 것을 원격 개체가 알 수 있는 방법은?
65정성태10/16/200419445VS.NET IDE: 8. Windows 가상 메모리 사용 해제
64정성태10/3/200423120.NET Framework: 15. ASP.NET에서 .NET COM+ 개체 등록 시 "Local System"이어야 하는 이유.
63정성태10/3/200423257.NET Framework: 14. Response.Cookies.Clear는 기존 설정된 Cookie 헤더를 삭제하는 것이 아닙니다.
62정성태10/3/200422249기타: 7. DB 트랜잭션에서 Lock이 걸릴 수 있는 전형적인 예.
61정성태10/3/200421755.NET Framework: 13. Main 메서드에 붙은 STAThread 의미
60정성태10/3/200420467.NET Framework: 12. IDispatch::GetIDsOfNames 역변환 메서드 작성 힌트 ( DISPID 로 메서드 이름 알아내는 것 )
58정성태10/3/200423565.NET Framework: 11. HttpContext의 간략이해
56정성태10/3/200420020.NET Framework: 10. [.NET 리모팅] 원격개체를 호출한 클라이언트의 연결이 유효한지 판단하는 방법.
55정성태10/3/200420794COM 개체 관련: 11. 내가 생각해 보는 COM의 현재 위치
54정성태8/30/200426448VC++: 10. 내가 생각해 보는 MFC OCX와 ATL DLL에 선택 기준
53정성태11/20/200525789VC++: 9. CFtpFileFind/FtpFileFind가 일부 Unix FTP 서버에서 목록을 제대로 못 가져오는 문제
184정성태11/23/200519433    답변글 VC++: 9.1. FTP 관련 토픽파일 다운로드1
51정성태6/24/200424373VC++: 8. BSTR 메모리 할당 및 해제(MSDN Library 발췌) [1]
50정성태6/16/200417733기타: 6. 1차 데스크톱 컴퓨터 사양
49정성태6/16/200418207기타: 5. 53만 원대 Second PC 마련. ^^
48정성태3/2/200420102.NET Framework: 9. 윈도우즈 발전사를 모아 둔 사이트. [1]
47정성태11/14/200518606VS.NET IDE: 7. 한글 OS에서 Internet Explorer 6.0 with SP1의 UI 언어 바꾸는 방법
45정성태1/26/200417999기타: 4. MCAD 시험
44정성태1/26/200418813VS.NET IDE: 6. 터미널 서비스 포트 변경 ( 서버 및 클라이언트 )
46정성태1/26/200423862    답변글 VS.NET IDE: 6.1. Windows 2003 터미널 서비스 라이센스 서버 없이 접속
114정성태11/14/200515227    답변글 VS.NET IDE: 6.2. [터미널 서버 라이센스] : 활성화 시 오류
43정성태12/23/200318442기타: 3. XP/2003 개인 방화벽 설정파일 다운로드1
... 181  182  183  184  185  186  187  188  189  190  191  192  193  194  [195]  ...