성태의 닷넷 이야기
홈 주인
모아 놓은 자료
프로그래밍
질문/답변
사용자 관리
사용자
메뉴
아티클
외부 아티클
유용한 코드
온라인 기능
MathJax 입력기
최근 덧글
[정성태] Java - How to use the Foreign Funct...
[정성태] 제가 큰 실수를 했군요. ^^; Delegate를 통한 Bein...
[정성태] Working with Rust Libraries from C#...
[정성태] Detecting blocking calls using asyn...
[정성태] 아쉽게도, 커뮤니티는 아니고 개인 블로그입니다. ^^
[정성태] 질문이 잘 이해가 안 됩니다. 우선, 해당 소스코드에서 ILis...
[양승조
] var대신 dinamic으로 선언해서 해결은 했습니다. 맞는 해...
[양승조
] 또 막혔습니다. ㅠㅠ var list = props[i].Ge...
[양승조
] 아. 감사합니다. 어제는 안됐던것 같은데....정신을 차려야겠네...
[정성태] "props[i].GetValue(props[i])" 코드에서 ...
글쓰기
제목
이름
암호
전자우편
HTML
홈페이지
유형
제니퍼 .NET
닷넷
COM 개체 관련
스크립트
VC++
VS.NET IDE
Windows
Team Foundation Server
디버깅 기술
오류 유형
개발 환경 구성
웹
기타
Linux
Java
DDK
Math
Phone
Graphics
사물인터넷
부모글 보이기/감추기
내용
<div style='display: inline'> <h1 style='font-family: Malgun Gothic, Consolas; font-size: 20pt; color: #006699; text-align: center; font-weight: bold'>github workflow/actions에서 Visual Studio Marketplace 패키지 등록하는 방법</h1> <p> 지난 글에 이어,<br /> <br /> <pre style='margin: 10px 0px 10px 10px; padding: 10px 0px 10px 10px; background-color: #fbedbb; overflow: auto; font-family: Consolas, Verdana;' > github workflow/actions에서 nuget 패키지 등록하는 방법 ; <a target='tab' href='https://www.sysnet.pe.kr/2/0/12548'>https://www.sysnet.pe.kr/2/0/12548</a> </pre> <br /> 이번에는 <a target='tab' href='https://marketplace.visualstudio.com/'>https://marketplace.visualstudio.com/</a>에 패키지를 배포하는 방법에 대해 살펴보겠습니다.<br /> <br /> 이를 위한 action과,<br /> <br /> <pre style='margin: 10px 0px 10px 10px; padding: 10px 0px 10px 10px; background-color: #fbedbb; overflow: auto; font-family: Consolas, Verdana;' > VsixPublisher Github Action ; <a target='tab' href='https://github.com/marketplace/actions/vsix-publisher'>https://github.com/marketplace/actions/vsix-publisher</a> </pre> <br /> 자세한 사용법을 이미 웹 상에서 찾을 수 있습니다.<br /> <br /> <pre style='margin: 10px 0px 10px 10px; padding: 10px 0px 10px 10px; background-color: #fbedbb; overflow: auto; font-family: Consolas, Verdana;' > Github Actions for Visual Studio Extension developers ; <a target='tab' href='https://cezarypiatek.github.io/post/develop-vsextension-with-github-actions/#how-to-publish-extension-to-the-marketplace'>https://cezarypiatek.github.io/post/develop-vsextension-with-github-actions/#how-to-publish-extension-to-the-marketplace</a> </pre> <br /> 마켓플레이스 등록을 위해 당연히 PAT(Personal Access Token)가 필요한데 <a target='tab' href='https://dev.azure.com'>https://dev.azure.com</a>을 들어가 로그인하면 다음과 같이 토큰을 구하는 메뉴를 선택할 수 있습니다.<br /> <br /> [그림 출처: <a target='tab' href='https://code.visualstudio.com/api/working-with-extensions/publishing-extension'>https://code.visualstudio.com/api/working-with-extensions/publishing-extension</a>]<br /> <img onclick='toggle_img(this)' class='imgView' alt='vs_pat_token_1.png' src='/SysWebRes/bbs/vs_pat_token_1.png' /><br /> <br /> 해당 토큰의 Expiration은 기본값이 30일인데, 최대 1년까지 설정할 수 있으므로 편의상 변경해주고 권한은 "Marketplace"의 "Manage"를 설정해 줍니다. (처음 출력되는 기본 Scope 목록에는 "Marketplace"가 없으므로 하단의 "Show all scopes" 링크를 눌러야 합니다.)<br /> <br /> <img onclick='toggle_img(this)' class='imgView' alt='vs_pat_token_2.png' src='/SysWebRes/bbs/vs_pat_token_2.png' /><br /> <br /> 이렇게 해서 생성한 token 값을 github repo의 Settings를 통해 "<a target='tab' href='https://www.sysnet.pe.kr/2/0/12546'>Encrypted secrets</a>"에 등록해 줍니다. (여기서는 VSGALLERY_API_KEY 이름으로 등록했다고 가정합니다.)<br /> <br /> 자, 그럼 끝났군요. ^^ 다음과 같은 action 스크립트만 yml에 추가하는 것으로 마무리할 수 있습니다.<br /> <br /> <pre style='margin: 10px 0px 10px 10px; padding: 10px 0px 10px 10px; background-color: #fbedbb; overflow: auto; font-family: Consolas, Verdana;' > - name: Publish extension to Marketplace uses: cezarypiatek/VsixPublisherAction@0.2 with: extension-file: ./XmlCodeGenerator/bin/${{env.BUILD_CONFIGURATION}}/XmlCodeGenerator.vsix publish-manifest-file: ./XmlCodeGenerator/publishManifest.json personal-access-code: ${{ secrets.VSGALLERY_API_KEY }} </pre> <br /> 만약 기존에 vsix 파일을 <a target='tab' href='https://marketplace.visualstudio.com'>marketplace.visualstudio.com</a>을 이용해 수동으로 직접 등록했다면 아마도 publishManifest.json 파일을 한 번도 작성한 적이 없을 것입니다. 제 경우에는 대충 아래의 문서에 따라,<br /> <br /> <pre style='margin: 10px 0px 10px 10px; padding: 10px 0px 10px 10px; background-color: #fbedbb; overflow: auto; font-family: Consolas, Verdana;' > publishManifest file ; <a target='tab' href='https://docs.microsoft.com/en-us/visualstudio/extensibility/walkthrough-publishing-a-visual-studio-extension-via-command-line?view=vs-2019#publishmanifest-file'>https://docs.microsoft.com/en-us/visualstudio/extensibility/walkthrough-publishing-a-visual-studio-extension-via-command-line?view=vs-2019#publishmanifest-file</a> </pre> <br /> 다음과 같이 작성했습니다.<br /> <br /> <pre style='margin: 10px 0px 10px 10px; padding: 10px 0px 10px 10px; background-color: #fbedbb; overflow: auto; font-family: Consolas, Verdana;' > { "$schema": "http://json.schemastore.org/vsix-publish", "categories": [ "coding" ], "identity": { "internalName": "XmlCodeGenerator" }, "overview": "overview.md", "priceCategory": "free", "publisher": "SeongTaeJeong", "private": false, "qna": true, "repo": "https://github.com/stjeong/XmlCodeGenerator" } </pre> <br /> 아무튼, 이렇게까지 준비를 마쳤으면 정상적으로 vsix가 등록될 것입니다. 실제 사용 예를 다음의 yml 파일에 적용했으니 참고하시고,<br /> <br /> <pre style='margin: 10px 0px 10px 10px; padding: 10px 0px 10px 10px; background-color: #fbedbb; overflow: auto; font-family: Consolas, Verdana;' > XmlCodeGenerator/.github/workflows/git-releases.yml ; <a target='tab' href='https://github.com/stjeong/XmlCodeGenerator/blob/master/.github/workflows/git-releases.yml'>https://github.com/stjeong/XmlCodeGenerator/blob/master/.github/workflows/git-releases.yml</a> </pre> <br /> 이 와중에 경험한 오류 유형도 도움이 되실 것입니다. ^^<br /> <br /> <pre style='margin: 10px 0px 10px 10px; padding: 10px 0px 10px 10px; background-color: #fbedbb; overflow: auto; font-family: Consolas, Verdana;' > VsixPublisher를 이용한 등록 시 다양한 오류 유형 해결책 ; <a target='tab' href='https://www.sysnet.pe.kr/2/0/12549'>https://www.sysnet.pe.kr/2/0/12549</a> </pre> <br /> <hr style='width: 50%' /><br /> <br /> 유의할 점이 하나 있다면, Personal Access Token의 만료가 (최대) 1년 단위이기 때문에 매해 secrets.VSGALLERY_API_KEY를 갱신시켜줘야 합니다. 그런데 <a target='tab' href='https://www.sysnet.pe.kr/2/0/12548#nuget_token_expiration'>재미있는 것은 nuget api key와는 달리</a> Azure Devops의 PAT는 날짜 만료를 편집하는 것이 가능하기 때문에 만료로 인해 secrets.VSGALLERY_API_KEY까지 업데이트하기 보다는 <a target='tab' href='https://dev.azure.com/'>PAT 관리 화면</a>에서 해당 키를 "Edit" 화면으로 들어가 미리 만료 기간을 뒤로 미루는 식으로 편집해 두는 것이 더 편리합니다. (물론, 이런 것은 보안 정책 상 권장하는 방법이 아닐 수 있습니다.)<br /> <br /> 또한, <a target='tab' href='https://www.sysnet.pe.kr/2/0/12548#nuget_re_register'>nuget 패키지 등록과는 달리</a> cezarypiatek/VsixPublisherAction은 이미 같은 버전의 패키지가 <a target='tab' href='https://marketplace.visualstudio.com'>marketplace.visualstudio.com</a>에 등록되어 있다면 기존 버전을 엎어서 등록하는 방식으로 동작한다는 점!<br /> <br /> <hr style='width: 50%' /><br /> <br /> 참고로, "VS Code" 확장을 배포하는 action도 있습니다.<br /> <br /> <pre style='margin: 10px 0px 10px 10px; padding: 10px 0px 10px 10px; background-color: #fbedbb; overflow: auto; font-family: Consolas, Verdana;' > Publish VS Code Extension ? GitHub Action ; <a target='tab' href='https://github.com/marketplace/actions/publish-vs-code-extension'>https://github.com/marketplace/actions/publish-vs-code-extension</a> </pre> <br /> 이것을 사용해 "Visual Studio" 확장을 배포하려고 시도하면,<br /> <br /> <pre style='margin: 10px 0px 10px 10px; padding: 10px 0px 10px 10px; background-color: #fbedbb; overflow: auto; font-family: Consolas, Verdana;' > - name: Publish to Visual Studio Marketplace uses: HaaLeo/publish-vscode-extension@v0 with: pat: ${{ secrets.VSGALLERY_API_KEY }} registryUrl: https://marketplace.visualstudio.com extensionFile: ./XmlCodeGenerator/bin/${{env.BUILD_CONFIGURATION}}/XmlCodeGenerator.vsix packagePath: '' </pre> <br /> manifest를 찾을 수 없다는 오류 메시지가 발생합니다.<br /> <br /> <pre style='margin: 10px 0px 10px 10px; padding: 10px 0px 10px 10px; background-color: #fbedbb; overflow: auto; font-family: Consolas, Verdana;' > Run HaaLeo/publish-vscode-extension@v0 with: pat: *** registryUrl: https://marketplace.visualstudio.com extensionFile: ./XmlCodeGenerator/bin/Release/XmlCodeGenerator.vsix yarn: false dryRun: false env: SOLUTION_FILE_PATH: . BUILD_CONFIGURATION: Release Specifically, running GitHub Action HaaLeo/publish-vscode-extension@v0.3.1. Package the Extension The extension was already packaged. Skip packaging. Publish the Extension Error: Error: Manifest not found at ZipFile.onEnd (D:\a\_actions\HaaLeo\publish-vscode-extension\v0\dist\index.js:73671:35) at Object.onceWrapper (events.js:299:28) at ZipFile.emit (events.js:210:5) at Immediate.<anonymous> (D:\a\_actions\HaaLeo\publish-vscode-extension\v0\dist\index.js:6726:12) at processImmediate (internal/timers.js:439:21) </pre> <br /> 왜냐하면, VSCode 확장의 manifest 파일은 package.json이고 Visual Studio 확장의 manifest 파일은 (스키마도 약간 다른) publishManifest.json이기 때문에 저런 오류가 발생하는 것입니다. 해본 것은 아니지만, 아마도 package.json을 따로 만들어 준다 해도 VSCode와 Visual Studio는 갤러리 차원에서 구분이 될 것이므로 publish-vscode-extension action을 사용할 수는 없을 것입니다.<br /> </p><br /> <br /><hr /><span style='color: Maroon'>[이 글에 대해서 여러분들과 의견을 공유하고 싶습니다. 틀리거나 미흡한 부분 또는 의문 사항이 있으시면 언제든 댓글 남겨주십시오.]</span> </div>
첨부파일
스팸 방지용 인증 번호
2137
(왼쪽의 숫자를 입력해야 합니다.)