Windows 앱 개발 명령줄 인터페이스 참조

중요합니다

Windows App 개발 CLI는 현재 공개 미리 보기 있습니다. 기능 및 명령은 최종 릴리스 전에 변경될 수 있습니다.

이 페이지에서는 winapp CLI에 사용할 수 있는 모든 명령을 설명합니다.

글로벌 옵션

모든 명령은 다음과 같은 전역 옵션을 지원합니다.

Option 설명
--verbose, -v 상세 로그 출력을 활성화합니다.
--quiet, -q 진행률 메시지 표시 안 함
--help, -h 명령 도움말 표시

전역 캐시 디렉터리

WinApp은 여러 프로젝트 간에 공유할 수 있는 파일을 캐시하는 디렉터리를 만듭니다. 기본적으로 이 값은 $UserProfile/.winapp입니다.

다른 위치를 사용하려면 환경 변수를 WINAPP_CLI_CACHE_DIRECTORY 설정합니다.

$env:WINAPP_CLI_CACHE_DIRECTORY = "d:\temp\.winapp"

설치 명령

초기화 (init)

최신 Windows 개발을 위해 Windows SDK, Windows App SDK 및 필수 자산을 사용하여 디렉터리를 초기화합니다.

winapp init [base-directory] [options]

인수:

Argument 설명
base-directory 앱/작업 영역의 기본/루트 디렉터리(기본값: 현재 디렉터리)

옵션:

Option 설명
--config-dir <path> 읽기/저장 구성을 위한 디렉터리(기본값: 현재 디렉터리)
--setup-sdks SDK 설치 모드: stable (기본값), preview, experimental또는 none
--ignore-config, --no-config 버전 관리에 구성 파일을 사용하지 마세요.
--no-gitignore .gitignore 파일을 업데이트하지 마세요.
--use-defaults, --no-prompt 프롬프트를 표시하지 않고 모든 프롬프트의 기본값을 사용합니다.
--config-only 구성 파일 작업만 처리하고 패키지 설치를 건너뜁니다.

기능 설명:

  • 구성 파일을 만듭니다.winapp.yaml
  • Windows SDK 및 Windows App SDK 패키지 다운로드
  • C++/WinRT 헤더 및 이진 파일을 생성합니다.
  • AppxManifest.xml 만듭니다.
  • 빌드 도구 설정 및 개발자 모드 사용
  • 생성된 파일을 제외하도록 .gitignore를 업데이트합니다.

자동 .NET 프로젝트 감지:

대상 디렉터리에 .csproj 파일이 있으면 init 간소화된 .NET 관련 흐름을 사용합니다.

  • Windows 호환 TFM의 유효성을 검사하고 TargetFramework를 업데이트합니다(예: net10.0-windows10.0.26100.0).
  • Microsoft.WindowsAppSDKMicrosoft.Windows.SDK.BuildTools.csproj 내에서 NuGet PackageReference 항목으로 직접 추가합니다.
  • appxmanifest.xml, 자산 및 개발 인증서 생성
  • C++ 프로젝션을 생성하지 않거나 다운로드winapp.yaml 않습니다 (NuGet 패키지에dotnet restore 사용).

:

# Initialize current directory
winapp init

# Initialize with experimental packages
winapp init --setup-sdks experimental

# Initialize specific directory without prompts
winapp init ./my-project --use-defaults

# Initialize a .NET project (auto-detected from .csproj)
cd my-dotnet-app
winapp init

팁 (조언)

SDK가 필요한 경우 init과(와) --setup-sdks none을(를) 사용하여 실행한 후 winapp init --use-defaults --setup-sdks stable을(를) 다시 실행하십시오. 이렇게 하면 기존 파일(매니페스트 등)이 유지됩니다.

복원

패키지를 복원하고 기존 구성에 따라 파일을 다시 생성합니다 winapp.yaml .

winapp restore [options]

옵션:

Option 설명
--config-dir <path> winapp.yaml을 포함하는 디렉터리(기본값: 현재 디렉터리)

기능 설명:

  • 기존 구성을 읽습니다.winapp.yaml
  • SDK 패키지를 지정된 버전으로 다운로드/업데이트
  • C++/WinRT 헤더 및 이진 파일을 다시 생성합니다.

비고

winapp init 사용하여 초기화된 .NET 프로젝트의 경우 winapp.yaml 없습니다. 대신 NuGet 패키지를 복원하는 데 사용합니다 dotnet restore .

:

