我正在尝试启动一个WebApp以在.NET Core 2.0项目中与NancyFx一起使用。

我添加到解决方案中的软件包是


  Microsoft.AspNet.WebApi.OwinSelfHost


安装它的依赖项:


  Microsoft.AspNet.WebApi.Client
  
  Microsoft.AspNet.WebApi.Core
  
  Microsoft.AspNet.WebApi.Owin
  
  微软
  
  Microsoft.Owin.Host.HttpListener
  
  Microsoft.Owin.Hosting
  
  牛顿
  
  欧文


我还添加了:


  南希
  
  南希·奥温


我的项目的类型为“ xUnit测试项目(.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&目标,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 [已编辑] .IntegrationTests \ MyIntegrationTests.cs:line 21




我试过的


一个版本一个版本地添加软件包。
更改我的启动类以添加HttpConfiguration
清除localhost cookie(在此处的其他主题中建议)
使用本指南: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上还原软件包。
我可能犯了一个愚蠢的错误,但是我还没有弄清楚哪一个。

最佳答案

因此,由于兼容性问题,似乎我无法做到这一点。
但是,我偶然发现了一种直接配置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");
    }
}


现在这可以满足我的需求! (响应测试请求的基本“服务器”)

关于c# - Owin在启动.Net Core 2.0上遇到过NullReferenceException-设置吗?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/54962797/

10-13 06:47