Share via


비주얼 스타일을 사용하여 WPF 애플리케이션 게시

시각적 스타일을 사용하면 사용자가 선택한 테마에 따라 일반 컨트롤의 모양이 변경됩니다. 기본적으로 비주얼 스타일은 WPF(Windows Presentation Foundation) 애플리케이션에서 사용하도록 설정하지 않으므로, 수동으로 사용 설정해야 합니다. 그러나 WPF 애플리케이션에 시각적 스타일을 활성화한 다음 솔루션을 게시하면 오류가 발생합니다. 이 토픽에서는 이 오류를 해결하는 방법과 시각적 스타일을 사용하도록 설정한 WPF 애플리케이션을 게시하는 프로세스에 대해 설명합니다. 시각적 스타일에 대한 자세한 내용은 시각적 스타일 개요를 참조하세요. 오류 메시지에 대한 자세한 내용은 ClickOnce 배포 관련 오류 문제 해결을 참조하세요.

오류를 해결하고 솔루션을 게시하려면 다음 작업을 수행해야 합니다.

시각적 스타일을 사용하지 않고 솔루션을 게시

  1. 프로젝트에 시각적 스타일이 활성화되어 있지 않은지 확인합니다. 먼저 프로젝트의 매니페스트 파일에서 다음 XML을 확인합니다. XML이 있다면 XML을 주석 태그로 묶습니다.

    기본적으로 시각적 스타일은 사용하지 않도록 설정됩니다.

    <dependency>
        <dependentAssembly>
            <assemblyIdentity type="win32" name="Microsoft.Windows.Common-Controls" version="6.0.0.0" processorArchitecture="*" publicKeyToken="6595b64144ccf1df" language="*" />
        </dependentAssembly>
    </dependency>
    

    다음 절차에서는 프로젝트와 연결된 매니페스트 파일을 여는 방법을 확인할 수 있습니다.

    매니페스트 파일을 Visual Basic 프로젝트에서 열려면

    1. 메뉴 모음에서 프로젝트, ProjectName속성을 선택합니다. 여기서 ProjectName은 WPF 프로젝트의 이름입니다.

      WPF 프로젝트의 속성 페이지가 나타납니다.

    2. 애플리케이션 탭에서 Windows 설정 보기를 선택합니다.

      코드 편집기에서 app.manifest 파일이 열립니다.

    C# 프로젝트에서 매니페스트 파일을 열려면

    1. 메뉴 모음에서 프로젝트, ProjectName속성을 선택합니다. 여기서 ProjectName은 WPF 프로젝트의 이름입니다.

      WPF 프로젝트의 속성 페이지가 나타납니다.

    2. 애플리케이션 탭에서 매니페스트 필드에 표시되는 이름을 기록해 둡니다. 프로젝트와 연결된 매니페스트의 이름입니다.

      참고 항목

      기본 설정으로 구성된 매니페스트 포함이나 매니페스트 없이 애플리케이션 만들기가 매니페스트 파일에 표시된다면, 시각적 스타일이 사용하도록 설정되지 않았다는 뜻입니다. 매니페스트 파일의 이름이 매니페스트 필드에 나타난다면 이 절차의 다음 단계를 진행합니다.

    3. 솔루션 탐색기에서 모든 파일 표시를 선택합니다.

      이 단추는 제외된 항목과 평소에는 표시되지 않는 항목을 포함한 모든 프로젝트 항목을 표시합니다. 매니페스트 파일이 프로젝트 항목으로 표시됩니다.

  2. 솔루션을 빌드하고 게시합니다. 솔루션을 게시하는 자세한 내용은 방법: 게시 마법사를 사용하여 ClickOnce 애플리케이션 게시를 참조하세요.

매니페스트 파일 만들기

  1. 다음 XML을 메모장 파일에 붙여 넣습니다.

    이 XML은 시각적 스타일을 지원하는 컨트롤이 포함된 어셈블리에 대해 설명합니다.

    <?xml version="1.0" encoding="utf-8"?>
    <asmv1:assembly manifestVersion="1.0"
        xmlns="urn:schemas-microsoft-com:asm.v1"
        xmlns:asmv1="urn:schemas-microsoft-com:asm.v1"
        xmlns:asmv2="urn:schemas-microsoft-com:asm.v2"
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
        <dependency>
            <dependentAssembly>
                <assemblyIdentity type="win32" name="Microsoft.Windows.Common-Controls" version="6.0.0.0" processorArchitecture="*" publicKeyToken="6595b64144ccf1df" language="*" />
            </dependentAssembly>
        </dependency>
    </asmv1:assembly>
    
  2. 메모장에서 파일을 클릭한 다음 다른 이름으로 저장을 클릭합니다.

  3. 다른 이름으로 저장 대화 상자의 파일 형식 드롭 다운 목록에서 모든 파일을 선택합니다.

  4. 파일 이름 상자에 파일 이름을 지정하고 .manifest를 파일 이름의 끝에 추가합니다. (예: themes.manifest)

  5. 폴더 찾아보기 버튼을 선택하고 아무 폴더를 선택한 다음 저장을 클릭합니다.

    참고 항목

    나머지 절차에서는 이 파일의 이름이 themes.manifest이며 파일이 사용자 컴퓨터의 C:\temp 디렉터리에 저장된다고 가정합니다.

