#c# #asp.net-mvc #asp.net-core
#c# #asp.net-mvc #asp.net-core
Вопрос:
Я работаю над проектом .net Core, используя .net Core framework, я хотел использовать пакет DropNet с .net Core, поэтому я добавил ссылку на net452
framework в свой project.json
:
"frameworks": {
"netcoreapp1.0": {
"imports": [
"dotnet5.6",
"portable-net45 win8",
"net452"
]
}
},
Теперь, когда я пытаюсь создать клиентский объект DropNet в моем классе контроллера, я получаю сообщение об ошибке:
Error CS0012 The type 'IWebProxy' is defined in an assembly that is not referenced.
You must add a reference to assembly 'System, Version=4.0.0.0, Culture=neutral,
PublicKeyToken=b77a5c561934e089'. Test3..NETCoreApp,Version=v1.0
Хорошо, чтобы исправить эту ошибку, я установил microsoft.netcore.portable.compatibility
пакет, и ошибка исчезла, дело в том, что когда я делаю это и выполняю проект и пытаюсь получить доступ к представлению, которое я возвращаю из действия контроллера, где я использую DropNet, я получаю FileNotFoundException
:
FileNotFoundException: Could not load file or assembly 'System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089'. The system cannot find the file specified.
У меня такая проблема только с этим представлением, это мой метод действия:
public IActionResult Test()
{
DropNetClient client = new DropNetClient("gsfgsgsfg438", "6ysgsgs234cf", userToken: "w5gdfgsdfg3434d4", userSecret: "239usfgsghsf3434wyqo");
return View();
}
Проблема в том, что строка DropNetClient, если прокомментировать эту строку, отображается представление, но если эта строка там активна, FileNotFoundException
она выбрасывается…
Ответ №1:
Пожалуйста, не злоупотребляйте import
инструкцией. Он предназначен для переопределения проверки nuget при восстановлении пакетов, для установки совместимых библиотек (PCL, которые нацелены на .NET 4.5 и Windows 8/8.1 ), но еще не имеют netstandard1.6
цели.
Никогда не используйте его для принудительного импорта net452
библиотек в приложение .NET Core. Это не сработает!!! Библиотеки .NET 4.5.2 несовместимы с .NET Core!!!
У вас есть только два варианта:
- Не используйте библиотеки, которые не поддерживают
netstandard
netcoreapp
илиportable-net45 win8
!!! - Если вам нужны некоторые библиотеки, которые запускаются только с
net452
, и замены нет, тогда используйте targetnet452
вместоnetcoreapp1.0
Комментарии:
1. Других способов, кроме этих двух, нет (кроме ожидания, пока выбранная вами библиотека не будет перенесена на .NET Core). Вы все еще можете настроить таргетинг
net452
и запустить его в Linux (с ограничениями), тогда будет использоваться mono 4.6, который необходимо установить на компьютер с Linux. Но у Mono есть несколько ограничений и вещей, о которых вам нужно позаботиться (или использовать API-интерфейсы замены, такие как функции криптографии, которые .NET Framework зависят от Windows API, который недоступен в Linux)2. Я пробовал решение 2, но есть зависимость от
SharedClasses
пакета, с которым я боюсь, чтоSharedClasses
просто работаю.NET Core
, у меня эта ошибка, когда цельnet452
:Error NU1001 The dependency SharedClasses >= 1.0.0 could not be resolved.
любая идея о том, что я мог бы сделать? Мне тоже нужно использовать этот пакет, есть идеи, что я мог бы сделать?3. Я подозреваю, что ваши
SharedClasses
целиnetstandard1.6
(стандартные при создании новых переносимых классов), которые, конечно, не работают на net452. Если вы не используете какой-либо новый / необычный API, вы можете понизить его доnetstandard1.0
(который поддерживает API на: NET 4.5) илиnetstandard1.2
.NET 4.5.2.netstandard1.3
требуется минимум .NET 4.6. Для точной поверхности API см. Матрицу в learn.microsoft.com/en-us/dotnet/articles/standard/library