Interop 유형을 포함 할 수 없습니다


667

C #의 .NET 4.0 프레임 워크 (beta2)에서 웹 응용 프로그램을 만들고 있습니다.

"ActiveHomeScriptLib"라는 어셈블리를 사용하려고하면 다음 오류가 발생합니다.

Interop 유형 'ActiveHomeScriptLib.ActiveHomeClass'는 포함 할 수 없습니다. 해당 인터페이스를 대신 사용하십시오.

프레임 워크를 버전 3.5로 변경하면 오류가 없습니다.

Interop Type은 무엇이며 왜 4.0 프레임 워크를 사용할 때만 발생합니까?


이 기사는 interop / PIA 문제를 해결하는 데 매우 유용합니다. blogs.msdn.com/b/vbteam/archive/2010/06/11/...
GilesDMiddleton

답변:


1068

.NET 4.0을 사용하면 응용 프로그램과 함께 배포 할 필요가 없도록 기본 interop 어셈블리 (또는 필요한 비트)를 어셈블리에 포함시킬 수 있습니다.

어떤 이유로 든이 어셈블리를 포함 할 수는 없지만 문제가되지 않는 것 같습니다. Visual Studio 2010에서 어셈블리의 속성 탭을 열고 "내장 된 Interop 형식"을 "False"로 설정하십시오.

편집 : Michael Gustus의 답변 도 참조하십시오 Class. 사용중인 유형 에서 접미사를 제거하십시오 .


2
불행히도 이것은 필요한 것 같지만 더 이상 사용할 수없는 것 같습니다.
Dave

130
마우스 오른쪽 버튼을 클릭하는 대신 프로젝트의 속성 페이지를보고있었습니다 | 참조 창에서 영향을받는 DLL의 속성
justSteve

5
오류가 "적용 가능한 인터페이스 사용"이라고 말한 것처럼하는 것이 더 합리적이지 않습니까? 다른 클래스 의이 오류가 발생하여 해당 클래스가 CoClass 속성으로 지정된 인터페이스를 인스턴스화 할 수있었습니다. 아래 Michael Gustus의 답변 에서처럼 BlahClass의 인터페이스는 Blah라고 불렀습니다. 표준 컨벤션 인 것 같습니다.
Tim Goodman

1
포함에 대한 좋은 점은 Interop 어셈블리가 런타임에 필요하지 않으므로 CopyLocal = False로 유지 될 수 있다는 것입니다.
Schmuli

@TimGoodman for me "적용 가능한 인터페이스"가 작동하지 않지만 위에서 언급 한 embed interop types속성을 설정 false하여 트릭을 수행했습니다. 필자의 경우- Microsoft.Office.Interop.Excel라이브러리 로 작업하고 통합 문서 개체에 액세스해야했습니다. 그것의 인터페이스 Workbook(btw. 명명 규칙 ...)를 사용하는 것은 옵션이 아니 었습니다-나는받지 COM object못했습니다Microsoft.Office.Interop.Excel.WorkbookClass
Prokurors

484

대부분의 경우이 오류는 COM 개체를 인스턴스화하려고 시도하는 코드의 결과입니다. 예를 들어 Excel을 시작하는 코드는 다음과 같습니다.

Excel.ApplicationClass xlapp = new Excel.ApplicationClass();

일반적으로 .NET 4에서는 'Class'접미사를 제거하고 코드를 컴파일하면됩니다.

Excel.Application xlapp = new Excel.Application();

MSDN 설명은 여기에 있습니다 .


16
+1 이것이 "적용 가능한 인터페이스 사용"이라고 표시 될 때 실제로 오류 메시지가 표시하는 내용이라고 생각합니다. Excel.Application은 인터페이스입니다 (여기에 설명 된 상황과 유사한 새 키워드로 인스턴스화 될 수 있음에도 불구하고 stackoverflow.com/questions/6960910/… )
Tim Goodman

"Embed Interop Types""False" 또는 "True"로 ?
Kiquenet

1
여기에 조언을 따르는 경우 @Kiquenet 당신은 True로 '퍼가기 상호 운용성 유형'등을 설정할 수 있습니다, 또는 적어도 그 날 위해 확인 일
샘 홀더

122