# Restore from winapp.yaml in current directory
winapp restore

업데이트

패키지를 최신 버전으로 업데이트하고 구성 파일을 업데이트합니다.

winapp update [options]

옵션:

Option 설명
--config-dir <path> winapp.yaml을 포함하는 디렉터리(기본값: 현재 디렉터리)
--setup-sdks SDK 설치 모드: stable (기본값), preview, experimental또는 none

기능 설명:

  • 기존 구성을 읽습니다.winapp.yaml
  • 모든 패키지를 사용 가능한 최신 버전으로 업데이트합니다.
  • winapp.yaml 파일을 새 버전 번호로 업데이트합니다.
  • C++/WinRT 헤더 및 이진 파일을 다시 생성합니다.

:

# Update packages to latest versions
winapp update

# Update including experimental packages
winapp update --setup-sdks experimental

패키징 명령

pack

준비된 애플리케이션 디렉터리에서 MSIX 패키지를 만듭니다. appxmanifest.xml 파일이 대상 디렉터리, 현재 디렉터리에 있거나 옵션과 함께 --manifest 전달되어야 합니다.

winapp pack <input-folder> [options]

인수:

Argument 설명
input-folder 패키지할 애플리케이션 파일이 포함된 디렉터리

옵션:

Option 설명
--output <filename> 출력 MSIX 파일 이름(기본값: <name>.msix)
--name <name> 패키지 이름(기본값: 매니페스트에서)
--manifest <path> AppxManifest.xml 경로(기본값: 자동 검색)
--cert <path> 서명 인증서 경로(자동 서명 사용)
--cert-password <password> 인증서 암호(기본값: "암호")
--generate-cert 새 개발 인증서 생성
--install-cert 컴퓨터에 인증서 설치
--publisher <name> 인증서 생성에 대한 Publisher 이름
--self-contained 번들 Windows App SDK 런타임
--skip-pri PRI 파일 생성 건너뛰기
--executable <path> 입력 폴더를 기준으로 실행 파일의 경로입니다. 매니페스트의 자리 표시자를 해결하는 $targetnametoken$ 데 사용됩니다.

기능 설명:

  • 파일 AppxManifest.xml 유효성 검사 및 처리
  • $placeholder$ 매니페스트에서 토큰을 해결합니다(매니페스트 자리 표시자 참조).
  • 적절한 프레임워크 종속성을 보장합니다.
  • 나란히 배치된 매니페스트를 등록과 함께 업데이트합니다.
  • Windows App SDK 독립형 배포를 처리합니다.
  • 인증서가 제공된 경우 패키지 서명

:

# Package directory with auto-detected manifest
winapp pack ./dist

# Package with custom output name and certificate
winapp pack ./dist --output MyApp.msix --cert ./cert.pfx

# Package with generated and installed certificate and self-contained runtime
winapp pack ./dist --generate-cert --install-cert --self-contained

# Package with explicit executable
winapp pack ./dist --executable MyApp.exe

디버그 아이덴티티 생성

외부 위치/스파스 패키징을 사용하여 전체 MSIX 패키징 없이 디버깅할 앱 ID를 만듭니다.

winapp create-debug-identity [entrypoint] [options]

인수:

Argument 설명
entrypoint ID가 필요한 실행 파일(.exe) 또는 스크립트에 대한 경로

옵션:

Option 설명
--manifest <path> AppxManifest.xml 경로(기본값: ./appxmanifest.xml)
--no-install 만든 후 패키지를 설치하지 마세요.
--keep-identity 매니페스트 ID를 그대로 유지하고, 패키지 이름 및 애플리케이션 ID에 .debug를 추가하지 마십시오.

기능 설명:

  • 실행 파일의 병렬 매니페스트를 수정합니다.
  • 정체성을 위한 스파스 패키지를 등록합니다.
  • ID가 필요한 API의 디버깅을 사용하도록 설정

:

# Add identity to executable using local manifest
winapp create-debug-identity ./bin/MyApp.exe

# Add identity with custom manifest location
winapp create-debug-identity ./dist/app.exe --manifest ./custom-manifest.xml

매니페스트 명령

매니페스트 생성

템플릿에서 AppxManifest.xml 생성합니다.

winapp manifest generate [directory] [options]

인수:

Argument 설명
directory 매니페스트를 생성하는 디렉터리(기본값: 현재 디렉터리)

옵션:

