다음을 통해 공유


사용자 지정 컨트롤 및 디자인 타임 어셈블리 배포

디자인 도구에서 사용자 지정 컨트롤의 어셈블리를 열 때 관련 디자인 타임 어셈블리도 검색됩니다. 특히 디자이너에서는 ProvideMetadataAttribute 어셈블리 수준 특성이 있는 어셈블리를 검색합니다. 이 특성을 찾으면 디자이너는 어셈블리에서 IProvideAttributeTable 인터페이스를 구현하는 클래스를 검색합니다. 디자이너는 이 클래스의 AttributeTable 속성을 쿼리하여 디자인 타임 동작을 지정하는 특성 컬렉션을 검색합니다.

디자인 타임 어셈블리 명명 규칙

Visual Studio 및 Expression Blend와 같은 디자인 도구는 명명 규칙을 사용하여 사용자 지정 디자인 타임 어셈블리를 찾습니다. 이 규칙은 다양한 도구 버전에 따라 계속 변경되었습니다. 다음 표의 규칙을 참조하여 해당 대상 디자이너에 맞게 어셈블리 이름을 지정하십시오.

대상 환경

명명 규칙

이름 예

Expression Blend 3 및 Visual Studio 2010 

<ControlLibrary>.Design.<version>.dll(공통)

<ControlLibrary>.Expression.Design.<version>.dll(Expression Blend)

<ControlLibrary>.VisualStudio.Design.<version>.dll(Visual Studio)

TailspinToysControls.Design.4.0.dll

TailspinToysControls.Expression.Design.4.0.dll

TailspinToysControls.VisualStudio.Design.4.0.dll

Expression Blend 2 및 Visual Studio 2008 

<ControlLibrary>.Design.dll(공통)

<ControlLibrary>.Expression.Design.dll(Expression Blend)

<ControlLibrary>.VisualStudio.Design.dll(Visual Studio)

TailspinToysControls.Design.dll

TailspinToysControls.Expression.Design.dll

TailspinToysControls.VisualStudio.Design.dll

여기서 공통이란 Visual Studio와 Expression Blend에서 공유하는 디자인 타임 구현을 말합니다. <version> 부분 문자열은 해당 WPF Designer 프레임워크 버전을 지정합니다. 이 버전은 Microsoft.Windows.Design.dll 어셈블리의 버전을 확인하면 알 수 있습니다.

도구별 디자인 타임 어셈블리는 공용 어셈블리에 있는 공유 구현을 재정의할 수 있습니다. 즉, 디자인 도구마다 사용자 지정 디자인 환경이 상당히 다를 수 있습니다. 자세한 내용은 디자인 타임 메타데이터 제공을 참조하십시오.

디자인 타임 어셈블리 등록

AssemblyFoldersEx 등록이라고도 하는 어셈블리 폴더 등록 절차를 사용하여 컨트롤 및 관련 디자인 타임 어셈블리를 등록합니다. 어셈블리 폴더 등록 절차를 사용하여 컨트롤을 등록하는 경우 컨트롤 어셈블리가 디스크에 있고 도구 상자 레지스트리 항목이 지정되어 있기만 하면 됩니다. 등록 절차는 Visual Studio가 설치되기 전이나 후에 발생할 수 있습니다.

AssemblyFoldersEx는 Silverlight 3 또는 .NET Framework 4와 같은 각 대상 프레임워크 버전 아래에 있는 레지스트리 키입니다. AssemblyFoldersEx에는 프레임워크별 어셈블리가 들어 있는 폴더를 지정하는 키 집합이 포함되어 있습니다. 예를 들어 Silverlight 3를 대상으로 지정하는 경우 AssemblyFoldersEx 레지스트리 키는 다음 레지스트리 경로에 있습니다.

[HKCU or HKLM]\SOFTWARE\Wow6432Node\Microsoft\Microsoft SDKs\Silverlight\v3.0\AssemblyFoldersEx

Toolbox 하위 및 관련 지원 항목이 AssemblyFoldersEx 키 아래에 만들어지면 도구 상자, 참조 추가 대화 상자 및 항목 선택 대화 상자에 컨트롤이 표시됩니다.

다음 표에서는 어셈블리 폴더를 등록하기 위해 AssemblyFoldersEx 및 Toolbox 키에 사용할 수 있는 레지스트리 항목에 대해 설명합니다.