매니페스트 파일을 게시된 솔루션의 실행 파일에 포함

  1. Visual Studio용 개발자 명령 프롬프트를 엽니다.

    Visual Studio용 개발자 명령 프롬프트를 여는 자세한 방법은 개발자 명령 프롬프트 및 개발자 PowerShell을 참조하세요.

    참고 항목

    나머지 단계에서는 솔루션이 다음과 같다고 가정합니다.

    • 솔루션의 이름은 MyWPFProject입니다.

    • 솔루션은 다음 디렉터리에 있습니다. %UserProfile%\Documents\Visual Studio version\Projects\

    • 솔루션은 다음 디렉터리에 게시됩니다. %UserProfile%\Documents\Visual Studio version\Projects\publish

    • 게시된 애플리케이션 파일의 최신 버전은 다음 디렉터리에 있습니다. %UserProfile%\Documents\Visual Studio version\Projects\publish\Application Files\WPFApp_1_0_0_0

    위에서 설명한 이름이나 디렉터리 위치를 사용하지 않아도 됩니다. 위에서 설명한 이름과 위치는 솔루션을 게시하는 데 필요한 단계를 설명하는 용도로만 사용합니다.

  2. 명령 프롬프트에서, 경로를 게시된 애플리케이션 파일의 최신 버전이 포함된 디렉터리로 변경합니다. 다음을 이 단계를 보여주는 예제입니다.

    cd "%UserProfile%\Documents\Visual Studio version\Projects\MyWPFProject\publish\Application Files\WPFApp_1_0_0_0"
    
  3. 명령 프롬프트에서 다음 명령을 실행하여 매니페스트 파일을 애플리케이션의 실행 파일에 포함합니다.

    mt -manifest c:\temp\themes.manifest -outputresource:MyWPFApp.exe.deploy
    

애플리케이션 및 배포 매니페스트 서명

  1. 명령 프롬프트에서 다음 명령을 실행하여 현재 디렉터리에 있는 실행 파일에서 .deploy 확장을 제거합니다.

    ren MyWPFApp.exe.deploy MyWPFApp.exe
    

    참고 항목

    이 예제에서는 파일 하나에만 .deploy 파일 확장자가 있다고 가정합니다. 이 디렉터리에서 .deploy 파일 확장명이 있는 모든 파일의 이름을 바꿔야 합니다.

  2. 명령 프롬프트에서 다음 명령을 실행하여 애플리케이션 매니페스트에 서명합니다.

    mage -u MyWPFApp.exe.manifest -cf ..\..\..\MyWPFApp_TemporaryKey.pfx
    

    참고 항목

    이 예제에서는 사용자가 프로젝트의 .pfx 파일을 사용하여 매니페스트에 서명한다고 가정합니다. 매니페스트에 서명하지 않는 경우 이 예제에서 사용하는 -cf 매개 변수를 생략해도 됩니다. 암호가 필요한 인증서로 매니페스트에 서명하는 경우에는 -password 옵션(For example: mage -u MyWPFApp.exe.manifest -cf ..\..\..\MyWPFApp_TemporaryKey.pfx - password Password)을 지정합니다.

  3. 명령 프롬프트에서 다음 명령을 실행하여 이 절차의 이전 단계에서 이름을 바꾼 파일의 이름에 .deploy 확장을 추가합니다.

    ren MyWPFApp.exe MyWPFApp.exe.deploy
    

    참고 항목

    이 예제에서는 파일 하나에만 .deploy 파일 확장자가 있다고 가정합니다. 이 디렉터리에서 .deploy 파일 확장명이 있었던 모든 파일의 이름을 바꿔야 합니다.

  4. 명령 프롬프트에서 다음 명령을 실행하여 배포 매니페스트에 서명합니다.

    mage -u ..\..\MyWPFApp.application -appm MyWPFApp.exe.manifest -cf ..\..\..\MyWPFApp_TemporaryKey.pfx
    

    참고 항목

    이 예제에서는 사용자가 프로젝트의 .pfx 파일을 사용하여 매니페스트에 서명한다고 가정합니다. 매니페스트에 서명하지 않는 경우 이 예제에서 사용하는 -cf 매개 변수를 생략해도 됩니다. 암호가 필요한 인증서로 매니페스트에 서명하는 경우에는 -password 옵션을 지정합니다(예: For example: mage -u MyWPFApp.exe.manifest -cf ..\..\..\MyWPFApp_TemporaryKey.pfx - password Password).

    이상의 단계를 수행하면 게시된 파일을 최종 사용자가 애플리케이션을 설치할 위치로 옮길 수 있습니다. 솔루션을 자주 업데이트할 계획이라면 이러한 명령을 스크립트로 옮긴 다음 새 버전을 게시할 때마다 스크립트를 실행하면 됩니다.