我正在使用 TestServer 创建一些测试,这是一个复杂配置的bootstrap,如下所示:
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);
我的&#34; asp.net核心&#34;项目,在我的测试项目中,我创建了多个 appsettings.json ,用于提供以下内容:
我面临的问题是我的 MockLicenseStartup 中的Configuration类无法加载任何可用的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(&#34;&#34;)时,它会抛出异常,如果我进一步检查,我可以看到实际上没有加载任何配置。可能是与.UseContentRoot(Directory.GetCurrentDirectory())
答案 0 :(得分:3)
在测试环境中,
.SetBasePath(env.ContentRootPath)
env.ContentRootPath与production不同,如果我没记错的话,它被设置为test project的bin目录。因此,它将找不到appsettings.json文件。除非你在构建后将其复制到那里。
如果您是项目文件夹结构不会更改。你可以尝试硬编码appsettings.json&#34;这两行中的路径到达这些路径的位置。
.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()只是一个在Startup Project文件夹中找到设置文件路径的函数。
希望得到这个帮助。