레지스트리 항목

레지스트리 항목 유형

설명

예제

<assembly>

키 이름이며 일반적으로 브랜드를 나타냅니다.

[TailspinToys Controls]

<assembly folder>

기본 문자열 값

사용자 지정 컨트롤 어셈블리의 전체 설치 경로를 지정합니다. 디자이너는 이 폴더와 Design이라는 하위 폴더에서 디자인 타임 어셈블리를 검색합니다.

@="c:\\Program Files\\Reference Assemblies\\TailspinToys Controls\\Bin\\"

Toolbox

<assembly folder>의 어셈블리에서 도구 상자에 추가할 컨트롤을 검색하려는 경우 Toolbox 키를 추가합니다. 이 키를 지정하지 않을 경우 컨트롤이 항목 선택 대화 상자에 표시되고 어셈블리가 참조 추가 대화 상자에 표시되지만 도구 상자에는 표시되지 않습니다.

[Toolbox]

TabName

문자열 값

<assembly folder>의 컨트롤을 표시할 기본 도구 상자 그룹을 지정합니다. 그룹이 없으면 새로 만들어집니다. 값을 지정하지 않으면 플랫폼의 기본 그룹에 컨트롤이 설치됩니다.

기능 범주 대신 브랜드를 지정하려면 이 값을 사용합니다. WPF 및 Silverlight 사용자 지정 컨트롤의 경우 공용 또는 모든 컨트롤 범주를 대상으로 지정하지 마십시오. 이 값은 지역화할 수 없습니다.

"TabName"="TailspinToys"

Servicing

도구 상자 캐시를 강제로 새로 고치려면 Toolbox 키 내에 새 키나 값을 지정합니다. 설치된 각 업데이트에 대한 등록 값이 들어 있는 Updates 하위 키를 만드는 것이 좋습니다. 캐시 새로 고침은 모든 프레임워크 컨트롤이 아니라 Toolbox 키가 속한 특정 폴더에 있는 컨트롤에만 적용됩니다.

어셈블리 폴더의 컨트롤에 대한 도구 상자 사용자 지정은 어셈블리 폴더를 새로 고칠 때 손실될 수 있습니다.

[Updates]

"Update3"="1"

"Update7"="1"

다음 예제 레지스트리 스크립트는 .NET Framework 4를 대상으로 하는 어셈블리를 등록하며 참조 어셈블리 경로에 있습니다. ToolboxBrowsableAttribute가 true로 설정된 모든 컨트롤이 도구 상자의 Tailspin Toys 탭 아래에 표시됩니다.

[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\.NETFramework\v4.0\AssemblyFoldersEx\TailspinToys]
@="c:\\\\Program Files\\\\Reference Assemblies\\\\TailspinToys Controls\\\\Bin\\\\"

[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\.NETFramework\v4.0\AssemblyFoldersEx\TailspinToys\Toolbox]
"TabName"="Tailspin Toys"

ToolboxBrowsableAttribute 및 도구 상자 레지스트리 키

컨트롤의 디자인 타임 메타데이터에 ToolboxBrowsableAttribute를 추가하여 사용자 지정 컨트롤을 도구 상자에 표시할지 여부를 지정할 수 있습니다. 자세한 내용은 연습: 도구 상자 아이콘에 대한 메타데이터 제공을 참조하십시오.

항목 선택 대화 상자를 사용하여 새 어셈블리를 찾아보고 새 컨트롤을 도구 상자에 추가할 수 있습니다. 다음 표에서는 ToolboxBrowsableAttribute와 Toolbox 레지스트리 키 간의 상호 작용을 통해 사용자 지정 컨트롤이 도구 상자 및 항목 선택 대화 상자에 표시되는 시점이 결정되는 방법을 보여 줍니다.

Toolbox 레지스트리 키

Toolbox 레지스트리 키가 아닌 레지스트리 키

ToolboxBrowsable = true

  • 도구 상자에 표시됨

  • 항목 선택 대화 상자에 표시됨

  • 도구 상자에 표시되지 않음

  • 항목 선택 대화 상자에 표시됨

ToolboxBrowsable = false

  • 도구 상자에 표시되지 않음

  • 항목 선택 대화 상자에 표시되지 않음

  • 도구 상자에 표시되지 않음

  • 항목 선택 대화 상자에 표시되지 않음

