.NET Core 2.2 не может быть опубликован в Azure - PullRequest
0 голосов
/ 05 июля 2019

У меня есть проект ASP.NET Core 2.2, и его можно успешно запустить локально. Но когда я пытаюсь опубликовать его в Azure, я получаю сообщение об ошибке:

Unhandled Exception: System.ArgumentException: The path must be absolute.
Parameter name: root
   at Microsoft.Extensions.FileProviders.PhysicalFileProvider..ctor(String root, ExclusionFilters filters)
   at Tms.Core.Infrastructure.TmsFileProvider..ctor(IHostingEnvironment hostingEnvironment) in C:\Users\rover\Source\Repos\TMS\Libraries\Tms.Core\Infrastructure\TmsFileProvider.cs:line 23
   at Tms.WebApi.Startup.ConfigureServices(IServiceCollection services) in C:\Users\rover\Source\Repos\TMS\Web\Tms.WebApi\Startup.cs:line 222
--- End of stack trace from previous location where exception was thrown ---
   at Microsoft.AspNetCore.Hosting.ConventionBasedStartup.ConfigureServices(IServiceCollection services)
   at Microsoft.AspNetCore.Hosting.Internal.WebHost.EnsureApplicationServices()
   at Microsoft.AspNetCore.Hosting.Internal.WebHost.Initialize()
   at Microsoft.AspNetCore.Hosting.WebHostBuilder.Build()
   at Tms.WebApi.Program.Main(String[] args) in C:\Users\rover\Source\Repos\TMS\Web\Tms.WebApi\Program.cs:line 17

где класс программы имеет следующий код:

public class Program
{
    public static void Main(string[] args)
    {
        CreateWebHostBuilder(args).Build().Run();
    }

    public static IWebHostBuilder CreateWebHostBuilder(string[] args) =>
        WebHost.CreateDefaultBuilder(args)
            .UseStartup<Startup>();
}

Запуск ConfigureServices метод:

        var provider = services.BuildServiceProvider();
        var hostingEnvironment = provider.GetRequiredService<IHostingEnvironment>();
        CommonHelper.DefaultFileProvider = new TmsFileProvider(hostingEnvironment);

где:

    public TmsFileProvider(IHostingEnvironment hostingEnvironment) 
        : base(File.Exists(hostingEnvironment.WebRootPath) ? Path.GetDirectoryName(hostingEnvironment.WebRootPath) : hostingEnvironment.WebRootPath)
    {
        var path = hostingEnvironment.ContentRootPath ?? string.Empty;
        if (File.Exists(path))
            path = Path.GetDirectoryName(path);

        BaseDirectory = path;
    }

(не спрашивайте меня об этом коде, это не мой код, я просто должен его использовать)

Я запутался, почему Azure знает мой локальный путь C:\Users\rover\Source\Repos\TMS\Web\Tms.WebApi\, где он описан и как решить проблему с развертыванием?

1 Ответ

0 голосов
/ 17 июля 2019

Я обнаружил проблему, hostingEnvironment может быть нулевым, если папка wwwroot не существует.Затем .NET Core выдает такое исключение на Azure

...