문제

COM 유형 라이브러리를 어셈블리를 생성하지 않고 C# 코드로 가져 오거나 변환하는 도구가 있습니까? TLBimp 도구와 TypelibaryConverter 클래스는 어셈블리 만 생성합니다.

C#을 찢어 버리는 성공이있었습니다. ComImport 생성 된 인터 로프 어셈블리를 통해 반사기를 실행하고 분해 된 소스를 붙잡는 정의는 일반적으로 컴파일되기 전에 상당히 많은 수동 패치가 필요합니다.

원하는 목표는 위성 인터 로프 DLL이없는 단일 exe이므로 대답은 ilmerge를 사용하여 exe에 인터 로프 DLL을 효과적으로 포함시키는 것입니다.

나는 과거에 내가 그런 도구를 발견 할 것이라고 확신했다. 그러나 아마도 꿈을 꾸었다 :-)

도움이 되었습니까?

해결책 3

내가 원래 의심되는대로 최상의 솔루션은 일 머지. COM API의 일부에 대해 선택적이지는 않지만 충분히 잘 작동합니다.

다음은 내가 사용중인 Post Build Event 명령 줄입니다. 재사용하기에 충분히 쉬워야합니다.

set MERGEFILES=Interop.Foo.dll Interop.Bar.dll

if "$(ConfigurationName)" == "Release" (
   ren "$(TargetFileName)" "_$(TargetFileName)"
   "$(ProgramFiles)\Microsoft\ILMerge\ILMerge.exe" /out:"$(TargetFileName)" "_$(TargetFileName)" %MERGEFILES%

   del "_$(TargetFileName)"
   del %MERGEFILES%
)

다른 팁

나는 그것이 당신에게 유용 할 것이라고 확신하지 않지만, tlbimp.exe의 관리 된 버전의 소스 코드가 릴리스되었습니다. 코드 플렉스. VS2010은 확실히 귀하의 문제를 해결할 것입니다.

오늘은 도움이되지 않지만 다음 버전의 C#에는 기능이 있습니다. 읽은 프레젠테이션에 따라 Nopia 또는 유형 임베딩이라고합니다. 이 기능은 본질적으로 PIA 어셈블리를 참조하는 프로젝트에 연결합니다. End resulrt는 interop/pia dll을 배포 할 필요가없는 단일 exe입니다.

주제에 대한 Misha의 게시물 : http://blogs.msdn.com/mshneer/archive/2008/10/28/type-embedding-support-in-c.aspx

그러나 단기적으로 Ilmerge 또는 Reflector + Copy Code와 함께 가야 할 수도 있습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top