我正在维护一个ASP.NET MVC 4项目,该项目引用了许多类库,这些类库具有自己的app.config,并具有通过Settings.settings UI管理的设置。我已经阅读了许多有关Stack Overflow的问题,最近读了this文章和this SO问题。
据我了解,我的MVC 4项目中的Web应用程序的Web.config将是所有引用的项目都将在其中查找的设置。您只需要确保在主要的web.config类中指定了相同的设置即可。
所以我用设置创建了自己的类库。我有一个静态类,只为所有应用程序输出页脚信息:
public static class Footer
{
public static string DatabaseEnvironment
{
get { return new DAL().GetCurrentEnvironment();}
}
public static string CurrentApplicationVersion
{
get { return Properties.Settings.Default.ApplicationVersion; }
}
public static string CurrentYear
{
get { return DateTime.Today.Year.ToString(); }
}
}
在类库中,我默认将ApplicationVersion设置为0。然后在引用该库的应用程序中,设置正确的版本。好了,当我运行该应用程序时,版本显示为0。我感到困惑,因为这破坏了我正在阅读的所有内容。我对哪个配置文件具有优先权感到困惑。我在构建的Web应用程序项目的bin文件夹或根文件夹中看不到app.config文件。我确实在引用的项目上设置了一个断点以查看设置,并且它仅显示该引用项目中定义的三个设置,而不像我想的那样显示来自web.config的那些设置。
那么,MVC项目中的Web.config类是否不优先于app.config文件中的类库定义的设置?
更新打开Footer.dll,看起来好像正在将设置编译到其中吗?
Update2 好吧,在Settings.settings文件中的每个设置上都有一个名为GenerateDefaultValueInCode的属性,如果将其设置为true(这是默认值),则会在代码中生成值,如下所述。当它在主项目中的其他地方找不到引用时,应该将其作为备用值。我不确定其他文章在引用什么,但是使用在Web.config或app.config下存储设置的Settings.settings UI不会导致引用的类库依赖于主类的web.config Web应用程序。我意识到我可以采取其他方法来做到这一点,但这将需要重新设计许多类库以遵循新设计。我希望有一个更透明的解决方案,而不必更改很多代码。我也意识到,对于某些人来说,这可能是个老新闻,但是从搜索命中来看,似乎我要做的就是在web.config中创建相同的设置以覆盖app.config设置。我想这不是那么容易。
我试图克服在部署到生产与测试时必须将许多设置更改为生产值的问题。但是事实证明,这比原先想像的要多。