중요합니다
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.WindowsAppSDK와Microsoft.Windows.SDK.BuildTools를.csproj내에서 NuGetPackageReference항목으로 직접 추가합니다. -
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> |
파일이 이미 있는 경우의 동작(기본값: 오류) |
템플릿:
-
packaged- 표준 패키지 앱 매니페스트 -
sparse- 스파스/외부 위치 패키징을 사용하는 앱 매니페스트
매니페스트 자리 표시자
생성된 매니페스트는 패키징 시 자동으로 해결되는 토큰(달러 기호로 구분된)을 사용합니다. $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
관련 토픽
Windows developer