[英]ASP.NET Core 2.1 Unable to run migrations due to environment variable
这是我的项目的结构:
App.UI
包含一些我希望App.Data
可以访问的环境变量,例如连接字符串。
现在的问题是,当我尝试进行这样的迁移时:
Add-Migration AppOneBaseMigration -Context AppDbContext -OutputDir Migrations\AppOneMigrations
我收到此错误:
System.ArgumentNullException:值不能为null。 参数名称:路径
这是运行迁移时初始化的代码:
public AppDbContext CreateDbContext(string[] args)
{
//Debugger.Launch();
IConfigurationRoot configuration = new ConfigurationBuilder()
.SetBasePath(ConfigurationManager.GetBasePath(Environment.GetEnvironmentVariable("CENTRAL_APPLICATION_SETTINGS")))
.AddJsonFile("mssettings.json")
.Build();
var builder = new DbContextOptionsBuilder<AppDbContext>();
builder.UseSqlServer(configuration["DatabaseConfiguration:ConnectionString"]);
return new AppDbContext(builder.Options);
}
还有其他方法可以将Environment.GetEnvironmentVariable("CENTRAL_APPLICATION_SETTINGS")
变量传递给它吗?
我尝试在App.Data
设置环境变量,但没有将其选中。
当前未设置CENTRAL_APPLICATION_SETTINGS环境变量,这可能就是为什么您会异常的原因。
默认情况下,配置设置是从可执行文件(生成exe的项目)中加载的。
.Net核心可以从各种类型的配置(命令行,XML / JSON文件等)中加载配置值。 以下是来自MSDN的示例:
public class Program
{
public static Dictionary<string, string> arrayDict = new Dictionary<string, string>
{
{"array:entries:0", "value0"},
{"array:entries:1", "value1"},
{"array:entries:2", "value2"},
{"array:entries:4", "value4"},
{"array:entries:5", "value5"}
};
public static void Main(string[] args)
{
CreateWebHostBuilder(args).Build().Run();
}
public static IWebHostBuilder CreateWebHostBuilder(string[] args) =>
WebHost.CreateDefaultBuilder(args)
.ConfigureAppConfiguration((hostingContext, config) =>
{
config.SetBasePath(Directory.GetCurrentDirectory());
config.AddInMemoryCollection(arrayDict);
config.AddJsonFile("json_array.json", optional: false, reloadOnChange: false);
config.AddJsonFile("starship.json", optional: false, reloadOnChange: false);
config.AddXmlFile("tvshow.xml", optional: false, reloadOnChange: false);
config.AddEFConfiguration(options => options.UseInMemoryDatabase("InMemoryDb"));
config.AddCommandLine(args);
})
.UseStartup<Startup>();
}
解决您的问题的一种方法:
我猜您应该在该中央配置文件上将CopyToOutput设置为TRUE,以便将其复制到可执行输出中。
然后,您可以仅通过调用AddJsonFile或AddXmlFile来加载配置。 希望这可以帮助您解决问题。
这也将减少您的代码并提高可维护性,因为在加载配置时无需自定义。
希望这可以帮助。
您应该能够在Package Manager控制台中设置变量,然后通过键入以下命令运行Add-Migration命令:
$env:CENTRAL_APPLICATION_SETTINGS="your value"
然后跑
Add-Migration AppOneBaseMigration -Context AppDbContext -OutputDir Migrations\AppOneMigrations
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.