2012-05-14 2 views
0

Windows 8 소비자 미리보기에서 Visual Studio 11 베타 사용.WINMD 라이브러리를 사용하면 강력한 이름 유효성 검사 예외가 발생합니다.

문제는 : 출력 형식이 WinMD로 설정된 클래스 라이브러리의 클래스를 사용하려고하면 "강력한 이름 유효성 검사"오류 (HRESULT : 0x8013141A의 예외)라는 보안 예외가 발생합니다. 난 그냥 Visual Studio를 사용하여 작은 테스트 애플 리케이션을 (F5) 실행하려고합니다.

출력 유형을 "클래스 라이브러리"로 설정하면 문제가 해결됩니다. 작은 (오히려 사소한) 테스트 프로젝트는 여기에서 찾을 수 있습니다 :

http://download.tallcomponents.com/WinRTApplication3.zip

내가 (비밀번호 없음) 새로 생성하여 .snk 파일을 사용하여, 클래스 라이브러리의 "어셈블리 서명"플래그를 설정했습니다. 생성 된 ClassLibrary1.winmd 파일 SN의 -vf를 실행하면 보여줍니다

ClassLibrary1.winmd이 서명 한 서명이 연기 또는 시험 서명 조립

그래서 아마 문제가 출력이 "제대로"되지 않았 음을 기본적입니다 ? 나는 서명하기 위해 클래스 라이브러리를 지정 했으므로이 문제를 해결하기 위해 무엇을해야할지 모르겠다. WinMD 파일로 출력 할 때만 이것이 일어나는 이유도 모르겠다. 이 시점에서 디버깅 및 테스트 용으로 "공식적인"인증서가 필요 없다고 가정합니다.

음, 이것이 초급 질문 인 경우 유감입니다. 나는 "google"대답을하려했지만, 주로 2 년 이상 된 히트 곡과 winmd 대신 "바람"을 제안하는 google ...

여기에 새 태그 "winmd"를 만들 수 없다 ... (평판이 충분하지 않습니다.)

답변

1

winmd 파일에서 강력한 이름 유효성 검사 오류가 발생하는 경우는 일반적으로 .winmd 파일 형식을 인식하지 못하는 도구 집합을 사용하고 있기 때문입니다.

.winmd 파일은 강력한 이름으로 서명 할 수 없습니다.

이 경우 문제가 발생한 것은 구성 요소 라이브러리에 강력한 이름을 지정하려고했기 때문일 수 있습니다. C# 구성 요소 라이브러리는 Windows 메타 데이터와 C# IL을 모두 포함하는 하이브리드 .winmd 파일을 생성합니다.

왜 구성 요소에 강력한 이름을 지정하려고합니까? 강력한 이름 서명은 어셈블리를 GAC에 넣을 때 주로 사용되며 .winmd 파일은 GAC에 삽입 할 수 없습니다.

+0

이것은 흥미 롭습니다. Visual Studio에서 "어셈블리 플래그에 서명"을 해제하면 예외가 사라집니다. –

+0

그 이유는 기본적으로 다른 사람들이 사용할 구성 요소를 만들고 싶었 기 때문에 어떤 점에서 결과에 서명해야합니다. 내 도구 세트는 Visual Studio로만 구성됩니다. 나는 그것이 winmd를 이해한다고 생각했다. 내 관점을 바꾸어 주셔서 감사합니다. –

+0

글쎄, 누구든지이 문제에 부딪 힐 경우 : 출력 유형 "class library"를 선택하면 어셈블리에 서명해야합니다. 결과적으로 "WinMD"출력 유형을 선택하면 컴파일러가 불만을 제기하지 않지만 다시 서명을 해제하지 않는 한 강력한 이름 유효성 검사 예외가 발생합니다. –