2016-01-26 2 views
0

Я просто смотрел файл project.json в одном из моих основных проектов ASP.NET и заметил, что для отображения зависимостей есть две разные области.Различия в том, где вы размещаете зависимости в файле project.json ASP.NET Core?

Один из узлов frameworks, а другой - узел dependencies. Почему/когда вы/должны ли вы размещать зависимости в одном месте над другим?

{ 
    "version": "1.0.0-*", 
    "description": "My Class Library", 
    "authors": [ "" ], 
    "tags": [ "" ], 
    "projectUrl": "", 
    "licenseUrl": "", 
    "frameworks": { 
     "dotnet5.4": { 
      "dependencies": { 
       "Microsoft.CSharp": "4.0.1-beta-23516", 
       "System.Collections": "4.0.11-beta-23516", 
       "System.Linq": "4.0.1-beta-23516", 
       "System.Runtime": "4.0.21-beta-23516", 
       "System.Threading": "4.0.11-beta-23516" 
      } 
     } 
    }, 
    "dependencies": { 
     "EntityFramework.MicrosoftSqlServer": "7.0.0-rc1-final" 
    } 
} 

ответ

0

Причина очень проста. У вас могут быть разные зависимости для разных фреймворков.

В некоторых случаях указанная зависимость существует в различных версиях для разных фреймворков.

В другом случае указанная зависимость, например System.Runtime, не должна быть включена как все. Проблема заключается в том, что DLL является отдельным модулем в .NET Core (см. here), но dnx46 или dnx451 содержит реализованные методы внутри .Net framework. Не нужно включать внешних (дополнительных) dll. Таким образом, вам не нужно включать пакет System.Runtime в часть зависимостей dnx451 или в качестве общей зависимости. Таким образом, System.Runtime - framework-specific dependencies.

В некоторых случаях вы можете включить зависимость в форму "dnx451": "frameworkAssemblies": { "System.Runtime": "" }}, чтобы пропустить в том числе System.Runtime, если это было ошибочно необходимо (см. the question). Обычно используется frameworkAssemblies для ссылок на сборки из Global Assembly Cache (GAC) без, перераспределяя его (см. the documentation).

+0

Я понимаю, что если вы нацеливаете несколько фреймворков, вы можете указать разные версии для каждой структуры. Но как насчет чистого узла 'dependencies', который не привязан к какой-либо структуре? – Matthew

+0

@MatthewVerstraete: Это ** общая ** зависимость, используемая для каждой структуры таргетинга. Например, «EntityFramework.MicrosoftSqlServer»: «7.0.0-rc1-final» 'не входит как часть некоторой структуры, и пакет поддерживает' dotnet5.4', 'dnx451' и' dnxcore50'. Таким образом, вы можете включить его как общая зависимость. – Oleg

+0

Я вижу, можете ли вы изменить свой ответ на это, чтобы он затрагивал обе части вопроса? – Matthew

Смежные вопросы