无法找到类型或名称空间名称'Startup'

问题描述:

我试图将集成测试添加到我的项目中,但在我的测试中,我一直收到错误“类型或名称空间名称”启动“找不到”。 cs文件。无法找到类型或名称空间名称'Startup'

我有两个project.json文件,一个在我的src项目中,另一个在我的测试项目中。

的Src project.json看起来是这样的:

{ 
"dependencies": { 
"Microsoft.NETCore.App": { 
    "version": "1.0.1", 
    "type": "platform" 
}, 
"Microsoft.EntityFrameworkCore.SqlServer": "1.0.0", 
"Microsoft.EntityFrameworkCore.Tools": { 
    "version": "1.0.0-preview2-final", 
    "type": "build" 
}, 
"Microsoft.AspNetCore.Mvc": "1.0.1", 
"Microsoft.AspNetCore.Routing": "1.0.1", 
"Microsoft.AspNetCore.Server.IISIntegration": "1.0.0", 
"Microsoft.AspNetCore.Server.Kestrel": "1.0.1", 
"Microsoft.AspNetCore.StaticFiles": "1.0.0-*", 
"Microsoft.Extensions.Configuration.EnvironmentVariables": "1.0.0", 
"Microsoft.Extensions.Configuration.FileExtensions": "1.0.0", 
"Microsoft.Extensions.Configuration.Json": "1.0.0", 
"Microsoft.Extensions.Configuration.CommandLine": "1.0.0", 
"Microsoft.Extensions.Logging": "1.0.0", 
"Microsoft.Extensions.Logging.Console": "1.0.0", 
"Microsoft.Extensions.Logging.Debug": "1.0.0", 
"Microsoft.Extensions.Options.ConfigurationExtensions": "1.0.0", 
"Npgsql.EntityFrameworkCore.PostgreSQL": "1.0.2", 
"Swashbuckle": "6.0.0-beta902" }, 
"tools": { 
"Microsoft.AspNetCore.Server.IISIntegration.Tools": "1.0.0-preview2-final", 
"Microsoft.EntityFrameworkCore.Tools": "1.0.0-preview2-final", 
// "Microsoft.EntityFrameworkCore.Tools.DotNet": "1.0.0-preview2-final", 
"Microsoft.Extensions.SecretManager.Tools": "1.0.0-preview2-final"}, 
"frameworks": { 
"netcoreapp1.0": { 
    "imports": [ 
    "dotnet5.6", 
    "portable-net45+win8"]}}, 
"buildOptions": { 
"emitEntryPoint": true, 
"preserveCompilationContext": true, 
"debugType": "portable", 
"xmlDoc": true}, 
"runtimeOptions": { 
"configProperties": { 
    "System.GC.Server": true 
}}, 
"publishOptions": { 
"include": [ 
    "wwwroot", 
    "**/*.cshtml", 
    "appsettings.json", 
    "web.config", 
    "Dockerfile.debug", 
    "Dockerfile", 
    "docker-compose.debug.yml", 
    "docker-compose.yml" 
]}, 
"scripts": { 
"postpublish": [ 
    "dotnet publish-iis --publish-folder %publish:OutputPath% --framework %publish:FullTargetFramework%" 
]}, 
"tooling": { 
"defaultNamespace": "api"}} 

测试project.json看起来是这样的:

{ 
"version": "1.0.0-*", 
"buildOptions": { 
"debugType": "portable"}, 
"dependencies": { 
"System.Runtime.Serialization.Primitives": "4.1.1", 
"xunit": "2.1.0", 
"dotnet-test-xunit": "1.0.0-rc2-*", 
"SrcService": { 
    "target": "project" 
}, 
"Microsoft.AspNetCore.TestHost": "1.0.0"}, 
"testRunner": "xunit", 
"frameworks": { 
"netcoreapp1.0": { 
    "dependencies": { 
    "Microsoft.NETCore.App": { 
     "type": "platform", 
     "version": "1.0.1" 
    } 
    }, 
    "imports": [ 
    "dotnet5.4", 
    "portable-net45+win8" 
    ] 
}}} 

我Tests.cs类看起来是这样的:

using System; 
using Xunit; 
using Microsoft.AspNetCore.TestHost; 
using System.Net.Http; 
using Microsoft.AspNetCore.Hosting; 


namespace Tests 
{ 
public class Tests 
{ 
    public TestServer server { get; } 
    public HttpClient client { get; } 

    public Tests(){ 
     var builder = new WebHostBuilder().UseStartup<Startup>(); 
     server = new TestServer(builder); 
     client = server.CreateClient(); 
    } 

[Fact] 
public async void TestVisitRoot() { 
    var response = await client.GetAsync("/"); 
    response.EnsureSuccessStatusCode(); 
} 
}} 

有谁知道我为什么得到这个错误?提前致谢!

+1

您的Startup类定义在哪里?你可能需要添加一个'using'指令来引用你的命名空间,或者在命名空间'Your.Namespace.Startup'中使用完整的类名。 – Ricky

我在你Project.json看到在您的测试项目

"SrcService": { 
    "target": "project" 
} 

因此,这意味着您的启动类是在这个项目。 为了在您的test.cs中承认你只需要添加using

using [namespace the Startup class is in]; 

这应该只是这一点。

提示:如果您使用的是Visual Studio,但是当您没有像这样识别的东西时。只需点击它,然后按CTRL + .(或者右键单击并使用VS2015输入Quick action and refactoring