NullReferenceException, с которым сталкивался Овин при запуске .Net Core 2.0 - Настройки? - PullRequest
0 голосов
/ 02 марта 2019

Я пытаюсь запустить WebApp для использования с NancyFx в проекте .NET Core 2.0.

Пакет, который я добавил для решения, это

Microsoft.AspNet.WebApi.OwinSelfHost

, который устанавливает его зависимости:

Microsoft.AspNet.WebApi.Client

Microsoft.AspNet.WebApi.Core

Microsoft.AspNet.WebApi.Owin

Microsoft.Owin

Microsoft.Owin.Host.HttpListener

Microsoft.Owin.Hosting

Newtonsoft.Json

Owin

Я также добавил:

Nancy

Nancy.Owin

Мой проект относится к типу "xUnit Test Project (.NET Core)".

Начиная с моего тестового класса, мы имеем:

public class MyIntegrationTests : IDisposable
{
    private readonly IDisposable _webApp;
    private const string Url = "http://localhost:1234";

    public MyIntegrationTests()
    {
        _webApp = WebApp.Start<Startup>(url: Url);
    }

Мой стартовый классвыглядит так:

public class Startup
{
    public void Configuration(IAppBuilder appBuilder)
    {
        appBuilder.UseNancy();
    }
}

У меня также есть модуль NancyModule с маршрутом тестирования:

public class TestModule : NancyModule
{
    public TestModule()
    {

        Get("/test", args => "test");
    }
}

Однако при запуске моего модуля интеграционных тестов (при попытке запустить любой тест внутри него),меня встретил нулевой рефеисключение.Это трассировка стека:

System.NullReferenceException: ссылка на объект не установлена ​​для экземпляра объекта.

в Microsoft.Owin.Hosting.Utilities.SettingsLoader.FromConfigImplementation ..ctor ()

в Microsoft.Owin.Hosting.Utilities.SettingsLoader.b__0 () в System.Threading.LazyInitializer.EnsureInitializedCore [T] (T & target, Func`1 valueFactory)

вMicrosoft.Owin.Hosting.Utilities.SettingsLoader.LoadFromConfig (настройки IDictionary`2)

в Microsoft.Owin.Hosting.Engine.StartContext..ctor (параметры StartOptions)

в Microsoft.Owin.Hosting.Starter.DirectHostingStarter.Start (параметры StartOptions)

в Microsoft.Owin.Hosting.Starter.HostingStarter.Start (параметры StartOptions)

в [отредактировано] .IntegrationTests.MyIntegrationTests ..ctor () в C: \ Users [отредактировано] \ source \ repos [redacted] .IntegrationTests \ MyIntegrationTests.cs: строка 21


Что я пробовал:

  1. Добавление пакетоводна за другой, с разными версиями.
  2. Изменение моего класса запуска для добавления конфигурации HttpConfiguration
  3. Очистка файлов cookie локального хоста (было предложено в других разделах здесь)
  4. Использование этого руководства: https://github.com/NancyFx/Nancy/wiki/Hosting-nancy-with-owin#katana---httplistener-selfhost Я получаю ту же ошибку, что и ранее.

Мне кажется, что конфигурация отсутствует или не найдена.Однако все, на что я ссылаюсь, существует.Есть идеи?(Стоит отметить, что в этом тестовом проекте нет appsettings.json, web.config и т. Д.)

РЕДАКТИРОВАТЬ: тестовый проект доступен здесь: https://www.dropbox.com/s/v1bw5pu9t0e9fwt/NancyOwinTest.zip?dl=0 Делая тестовый проект, я понимаю, что он восстанавливает пакеты вУровень .NET 4.6.1, а не .NET Core.Возможно, я совершаю глупую ошибку, но какую еще не выяснил.

1 Ответ

0 голосов
/ 04 марта 2019

Итак, похоже, что я делал это было невозможно из-за проблем совместимости.Тем не менее, я наткнулся на способ настроить файл csproj напрямую для ссылки на правильные пакеты, здесь: https://github.com/NancyFx/Nancy/issues/2863#issuecomment-365107613

Копирование конфигурации здесь, что происходит:

<Project Sdk="Microsoft.NET.Sdk.Web" ToolsVersion="15.0">
  <PropertyGroup>
    <TargetFramework>netcoreapp2.0</TargetFramework>
    <DebugType>portable</DebugType>
    <AssemblyName>nancydemo</AssemblyName>
    <OutputType>Exe</OutputType>
    <PackageId>nancydemo</PackageId>
    <RuntimeFrameworkVersion>2.0.5</RuntimeFrameworkVersion>
    <StartupObject>NancyApplication.Program</StartupObject>
  </PropertyGroup>
  <ItemGroup>
    <PackageReference Include="Microsoft.AspNetCore.Server.Kestrel" Version="2.0.1" />
    <PackageReference Include="Microsoft.AspNetCore.Owin" Version="2.0.1" />
    <PackageReference Include="Nancy" Version="2.0.0-barneyrubble" />
  </ItemGroup>
</Project>

В сочетании скласс запуска:

public class Startup
{
    public void Configure(IApplicationBuilder app)
    {
        app.UseOwin(x => x.UseNancy());
    }
}

и приведенный выше фрагмент основного тестового прогона заменены на:

public class MyIntegrationTests : IDisposable
    {
        private readonly IWebHost _webApp;
        private const string Url = "http://localhost:1234";

        public MyIntegrationTests ()
        {
            _webApp = new WebHostBuilder()
                .UseKestrel()
                .UseStartup<Startup>()
                .UseUrls(Url)
                .Build();

            _webApp.Start();
        }

NancyModule остался прежним:

public class TestModule : NancyModule
{
    public TestModule()
    {

        Get("/test", args => "test");
    }
}

Теперь это работаетдля моих нужд!(Базовый «сервер», отвечающий на запросы в целях тестирования)

...