티스토리 뷰

IT/C#

[CS][WPF] Pack URIs

주인장 진빼이

WPF에서 리소스를 사용하기 위해 여러가지 방식이 있지만 그중 Pack URI를 사용하는 방법에 대하여 알아보자.

Pack URI는 리소스 및 컨텐츠 파일들을 식별하기 위해 사용하는 URI이다.

Pack URI scheme, authority

Pack URI의 스키마는 pack:// 을 사용하며

포맷은 다음과 같다.

pack://<authority><path>

 

아래 4가지 종류에 리소스로 접근하기 위해 authority 영역을 사용하여 지정한다.

  • 로컬 어셈블리에 컴파일된 리소스 파일
  • 참조된 어셈블리에 컴파일된 리소스 파일
  • 참조한 어셈블리에 컴파일된 리소스 파일
  • 컨텐츠 파일
  • Site of origin 파일 (siteoforigin:///)

path는 참조 및 해당 프로젝트 루트를 기준으로 절대 또는 상대 경로를 적어서 사용하면 된다.

 

Pack URI는 총 2가지 authority를 지원한다. (application:/// and siteoforigin:///)

application:/// 는 컴파일 시점에 알려진 리소스 파일과 컨텐츠 파일을 포함하는 애플리케이션 데이터 파일 식별이 사용된다.

siteoforigin:/// 은  site of origin 파일의 식별에 사용된다. (이건 사용 쓰임을 모르겠음)

 

[중요] Pack URI는 표준 RFC2396를 따라야 하며 "/" 문자는 ","로 치환되어야 하며 "%" 및 "?" 같은 예약된 문자들(Reserved Characters)은 이스케이프될 필요가 있다.

(URL encode에 따르면 "%"는 %25로 표현되고 "/"는 %2F로 표현된다. encode에 의한 치환을 하는 것이 아니다.)

 

Pack URI 예제

> 로컬 어셈블리에 컴파일된 리소스 파일 Pack URI (예제)

[ 절대 Pack URI ]

pack://application:,,,/ResourceFile.xaml

pack://application:,,,/Subfolder/ResourceFile.xaml

applicaton:,,,/ResourceFile.xaml (로컬은 pack:// 생략이 가능하다)

 

[상대 Pack URI ]

/ResourceFile.xaml

/Subfolder/ResourceFile.xaml

 

 

> 참조된 어셈블리(프로젝트)에 컴파일된 리소스 파일 Pack URI (예제)

서식 표시 도움말: [] = 옵셔널, {} = 필수, component 참조 어셈블리인 경우 텍스트 필수 입력

서식: pack://{AssemblyShortName}[;Version][;PublicKey]{;component}/{path}

 

[ 절대 Pack URI ]

pack://application:,,,/ReferencedAssembly;component/ResourceFile.xaml
pack://application:,,,/ReferencedAssembly;component/Subfolder/ResourceFile.xaml

pack://application:,,,/ReferencedAssembly;v1.0.0.1;component/ResourceFile.xaml (참조된 버전 지정)

 

[ 상대 Pack URI ]

/ReferencedAssembly;component/ResourceFile.xaml

/ReferencedAssembly;component/Subfolder/ResourceFile.xaml

 

 

> xaml 컨텐츠 파일 Pack URI (예제)

xaml 파일은 리소스 파일과 같은 방식으로 컴파일 된다.

[ 절대 Pack URI ]

pack://application:,,,/ContentFile.xaml

pack://application:,,,/Subfolder/ContentFile.xaml

 

[상대 Pack URI ]

/ContentFile.xaml

/Subfolder/ContentFile.xaml

 

 

 

> Site Of Origin 파일 Pack URI (예제)

Site Of Origin 파일은 절대 Pack URI만 사용할 수 있다.

pack://siteoforigin:,,,/SiteOfOriginFile.xaml

pack://siteoforigin:,,,/Subfolder/SiteOfOriginFile.xaml

 

 

> 절대 및 상대 Pack URI

절대 Pack URI는 스키마(pack://), authority, path를 포함하고

상대 Pack URI는 path만 포함하여 작성한다.

 

 

> 간단한 절대 및 상대 Pack URI (예제)

pack://application,,,/ResourceFile.xaml (절대 Pack URI)

/ResourceFile.xaml (상대 Pack URI) (루트에 위치하는 리소스 파일)

ResourceFile.xaml (상대 Pack URI) (현재 폴더 내 리소스 파일)

 

 

C# 코드로 URI 작성 예제

기본적으로 Uri를 코드로 작성할 때 타입을 지정해주는 것이 좋다.

컴파일 타임이 아닌 어떤 상황에 의해 리소스가 런타임 타임에 의해 결정되는 경우 해당 URI의 타입은 RelavieOrAbsolute를 사용한다.

// Absolute URI (default)
Uri absoluteUri = new Uri("pack://application:,,,/File.xaml", UriKind.Absolute);
Uri absoluteUri = new Uri("pack://application:,,,/File.xaml");

// Relative URI
Uri relativeUri = new Uri("/File.xaml", UriKind.Relative);
Uri absoluteUri = new Uri("/File.xaml"); // 컴파일 에러!

 

 

 

 

참고: gongdosoft.com/57

        docs.microsoft.com/en-us/dotnet/desktop/wpf/app-development/pack-uris-in-wpf?view=netframeworkdesktop-4.8

댓글
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
«   2024/05   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
글 보관함