2017-06-01 4 views
2

J'ai une application WinForms C# .NET (v4.6.2) dans laquelle j'accède à un fichier qui peut/ne peut pas être une archive .zip qui a été créée en utilisant "System .IO.Compression; ". J'ai les deux références "System.IO.Compression" et System.IO.Compress.FileSystem "dans le projet et" using System.IO.Compression; "en haut, qui a été installé en utilisant le programme d'installation du paquet NuGetSystem.MissingMethodException lors de la tentative de lecture de ZipFile à partir de ZipArchive C#

Voici le code pour tenter d'ouvrir le fichier dans une archive .zip:

 try 
     { 
      string extractPath = Path.GetTempFileName(); 
      string strGameVersion = ""; 
      string strProjectType = ""; 

      using (ZipArchive archive = ZipFile.OpenRead(OpenFilePath)) 
      { 
       FileStream fs = new FileStream(extractPath, FileMode.Open, FileAccess.Read); 
       StreamReader sr = new StreamReader(fs); 
       foreach (ZipArchiveEntry entry in archive.Entries) 
       { 
        if (entry.FullName.Contains("ProjectData.txt")) 
        { 
         entry.ExtractToFile(Path.Combine(extractPath, entry.FullName)); 
         strGameVersion = sr.ReadLine(); 
         strProjectType = sr.ReadLine(); 
        } 
        File.Delete(extractPath); 
       } 
       sr.Close(); 
       fs.Close(); 
       archive.Dispose(); 
      } 
    } 
    catch(System.IO.FileFormatException flex1) 
    { 
     MessageBox.Show(flex1.ToString(), "oops.", MessageBoxButtons.OK, MessageBox.Icon.Error); 
    } 

le message d'erreur est « System.MissingMethodException: Méthode non trouvée: « System.IO.Compression.ZipArchive System.IO.Compression. ZipFile.OpenRead (System.String) '. " Alors, qu'est-ce que je fais de mal ou de ne pas faire du tout?

+0

double possible de [C# .NET manquant Exception Méthode lors de l'ouverture ZipArchive créé avec System.IO.Compression] (https: // stackoverflow. com/questions/44556298/c-net-net-missing-method-exception-lors de l'ouverture-zip-archive-created-with-syste) –

Répondre

0

D'après vos commentaires, je présume que Les assemblys de dépendances essayant de charger peuvent être une version incorrecte. Afin de leur dire que vous allez devoir vérifier le journal de liaison de fusion pour voir ce qui s'est passé. Le tutoriel ci-dessous explique comment déboguer des échecs de liaison d'assemblage pour détecter leur cause première.

http://blogs.msdn.com/suzcook/archive/2003/05/29/57120.aspx

3

Pour une raison quelconque, OpenRead n'existe pas dans l'assemblage net46. La solution rapide est d'utiliser

ZipArchive OpenRead(string filename) 
{ 
    return new ZipArchive(File.OpenRead(filename), ZipArchiveMode.Read); 
} 

comme une réponse à https://stackoverflow.com/a/44598092/75947

0

je devais passer à l'aide de System.IO.Compression nuget.org pour obtenir ce travail. De plus, j'ai dû faire les changements que Felix a suggéré ci-dessus. C'est remplacer:

ZipFile.OpenRead(file))

avec

new ZipArchive(File.OpenRead(file), ZipArchiveMode.Read)