2012-11-13 3 views
0

제 3 자 프로젝트 용 어셈블리가 XAML에서 어떻게 참조되는지 궁금합니다.WPF 외부 어셈블리 이름 공간

은 가끔

xmlns:xctk="http://schemas.xceed.com/wpf/xaml/toolkit" 

보고 가끔

xmlns:tn="clr-namespace:WPFTaskbarNotifier;assembly=WPFTaskbarNotifier" 

하나 하나가 사용되는 URL 스타일과 clr-namespace 스타일과의 차이점은 무엇입니까?를 참조하십시오

답변

3

XAML 로더는 XAML 트리 내의 요소에서 참조하는 어셈블리를 알아야합니다. 이 값을 찾기 위해 XML 네임 스페이스를 사용합니다.

clr-namespace 스타일 네임 스페이스는 XAML 로더가 어셈블리를 찾고 여기에 정의 된 형식을로드 할 수 있도록 특별히 형식이 지정됩니다. 이 네임 스페이스 형식을 사용하여 모든 어셈블리을 참조 할 수 있습니다. 동일한 어셈블리 내에 유형을 참조 할 때 이 형식을 사용해야합니다.

URL 스타일은보다 일반적인 XML 네임 스페이스 스타일입니다. URL은 XSD 스키마와 같은 supposed to point to a location where you can get information about the namespace입니다.하지만 그보다 더 자주는 404'd입니다. 어셈블리 내의 유형을 참조하는 호출자가 XmlnsDefinitionAttribute을 사용하여이 네임 스페이스 스타일을 정의하도록 허용 할 수 있습니다.

단순히 AssemblyInfo.cs 파일 내에서 네임 스페이스 세그먼트 당 하나의 드롭 :

[assembly: XmlnsDefinition("http://www.Herp.com/2012/", "Herp")] 
[assembly: XmlnsDefinition("http://www.Herp.com/2012/", "Herp.Derp")] 
2

둘 사이에는 차이가 없습니다. 그들은 모두 같은 어셈블리를 가리 킵니다.

WPF를 사용하면 개발자가 어셈블리 수준에서 XmlnsDefinition 특성을 사용하여 사용자 지정 네임 스페이스를 등록 할 수 있습니다. 이러한 네임 스페이스는 컴파일 된 어셈블리를 참조하는 다른 프로젝트에서 사용할 수있게됩니다. 또한이 특성을 사용하여 여러 CLR 네임 스페이스를 병합 (WPF 자체에서이 작업 수행)하여 결과로 생성되는 XAML을 단순화 할 수있을뿐 아니라 내부 프로젝트 구조를 XAML 디자이너에서 숨길 수 있습니다.

그러나 외관상의 차이점을 제외하고는 두 개의 네임 스페이스 문자열은 동일한 것을 의미하며 서로 바꿔서 사용할 수 있습니다. 여기서 유일한 제한은 사용자 지정 네임 스페이스 을 정의하는 어셈블리 인 내에 사용할 수 없다는 것입니다. 그것들은 최종 어셈블리에 추가 된 메타 데이터의 일부이며 그 전에는 컴파일러에서 사용할 수 없습니다.