C #의 .NET 4.0 프레임 워크 (beta2)에서 웹 응용 프로그램을 만들고 있습니다.
“ActiveHomeScriptLib”라는 어셈블리를 사용하려고하면 다음 오류가 발생합니다.
Interop 유형 ‘ActiveHomeScriptLib.ActiveHomeClass’는 포함 할 수 없습니다. 해당 인터페이스를 대신 사용하십시오.
프레임 워크를 버전 3.5로 변경하면 오류가 없습니다.
Interop Type은 무엇이며 왜 4.0 프레임 워크를 사용할 때만 발생합니까?
답변
.NET 4.0을 사용하면 응용 프로그램과 함께 배포 할 필요가 없도록 기본 interop 어셈블리 (또는 필요한 비트)를 어셈블리에 포함시킬 수 있습니다.
어떤 이유로 든이 어셈블리를 포함 할 수는 없지만 문제가되지 않는 것 같습니다. Visual Studio 2010에서 어셈블리의 속성 탭을 열고 “내장 된 Interop 형식”을 “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의 정답을 확장합니다.
여기서 문제는 새로운 “내장 Interop 유형”(또는 NoPIA) 기능을 클래스 유형 사용과 결합하고 있다는 것입니다. “내장 Interop 유형”기능은 PIA (Primary Interop Assembly)의 모든 유형을 참조 어셈블리에 기본적으로 정적으로 연결하여 배포 오버 헤드를 제거함으로써 작동합니다.
이 기능은 PIA에서 대부분의 유형에 적합하지만 제한이 있습니다. 그중 하나는 클래스를 포함 할 수 없다는 것입니다 (서비스 문제입니다). Misha는 이것이 허용되지 않는 이유에 대한 자세한 블로그 기사를 가지고 있습니다.
답변
해결책을 얻었다
참조로 이동하여 원하는 dll을 마우스 오른쪽 버튼으로 클릭하면 “내장 Interop 유형”옵션이 “거짓”또는 “참”으로 표시됩니다.
답변
로컬 시스템으로 TFS 프로젝트를 풀다운 할 때이 문제가 발생했습니다. 의심의 여지없이, 그것은 그것을 쓴 사람의 기계에서 잘 작동하고있었습니다. 나는 이것을 간단히 바꿨다.
WshShellClass shellClass = new WshShellClass();
이에…
WshShell shellClass = new WshShell();
이제는 챔피언처럼 작동합니다!
