"System.IO.Compression"네임 스페이스에서 "ZipFile"클래스를 찾지 못했습니다.


112

이름 공간 "System.IO.Compression"에서 "Zipfile"클래스를 사용할 수 없습니다. 내 코드는 다음과 같습니다.

using System;
using System.IO;
using System.IO.Compression;

namespace ConsoleApplication
{
    class Program
    {
        static void Main(string[] args)
        {
            string startPath = @"c:\example\start";
            string zipPath = @"c:\example\result.zip";
            string extractPath = @"c:\example\extract";

            ZipFile.CreateFromDirectory(startPath, zipPath, CompressionLevel.Fastest,true);

            ZipFile.ExtractToDirectory(zipPath, extractPath);
        }
    }
}

오류는 다음과 같습니다.

현재 컨텍스트에 'zipfile'이름이 없습니다.

어떻게 해결할 수 있습니까?


답변:


213

이에 대한 추가 참조가 필요합니다. 이 작업을 수행하는 가장 편리한 방법은 NuGet 패키지 System.IO.Compression.ZipFile을 사용하는 것입니다.

<!-- Version here correct at time of writing, but please check for latest -->
<PackageReference Include="System.IO.Compression.ZipFile" Version="4.3.0" />

NuGet없이 .NET Framework에서 작업하는 경우 "System.IO.Compression.FileSystem.dll"어셈블리에 dll 참조를 추가하고 .NET 4.5 이상을 사용하고 있는지 확인해야합니다. 이전 프레임 워크에 존재).

자세한 내용 은 MSDN에서 어셈블리 및 .NET 버전을 찾을 수 있습니다.


2
나는 .NET 4.0을 사용하고 있습니다 ... 그리고 나는이 DLL 파일을 찾을 수 없습니다
모하메드 카말

17
@MohamedKamal 실제로 .NET 4.5를 사용하지 않으면 그렇게하지 않을 것입니다. .NET 4.5는 그때까지 존재하지 않았기 때문입니다. "버전 정보"정보 참조- "지원 : 4.5"
Marc Gravell

1
@MarcGravell 동일한 오류가 발생했습니다. Visual Studio-> help-> Microsoft Visual Studio 정보를 확인했는데 .NET 버전 4.5.51650으로 표시됩니다. 다음에 무엇을 확인해야합니까?
foxwendy

4
나는 FileSystem참조 가 없었다 . 만 System.IO.Compression. 감사. 클래스의 네임 스페이스에없는 파일이 필요하다는 것이 이상합니다. 그것은 관습에서 이상한 일탈입니다.
Chris Benard

3
@ChrisBenard 나는 같은 문제를 발견했습니다. System.IO.Compression에 대한 참조를 포함하는 것만으로는 충분하지 않았기 때문에 FileSystem도 필요했습니다. 참으로 흥미 롭습니다.
dckuehn 2011

32

.NET의 녹색 프로그래머 인 경우 MarcGravell이 언급 한대로 DLL 참조를 추가 하려면 다음 단계를 수행하십시오.

Visual C #에서 참조를 추가하려면

  1. 솔루션 탐색기에서 프로젝트 노드를 마우스 오른쪽 단추로 클릭하고 참조 추가를 클릭합니다.
  2. 참조 추가 대화 상자에서 참조 할 구성 요소 유형을 나타내는 탭을 선택합니다.
  3. 참조 할 구성 요소를 선택한 다음 확인을 클릭합니다.

MSDN 문서에서 방법 : 참조 추가 대화 상자를 사용하여 참조 추가 또는 제거 .


1
정보 주셔서 감사합니다. 이미 System.IO.Compression을 사용하고 있습니다. 그러나 OP의 원래 오류없이 컴파일 할 ZipFile을 얻으려면 위에서 설명한대로 System.IO.Compression.FileSystem 사용에 대한 참조를 추가해야했습니다.
Hugh Seagraves 2016

17

4.5로 업그레이드 할 수없는 경우 외부 패키지를 사용할 수 있습니다. 그중 하나는 DotNetZipLib의 Ionic.Zip.dll입니다.

using Ionic.Zip;

여기에서 무료로 다운로드 할 수 있습니다. http://dotnetzip.codeplex.com/


3
또는 NuGet을 통해 설치
northben 2014 년

2
이것이 질문과 어떤 관련이 있습니까?
eugenekgn 2014 년

