명령줄에서 ClickOnce 애플리케이션 빌드

Visual Studio에서는 IDE(통합 개발 환경)에서 프로젝트를 만들었더라도 명령줄에서 프로젝트를 빌드할 수 있습니다. 실제로 .NET Framework만 설치되어 있는 다른 컴퓨터에서 Visual Studio로 만든 프로젝트를 다시 빌드할 수 있습니다. 이 기능을 사용하면 자동화된 프로세스를 사용하여 빌드를 재현할 수 있습니다(예: 중앙 빌드 랩에서 또는 프로젝트 자체를 빌드하는 범위를 벗어나는 고급 스크립팅 기술 사용).

참고 항목

명령줄에서 .NET ClickOnce 애플리케이션을 빌드하려면 명령줄에서 .NET ClickOnce 애플리케이션 빌드를 참조하세요.

MSBuild를 사용하여 .NET Framework ClickOnce 애플리케이션 배포 재현

명령줄에서 msbuild /target:publish를 호출하면, 이 명령은 MSBuild 시스템에 프로젝트를 빌드하고 publish 폴더에 ClickOnce 애플리케이션을 만들도록 지시합니다. 이 명령은 IDE에서 게시 명령을 선택하는 것과 같습니다.

이 명령은 Visual Studio 명령 프롬프트 환경의 경로에 있는 msbuild.exe를 실행합니다.

"대상"은 명령을 처리하는 방법을 MSBuild에 알려 주는 표시기입니다. 주요 대상은 "빌드" 대상과 "게시" 대상입니다. 빌드 대상은 IDE에서 빌드 명령을 선택하거나 F5 키를 누르는 것과 같습니다. 프로젝트만 빌드하려는 경우 msbuild를 입력할 수 있습니다. 빌드 대상이 Visual Studio에서 생성된 모든 프로젝트의 기본 대상이기 때문에 이 명령은 작동합니다. 따라서 빌드 대상을 명시적으로 지정할 필요가 없습니다. 따라서 msbuild 입력은 msbuild /target:build 입력과 동일한 작업입니다.

/target:publish 명령은 게시 대상을 호출하도록 MSBuild에 지시합니다. 게시 대상은 빌드 대상에 따라 달라집니다. 즉, 게시 작업은 빌드 작업의 상위 집합입니다. 예를 들어 Visual Basic 또는 C# 원본 파일을 변경한 경우, 게시 작업은 해당 어셈블리를 자동으로 다시 빌드합니다.

Mage.exe 명령줄 도구로 전체 ClickOnce 배포를 생성하여 ClickOnce 매니페스트를 만드는 방법에 대한 자세한 내용은 연습: 수동으로 ClickOnce 애플리케이션 배포를 참조하세요.

MSBuild로 기본 ClickOnce 애플리케이션 만들기 및 빌드

게시 프로필을 만드는 가장 쉬운 방법은 Visual Studio를 사용하는 것입니다. MSBuild를 사용하여 게시하려면 게시 프로필이 필요합니다.

ClickOnce 프로젝트를 만들고 게시

  1. Visual Studio를 연 다음 새 프로젝트를 만듭니다.

    Windows Forms 앱(.NET Framework) 또는 WPF 앱(.NET Framework) 프로젝트 템플릿을 선택하고 프로젝트 이름을 CmdLineDemo로 지정합니다.

  2. 빌드 메뉴에서 게시 명령을 선택합니다.

    이 단계에서는 ClickOnce 애플리케이션 배포를 생성하도록 프로젝트가 제대로 구성되었는지 확인합니다.

    게시 마법사가 나타납니다.

  3. 게시 마법사에서 마침을 선택합니다.

    Visual Studio가 Publish.htm이라는 기본 웹 페이지를 생성하고 표시합니다.

  4. 프로젝트를 저장하고 프로젝트가 저장되는 폴더 위치를 기록해 둡니다.

    이전 단계는 처음으로 게시된 ClickOnce 프로젝트를 만듭니다. 이제 IDE 외부에서 빌드를 재현할 수 있습니다.

