2012-06-08 7 views
7

어쨌든 C#의 네임 스페이스와 함께 어셈블리를 지정합니까?네임 스페이스에 어셈블리 지정

예를 들어, 프로젝트에서 PresentationFramework.AeroPresentationFramework.Luna을 모두 참조하면 둘 다 동일한 네임 스페이스의 동일한 컨트롤을 공유하지만 다른 구현을 사용한다는 것을 알 수 있습니다.

예를 들어 ButtonChrome을 취하십시오. 두 어셈블리 모두 네임 스페이스 Microsoft.Windows.Themes 아래에 있습니다.

는 XAML에서 당신은 내가 PresentationFramework.AeroButtonChrome의 인스턴스를 생성 어쨌든 찾을 수없는 뒤에이 문제를

xmlns:aeroTheme="clr-namespace:Microsoft.Windows.Themes;assembly=PresentationFramework.Aero" 
xmlns:lunaTheme="clr-namespace:Microsoft.Windows.Themes;assembly=PresentationFramework.Luna" 

<aeroTheme:ButtonChrome ../> 
<lunaTheme:ButtonChrome ../> 

을 없다 그러나 C# 코드에서 그래서 여기 네임 스페이스와 함께 어셈블리를 포함한다.

using Microsoft.Windows.Themes; 
// ... 
ButtonChrome buttonChrome = new ButtonChrome(); 

오류 CS0433를 컴파일 할 때

다음 코드는 나에게 오류 CS0433을 제공합니다 : 'Microsoft.Windows.Themes.ButtonChrome은'모두
'의 C에 존재하는 유형을 : \ 프로그램 파일 (x86) \ 참조 Assemblies \ Microsoft \ Framework.NETFramework \ v4.0 \ Profile \ Client \ PresentationFramework.Aero.dll '

'c : \ Program Files (x86) \ Reference

매우 이해할 수

내가 이야기하지 않았기 때문에 마이크로 소프트 \ Framework.NETFramework \ 4.0의 \ 프로필 \ 클라이언트 \ 어셈블리 \ PresentationFramework.Luna.dll '는, 컴파일러는 선택할 수있는 ButtonChrome를 알 수있는 방법이 없습니다 그것. 어떻게 든 할 수 있을까요?

답변

7

당신은 별칭을 통해 가져올 다음 어셈블리 참조에 대한 별칭을 지정해야하고 :

extern alias thealias; 

이 참조의 속성 창을 참조하십시오.

에어로 어셈블리의 별명을 "aero"로, 루나 어셈블리를 "luna"로 가정하십시오. 다음과 같이 다음 같은 파일 내에서 두 가지 유형으로 일할 수 :

extern alias aero; 
extern alias luna; 

using lunatheme=luna::Microsoft.Windows.Themes; 
using aerotheme=aero::Microsoft.Windows.Themes; 

... 

var lunaButtonChrome = new lunatheme.ButtonChrome(); 
var aeroButtonChrome = new aerotheme.ButtonChrome(); 

더 많은 정보를 원하시면 extern alias를 참조하십시오.

+0

감사합니다. 켄트! PresentationFramework.Aero에 대해 별칭을 에어로로 설정하고 Interop 유형을 False로 포함했지만 여전히 오류가 발생합니다. CS0430 : extern 별칭 'aero'가/reference 옵션에 지정되지 않았습니다. ' 내가해야 할 일은 뭐니? –

+0

프로젝트에 ResourceDictionaries가 포함되어 있으면 불행히도 버그가있는 것으로 보입니다. http://connect.microsoft.com/VisualStudio/feedback/details/615953/reference-aliases-are-ignored-on-projects-containing-some-xaml - 파일. 나는 XAML 파일없이 그것을 시도하고 그것은 효과가 있었다. 이 문제는 4.5에서 수정 될 것입니다. 다시 한 번 감사드립니다 –

+0

@Meleak : 흥미 롭습니다 - 나는 그 버그를 알지 못했습니다. 해결 방법을 보았습니까? 그게 당신을위한 선택입니까? –

5

구조의 외부 별칭은 문서 here을 참조하십시오.

extern alias Aero; 
extern alias Luna; 

using System.Windows; 

namespace WpfApplication1 
{ 
    /// <summary> 
    /// Interaction logic for MainWindow.xaml 
    /// </summary> 
    public partial class MainWindow: Window 
    { 
    public MainWindow() 
    { 
     InitializeComponent(); 

     var chrome1 = new Luna::Microsoft.Windows.Themes.ButtonChrome(); 
     var chrome2 = new Aero::Microsoft.Windows.Themes.ButtonChrome(); 
     MessageBox.Show(chrome1.GetType().AssemblyQualifiedName); 
     MessageBox.Show(chrome2.GetType().AssemblyQualifiedName); 
    } 
    } 
} 
+0

+1, 감사합니다! 별칭을 설정 한 후에도 여전히 뭔가를 놓치고 있습니다. '오류 CS0430 : extern 별칭'aero '가/reference 옵션에 지정되지 않았습니다.' 내가 뭘 놓칠 지 모르는 어떤 생각? –

+0

@Meleak : 솔루션 탐색기 창에서 어셈블리 참조를 선택하고 속성 창으로 이동하여 Aliases 속성 값을 "global"에서 "Luna", "Aero"등으로 변경하십시오. – Alan

+0

다시 한번 감사드립니다. 나는 그것을했다. 그러나 불행하게도 버그가있는 것처럼 보인다. 프로젝트에 ResourceDictionaries가 포함되어 있으면 별칭이 무시됩니다. http://connect.microsoft.com/VisualStudio/feedback/details/615953/reference-aliases-are-ignored-on-projects-containing-some-xaml-files –

0

나는 마이크로 소프트를 참조 할 때 System.NonSerializedAttribute에 관한 유사한 오류를 만난 : 어셈블리 참조를 추가하고 각 참조 속성의 별칭 루나와 에어로을 생성하는 데, 여기 당신이 시도 할 수있는 몇 가지 샘플 코드입니다. 이 속성을 정의하는 스크립팅 어셈블리 (서비스 참조에서 생성 된 Reference.cs 파일의 충돌).이 문제를 해결하는 가장 쉬운 방법은 별칭을 정의하는 것과 매우 유사하지만 컴파일 문제는 없습니다.

Visual Studio에서 프로젝트 참조로 이동하여 충돌을 생성하는 어셈블리 중 하나를 선택하고 속성으로 이동하여 별칭을 채 웁니다 값이 이고과 같지 않은 값입니다.

관련 문제