Подтвердить что ты не робот

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

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

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

4b9b3361

Ответ 1

Обновление

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

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

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

В project.json:

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

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

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

Измените #if DNX451 на #if NET451

Измените #if DNXCORE50 на #if DOTNET5_4


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

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

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

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

Затем библиотека1 должна поддерживать dnx451 и dnxcore50

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

"dependencies": {
},

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

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

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

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

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

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

Ответ 2

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

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

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

Ответ 3

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

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

Ответ 4

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