【问题标题】:Configuration transformations in ASP.NET MVC 6ASP.NET MVC 6 中的配置转换
【发布时间】:2015-12-21 13:21:17
【问题描述】:

我们正在尝试设置一个 ASP.NET MVC 6 Web 应用程序。在以前的 ASP.NET 版本中,我们总是对Web.config 使用转换。例如,我们通过创建Web.Production.config 来做到这一点。在这种情况下,Production 与项目/解决方案的构建配置的名称匹配,并作为对原始Web.config 的转换应用。

在新版本中,配置是使用 JSON 完成的。但是,这种自动转换不再存在。在 ASP.NET MVC 6 中完成相同任务的最佳方法是什么?

【问题讨论】:

  • @VeNoMiS,我看到了,但这只有在一台机器与一个构建环境一起工作时才有效。例如,在您的开发机器上测试暂存版本并不是一种简单的方法。此外,更改该值以及构建配置以在本地计算机上运行不同的配置是不必要的重复工作。
  • 一种类似于旧的方法被定义为here,但我仍然不明白你的意思。
  • @VeNoMiS,这仍然需要您在更改构建配置后设置环境变量。我希望有比这更好的解决方案。关于用例:我认为在您的开发机器上使用多个构建配置并不奇怪。还是我不明白你的意思?但是,问题似乎非常相似,但我希望有一个更简单的解决方案。
  • 不。每个配置都使用相同的变量但具有不同的值。发布使用 ASPNET_ENV = 发布。暂存 ASPNET_ENV = 暂存等等...

标签: c# asp.net-core-mvc


【解决方案1】:

不再有“自动转换”。

配置工作的方式有点像 jQuery 中的“扩展”属性。

如果在 2 个不同的配置中设置了两个参数(appsettings.jsonappsettings.Production.json),则后者优先

那么让我们看看我们是否可以解决您的问题。

这是我的appsettings.json 的样子:

{
   "myValue" : 1
}

这就是appsettings.Production.json 的样子:

{
   "myValue" : 3
}

第一个文件将包含在您的构建中,并且会被 .NET 自动用于获取您的配置。那么它是如何选择“生产”的呢?

答案可以在Startup.cs构造函数中找到:

 // Set up configuration sources.
 var builder = new ConfigurationBuilder()
     .AddJsonFile("appsettings.json")
     .AddJsonFile($"appsettings.{env.EnvironmentName}.json", optional: true);

当然,您可以为您的配置文件选择任何变量,或者直接从环境变量或任何其他来源加载它们。

旁注

“环境变量”这个名称似乎是它必须为每个人全局设置,但没有什么能阻止您通过在调用脚本之前将它们设置为内联来仅为当前进程设置它们。

所以dnx web 将在您的机器上自动启动您的应用程序,但使用 Visual Studio(会自动将环境设置为Development)启动它会在 DEV 模式下启动它。

【讨论】:

  • EnvironmentName 不依赖于构建配置,对吧?如果在这种情况下 buid 配置并不重要,而只是运行时使用的环境变量,我是否理解正确?
  • 100% 正确。构建配置无关紧要。您可以在运行时更改配置。
  • 所以我想任何基于构建配置的配置切换都不再可能了?
  • 如果和编译时间有关?我想这是可能的。但是在编译时配置你的应用程序? 2009 年就是这样。;-) 现在我们在机器上配置环境名称并加载该配置。 :) 顺便说一句,如果未指定,默认值将始终为Production。其他一切?由你决定。 :)
  • 是的,这就是我的意思。我想我们只需要稍微改变一下这个过程,因为这已经不可能了。
猜你喜欢
  • 2014-05-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多