【问题标题】:Installed .Net 4.5 but can't use ZipFile class in Visual C#安装了 .Net 4.5 但不能在 Visual C# 中使用 ZipFile 类
【发布时间】:2012-12-22 12:27:58
【问题描述】:

我是 Visual Studio 编程的新手。

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

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

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

【问题讨论】:

    标签: c# .net visual-studio-2012 compression zipfile


    【解决方案1】:

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

    【讨论】:

    • 为此感谢一百万!我以为我在调用 .net 4.5 程序集时遇到了问题。但你成功了!
    • 是的,需要将两个引用:System.IO.Compression.FileSystem 和 System.IO.Compression 添加到您的项目中。
    • 如何使用 csc.exe 编译的简单 CreateZip.cs 文件来做到这一点?
    【解决方案2】:

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

    【讨论】:

    • 啊,我明白了。谢谢你的帮助!只是想知道,在引用中添加程序集与在代码中简单地键入“使用 System.IO.Compression”有何不同?例如,我在代码中有“使用 System.Configuration”,但没有引用它,程序仍然可以正常工作。
    • @user1958597,将程序集添加到引用列表意味着您可以将此程序集中的所有公共类用于您的代码。 “使用”可以让你的代码更短。我的意思是,如果您使用 System.IO.Compression 添加;在您的代码中,您将能够编写 ZipFile zip = ... 而不是 System.IO.Compression.ZipFile zip = ...
    【解决方案3】:

    为了进一步澄清前面的答案,下面是手动将引用添加到 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 的必要信息。

    【讨论】:

      【解决方案4】:

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

      【讨论】:

        【解决方案5】:

        .NET 4.5 中的新功能

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

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

        样本

        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-of-the-box

        【讨论】:

          【解决方案6】:

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

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

          【讨论】:

            【解决方案7】:

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

            using System.IO.Compression;
            

            我希望这对某人有所帮助

            【讨论】:

              猜你喜欢
              • 2017-02-07
              • 2014-01-18
              • 2022-12-24
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 2013-01-12
              • 1970-01-01
              相关资源
              最近更新 更多