연습: 명령줄을 통해 Visual Studio 확장 게시Walkthrough: Publishing a Visual Studio extension via command line

이 연습에서는 명령줄을 사용 하 여 Visual Studio Marketplace에 Visual Studio 확장을 게시 하는 방법을 보여 줍니다.This walkthrough shows you how to publish a Visual Studio extension to the Visual Studio Marketplace using the command line. Marketplace에 확장을 추가 하면 개발자가 확장 및 업데이트 대화 상자를 사용 하 여 새 확장과 업데이트 된 확장을 찾을 수 있습니다.When you add your extension to the Marketplace, developers can use the Extensions and Updates dialog to browse there for new and updated extensions.

VsixPublisher.exe는 Visual Studio 확장을 Marketplace에 게시 하기 위한 명령줄 도구입니다.VsixPublisher.exe is the command line tool for publishing Visual Studio extensions to the Marketplace. $ {VSInstallDir} \VSSDK\VisualStudioIntegration\Tools\Bin\VsixPublisher.exe에서 액세스할 수 있습니다.It can be accessed from ${VSInstallDir}\VSSDK\VisualStudioIntegration\Tools\Bin\VsixPublisher.exe. 이 도구에서 사용할 수 있는 명령은 게시, createpublisher, deletepublisher, deletepublisher, loginlogout 입니다.Commands available on this tool are: publish, createPublisher, deletePublisher, deleteExtension, login, logout.

명령Commands

게시publish

Marketplace에 확장을 게시 합니다.Publishes an extension to the Marketplace. 확장은 vsix, exe/msi 파일 또는 링크 일 수 있습니다.The extension can be a vsix, an exe/msi file, or a link. 동일한 버전의 확장이 이미 있으면 확장을 덮어씁니다.If the extension already exists with the same version, it will overwrite the extension. 확장 프로그램이 아직 없는 경우 새 확장을 만듭니다.If the extension does not already exist, it will create a new extension.

명령 옵션Command Options DescriptionDescription
페이로드 (필수)payload (required) 게시할 페이로드의 경로 이거나 "추가 정보 URL"로 사용할 링크입니다.Either a path to the payload to publish or a link to use as the "more info URL".
항목 매니페스트 (필수)publishManifest (required) 사용할 게시 매니페스트 파일의 경로입니다.Path to the publish manifest file to use.
ignoreWarningsignoreWarnings 확장을 게시할 때 무시할 경고 목록입니다.List of warnings to ignore when publishing an extension. 이러한 경고는 확장을 게시할 때 명령줄 메시지로 표시 됩니다.These warnings are shown as command line messages when publishing an extension. (예: "VSIXValidatorWarning01, VSIXValidatorWarning02")(for example, "VSIXValidatorWarning01, VSIXValidatorWarning02")
personalAccessTokenpersonalAccessToken 게시자를 인증 하는 데 사용 되는 PAT (개인용 액세스 토큰)입니다.Personal Access Token (PAT) that's used to authenticate the publisher. 제공 되지 않은 경우에는 로그인 한 사용자가 PAT를 획득 합니다.If not provided, the PAT is acquired from the logged-in users.
VsixPublisher.exe publish -payload "{path to vsix}" -publishManifest "{path to vs-publish.json}" -ignoreWarnings "VSIXValidatorWarning01,VSIXValidatorWarning02"

createPublishercreatePublisher

Marketplace에서 게시자를 만듭니다.Creates a publisher on the Marketplace. 또한 향후 작업을 위해 게시자를 컴퓨터에 기록 합니다 (예: 확장 삭제/게시).Also logs the publisher into the machine for future actions (for example, deleting/publishing an extension).

명령 옵션Command Options DescriptionDescription
displayName (필수)displayName (required) 게시자의 표시 이름입니다.Display name of the publisher.
가 나 Ername (필수)publisherName (required) 게시자 이름 (예: 식별자)입니다.The name of the publisher (for example, the identifier).
personalAccessToken (필수)personalAccessToken (required) 게시자를 인증 하는 데 사용 되는 개인 액세스 토큰입니다.Personal Access Token that is used to authenticate the publisher.
shortDescriptionshortDescription 게시자에 대 한 간단한 설명입니다 (파일이 아님).A short description of the publisher (not a file).
이상 설명longDescription 게시자에 대 한 자세한 설명입니다 (파일이 아님).A long description of the publisher (not a file).
VsixPublisher.exe createPublisher -publisherName "{Publisher Name}" -displayName "{Publisher Display Name}" -personalAccessToken "{Personal Access Token}"

deletePublisherdeletePublisher

Marketplace에서 게시자를 삭제 합니다.Deletes a publisher on the Marketplace.

