FileNotFoundException: не удалось загрузить

#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!!!

У вас есть только два варианта:

  1. Не используйте библиотеки, которые не поддерживают netstandard netcoreapp или portable-net45 win8 !!!
  2. Если вам нужны некоторые библиотеки, которые запускаются только с net452 , и замены нет, тогда используйте target net452 вместо 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