2016-08-20 6 views
0

zip 파일을 압축 해제하는 .NET 4.5가 없기 때문에 this과 같은 Shell32을 사용하고 있습니다. 나는이 같은 DLL을 참조 할 때 :Shell32.dll을 참조 하시겠습니까?

fatal error CS0009: Metadata file 'c:\Windows\System32\shell32.dll' could not be opened -- 'An attempt was made to load 
    a program with an incorrect format. ' 

업데이트 : 비주얼 스튜디오없이, 단지 csc.exe

csc.exe /r:"C:\Windows\System32\shell32.dll" ... 

을 나는이 오류가 발생합니다.

+0

'Process.Start'를 사용하여 응용 프로그램과 함께 번들로 제공되는 일종의'unzip.exe'를 실행할 수도 있습니다. Windows zipper가 불완전하므로 더 많은 이국적인 패키지 문제가 발생할 수 있습니다. – PTwr

+0

아, .NET 2.0 이후로 [GZipStream] (https://msdn.microsoft.com/en-us/library/system.io.compression.gzipstream (v = vs.110) .aspx)을 사용할 수 있지만 내가 기억하는 바에는 몇 가지 버그가있다. – PTwr

+0

@PTwr 그게 내가 지금까지 해왔 던 것이다.'Process.Start (@ "cmd.ex/C powershell.exe -nologo -noprofile -command" "& {Add-Type -A 'System.IO.Compression.FileSystem '; [IO.Compression.ZipFile] :: ExtractToDirectory ('foo.zip ','bar ');} "" ");'. 작동하지만 다른 해결책이 있는지 알고 싶습니다. 또한'GZipStream'가 작동 할 수도 있습니다. –

답변

1

shell32를 사용하면 C# 프로그램에서 사용할 수있는 COM 서버입니다. 그러나 먼저 interop 어셈블리를 생성하여 shell32.dll (.NET 메타 데이터와 동일한 개념) 내의 형식 라이브러리를 CLR이 이해할 수있는 선언으로 변환해야합니다. running Tlbimp.exe 또는 더 간단하게 IDE에서 DLL에 대한 참조를 추가하십시오.

명령 줄에서이 작업을 수행하고 msbuild를 사용하여 컴파일 된 .csproj 프로젝트 파일을 얻지 못하면 msbuild와 동일한 작업을 수행하고 tlbimp를 실행해야합니다. shell32.dll의 경우이 작업은 한 번만 수행하면되고 소스 제어에서 interop 라이브러리를 체크인 할 수 있으므로 다시 할 필요가 없습니다. interop 라이브러리에서/r을 사용하십시오.

IDE 또는 MSBuild.exe를 사용하는 것이 현명한 선택입니다. 또한 은 Interop Types 기능을 사용하여 런타임에 interop 어셈블리가 필요하지 않으므로 배포 할 필요가 없습니다. MSBuild에서 생성 된 빌드 명령을 보면 유용합니다.

1

아마도 .NET 어셈블리처럼 참조하려고하기 때문일 수 있습니다.

난은/lib 디렉토리를 사용하여 어셈블리를 포함하려고합니다 : 대신에 따라 인수를 ...

/lib:dir1[,dir2] Compiler option.

관련 문제