Целевая платформа dnx451 или net451 в проектах библиотеки классов

Насколько я понимаю, целевые платформы dnx451 и net451 используют настольную платформу .NET Framework 4.5.1. dnx451 специально предназначен для приложений среды выполнения DNX и поддерживает ASP.NET 5.

Если у нас есть решение с проектом ASP.NET 5 и несколькими библиотеками классов, должны ли они все ориентироваться на dnx451 или только веб-проект должен ориентироваться на dnx451? Могут ли библиотеки классов быть нацелены только на net451?


person Dave New    schedule 05.08.2015    source источник
comment
Должны ли они все ориентироваться на dnx451 или только веб-проект должен ориентироваться на dnx451? Могут ли библиотеки классов быть нацелены только на сеть 451? ... так что же произошло, когда вы попробовали эти сценарии?   -  person jltrem    schedule 05.08.2015
comment
@jltrem: он строится в VS, но ломается на dnu publish в моей сборке интеграции с некоторым ArgumentNullException как опубликовано здесь.   -  person Dave New    schedule 05.08.2015


Ответы (4)


Обновить

Согласно https://github.com/aspnet/Announcements/issues/98 название немного изменился.

Для приложений RC1 и тестовых проектов по-прежнему должны быть нацелены dnx4x и dnxcore50, и их вообще не нужно менять. Все, что имеет Program.Main или Startup.cs, считается приложением.

Только библиотеки классов должны быть изменены для использования в сетях net4x и dotnet5.x. Для библиотек классов рекомендуемые шаги преобразования:

В проекте.json:

Измените dnx4x на net4x (например, dnx451 на net451)

Измените dnxcore50 на dotnet5.4

И в ваших файлах CS:

Замените #if DNX451 на #if NET451

Замените #if DNXCORE50 на #if DOTNET5_4.


Если у вас есть проект, ориентированный на несколько платформ, и вы хотите добавить общую ссылку на библиотеку, библиотека должна поддерживать все эти платформы. Если вы укажете, что определенная платформа сама ссылается на эту библиотеку, то эта библиотека должна поддерживать только выбранную платформу.

Пример, если я хочу ссылаться на библиотеку1 для всех своих фреймворков:

"dependencies": {
    "library1": "1.0.0"
},

"frameworks": {
    "dnx451": { },
    "dnxcore50": { }
}

Тогда библиотека1 должна поддерживать dnx451 и dnxcore50.

Если я хочу сослаться на библиотеку1, но она поддерживает только dnx451, то это мой единственный вариант:

"dependencies": {
},

"frameworks": {
    "dnx451": {
        "dependencies": {
           "library1": "1.0.0"
        }
     },
    "dnxcore50": { } 
}

Но это означало бы, что код library1 нельзя использовать в dnx451.

Чтобы обойти это, вы можете использовать условные выражения времени компиляции:

#if DNX451
    //Code here for dnx451
#elif DNXCORE50
    //code here for dnxcore50
#endif

Или другой обходной путь использует другую библиотеку для другой зависимости.

И просто чтобы уточнить, библиотека может поддерживать больше фреймворков, чем ваш проект. Таким образом, библиотека1 может поддерживать dnx451 и dnxcore50, в то время как ваш проект поддерживает только dnx451, и все будет в порядке.

person Gekctek    schedule 05.08.2015
comment
И совместимы ли dnx451 и net451 друг с другом, поскольку они оба используют .NET Framework 4.5.1? - person Dave New; 06.08.2015
comment
Этого я точно не знаю и не тестировал, но все, что связано с dnx, будет развернуто вместе с решением в качестве среды выполнения или будет установлено как конкретная среда выполнения для пользователя, в то время как net451 будет установлен в Windows. Насколько я знаю, это одно и то же, но я не знаю, будет ли VS или компилятор идентифицировать их как одно и то же для зависимостей. - person Gekctek; 06.08.2015
comment
dnxcore использует .NET Core Framework, который можно развернуть в корзине. Я считаю, что dnx отличается от dnxcore тем, что использует настольную версию .NET Framework. Я просто не знаю, какая версия фреймворка и как она сочетается с ASP.NET 5! - person Dave New; 06.08.2015
comment
На самом деле это не отвечает на поставленный вопрос, который больше касался разницы между dnx451 и net451, а не dnxcore и dnx451 (последнее мне ясно - это совершенно разные фреймворки, но первое все еще нет). - person Vojtěch Vít; 24.01.2016
comment
для тестового проекта, такого как xunit, вам понадобятся dnx451 и dnxcore50 xunit.github.io /docs/getting-started-dnx.html - person Jaider; 17.02.2016

Прозвища dnx451 или net451 по сути одно и то же.

В какой-то момент они были переименованы, поэтому dnxcore50 стало dotnet5.4, а dnx451 стало net451.

Для справки: https://github.com/aspnet/Announcements/issues/98

person Daniel Little    schedule 30.01.2016

Если ваша библиотека классов не зависит от определенного поведения .Net SDK (например, DNX или полного .Net Framework), вы должны ориентироваться на dotnet. Но это работает только с более новыми SDK (.Net 4.6, UWP и DNX),

http://oren.codes/2015/06/09/pcls-net-core-dnx-and-uwp/

person Thomas    schedule 12.08.2015

Ваша библиотека должна поддерживать все фреймворки, на которые вы ориентируетесь в веб-проекте. Вот почему проект библиотеки классов по умолчанию в VS15 нацелен на dotnet, который поддерживает самый широкий спектр платформ.

person Xiaowei.Jia    schedule 06.08.2015