我有一个包含多个项目的解决方案。其中一个是Services项目,其中大部分后端代码都驻留在其中,因此大多数服务的设置都位于其app.config文件中。
我创建了一个类来访问所有这些设置,因此它们可以在Services项目之外使用。
public static class ServicesAppSettings
{
/// <summary>
/// Simple App Settings classes for strong typing
/// When creating a new class please ENSURE THAT THE PROPERTY NAME EXACTLY MATCHES THE APPSETTINGS KEY!
/// </summary>
public static class SmsSettings
{
public static string SmsProvider => ConfigurationManager.AppSettings["SmsProvider"];
public static string SmsAccountId => ConfigurationManager.AppSettings["SmsAccountId"];
public static string SmsPassword => ConfigurationManager.AppSettings["SmsAccountPassword"];
public static string SmsFromPhone => ConfigurationManager.AppSettings["SmsFromPhone"];
}
public static class EmailSettings
{
public static string EmailProvider => ConfigurationManager.AppSettings["EmailProvider"];
public static string EmailProviderHost => ConfigurationManager.AppSettings["EmailProviderHost"];
public static string EmailAccount => ConfigurationManager.AppSettings["EmailAccount"];
public static string EmailAccountPassword => ConfigurationManager.AppSettings["EmailAccountPassword"];
public static string GetEmailAddressFromApplication()
{
return string.Format(EmailAccount + "@" + EmailProvider);
}
}
public static class UserIcons
{
public static string MaleUserIconSource => ConfigurationManager.AppSettings["MaleUserIcon"];
public static string FemaleUserIconSource => ConfigurationManager.AppSettings["FemaleUserIcon"];
}
}
除非WEB.CONFIG文件中没有设置,否则它的工作原理完全正常。为什么这个图来自mvc的web.config文件而不是它自己的库app.config文件。相信我,情况就是这样。如果我从web.config中删除一个设置,然后尝试在测试中访问它,那么它是null,如果我把它放回web.config中就可以了。
任何人都知道这是为什么?您能否在ConfigurationManager中指定要从中检索的文件的名称?
答案 0 :(得分:1)
之所以发生这种情况是因为实际上只能访问一个配置文件 - 可执行项目的配置。这就是为什么在mvc应用程序中,您可以从可执行mvc应用程序的web.config
中读取设置。如果你有服务应用程序(ms服务),它将是你启动服务的app.config
。
据我所知,您无法从其他配置文件中读取设置。
一种可能的解决方案是将您的自定义设置存储在.xml
文件中并阅读它。如果要在运行时更改自定义设置,这也很有用。
另一个(如果您不想弄乱appSettings
部分中的设置)是创建自定义配置部分并将其用于您的设置
希望有所帮助
答案 1 :(得分:0)
Web.config是放置设置的地方。作为.net Web解决方案一部分的Dll将使用它。