Visual Studio에서 Embed Interop Types true 및 false 설정의 차이점은 무엇입니까?


121

Visual Studio에서 프로젝트에 하나의 참조를 추가 할 때 속성 창에 옵션 Embed Inteop Types이 있습니다. True또는로 설정해야 False합니까? 차이점이 뭐야?

많은 프로젝트가 있기 때문에 그중 일부는 참조가로 설정되고 False다른 프로젝트는로 설정되어 True완전히 엉망입니다. 그리고 bulid 서버에도 동일한 경고가 있습니다.

"내장 된 interop 어셈블리에 대한 참조가 생성됨"은 무엇을 의미합니까?

우리 모두 변경할 계획 그래서 Embed Inteop TypesFalse, 우리는 어떤 위험을 얻을 것?


4
이렇게하지 마십시오. 성가신 배포 세부 사항을 해결하는 매우 멋진 기능입니다. 이것이 무엇인지 진정으로 이해하려면 COM을 이해해야합니다.
Hans Passant

@HansPassant, 설정하지 false않거나 변경 하지 않는다는 말입니까 (예 : 기본값이 false이미 설정된 경우 )?
noelicus 2014 년

2
그는 그것을 False로 설정할 계획입니다. 이러지 마세요.
Hans Passant 2014 년

3
@HansPassant는 어떻게 irksome과 grok을 사용합니다. 그것은 매우 브리티시합니다 : D
Mafii

4
@Mafii 나는 grok이 낯선 땅의 낯선 사람 (미국인) 출신이라고 생각했습니다. 물론 영국인이 더 많이 사용하지 않을 수도 있다는 뜻은 아닙니다!
UuDdLrLrSs

답변:


79

이 옵션은 interop을 위해 매우 큰 PIA (기본 Interop 어셈블리)를 배포 할 필요를 없애기 위해 도입되었습니다.

관리되지 않는 어셈블리와 통신 할 수 있도록 사용되는 관리 브리징 코드를 포함하기 만하면되지만 모든 것을 포함하는 대신 실제로 코드에서 사용하는 내용 만 생성합니다.

Scott Hanselman의 블로그 게시물에서 이에 대한 자세한 내용과 기타 VS 개선 사항을 여기에서 확인하십시오 .

권장 여부는이 기능을 사용할 필요가 없기 때문에 확실하지 않습니다. 빠른 웹 검색은 몇 가지 리드를 생성합니다.

이들을 모두 거짓으로 전환 할 수있는 유일한 위험은 PIA 파일에 대한 배포 문제와 해당 파일 중 일부가 큰 경우 더 큰 배포입니다.


1
Embed Interop Types를 끌 때 기존 코드를 손상시킬 수있는 다소 큰 차이가 있습니다 . 차이점은 다음과 같습니다 . “C # 4 이상 버전에서는 어셈블리가 / link 컴파일러 옵션에 의해 참조되거나 Excel Embed Interop Types 속성이 true로 설정된 경우 반환 된 개체를 자동으로 동적으로 변환합니다. 이 속성의 기본값은 True입니다. "
Dirk Vollmar

임베디드 interop 어셈블리는 호스트와 플러그인이 동일한 COM 개체 에 의존하는 플러그인 기반 시스템에서 문제를 일으켰습니다 . 또 다른 문제는 이러한 어셈블리를 ILMerge 와 병합하는 입니다.
Ant_222

8

false로 설정하면 디버거를 사용하여 항목의 값을 볼 수 있습니다. true로 설정했을 때 오류가 발생했습니다. 개체로 캐스팅하거나 'Embed Interop Types'속성을 true로 변경하는 것이 좋습니다.

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