30

我是 Visual Studio 编程的新手。

我最近将 .Net 4.0 升级到 4.5,以便使用 System.IO.Compression 下的 ZipFile 类,但安装完成后,Visual Studio(我使用的是 2012)仍然无法将 ZipFile 识别为类名。

我确保 .Net 4.5 出现在控制面板程序列表中,并且我的 C# 解决方案将 .Net Framework 4 设置为目标框架。

有人可以帮我解决这个问题吗?

4

7 回答 7

67

请参阅MSDN 上的ZipFile 类。它显示所需的框架版本是 4.5。修复框架版本后,检查您是否添加了对System.IO.Compression.FileSystem.dll程序集的引用并向您的类添加了 usingSystem.IO.Compression指令。

于 2013-01-08T15:42:53.413 回答
15

您还需要引用 System.IO.Compression.FileSystem.dll 程序集。

于 2013-01-08T15:42:23.313 回答
9

只是为了进一步澄清前面的答案,这里是如何手动将引用添加到 Web.config:

<configuration>
  <system.web>
    <compilation targetFramework="4.5">
      <assemblies>
        <add assembly="System.IO.Compression, Version=4.0.0.0, Culture=neutral, PublicKeyToken=B77A5C561934E089" />
        <add assembly="System.IO.Compression.FileSystem, Version=4.0.0.0, Culture=neutral, PublicKeyToken=B77A5C561934E089" />
      </assemblies>
    </compilation>
  </system.web>
</configuration>

或者到 *.csproj:

<Project ...>
  <ItemGroup>
    <Reference Include="System.IO.Compression, Version=4.0.0.0, Culture=neutral, PublicKeyToken=B77A5C561934E089, processorArchitecture=MSIL" />
    <Reference Include="System.IO.Compression.FileSystem, Version=4.0.0.0, Culture=neutral, PublicKeyToken=B77A5C561934E089, processorArchitecture=MSIL" />
  </ItemGroup>
</Project>

这些文件可以在 C:\Windows\Microsoft.NET\assembly\GAC_MSIL\ 中找到,子文件夹还包含有关版本、文化和 PublicKeyToken 的必要信息。

于 2013-11-20T15:26:23.443 回答
5

您需要将当前项目的目标框架从.Net 4 更改为.Net 4.5。

于 2013-01-08T15:41:28.670 回答
2

.NET 4.5 中的新功能

Zip 压缩改进以减小压缩文件的大小。请参阅 System.IO.Compression 命名空间。

添加System.IO.Compression程序集作为对您项目的引用。您可能还希望引用System.IO.Compression.FileSystem程序集来访问ZipArchive 类的三个扩展方法(来自 ZipFileExtensions 类) :CreateEntryFromFile、CreateEntryFromFile 和 ExtractToDirectory。这些扩展方法使您能够将条目的内容压缩和解压缩到文件中。

样本

const string zipFilePath = @"C:\apps\Sample Pictures.zip";

using (FileStream zipFileToOpen = new FileStream(zipFilePath, FileMode.Open))
using (ZipArchive archive = new ZipArchive(zipFileToOpen, ZipArchiveMode.Read)) {

        foreach (var zipArchiveEntry in archive.Entries)
            Console.WriteLine(
                "FullName of the Zip Archive Entry: {0}", zipArchiveEntry.FullName
            );
}

参考资料:http:
//msdn.microsoft.com/en-us/library/ms171868.aspx
http://www.tugberkugurlu.com/archive/net-4-5-to-support-zip-file-manipulation-out开箱即用

于 2013-06-13T08:03:13.580 回答
1

对于 Windows Phone 8.1,使用 NuGet 将 Microsoft 压缩包添加到您的项目并引用它。

如果您有一个较旧的 WP8 项目,您可能使用了不同的包,该包会与 WP8.1 附带的 .NET 4.5 的一部分的 System.IO.Compression dll 产生冲突。您需要摆脱它并使用与 .NET 4.5 协调工作的 Microsoft Compression。我就是这样过来的!

于 2015-11-19T09:19:58.620 回答
1

在我的情况下,我需要手动删除所有以System.IO.Compression开头的 dll 引用,然后一一添加所需的引用(System.IO.Compression.FileSystem等),即使我只写了一个 using 语句

using System.IO.Compression;

我希望这可以帮助别人

于 2017-03-24T15:58:01.977 回答