명령줄에서 빌드 재현

  1. Visual Studio를 끝냅니다.

  2. Windows 시작 메뉴에서 도구>명령줄>개발자 명령 프롬프트를 선택합니다.

    Visual Studio 개발자 명령 프롬프트가 열립니다.

  3. Visual Studio 명령 프롬프트에서 현재 디렉터리에 앞에서 빌드한 프로젝트의 위치가 표시되는지 확인합니다.

    프로젝트 디렉터리에서 작업하지 않는 경우 명령을 입력하여 원하는 위치(예: chdir C:\Users\username\source\repos\CmdLineDemo)로 변경합니다.

  4. 이전 섹션에서 생성된 기존 파일을 제거하려면, rmdir /s publish를 입력합니다.

    이 단계는 선택 사항이지만 명령줄 빌드가 새 파일을 모두 생성했는지 확인합니다.

  5. msbuild /target:publish를 입력합니다.

    이전 단계에서는 Publish라는 프로젝트의 하위 폴더에 전체 ClickOnce 애플리케이션 배포를 생성합니다. CmdLineDemo.application은 ClickOnce 배포 매니페스트입니다. CmdLineDemo_1.0.0.0 폴더에는 CmdLineDemo.exe 파일과 ClickOnce 애플리케이션 매니페스트인 CmdLineDemo.exe.manifest가 포함되어 있습니다. Setup.exe는 기본적으로 .NET Framework를 설치하도록 구성된 부트스트래퍼입니다. DotNetFX 폴더에는 .NET Framework 재배포 가능 파일이 포함되어 있습니다. 이 위치의 파일은 웹 또는 UNC 또는 CD/DVD를 통해 애플리케이션을 배포하는 데 필요한 파일의 전체 집합을 구성합니다.

참고 항목

MSBuild 시스템은 PublishDir 옵션을 사용하여 출력 위치를 지정합니다(예: msbuild /t:publish /p:PublishDir="<specific location>").

게시 프로세스 출력

MSBuild는 PublishDir 속성을 사용하여 빌드 아티팩트 등 빌드 출력 위치를 설정합니다. MSBuild가 게시 대상으로 사용하는 PublishDir 값은 기본적으로 프로젝트 파일(.NET Framework)의 PublishDir 속성에서 가져옵니다. /p 스위치를 사용하여 MSBuild 명령줄에서 이 동작을 재정의할 수 있습니다. 설정을 재정의하면 게시 출력이 지정된 위치로 이동합니다. 출력은 MSBuild 게시 단계 중에 생성됩니다. 이 복사본이 만들어진 후 AfterTargets="ClickOncePublish"가 실행되는 모든 MSBuild 대상입니다.

PublishUrl 속성은 PublishDir과 달리 MSBuild 단계에서는 사용되지 않습니다. PublishUrl은 명령줄에서 게시하기 위해 MSBuild를 직접 호출할 때 무시됩니다.

Visual Studio IDE에서 게시가 시작되면 Visual Studio는 MSBuild를 호출하여 PublishDir 위치에 아티팩트를 게시합니다. 이 MSBuild 단계가 완료되면 Visual Studio는 ClickOnce 관련 파일을 PublishUrl이 가리키는 위치에 게시합니다. 이 두 번째 단계는 Visual Studio 프로세스 내에서 실행됩니다. Visual Studio 프로세스이므로 이 단계에서 실행할 대상/작업을 삽입할 수 없습니다.

Visual Studio를 사용하지 않는 MSBuild 배포의 경우 배포 디렉터리의 모든 파일을 배포 대상 또는 미디어에 복사합니다. 배포 디렉터리는 웹 사이트 또는 FTP 사이트의 폴더, 파일 공유 또는 CD-ROM일 수 있습니다. 예를 들어 타사 도구 또는 사용자 지정 MSBuild 작업을 사용하여 ClickOnce 파일을 복사할 수 있습니다.

PublishUrl 폴더의 후처리의 경우 별도의 스크립트가 있어야 합니다.

Important

PublishDirPublishUrl과 동일한 위치로 설정된 경우 중복 컴파일 출력이 PublishUrl 위치에 복사됩니다. Visual Studio 2022 버전 17.4 이상에서는 새 프로필을 만들어 이 문제를 방지할 수 있습니다. 새 프로필은 PublishDirPublishUrl과 다른 위치로 설정합니다. 게시 작업이 끝나면 관련 ClickOnce 파일이 PublishDir에서 PublishUrl 위치로 복사됩니다.

