ASP.NET Ядро, нацеленное на net461 в Azure

#asp.net-core #azure-web-app-service #.net-4.6 #.net-4.6.1

#asp.net-core #azure-web-app-service #.net-4.6 #.net-4.6.1

Вопрос:

Может ли ASP.NET Основной проект нацелен на net461 и запущен на веб-сайте Azure?


Вот что было опробовано и не удалось.

Это работает при таргетинге netcoreapp1.0 , но когда я меняю его на net461 (включая некоторые другие необходимые изменения для компиляции) Я получаю следующую ошибку:

 Unhandled Exception: System.TypeInitializationException: The type initializer for 'Microsoft.Extensions.PlatformAbstractions.PlatformServices' threw an exception. ---> System.IO.FileNotFoundException: Could not load file or assembly 'System.AppContext, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a' or one of its dependencies. The system cannot find the file specified.
   at Microsoft.Extensions.PlatformAbstractions.ApplicationEnvironment.GetApplicationBasePath()
   at Microsoft.Extensions.PlatformAbstractions.ApplicationEnvironment..ctor()
   at Microsoft.Extensions.PlatformAbstractions.PlatformServices..ctor()
   at Microsoft.Extensions.PlatformAbstractions.PlatformServices..cctor()
   --- End of inner exception stack trace ---
   at Microsoft.AspNetCore.Hosting.WebHostBuilder.BuildHostingServices()
   at Microsoft.AspNetCore.Hosting.WebHostBuilder.Build()
   at WebApplication1.Program.Main(String[] args) in C:UsersaWebApplication1Program.cs:line 14
  

В частности

System.IO.FileNotFoundException: не удалось загрузить файл или сборку ‘System.AppContext, Version = 4.0.0.0, Culture = нейтральный, PublicKeyToken = b03f5f7f11d50a3a’ или одна из его зависимостей. Системе не удается найти указанный файл.

Локально это работает нормально.

Я наивно добавил пакеты nuget для включения необходимых сборок.

 {
  "dependencies": {
    "Microsoft.AspNetCore.Diagnostics": "1.0.0",
    "Microsoft.AspNetCore.Server.IISIntegration": "1.0.0",
    "Microsoft.AspNetCore.Server.Kestrel": "1.0.1",
    "Microsoft.AspNetCore.StaticFiles": "1.0.0",
    "Microsoft.Extensions.Logging.Console": "1.0.0",
    "Newtonsoft.Json": "9.0.1",
    "System.AppContext": "4.1.0",
    "System.Reflection.TypeExtensions": "4.1.0",
    "System.Security.Cryptography.X509Certificates": "4.1.0"
  },
  

В итоге я получил ошибки другого типа:

 warn: Microsoft.AspNetCore.Server.Kestrel[0]
      Unable to bind to http://localhost:7762 on the IPv6 loopback interface.
System.AggregateException: One or more errors occurred. ---> Microsoft.AspNetCore.Server.Kestrel.Internal.Networking.UvException: Error -4089 EAFNOSUPPORT address family not supported
   at Microsoft.AspNetCore.Server.Kestrel.Internal.Networking.Libuv.Check(Int32 statusCode)
   at Microsoft.AspNetCore.Server.Kestrel.Internal.Networking.Libuv.tcp_bind(UvTcpHandle handle, SockAddramp; addr, Int32 flags)
   at Microsoft.AspNetCore.Server.Kestrel.Internal.Networking.UvTcpHandle.Bind(ServerAddress address)
   at Microsoft.AspNetCore.Server.Kestrel.Internal.Http.TcpListener.CreateListenSocket()
   at Microsoft.AspNetCore.Server.Kestrel.Internal.Http.Listener.<>c.<StartAsync>b__6_0(Object state)
   --- End of inner exception stack trace ---
  

Я не уверен, куда идти дальше.

Ответ №1:

Хотя в профиле публикации был установлен флажок «удалить дополнительные файлы в пункте назначения», должно быть, еще остались какие-то файлы.

Использование FTP и удаление всех файлов вручную перед публикацией решило проблему с проектом.

ASP.NET Базовый таргетинг net461 работает в Azure при условии, что вы ранее не публиковали там никаких других фреймворков.

Эти пакеты NuGet, которые я добавил в вопросе, также не понадобились и могут быть безопасно удалены из проекта.

 "System.AppContext": "4.1.0",
"System.Reflection.TypeExtensions": "4.1.0",
"System.Security.Cryptography.X509Certificates": "4.1.0"
  

Комментарии:

1. Кроме того, вы также можете использовать консоль Kudu , которая более удобна, чем FTP, для просмотра / управления вашими файлами.