2017-04-19 74 views
0

我使用TESTSERVER这是自举一个复杂的配置如下创建一些测试:asp.net核心TESTSERVER找不到配置

var config = new ConfigurationBuilder() 
    .Build(); 

webHostBuilder = new WebHostBuilder() 
    .UseConfiguration(config) 
    .UseKestrel() 
    .CaptureStartupErrors(true) 
    .UseContentRoot(Directory.GetCurrentDirectory()) 
    .UseIISIntegration() 
    .UseStartup<MockLicenseStartup>() 
    .UseEnvironment("Development") 
    .UseUrls("http://locahost"); 

testServer = new TestServer(webHostBuilder); 

无论是在我的“asp.net芯”项目,在我的测试项目中,我创建了多个appsettings.json这是用来提供喜欢的事物:

  • 连接字符串
  • 登录冗长
  • 自定义栏目

我现在面临的问题是,我的配置一流,MockLicenseStartup内是无法加载任何可用appsettings.json的。

内部MockLicenseStartup.cs使用的代码是这样一个:

public MockLicenseStartup(IHostingEnvironment env) 
{ 
    var builder = new ConfigurationBuilder() 
        .SetBasePath(env.ContentRootPath) 
        .AddJsonFile("appsettings.json", optional: true, reloadOnChange: true) 
        .AddJsonFile($"appsettings.{env.EnvironmentName}.json", optional: true) 
        .AddEnvironmentVariables(); 

    Configuration = builder.Build(); 
} 

当我打电话Configuration.GetConnectionString(“”)抛出异常,如果我进一步检查我可以看到,没有配置具有实际上已经加载。大概是关系到.UseContentRoot(Directory.GetCurrentDirectory())

+0

不,因为在生产工作中,我们甚至没有web.config ... – Raffaeu

+1

@RamSingh:你错了,因为没有web.config用于配置ASP.NET内核和IConfiguration读取配置配置设置(可以是基于文件的json,环境变量或命令行参数,取决于您在ConfigurationBuilder()调用期间插件的提供商 – Tseng

+2

我认为您的测试Web主机构建器有冗余的东西 - 您指定了两次配置。你可以省略'.UseKestrel()','.UseContentRoot(Directory.GetCurrentDirectory())','。UseIISIntegration()' –

回答

3

在测试环境中的相对/绝对路径的问题,

.SetBasePath(env.ContentRootPath) 

env.ContentRootPath是从生产不同,如果我没有记错它被设置为测试项目的bin目录。所以,它不会找到appsettings.json文件。除非你在构建之后复制它。

如果你是项目文件夹结构不改变。你可以尝试硬编码在这两行到这些位于appsettings.json”路径。

.AddJsonFile("appsettings.json", optional: true, reloadOnChange: true) 
.AddJsonFile($"appsettings.{env.EnvironmentName}.json", optional: true 

,如果这个工程(应该),你可以把它通过更好地找到appsetting.json路径在

代码。下面是我自己的代码在测试环境中工作。

 var settingFilePath = getSettingFilePath(settingFileParentFolderName: "APIProject"); 

     var builder = new ConfigurationBuilder() 
      .AddJsonFile(settingFilePath + _settingFileName, optional: true, reloadOnChange: true) 
      .AddJsonFile(settingFilePath + "appsettings.Development.json", optional: true); 

     var configuration = builder.Build(); 

getSettingFilePath()仅仅是一个定位的启动项目文件夹设置文件路径功能。

希望得到这个帮助。