Interop 유형은 삽입 할 수 없습니다.
C #의 .NET 4.0 프레임 워크 (베타 2)에서 웹 응용 프로그램을 만들고 있습니다.
"ActiveHomeScriptLib"라는 어셈블리를 사용하려고하면 다음 오류가 발생합니다.
Interop 유형 'ActiveHomeScriptLib.ActiveHomeClass'는 포함 할 수 없습니다. 대신 해당 인터페이스를 사용하십시오.
프레임 워크를 버전 3.5로 변경해도 오류가 없습니다.
Interop 유형은 무엇이며 4.0 프레임 워크를 사용할 때만 발생하는 이유는 무엇입니까?
.NET 4.0에서는 주 interop 어셈블리 (또는 필요한 부분)를 어셈블리에 포함 할 수 있으므로 애플리케이션과 함께 배포 할 필요가 없습니다.
어떤 이유로 든이 어셈블리는 포함 할 수 없지만 문제가되지 않는 것 같습니다. Visual Studio 2010에서 어셈블리의 속성 탭을 열고 "Embed Interop Types"를 "False"로 설정하기 만하면됩니다.
편집 : 사용중인 유형 에서 접미사를 제거하는 Michael Gustus의 답변을 참조하십시오 Class
.
대부분의 경우이 오류는 COM 개체를 인스턴스화하려는 코드의 결과입니다. 예를 들어 다음은 Excel을 시작하는 코드입니다.
Excel.ApplicationClass xlapp = new Excel.ApplicationClass();
일반적으로 .NET 4에서는 'Class'접미사를 제거하고 코드를 컴파일하기 만하면됩니다.
Excel.Application xlapp = new Excel.Application();
MSDN 설명은 여기에 있습니다 .
Jan처럼 그것을 얻는 데 시간이 좀 걸렸습니다. .. = S 그래서 좌절감에 눈이 멀었던 다른 사람을 위해.
- 프로젝트 참조 아래의 솔루션 탐색기에서 추가 한 문제가되는 어셈블리를 마우스 오른쪽 단추로 클릭합니다 . (제 경우에는 WIA)
- 속성을 클릭합니다.
- Embed Interop Assembly에 대한 옵션이 있어야합니다 .
- False로 설정
Jon의 정답을 확장합니다.
여기서 문제는 새로운 "Embed Interop Types"(또는 NoPIA) 기능을 클래스 유형 사용과 결합한다는 것입니다. "내장 Interop 유형"기능은 기본적으로 PIA (주 Interop 어셈블리)의 모든 유형을 참조 어셈블리에 정적으로 연결하여 배포 오버 헤드를 제거함으로써 작동합니다.
이 기능은 PIA의 대부분의 유형에서 잘 작동하지만 제한 사항이 있습니다. 그중 하나는 클래스를 포함 할 수 없다는 것입니다 (서비스 문제). Misha는 이것이 허용되지 않는 이유에 대한 자세한 블로그 기사를 가지고 있습니다.
Visual Studio 2012에서 Embed Interop을 설정하는 위치는 다음과 같습니다.
해결책을 얻었습니다
참조로 이동하여 원하는 dll을 마우스 오른쪽 버튼으로 클릭하면 "Embed Interop Types"에서 "False"또는 "True"로 옵션이 표시됩니다.
TFS 프로젝트를 로컬 컴퓨터로 가져올 때이 문제가 발생했습니다. 그것은 그것을 작성한 사람의 컴퓨터에서 잘 작동하는 것으로 추정됩니다. 나는 이것을 단순히 바꿨다.
WshShellClass shellClass = new WshShellClass();
이에...
WshShell shellClass = new WshShell();
이제 챔피언처럼 작동합니다!
Office 2007의 VB.NET 2013에서 동일한 문제가 발생하여 해결되었습니다.
VS 2013 VB.NET Project > Props > Refs > Microsoft Word 12.0 Object Lib > Embed Interop Types: change True to False
http://digital.ni.com/public.nsf/allkb/4EA929B78B5718238625789D0071F307
This error occurs because the default value is true for the Embed Interop Types property of the TestStand API Interop assembly referenced in the new project. To resolve this error, change the value of the Embed Interop Types property to False by following these steps: Select the TestStand Interop Assembly reference in the references section of your project in the Solution Explorer. Find the Embed Interop Types property in the Property Browser, and change the value to False
Visual Studio 2017 버전 15.8에서는 PackageReferencesyntax 를 사용하여 VSIX (Visual Studio 확장 성) 프로젝트에서 NuGet 패키지를 참조 할 수 있었습니다. 이를 통해 NuGet 패키지에 대해 추론하는 것이 훨씬 간단 해지고 전체 VSSDK를 포함하는 완전한 메타 패키지를 가질 수 있습니다.
NuGet 패키지 아래에 설치하면 EmbedInteropTypes 문제 가 해결됩니다 .
설치 패키지 Microsoft.VisualStudio.SDK.EmbedInteropTypes
참고 URL : https://stackoverflow.com/questions/2483659/interop-type-cannot-be-embedded
'developer tip' 카테고리의 다른 글
지도에 Go의 키가 포함되어 있는지 확인하는 방법은 무엇입니까? (0) | 2020.10.02 |
---|---|
1MB RAM에서 1 백만 개의 8 자리 숫자 정렬 (0) | 2020.10.02 |
Swift에서 문자열을 배열로 분할 하시겠습니까? (0) | 2020.10.02 |
@selector () in Swift? (0) | 2020.10.02 |
CSS 배경 늘리기 및 크기 조정 (0) | 2020.10.02 |