Jan처럼 그것은 그것을 얻는 데 시간이 걸렸다.. = S 그래서 좌절에 눈을 멀게하는 다른 사람을 위해.

  • 오른쪽 당신이 당신의 프로젝트에서 솔루션 탐색기에 추가 한 조립 위반을 클릭 참조 . (제 경우에는 WIA)
  • 속성을 클릭하십시오.
  • 그리고 Embed Interop Assembly를 위한 옵션이 있어야합니다 .
  • False로 설정

15
난 당신이했다 실현까지 여전히 어려움을 겪고 어셈블리 상호 운용성을 마우스 오른쪽 단추로 클릭 솔루션 탐색기에서 프로젝트 참조에서, NOT 어셈블리 당신에게있는 거 건물!
SteveWilkinson

2
이제 (10 년 후)이 옵션은 "내장 Interop 유형"
David Foley

36

Visual Studio 2012에서 Embed Interop을 설정하는 위치는 다음과 같습니다.

여기에 이미지 설명을 입력하십시오


34

Jon의 정답을 확장합니다.

여기서 문제는 새로운 "내장 Interop 유형"(또는 NoPIA) 기능을 클래스 유형 사용과 결합하고 있다는 것입니다. "내장 Interop 유형"기능은 PIA (Primary Interop Assembly)의 모든 유형을 참조 어셈블리에 기본적으로 정적으로 연결하여 배포 오버 헤드를 제거함으로써 작동합니다.

이 기능은 PIA에서 대부분의 유형에 적합하지만 제한이 있습니다. 그중 하나는 클래스를 포함 할 수 없다는 것입니다 (서비스 문제입니다). Misha는 이것이 허용되지 않는 이유에 대한 자세한 블로그 기사를 가지고 있습니다.


15

해결책을 얻었다

참조로 이동하여 원하는 dll을 마우스 오른쪽 버튼으로 클릭하면 "내장 Interop 유형"옵션이 "거짓"또는 "참"으로 표시됩니다.


1
이것은 PP_COM_Wrapper를 사용하여 .net으로 VS2015 c #에서도 작동했습니다. 주어진 cypress.com 프러스 컨덕터 C # 리브 예. False로 설정하면 오류가 제거되었습니다.
user3564895

9

로컬 시스템으로 TFS 프로젝트를 풀다운 할 때이 문제가 발생했습니다. 의심의 여지없이, 그것은 그것을 쓴 사람의 기계에서 잘 작동하고있었습니다. 나는 이것을 간단히 바꿨다.

WshShellClass shellClass = new WshShellClass();

이에...

WshShell shellClass = new WshShell();

이제는 챔피언처럼 작동합니다!


1
이 접근법은 저에게도 효과적이었습니다! 필자의 경우 필자는 필요한 값이 마우스 오른쪽 버튼으로 클릭하고 "복사 표현식"을 선택하기 위해 디버깅 중이었습니다. 나에게 주어진 것은 "... HTMLDocumentClass ..."였습니다. "Class"라는 텍스트를 제거하면 문제가 해결되었습니다.
majestzim 2019

3

VB.NET 2013에서 Office 2007과 동일한 문제가 발생하여 해결되었습니다.

VS 2013 VB.NET 프로젝트> 소품> 참조> Microsoft Word 12.0 Object Lib> Interop 유형 포함 : True를 False로 변경


1

http://digital.ni.com/public.nsf/allkb/4EA929B78B5718238625789D0071F307

이 오류는 새 프로젝트에서 참조 된 TestStand API Interop 어셈블리의 Embed Interop Types 속성에 대한 기본값이 true이므로 발생합니다. 이 오류를 해결하려면 다음 단계에 따라 Embed Interop Types 속성 값을 False로 변경하십시오. 솔루션 탐색기의 프로젝트 참조 섹션에서 TestStand Interop Assembly 참조를 선택하십시오. 속성 브라우저에서 Embed Interop Types 속성을 찾아서 값을 False로 변경하십시오.


1

Visual Studio 2017 버전 15.8에서는 PackageReference 구문사용하여 Visual Studio Extensibility (VSIX) 프로젝트에서 NuGet 패키지를 참조 할 수 있었습니다. 이를 통해 NuGet 패키지에 대해 추론하기가 훨씬 쉬워지고 전체 VSSDK를 포함하는 완전한 메타 패키지가 제공됩니다.

NuGet 패키지 아래에 설치하면 EmbedInteropTypes 문제 가 해결됩니다 .

설치 패키지 Microsoft.VisualStudio.SDK.EmbedInteropTypes

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.