속성 게시

이전 절차를 사용하여 애플리케이션을 게시하면 게시 마법사에 의해 다음 속성이 프로젝트 파일에 삽입됩니다. 이러한 속성은 ClickOnce 애플리케이션이 생성되는 방식에 직접적인 영향을 미칩니다.

CmdLineDemo.vbproj / CmdLineDemo.csproj에서:

<AssemblyOriginatorKeyFile>WindowsApplication3.snk</AssemblyOriginatorKeyFile>
<GenerateManifests>true</GenerateManifests>
<TargetZone>LocalIntranet</TargetZone>
<PublisherName>Microsoft</PublisherName>
<ProductName>CmdLineDemo</ProductName>
<PublishUrl>http://localhost/CmdLineDemo</PublishUrl>
<Install>true</Install>
<ApplicationVersion>1.0.0.*</ApplicationVersion>
<ApplicationRevision>1</ApplicationRevision>
<UpdateEnabled>true</UpdateEnabled>
<UpdateRequired>false</UpdateRequired>
<UpdateMode>Foreground</UpdateMode>
<UpdateInterval>7</UpdateInterval>
<UpdateIntervalUnits>Days</UpdateIntervalUnits>
<UpdateUrlEnabled>false</UpdateUrlEnabled>
<IsWebBootstrapper>true</IsWebBootstrapper>
<BootstrapperEnabled>true</BootstrapperEnabled>

.NET Framework 프로젝트의 경우 프로젝트 파일 자체를 변경하지 않고 명령줄에서 이러한 속성을 재정의할 수 있습니다. 예를 들어 다음은 부트스트래퍼 없이 ClickOnce 애플리케이션 배포를 빌드할 수 있습니다.

msbuild /target:publish /property:BootstrapperEnabled=false

게시 속성은 Visual Studio에서 프로젝트 디자이너게시, 보안서명 속성 페이지에서 제어됩니다.

다음 게시 속성은 애플리케이션 디자이너의 다양한 속성 페이지에 설정됩니다.

  • AssemblyOriginatorKeyFile은 ClickOnce 애플리케이션 매니페스트에 서명하는 데 사용되는 키 파일을 결정합니다. 동일한 키를 사용하여 어셈블리에 강력한 이름을 할당할 수도 있습니다. 이 속성은 프로젝트 디자이너서명 페이지에서 설정됩니다.

다음 속성은 보안 페이지에서 설정됩니다.

  • ClickOnce 보안 사용 설정은 ClickOnce 매니페스트가 생성되는지 여부를 결정합니다. 프로젝트를 처음 만들 때 ClickOnce 매니페스트 생성은 기본적으로 꺼져 있습니다. 처음 게시할 때 마법사에서 이 플래그를 자동으로 켭니다.

  • TargetZone은 ClickOnce 애플리케이션 매니페스트로 내보낼 신뢰 수준을 결정합니다. 가능한 값은 "Internet", "LocalIntranet" 및 "Custom"입니다. 인터넷 및 LocalIntranet을 사용하면 기본 권한 집합이 ClickOnce 애플리케이션 매니페스트로 내보내집니다. LocalIntranet이 기본값이며, 기본적으로 완전 신뢰를 의미합니다. Custom은 기본 app.manifest 파일에 명시적으로 지정된 권한만 ClickOnce 애플리케이션 매니페스트로 내보내도록 지정합니다. app.manifest 파일은 신뢰 정보 정의만 포함하는 부분 매니페스트 파일입니다. 이 파일은 숨겨진 파일이며, 보안 페이지에서 권한을 구성할 때 프로젝트에 자동으로 추가됩니다.