디자인 타임 어셈블리 로드

디자이너에서는 사용자 지정 디자인 타임 어셈블리를 특성 순서로 로드합니다. 이를 통해 디자이너별 구현으로 일반 구현이 대체될 수 있습니다. 다음 목록에서는 ControlLibrary.dll이라는 어셈블리에 배포된 사용자 지정 컨트롤의 디자인 타임 어셈블리가 로드되는 순서를 보여 줍니다.

  1. ControlLibrary.dll(컨트롤 어셈블리)

  2. ControlLibrary.Design.<version>.dll

  3. Design\ControlLibrary.Design.<version>.dll

  4. ControlLibrary.[Expression|VisualStudio].Design.<version>.dll

  5. Design\ControlLibrary.[Expression|VisualStudio].Design.<version>.dll

디자이너별 어셈블리는 일반 어셈블리에 배포된 구현을 대체합니다. 예를 들어 TailspinToysControlLibrary.VisualStudio.Design.dll은 TailspinToysControlLibrary.Design.dll에 있는 구현을 대체할 수 있습니다.

또한 디자인 타임 어셈블리는 해당 파일 이름에 지정된 <version>에 따라 로드됩니다. 다음 규칙은 디자이너에서 <version>을 해석하는 방법을 보여 줍니다.

  • <version>에 디자이너의 프레임워크 버전과는 다른 주 버전 번호가 있으면 디자인 어셈블리가 로드되지 않습니다.

  • 디자이너의 프레임워크 버전과 호환되는 디자인 타임 어셈블리가 둘 이상 있는 경우 디자이너에서는 디자이너의 프레임워크 버전과 같거나 낮은 최상위 프레임워크 버전에 대해 컴파일된 버전을 로드합니다.

다음 표에서는 서로 다른 버전의 디자인 타임 어셈블리 네 개를 로드하는 4.1.3.0 프레임워크 버전으로 빌드된 디자이너의 예를 보여 줍니다.

디자인 타임 어셈블리 이름 예

디자이너에서 로드하는지 여부

ControlLibrary.Design.3.0.1.0.dll

아니요. 버전이 호환되지 않습니다.

ControlLibrary.Design.4.0.1.0.dll

아니요. 로드하지만 상위 버전을 사용할 수 있습니다.

ControlLibrary.Design.4.1.1.0.dll

예. 디자이너 버전에 가장 가깝습니다.

ControlLibrary.Design.4.3.dll

아니요. 디자이너보다 상위 버전의 프레임워크에 대해 빌드되었습니다.

도구 상자 새로 고침

AssemblyFoldersEx 키에 지정된 폴더의 어셈블리를 업데이트할 때 Visual Studio 도구 상자 캐시를 새로 고쳐야 할 수도 있습니다. 캐시에는 도구 상자에 표시되는 컨트롤의 이름, 범주 및 아이콘이 들어 있습니다. 컨트롤이나 디자인 타임 어셈블리는 캐시에 들어 있지 않습니다. 프로젝트를 컴파일할 때 서비스되는 컨트롤이나 디자인 타임 어셈블리가 자동으로 새로 고쳐집니다.

AssemblyFoldersEx 키나 해당 값 또는 하위 키가 변경되면 어셈블리 폴더에 대한 도구 상자 캐시가 업데이트됩니다. 업데이트는 도구 상자가 초기화될 때, 즉 도구 상자 작업 창이 처음 표시될 때(일반적으로 Visual Studio 부팅 시 또는 프로젝트 로드 시) 일어납니다.

도구 상자 캐시를 강제로 새로 고치려면 Toolbox 키 내에 새 키나 값을 지정합니다. Servicing 하위 키를 만든 다음 설치된 각 업데이트에 대한 등록 값을 포함하는 것이 좋습니다. 캐시 새로 고침은 모든 프레임워크 컨트롤이 아니라 Toolbox 키가 속한 특정 폴더에 있는 컨트롤에만 적용됩니다. 어셈블리 폴더의 컨트롤에 대한 도구 상자 사용자 지정은 어셈블리 폴더를 새로 고칠 때 손실될 수 있습니다.

참고 항목

참조

ToolboxBrowsableAttribute

ProvideMetadataAttribute

기타 리소스

WPF Designer 확장성 이해

기본 확장성 개념

디자인 타임 메타데이터 제공