2014-11-25 8 views
10

Próbuję użyć System.IO.Compression.ZipArchive w bibliotece klasy ASP.NET VNext w VS2015 Preview. Dodałem pakiet System.IO.Compression przy użyciu NuGet, i dodałem go do mojego project.json jako zależność od aspnetcore50.System.IO.Compression w ASP.NET VNext pełny CLR

Kiedy próbuję użyć ZipArchive, intellisense mówi, że nie jest dostępne w ASP.NET 5.0, ale jest dostępne w ASP.NET Core 5.0. Jeśli przełączę się do korzystania z Core ASP.NET za pomocą menu rozwijanego na górnym pasku, mój kod działa zgodnie z oczekiwaniami, ale gdy wybieram normalny ASP.NET, to nie działa.

Próbowałem ręcznie dodając go jako zależność do aspnet50 w pliku project.json, ale to nie rozwiązało problemu.

Potrzebuję użyć pełnego CLR nad Core CLR, ponieważ potrzebuję załadować złożenia do AppDomain w czasie wykonywania i uważam, że nie jest to obsługiwane w Core CLR.

Czy ktoś może wyjaśnić, co się tutaj dzieje, może wskazać mi artykuły lub posty na blogu, pokazać, jak to naprawić.

Aktualizacja: Chyba lepszy sposób lub sformułowanie to jest - ZipArchive nie jest dostępny w aspnet50, ale jest ona dostępna w aspnetcore50 kiedy dodać pakiet System.IO.Compression Nuget. Dlaczego to?

+0

Próbowałaś dodanie System.IO.Compression jako odniesienie montażowej, zamiast Nuget? Jest częścią domyślnej instalacji środowiska .NET. – fejesjoco

+0

Nadal uczę się v5.0, ale nie sądzę, że musisz tego robić, gdy celujesz w pełną wersję CLR. Mam dostęp do przestrzeni nazw, ale ZipArchive tam nie ma, dlatego próbowałem dodać ją przez NuGet, który następnie dodał ją tylko do Core CLR. – Tom

+0

Dodawanie podstawowego odwołania do .NET jest normalną czynnością. NuGet jest rozszerzeniem, którego potrzebujesz tylko wtedy, gdy dodasz zewnętrzny odnośnik nieobecny w .NET. Lub został usunięty z .NET v5? – fejesjoco

Odpowiedz

13

Jedynym sposobem, w jaki otrzymuję projekt do kompilacji i pracy, było wykonanie następujących czynności w projekcie.json. Nie jestem zbyt zaznajomiony z biblioteką kompresji, więc nie traciłem czasu na kompresowanie pliku. Poniżej przykładowy kod, który skompiluje się bez problemu.


{ 
    "version": "1.0.0-*", 
    "dependencies": { 

    }, 

    "frameworks": { 
     "aspnet50": { 
      "dependencies": { 

      }, 
      "frameworkAssemblies": {     
       "System.IO.Compression": "4.0.0.0" 

      } 
     }, 
     "aspnetcore50": { 
      "dependencies": { 
       "System.Runtime": "4.0.20-beta-22231",     
       "System.IO.Compression.ZipFile": "4.0.0-beta-22231", 
       "System.IO": "4.0.10-beta-22231", 
       "System.IO.FileSystem": "4.0.0-beta-22231" 

      } 
     } 
    } 
} 

Przykładowy kod

public static void ZipFile(string path) 
    { 
     var data = new MemoryStream(File.ReadAllBytes(path)); 
     var zip = new ZipArchive(data, ZipArchiveMode.Create,false); 
     zip.CreateEntry(path + ".zip");    
    } 
+0

Dzięki! Wygląda na to, że brakowało mi '' frameworkAssembly "' z ASPNET50. Nie wiedziałem o tym. Czy jest to nowy sposób dodawania odwołań do zestawu dla złożeń, które są częścią struktury? – Tom

+0

Cześć Tom, nie jestem w 100% pewny, ale myślę, że teraz jest nowy sposób, mam ten sam problem z httpclientem, a oni sposób, w jaki rozwiązałem problem, to dodanie odniesienia do rdzenia i odniesienia do struktury. –

+0

Dziękujemy! Musiałem spędzić cztery godziny właśnie teraz próbując dodać odniesienie do struktury w moim projekcie vNext. Byłem bardzo zniechęcony, ponieważ nie powinno to zająć więcej niż pięć sekund, ale ta odpowiedź uratowała dzień! – slypete

Powiązane problemy