다음 속성은 게시 페이지에서 설정됩니다.

  • PublishUrl은 IDE에서 애플리케이션이 게시되는 위치입니다. InstallUrlUpdateUrl 속성이 모두 지정되지 않는 경우 ClickOnce 애플리케이션 매니페스트에 삽입됩니다.

  • ApplicationVersion은 ClickOnce 애플리케이션의 버전을 지정합니다. 버전은 4자리 숫자입니다. 마지막 자리가 "*"(별표)인 경우 ApplicationRevision은 빌드 시 매니페스트에 삽입된 값으로 대체됩니다.

  • ApplicationRevision은 수정 버전을 지정합니다. 이 값은 IDE에 게시할 때마다 증가하는 정수입니다. 명령줄에서 수행되는 빌드의 경우에는 자동으로 증가하지 않습니다.

  • Install은 애플리케이션이 설치되는 애플리케이션인지 웹에서 실행되는 애플리케이션인지 여부를 지정합니다.

  • InstallUrl(표시되지 않음)은 사용자들이 애플리케이션을 설치하는 위치입니다. 지정되는 경우 IsWebBootstrapper가 사용하도록 설정되면 이 값이 setup.exe 부트스트래퍼에 기록됩니다. UpdateUrl이 지정되지 않은 경우에도 애플리케이션 매니페스트에 삽입됩니다.

  • SupportUrl(표시되지 않음)은 설치된 애플리케이션의 프로그램 추가/제거 대화 상자에 연결된 위치입니다.

다음 속성은 게시 페이지에서 액세스하는 애플리케이션 업데이트 대화 상자에서 설정됩니다.

  • UpdateEnabled는 애플리케이션이 업데이트를 확인해야 하는지 여부를 나타냅니다.

  • UpdateMode는 포그라운드 업데이트 또는 백그라운드 업데이트를 지정합니다.

  • UpdateInterval은 애플리케이션이 업데이트를 확인하는 빈도를 지정합니다.

  • UpdateIntervalUnitsUpdateInterval 값이 시간 단위인지 일 또는 주 단위인지 지정합니다.

  • UpdateUrl(표시되지 않음)은 애플리케이션이 업데이트를 받는 위치입니다. 지정된 경우 이 값이 애플리케이션 매니페스트에 삽입됩니다.

다음 속성은 게시 페이지에서 액세스하는 게시 옵션 대화 상자에서 설정됩니다.

  • PublisherName은 애플리케이션을 설치하거나 실행할 때 표시되는 프롬프트에 표시되는 게시자의 이름을 지정합니다. 설치된 애플리케이션의 경우 시작 메뉴에서 폴더 이름을 지정하는 데도 사용됩니다.

  • ProductName은 애플리케이션을 설치하거나 실행할 때 표시되는 프롬프트에 표시되는 제품 이름을 지정합니다. 설치된 애플리케이션의 경우 시작 메뉴에서 바로 가기 이름을 지정하는 데도 사용됩니다.

다음 속성은 게시 페이지에서 액세스하는 필수 구성 요소 대화 상자에서 설정됩니다.

  • BootstrapperEnabledsetup.exe 부트스트래퍼를 생성할지 여부를 결정합니다.

  • IsWebBootstrappersetup.exe 부트스트래퍼가 웹을 통해 작동하는지 디스크 기반 모드에서 작동하는지 여부를 결정합니다.

옵션 사용: InstallURL, SupportUrl, PublishURL, UpdateURL

다음 표는 ClickOnce 배포의 네 가지 URL 옵션을 보여 줍니다.

URL 옵션 설명
PublishURL ClickOnce 애플리케이션을 웹 사이트에 게시하는 데 필요합니다.
InstallURL 선택 사항입니다. 설치 사이트가 PublishURL과 다른 경우 이 URL 옵션을 설정합니다. 예를 들어 PublishURL을 FTP 경로로 설정하고 InstallURL을 웹 URL로 설정할 수 있습니다.
SupportURL 선택 사항입니다. 지원 사이트가 PublishURL과 다른 경우 이 URL 옵션을 설정합니다. 예를 들어 SupportURL을 회사의 고객 지원 웹 사이트로 설정할 수 있습니다.
UpdateURL 선택 사항입니다. 업데이트 위치가 InstallURL과 다른 경우 이 URL 옵션을 설정합니다. 예를 들어 PublishURL을 FTP 경로로 설정하고 UpdateURL을 웹 URL로 설정할 수 있습니다.