Option 설명
--package-name <name> 패키지 이름(기본값: 폴더 이름)
--publisher-name <name> Publisher CN(기본값: CN=<current user>)
--version <version> 버전(기본값: "1.0.0.0")
--description <text> 설명(기본값: "내 애플리케이션")
--entrypoint <path> 진입점 실행 파일 또는 스크립트
--template <type> 템플릿 유형: packaged (기본값) 또는 sparse
--logo-path <path> 로고 이미지 파일의 경로
--if-exists <Error\|Overwrite\|Skip> 파일이 이미 있는 경우의 동작(기본값: 오류)

템플릿:

매니페스트 자리 표시자

생성된 매니페스트는 패키징 시 자동으로 해결되는 토큰(달러 기호로 구분된)을 사용합니다. $placeholder$

Placeholder 해결됨 예시
$targetnametoken$ 확장명 없는 실행 파일 이름 Executable="$targetnametoken$.exe"Executable="MyApp.exe"이 됨
$targetentrypoint$ Windows.FullTrustApplication 항상 자동으로 해결됨

자리 표시자를 해결하는 방법:

  • winapp pack$targetnametoken$ 옵션을 사용하거나 입력 폴더에서 단일 .exe을 자동 감지하여 해결합니다.
  • winapp create-debug-identity는 제공된 경우 진입점 인수에서 $targetnametoken$를 해결합니다.
  • winapp manifest generate --executable 실행 파일에서 메타데이터를 추출하지만 $targetnametoken$.exe 이후 해결을 위해 매니페스트에 유지됩니다.

팁 (조언)

체크 인 매니페스트에 $targetnametoken$ 유지하면 실행 파일 이름이 하드 코딩되는 것을 방지하고 winapp pack 및 Visual Studio 빌드 모두에서 작동합니다.

:

# Generate standard manifest interactively
winapp manifest generate

# Generate with all options specified
winapp manifest generate ./src --package-name MyApp --publisher-name "CN=My Company" --if-exists overwrite

매니페스트 자산 업데이트

단일 원본 이미지에서 필요한 모든 MSIX 이미지 자산을 생성합니다.

winapp manifest update-assets <image-path> [options]

인수:

Argument 설명
image-path 원본 이미지 파일 경로(PNG, JPG, GIF 등)

옵션:

Option 설명
--manifest <path> AppxManifest.xml 파일 경로(기본값: 현재 디렉터리 검색)

단일 원본 이미지를 사용하여 12개의 필요한 MSIX 이미지 자산을 올바른 크기로 자동으로 생성합니다. 자산은 매니페스트 위치를 기준으로 디렉터리에 저장 Assets 됩니다.

:

# Generate assets with auto-detected manifest
winapp manifest update-assets mylogo.png

# Specify manifest location explicitly
winapp manifest update-assets mylogo.png --manifest ./dist/appxmanifest.xml

인증서 및 서명 명령

인증서 생성

패키지 서명에 대한 개발 인증서를 생성합니다.

winapp cert generate [options]

옵션:

Option 설명
--manifest <appxmanifest.xml> appxmanifest.xml에서 퍼블리셔 정보 추출
--publisher <name> 인증서의 Publisher 이름
--output <path> 출력 인증서 파일 경로
--password <password> 인증서 암호(기본값: "암호")
--valid-days <days> 인증서가 유효한 일 수(기본값: 365)
--install 생성 후 로컬 컴퓨터 저장소에 인증서 설치
--if-exists <Error\|Overwrite\|Skip> 인증서 파일이 이미 있는 경우의 동작(기본값: 오류)

인증서 설치

컴퓨터 인증서 저장소에 인증서를 설치합니다.

winapp cert install <cert-path>

인수:

Argument 설명
cert-path 설치할 인증서 파일의 경로

:

# Generate certificate for specific publisher
winapp cert generate --publisher "CN=My Company" --output ./mycert.pfx

# Install certificate to machine
winapp cert install ./mycert.pfx

서명

인증서를 사용하여 MSIX 패키지 및 실행 파일에 서명합니다.

winapp sign <file-path> [options]

인수:

Argument 설명
file-path 서명할 MSIX 패키지 또는 실행 파일 경로

옵션:

Option 설명
--cert <path> 인증서 서명 경로
--cert-password <password> 인증서 암호(기본값: "암호")

:

# Sign MSIX package
winapp sign MyApp.msix --cert ./mycert.pfx

# Sign executable
winapp sign ./bin/MyApp.exe --cert ./mycert.pfx --cert-password mypassword

유틸리티 명령