명령 옵션Command Options DescriptionDescription
가 나 Ername (필수)publisherName (required) 게시자 이름 (예: 식별자)입니다.The name of the publisher (for example, the identifier).
personalAccessToken (필수)personalAccessToken (required) 게시자를 인증 하는 데 사용 되는 개인 액세스 토큰입니다.Personal Access Token that is used to authenticate the publisher.
VsixPublisher.exe deletePublisher -publisherName "{Publisher Name}" -personalAccessToken "{Personal Access Token}"

deleteExtensiondeleteExtension

Marketplace에서 확장을 삭제 합니다.Deletes an extension from the Marketplace.

명령 옵션Command Options DescriptionDescription
extensionName (필수)extensionName (required) 삭제할 확장의 이름입니다.The name of the extension to delete.
가 나 Ername (필수)publisherName (required) 게시자 이름 (예: 식별자)입니다.The name of the publisher (for example, the identifier).
personalAccessTokenpersonalAccessToken 게시자를 인증 하는 데 사용 되는 개인 액세스 토큰입니다.Personal Access Token that is used to authenticate the publisher. 제공 되지 않은 경우에는 로그인 한 사용자가 pat를 획득 합니다.If not provided, the pat is acquired from the logged-in users.
VsixPublisher.exe deleteExtension -extensionName "{Extension Name}" -publisherName "{Publisher Name}"

로그인login

컴퓨터에 게시자를 로깅합니다.Logs a publisher into the machine.

