Visual Studio에서는 IDE(통합 개발 환경)에서 프로젝트를 만든 경우에도 명령줄에서 프로젝트를 빌드할 수 있습니다. 실제로 .NET Framework만 설치된 다른 컴퓨터에서 Visual Studio를 사용하여 만든 프로젝트를 다시 빌드할 수 있습니다. 이 기능을 사용하면 자동화된 프로세스(예: 중앙 빌드 랩에서 또는 프로젝트 자체를 빌드하는 범위를 벗어나는 고급 스크립팅 기술)를 사용하여 빌드를 재현할 수 있습니다.
비고
명령줄에서 .NET ClickOnce 애플리케이션을 빌드하려면 명령줄 에서 .NET ClickOnce 애플리케이션 빌드를 참조하세요.
MSBuild를 사용하여 .NET Framework ClickOnce 애플리케이션 배포 재현
명령줄에서 호출 msbuild /target:publish 할 때 이 명령은 MSBuild 시스템에 프로젝트를 빌드하고 게시 폴더에 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 프로젝트 만들기 및 게시
Visual Studio를 열고 새 프로젝트를 만듭니다.
Windows Forms 앱(.NET Framework) 또는 WPF 앱(.NET Framework) 프로젝트 템플릿을 선택하고 프로젝트
CmdLineDemo이름을 지정합니다.빌드 메뉴에서 게시 명령을 선택합니다.
이 단계를 수행하면 프로젝트가 ClickOnce 애플리케이션 배포를 생성하도록 올바르게 구성됩니다.
게시 마법사가 나타납니다.
게시 마법사에서 마침을 선택합니다.
Visual Studio는 Publish.htm이라는 기본 웹 페이지를 생성하고 표시합니다.
프로젝트를 저장하고 저장되는 폴더 위치를 기록해 둡다.
이전 단계에서는 처음으로 게시된 ClickOnce 프로젝트를 만듭니다. 이제 IDE 외부에서 빌드를 재현할 수 있습니다.
명령줄에서 빌드 재현
Visual Studio를 종료합니다.
Windows 시작 메뉴에서 도구>명령줄>개발자 명령 프롬프트를 선택합니다.
Visual Studio 개발자 명령 프롬프트가 열립니다.
Visual Studio 명령 프롬프트에서 현재 디렉터리에 이전에 빌드한 프로젝트의 위치가 표시되는지 확인합니다.
프로젝트 디렉터리에서 작업하지 않는 경우 명령을 입력하여 원하는 위치(예: )로
chdir C:\Users\username\source\repos\CmdLineDemo변경합니다.이전 섹션에서 생성된 기존 파일을 제거하려면 .를 입력합니다
rmdir /s publish.이 단계는 선택 사항이지만 명령줄 빌드에서 모든 새 파일을 생성하도록 합니다.
msbuild /target:publish를 입력합니다.이전 단계에서는 Publish라는 프로젝트의 하위 폴더에 전체 ClickOnce 애플리케이션 배포를 생성합니다. CmdLineDemo.application 은 ClickOnce 배포 매니페스트입니다. CmdLineDemo_1.0.0.0 폴더에는 CmdLineDemo.exe 및 CmdLineDemo.exe.manifest 파일, ClickOnce 애플리케이션 매니페스트가 포함되어 있습니다. 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 게시 단계 중에 생성됩니다. 이 복사본이 생성된 후, 모든 MSBuild 대상이 AfterTargets="ClickOncePublish" 실행됩니다.
속성과 PublishUrl 달리 PublishDirMSBuild 단계에서는 사용되지 않습니다.
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 폴더에서 사후 처리 작업을 위해 별도의 스크립트를 작성해야 합니다.
중요합니다
동일한 위치로 PublishDir설정된 경우 PublishUrl 중복 컴파일 출력이 PublishUrl 해당 위치에 복사됩니다. 새 프로필을 만들어 Visual Studio 2022 버전 17.4 이상에서 이 문제를 방지할 수 있습니다. 새 프로필은 PublishDir을 PublishUrl과 다른 위치로 설정합니다. 게시 작업이 끝나면 관련 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 애플리케이션 매니페스트에 내보낸 신뢰 수준을 결정합니다. 가능한 값은 "인터넷", "LocalIntranet" 및 "Custom"입니다. 인터넷 및 LocalIntranet은 ClickOnce 애플리케이션 매니페스트에 기본 권한 집합을 내보냅니다. LocalIntranet은 기본값이며 기본적으로 완전 신뢰를 의미합니다. 사용자 지정은 기본 app.manifest 파일에 명시적으로 지정된 권한만 ClickOnce 애플리케이션 매니페스트로 내보내도록 지정합니다. app.manifest 파일은 신뢰 정보 정의만 포함하는 부분 매니페스트 파일입니다. 보안 페이지에서 사용 권한을 구성할 때 프로젝트에 자동으로 추가되는 숨겨진 파일입니다.
다음 속성은 게시 페이지에서 설정됩니다.
PublishUrl는 애플리케이션이 IDE에 게시되는 위치입니다.InstallUrl및UpdateUrl속성이 모두 지정되지 않은 경우 ClickOnce 애플리케이션 매니페스트에 삽입됩니다.ApplicationVersion는 ClickOnce 애플리케이션의 버전을 지정합니다. 버전은 4자리 숫자입니다. 마지막 숫자가 "*"(별표)ApplicationRevision인 경우 빌드 시 매니페스트에 삽입된 값으로 대체됩니다.ApplicationRevision는 수정 버전을 지정합니다. 이 값은 IDE에 게시할 때마다 증가되는 정수입니다. 명령줄에서 수행되는 빌드의 경우 자동으로 증가하지 않습니다.Install는 애플리케이션이 설치된 애플리케이션인지 아니면 웹에서 실행 애플리케이션인지를 결정합니다.InstallUrl(표시되지 않음)은 사용자가 애플리케이션을 설치하는 위치입니다. 이 값을 지정하면, 속성이 활성화될 경우 이 값이 setup.exe 부트스트래퍼에 구워집니다. 지정되지 않은 경우에도 애플리케이션 매니페스트에UpdateUrl삽입됩니다.SupportUrl(표시되지 않음) 설치된 애플리케이션에 대한 프로그램 추가/제거 대화 상자에 연결된 위치입니다.
다음 속성은 게시 페이지에서 액세스하는 애플리케이션 업데이트 대화 상자에 설정됩니다.
UpdateEnabled는 애플리케이션이 업데이트를 확인해야 하는지 여부를 나타냅니다.UpdateMode는 포그라운드 업데이트 또는 백그라운드 업데이트를 지정합니다.UpdateInterval는 애플리케이션에서 업데이트를 확인하는 빈도를 지정합니다.UpdateIntervalUnits값이UpdateInterval시간, 일 또는 주 단위인지 여부를 지정합니다.UpdateUrl(표시되지 않음)은 애플리케이션이 업데이트를 받는 위치입니다. 지정한 경우 이 값은 애플리케이션 매니페스트에 삽입됩니다.
게시 페이지에서 액세스하는 게시 옵션 대화 상자에 다음 속성이 설정됩니다.
PublisherName는 애플리케이션을 설치하거나 실행할 때 표시되는 프롬프트에 표시되는 게시자의 이름을 지정합니다. 설치된 애플리케이션의 경우 시작 메뉴에서 폴더 이름을 지정하는 데도 사용됩니다.ProductName는 애플리케이션을 설치하거나 실행할 때 표시되는 프롬프트에 표시되는 제품의 이름을 지정합니다. 설치된 애플리케이션의 경우 시작 메뉴에서 바로 가기 이름을 지정하는 데도 사용됩니다.
다음 속성은 게시 페이지에서 액세스하는 필수 구성 요소 대화 상자에 설정됩니다.
BootstrapperEnabled는 setup.exe 부트스트래퍼를 생성할지 여부를 결정합니다.IsWebBootstrapper는 setup.exe 부트스트래퍼가 웹을 통해 작동하는지 또는 디스크 기반 모드에서 작동하는지 여부를 결정합니다.
사용 옵션: InstallURL, SupportUrl, PublishURL, UpdateURL
다음 표에서는 ClickOnce 배포에 대한 네 가지 URL 옵션을 보여 있습니다.
| URL 옵션 | Description |
|---|---|
PublishURL |
ClickOnce 애플리케이션을 웹 사이트에 게시하는 데 필요합니다. |
InstallURL |
Optional. 설치 사이트가 .가 아닌 PublishURL경우 이 URL 옵션을 설정합니다. 예를 들어, PublishURL을(를) FTP 경로로 설정하고 InstallURL을(를) 웹 URL로 설정할 수 있습니다. |
SupportURL |
Optional. 지원 사이트가 PublishURL와 다른 경우, 이 URL 옵션을 설정합니다. 예를 들어, SupportURL을(를) 회사의 고객 지원 웹 사이트로 설정하십시오. |
UpdateURL |
Optional. 업데이트 위치가 .가 아닌 InstallURL경우 이 URL 옵션을 설정합니다. 예를 들어, PublishURL을(를) FTP 경로로 설정하고 UpdateURL을(를) 웹 URL로 설정할 수 있습니다. |