도구

Windows SDK 도구에 직접 액세스하세요. Microsoft.Windows.SDK.BuildTools에서 사용할 수 있는 도구를 사용합니다.

winapp tool <tool-name> [tool-arguments]

사용 가능한 도구:

  • makeappx - 앱 패키지 만들기 및 조작
  • signtool - 파일 서명 및 서명 확인
  • mt - 병렬 어셈블리에 대한 매니페스트 도구
  • Microsoft.Windows.SDK.BuildTools의 기타 Windows SDK 도구

:

# Use signtool to verify signature
winapp tool signtool verify /pa MyApp.msix

store

Microsoft Store 개발자 CLI 명령을 실행합니다. 아직 다운로드하지 않은 경우 이 명령은 Microsoft Store 개발자 CLI를 다운로드합니다. Microsoft Store 개발자 CLI에서 자세히 알아보세요.

winapp store [args...]

인수:

Argument 설명
args... CLI에 직접 msstore 전달할 인수

:

# List all apps in your Microsoft Partner Center account
winapp store app list

# Publish a package to the Microsoft Store
winapp store publish ./myapp.msix --appId <your-app-id>

get-winapp-path

설치된 Windows SDK 구성 요소에 대한 경로를 가져옵니다.

winapp get-winapp-path [options]

작업 영역 디렉터리, 패키지 설치 디렉터리 및 생성된 헤더 위치에 대한 경로를 .winapp 반환합니다.


Node.js/Electron 명령

이러한 명령은 NPM 패키지에서만 사용할 수 있습니다.

node create-addon (노드 추가 기능 생성)

Windows SDK 및 Windows App SDK 통합을 사용하여 네이티브 C++ 또는 C# 추가 기능 템플릿을 생성합니다.

npx winapp node create-addon [options]

옵션:

Option 설명
--name <name> Addon 이름(기본값: "nativeWindowsAddon")
--template 추가 기능 유형 선택: cs 또는 cpp (기본값: cpp)
--verbose 자세한 정보 출력 사용

기능 설명:

  • 템플릿 파일을 사용하여 추가 기능 디렉터리를 만듭니다.
  • Windows SDK 예제를 사용하여 binding.gyp 및 추가 기능 파일 생성
  • 필요한 npm 종속성을 설치합니다.
  • package.json 빌드 스크립트 추가

:

# Generate addon with default name
npx winapp node create-addon

# Generate custom named C# addon
npx winapp node create-addon --name myWindowsAddon --template cs

노드 add-electron-debug-identity 명령어 실행

스파스 패키징을 사용하여 Electron 개발 프로세스에 앱 ID를 추가합니다. appxmanifest.xml이 필요합니다. winapp init 또는 winapp manifest generate을 사용하여 파일을 생성하세요.

중요합니다

시작 시 앱이 충돌하거나 웹 콘텐츠가 렌더링되지 않게 만드는 희박한 패키징의 Electron 애플리케이션에 알려진 문제가 있습니다. 이 문제는 Windows에서 해결되었지만 아직 모든 디바이스로 전파되지 않았습니다. 해결 방법으로 플래그를 사용하여 Electron 앱--no-sandbox 에서 샌드박싱을 사용하지 않도록 설정할 수 있습니다. 이 문제는 전체 MSIX 패키징에 영향을 주지 않습니다.

Electron 디버그 정체성을 실행 취소하려면 winapp node clear-electron-debug-identity를 사용합니다.

npx winapp node add-electron-debug-identity [options]

옵션:

Option 설명
--manifest <path> 사용자 지정 appxmanifest.xml 경로(기본값: 현재 디렉터리의 appxmanifest.xml)
--no-install 종속성을 설치하거나 수정하지 마세요. Electron 디버그 ID만 구성
--keep-identity 매니페스트 ID를 변경하지 말고, .debug를 추가하지 마십시오.
--verbose 자세한 정보 출력 사용

:

# Add identity to Electron development process
npx winapp node add-electron-debug-identity

# Use a custom manifest file
npx winapp node add-electron-debug-identity --manifest ./custom/appxmanifest.xml

node clear-electron-debug-identity

백업에서 원래 electron.exe 복원하여 Electron 디버그 프로세스에서 패키지 ID를 제거합니다.

npx winapp node clear-electron-debug-identity [options]

옵션:

Option 설명
--verbose 자세한 정보 출력 사용

:

# Remove identity from Electron development process
npx winapp node clear-electron-debug-identity