명령 옵션Command Options DescriptionDescription
personalAccessToken (필수)personalAccessToken (required 게시자를 인증 하는 데 사용 되는 개인 액세스 토큰입니다.Personal Access Token that is used to authenticate the publisher.
가 나 Ername (필수)publisherName (required) 게시자 이름 (예: 식별자)입니다.The name of the publisher (for example, the identifier).
overwriteoverwrite 새 개인용 액세스 토큰을 사용 하 여 기존 게시자를 덮어쓰도록 지정 합니다.Specifies that any existing publisher should be overwritten with the new personal access token.
VsixPublisher.exe login -personalAccessToken "{Personal Access Token}" -publisherName "{Publisher Name}"

logoutlogout

컴퓨터에서 게시자를 로깅합니다.Logs a publisher out of the machine.

명령 옵션Command Options DescriptionDescription
가 나 Ername (필수)publisherName (required) 게시자 이름 (예: 식별자)입니다.The name of the publisher (for example, the identifier).
ignoreMissingPublisherignoreMissingPublisher 지정 된 게시자가 아직 로그인 하지 않은 경우 도구에 오류가 발생 하지 않도록 지정 합니다.Specifies that the tool should not error if the specified publisher is not already logged-in.
VsixPublisher.exe logout -publisherName "{Publisher Name}"

파일 매니페스트 파일publishManifest file

게시 명령에서 사용할 수 있는 매니페스트 파일을 사용 합니다.A publishManifest file is used by the publish command. Marketplace에서 알고 있어야 하는 확장에 대 한 모든 메타 데이터를 나타냅니다.It represents all the metadata about the extension that the Marketplace needs to know. 업로드할 확장이 VSIX 확장의 경우 "identity" 속성은 "internalName"만 설정 해야 합니다.If the extension being uploaded is from a VSIX extension, the "identity" property must only have the "internalName" set. 이는 source.extension.vsixmanifest 파일에서 "id"의 나머지 속성을 생성할 수 있기 때문입니다.This is because the rest of the "identity" properties can be generated from the vsixmanifest file. 확장이 msi/exe 또는 링크 확장인 경우 "identity" 속성에 필수 필드를 제공 해야 합니다.If the extension is a msi/exe or a link extension, the user must provide the required fields in the "identity" property. 매니페스트의 나머지 부분에는 Marketplace에 대 한 정보 (예: 범주, Q&A가 사용 하도록 설정 되었는지 여부)가 포함 되어 있습니다.The rest of the manifest contains information specific to the Marketplace (for example, categories, whether Q&A is enabled, etc.).

VSIX 확장: 매니페스트 파일 샘플:VSIX extension publishManifest file sample:

{
    "$schema": "http://json.schemastore.org/vsix-publish",
    "categories": [ "build", "coding" ],  // The categories of the extension. Between 1 and 3 categories are required.
    "identity": {
        "internalName": "MyVsixExtension" // If not specified, we try to generate the name from the display name of the extension in the vsixmanifest file.
                                            // Required if the display name is not the actual name of the extension.
    },
    "overview": "overview.md",            // Path to the "readme" file that gets uploaded to the Marketplace. Required.
    "priceCategory": "free",              // Either "free", "trial", or "paid". Defaults to "free".
    "publisher": "MyPublisherName",       // The name of the publisher. Required.
    "private": false,                     // Specifies whether or not the extension should be public when uploaded. Defaults to false.
    "qna": true,                          // Specifies whether or not the extension should have a Q&A section. Defaults to true.
    "repo": "https://github.com/MyPublisherName/MyVsixExtension" // Not required.
}

MSI/EXE 또는 링크 파일 매니페스트 파일 샘플:MSI/EXE or LINK publishManifest file sample:

{
    "$schema": "http://json.schemastore.org/vsix-publish",
    "categories": [ "build", "coding" ],
    "identity": {
        "description": "My extension.", // The description of the extension. Required for non-vsix extensions.
        "displayName": "My Extension",  // The display name of the extension. Required for non-vsix extensions.
        "icon": "\\path\\to\\icon.ico", // The path to an icon file (can be relative to the json file location). Required for non-vsix extensions.
        "installTargets": [             // The installation targets for the extension. Required for non-vsix extensions.
            {
                "sku": "Microsoft.VisualStudio.Community",
                "version": "[10.0, 16.0)"
            }
        ],
        "internalName": "MyExtension",
        "language": "en-US",            // The default language id of the extension. Can be in the "1033" or "en-US" format. Required for non-vsix extensions.
        "tags": [ "tag1", "tag2" ],     // The tags for the extension. Not required.
        "version": "3.7.0",             // The version of the extension. Required for non-vsix extensions.
        "vsixId": "MyExtension",        // The vsix id of the extension. Not required but useful for showing updates to installed extensions.
    },
    "overview": "overview.md",
    "priceCategory": "free",
    "publisher": "MyPublisherName",
    "private": false,
    "qna": true,
    "repo": "https://github.com/MyPublisherName/MyVsixExtension"
}

자산 파일Asset files

추가 정보 파일에 이미지와 같은 항목을 포함 하기 위해 자산 파일을 제공할 수 있습니다.Asset files can be provided for embedding things like images in the readme file. 예를 들어 확장에 다음 "개요" Markdown 문서가 있는 경우:For example, if an extension has the following "overview" Markdown document:

TestExtension
...
This is test extension.
![Test logo](images/testlogo.png "Test logo")

이전 예제에서 "images/testlogo.png"을 해결 하기 위해 사용자는 아래와 같이 해당 게시 매니페스트에 "assetFiles"를 제공할 수 있습니다.In order to resolve "images/testlogo.png" in the previous example, a user can provide "assetFiles" in their publish manifest like below:

{
    "assetFiles": [
        {
            "pathOnDisk": "\\path\\to\\logo.png",
            "targetPath": "images/logo.png"
        }
    ],
    // other required fields
}

연습 게시Publishing walkthrough

사전 요구 사항Prerequisites

이 연습을 수행하려면 Visual Studio SDK를 설치해야 합니다.To follow this walkthrough, you must install the Visual Studio SDK. 자세한 내용은 Visual STUDIO SDK 설치를 참조 하세요.For more information, see Installing the Visual Studio SDK.

Visual Studio 확장 만들기Create a Visual Studio extension

이 경우에는 기본 VSPackage 확장을 사용 하지만 동일한 단계는 모든 종류의 확장에 대해 유효 합니다.In this case, we will use a default VSPackage extension, but the same steps are valid for every kind of extension.

  1. 메뉴 명령을 포함 하는 "TestPublish" 라는 c #에서 VSPackage를 만듭니다.Create a VSPackage in C# named "TestPublish" that has a menu command. 자세한 내용은 첫 번째 확장 만들기: 헬로 월드를 참조 하세요.For more information, see Creating your First Extension: Hello World.

확장 패키지Package your extension

  1. 제품 이름, 저자 및 버전에 대 한 올바른 정보를 사용 하 여 source.extension.vsixmanifest 확장을 업데이트 합니다.Update the extension vsixmanifest with the correct information about product name, author, and version.

    확장 source.extension.vsixmanifest 업데이트

  2. 릴리스 모드에서 확장을 빌드합니다.Build your extension in Release mode. 이제 확장이 \bin\Release 폴더에 VSIX로 패키지 됩니다.Now your extension will be packaged as a VSIX in the \bin\Release folder.

  3. VSIX를 두 번 클릭 하 여 설치를 확인할 수 있습니다.You can double-click the VSIX to verify the installation.

확장 테스트Test the extension

확장을 배포 하기 전에 빌드 및 테스트를 수행 하 여 Visual Studio의 실험적 인스턴스에 제대로 설치 되었는지 확인 합니다.Before you distribute the extension, build, and test it to make sure it is installed correctly in the experimental instance of Visual Studio.

  1. Visual Studio에서 디버깅을 시작 합니다.In Visual Studio, start debugging. Visual Studio의 실험적 인스턴스를 엽니다.to open an experimental instance of Visual Studio.

  2. 실험적 인스턴스에서 도구 메뉴로 이동 하 여 확장 및 업데이트 ... 를 클릭 합니다. TestPublish 확장은 가운데 창에 표시 되 고 사용 하도록 설정 되어야 합니다.In the experimental instance, go to the Tools menu and click Extensions and Updates.... The TestPublish extension should appear in the center pane and be enabled.

  3. 도구 메뉴에서 테스트 명령이 표시 되는지 확인 합니다.On the Tools menu, make sure you see the test command.

명령줄을 통해 Marketplace에 확장을 게시 합니다.Publish the extension to the Marketplace via command line

  1. 확장의 릴리스 버전을 빌드하고 최신 버전 인지 확인 해야 합니다.Make sure that you have built the Release version of your extension and that it is up-to-date.

  2. publishmanifest.js및 overview.md 파일을 만들었는지 확인 합니다.Make sure you have created publishmanifest.json and overview.md files.

  3. 명령줄을 열고 $ {VSInstallDir} \VSSDK\VisualStudioIntegration\Tools\Bin\ directory로 이동 합니다.Open command line and navigate to ${VSInstallDir}\VSSDK\VisualStudioIntegration\Tools\Bin\ directory.

  4. 새 게시자를 만들려면 다음 명령을 사용 합니다.To create a new publisher, use the following command:

    VsixPublisher.exe createPublisher -publisherName "TestVSIXPublisher" -displayName "Test VSIX Publisher" -personalAccessToken "{Personal Access Token that is used to authenticate the publisher. If not provided, the pat is acquired from the logged-in users.}"
    
  5. 게시자를 성공적으로 만들면 다음과 같은 명령줄 메시지가 표시 됩니다.On successful creation of publisher, you will see the following command line message:

    Added 'Test VSIX Publisher' as a publisher on the Marketplace.
    
  6. 으로 이동 하 여 만든 새 게시자를 확인할 수 있습니다 Visual Studio MarketplaceYou can verify the new publisher you created by navigating to Visual Studio Marketplace

  7. 새 확장을 게시 하려면 다음 명령을 사용 합니다.To publish a new extension, use the following command:

    VsixPublisher.exe publish -payload "{Path to vsix file}"  -publishManifest "{path to publishManifest file}"
    
  8. 게시자를 성공적으로 만들면 다음과 같은 명령줄 메시지가 표시 됩니다.On successful creation of publisher, you will see the following command line message:

    Uploaded 'MyVsixExtension' to the Marketplace.
    
  9. 로 이동 하 여 게시 한 새 확장을 확인할 수 있습니다 Visual Studio MarketplaceYou can verify the new extension you published by navigating to Visual Studio Marketplace

Visual Studio Marketplace에서 확장을 설치 합니다.Install the extension from the Visual Studio Marketplace

이제 확장이 게시 되었으므로 Visual Studio에 설치 하 고 테스트 합니다.Now that the extension is published, install it in Visual Studio and test it there.

  1. Visual Studio의 도구 메뉴에서 확장 및 업데이트 ... 를 클릭 합니다.In Visual Studio, on the Tools menu, click Extensions and Updates....

  2. 온라인 을 클릭 한 다음 testpublish를 검색 합니다.Click Online and then search for TestPublish.

  3. 다운로드 를 클릭합니다.Click Download. 그러면 확장이 설치 되도록 예약 됩니다.The extension will then be scheduled for install.

  4. 설치를 완료 하려면 Visual Studio의 모든 인스턴스를 닫습니다.To complete the installation, close all instances of Visual Studio.

확장 제거Remove the extension

Visual Studio Marketplace 및 컴퓨터에서 확장을 제거할 수 있습니다.You can remove the extension from the Visual Studio Marketplace and from your computer.

명령줄을 통해 Marketplace에서 확장을 제거 하려면To remove the extension from the Marketplace via command line

  1. 확장을 제거 하려면 다음 명령을 사용 합니다.If you want to remove an extension, use the following command:

    VsixPublisher.exe deleteExtension -publisherName "TestVSIXPublisher" -extensionName "MyVsixExtension"
    
  2. 확장이 성공적으로 삭제 되 면 다음과 같은 명령줄 메시지가 표시 됩니다.On successful deletion of extension, you will see the following command line message:

    Removed 'MyVsixExtension' from the Marketplace.
    

컴퓨터에서 확장을 제거 하려면To remove the extension from your computer

  1. Visual Studio의 도구 메뉴에서 확장 및 업데이트 를 클릭 합니다.In Visual Studio, on the Tools menu, click Extensions and Updates.

  2. "MyVsixExtension"을 선택 하 고 제거 를 클릭 합니다.Select "MyVsixExtension" and then click Uninstall. 그러면 확장이 제거 되도록 예약 됩니다.The extension will then be scheduled for uninstall.

  3. 제거를 완료 하려면 Visual Studio의 모든 인스턴스를 닫습니다.To complete the uninstallation, close all instances of Visual Studio.