20
그의 질문은 "어떻게 고쳐야합니까?"였습니다. 그리고 이것은 그것을 고치는 한 가지 방법입니다-그의 .net 버전이 그것을 지원하지 않았기 때문입니다.
John Faulkner

4
슬프게도 업그레이드는 때때로 선택이 아닙니다. 찬성하십시오.
sampathsris

1
이것은 XP가 설치된 2000 대의 PC에 쓰기를하는데 프로그램이 (.net 4.5 프레임 워크를 설치하기 위해) 어떤 설치도 할 수없는 경우에 적합합니다
Mukus

10

참조로 이동하여 "System.IO.Compression.FileSystem"을 추가하십시오.


나는 "참조"를 찾을 수있는 무한한 장소가 있습니다. 이것을 어디서 찾을 수 있는지에 대해 더 많은 힌트를 줄 수 있습니까?
Daniel Kaplan

2

도움이 된 솔루션 : 도구> NuGet 패키지 관리자> 솔루션 용 NuGet 패키지 관리 ...> 찾아보기> System.IO.Compression.ZipFile 검색으로 이동하여 설치합니다.


1

나는 이것이 오래된 스레드라는 것을 알고 있지만 이것에 대한 유용한 정보를 게시하는 것을 피할 수는 없습니다. 나는 Zip 질문이 많이 나오는 것을 보았고 이것은 거의 대부분의 일반적인 질문에 대답합니다.

4.5+를 사용하는 프레임 워크 문제를 해결하기 위해 ... jaime-olivares에서 만든 ZipStorer 클래스입니다 : https://github.com/jaime-olivares/zipstorer , 그는 또한이 클래스를 다음과 같이 사용하는 방법에 대한 예제를 추가했습니다. 뿐만 아니라 특정 파일 이름을 검색하는 방법에 대한 예제도 추가했습니다.

그리고 이것을 사용하는 방법에 대한 참조를 위해 다음과 같이 특정 파일 확장자에 대해 반복 할 수 있습니다.

#region
/// <summary>
/// Custom Method - Check if 'string' has '.png' or '.PNG' extension.
/// </summary>
static bool HasPNGExtension(string filename)
{
    return Path.GetExtension(filename).Equals(".png", StringComparison.InvariantCultureIgnoreCase)
        || Path.GetExtension(filename).Equals(".PNG", StringComparison.InvariantCultureIgnoreCase);
}
#endregion

private void button1_Click(object sender, EventArgs e)
{
    //NOTE: I recommend you add path checking first here, added the below as example ONLY.
    string ZIPfileLocationHere = @"C:\Users\Name\Desktop\test.zip";
    string EXTRACTIONLocationHere = @"C:\Users\Name\Desktop";

    //Opens existing zip file.
    ZipStorer zip = ZipStorer.Open(ZIPfileLocationHere, FileAccess.Read);

    //Read all directory contents.
    List<ZipStorer.ZipFileEntry> dir = zip.ReadCentralDir();

    foreach (ZipStorer.ZipFileEntry entry in dir)
    {
        try
        {
            //If the files in the zip are "*.png or *.PNG" extract them.
            string path = Path.Combine(EXTRACTIONLocationHere, (entry.FilenameInZip));
            if (HasPNGExtension(path))
            {
                //Extract the file.
                zip.ExtractFile(entry, path);
            }
        }
        catch (InvalidDataException)
        {
            MessageBox.Show("Error: The ZIP file is invalid or corrupted");
            continue;
        }
        catch
        {
            MessageBox.Show("Error: An unknown error ocurred while processing the ZIP file.");
            continue;
        }
    }
    zip.Close();
}



0

솔루션 탐색기에서 참조를 마우스 오른쪽 단추로 클릭 한 다음 어셈블리를 클릭하여 확장하고 System.IO.Compression.FileSystem을 찾은 다음 선택되어 있는지 확인합니다. 그런 다음 수업에서 사용할 수 있습니다.using System.IO.Compression;

참조 어셈블리 추가 스크린 샷


0

여기서 문제는 System.IO.Compression에 대한 참조를 추가 한 것입니다. System.IO.Compression.Filesystem.dll에 대한 참조가 누락되었습니다.

.net 4.5 이상에서해야합니다 (이전 버전에는 존재하지 않기 때문입니다).

TechNet에 방금 스크립트를 게시했습니다. 누군가 .net 4.5 또는 4.7이 필요하다는 것을 알게 될 것입니다.

https://gallery.technet.microsoft.com/scriptcenter/Create-a-Zip-file-from-a-b23a7530

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