2014-11-25 8 views
10

Я пытаюсь использовать System.IO.Compression.ZipArchive в библиотеке классов ASP.NET VNext в VS2015 Preview. Я добавил пакет System.IO.Compression, используя NuGet, и добавил его в мой проект.json как зависимость aspnetcore50.System.IO.Compression в ASP.NET VNext полный CLR

Когда я пытаюсь использовать ZipArchive, intellisense говорит, что он недоступен в ASP.NET 5.0, но доступен в ASP.NET Core 5.0. Если я переключусь на использование ASP.NET Core, используя раскрывающийся список в верхней строке, тогда мой код работает так, как ожидалось, но когда я выбираю обычный ASP.NET, он не работает.

Я попытался вручную добавить его как зависимость от aspnet50 в project.json, но это не исправить.

Мне нужно использовать полную CLR над Core CLR, поскольку мне нужно загружать сборки в AppDomain во время выполнения, и я считаю, что это не поддерживается в Core CLR.

Пожалуйста, объясните, что здесь происходит, возможно, укажите мне статьи или сообщения в блогах, покажите мне, как это исправить.

Update: Я думаю, лучший способ или формулировку Это - ZipArchive не доступен в aspnet50, но он доступен в aspnetcore50, когда я добавить NuGet пакет System.IO.Compression. Почему это?

+0

Вы попробуйте добавить System.IO.Compression в качестве ссылки на сборку, а не NuGet? Он является частью стандартной платформы .NET Framework. – fejesjoco

+0

Я все еще изучаю v5.0, но я не думаю, что вам нужно это делать, когда таргетинг на полную версию CLR. У меня есть пространство имен, но ZipArchive там нет, поэтому я попытался добавить его через NuGet, который затем добавил его только в Core CLR. – Tom

+0

Добавление базовой сборки сборки .NET - это обычная вещь. NuGet - это расширение, вам нужно только это, когда вы добавляете внешнюю ссылку, отсутствующую в .NET. Или он был удален из .NET v5? – fejesjoco

ответ

13

Они только способ, которым я получаю проект для компиляции и работы, выполняли следующее в project.json. Я не слишком хорошо знаком с библиотекой сжатия, поэтому я не тратил время на сжатие файла. Ниже вы будете пример кода, который будет компилироваться без проблем.


{ 
    "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" 

      } 
     } 
    } 
} 

Пример кода

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

Спасибо! Похоже, я просто пропустил '' frameworkAssemblies'' из aspnet50. Я не знал об этом. Является ли это новым способом добавления ссылок на сборки для сборок, которые являются частью структуры? – Tom

+0

Привет, Том, я не уверен на 100%, но я думаю, что это новый способ, у меня такая же проблема с httpclient, и они так решили, что проблема заключалась в добавлении основной ссылки и ссылки на фреймворк. –

+0

Спасибо !!! Я, должно быть, потратил четыре часа, пытаясь добавить ссылку на фреймворк в мой проект vNext. Я очень разочаровался, так как это займет не более пяти секунд, но этот ответ спас день! – slypete