C#学习教程:引用程序集的VisualC#app.config文件//jeffreypalermo.com/blog/the-onion-architecture-part-1/)。我们有一个UI项目,它是一个ASP.NetMVC项目,我们有一个名为Infrastructure的C#类库项目,它被UI项目引用。在我们的基础设施项目中,我们添加了一个app.config文件以包含特定于基础设施项目的设置。在运行时,app.config文件似乎不适用于Infrastructure项目,只有web.config文件包含在UI项目中。我们不希望将基础设施项目相关设置放入UI项目的web.config文件中,UI不需要这些设置。我们如何在运行时提供基础架构的app.config文件?我们想也许我们应该在构建应用程序时将PostBuildCopy复制到UI目录中——这是正确的方法,还是有更好的方法?即使您复制了app.config的构建后副本,也无法解决您的问题。该应用程序仍然是一个Web应用程序,因此配置系统将使用web.config文件。需要以某种方式输入设置。仍然保持这些设置有点独立的一种方法是将它们放入自定义配置部分,然后将来自该部分的设置放入单独的文件中。它仍然需要从web.config中引用(使用configSource属性)。通常,您会被告知这是不可能的。但是,您当然可以使用System.Configuration.ConfigurationManager.OpenExeConfiguration方法加载配置文件。您可以将文件路径传递给程序集(尽管有方法名称,它不必是可执行文件)。当然,这不会将程序集的配置设置合并到正在执行的应用程序的配置设置中,我认为不应该这样做。您的程序集必须知道它需要通过不同于System.Configuration.ConfigurationManager.GetSection函数或该类的静态AppSettings属性的机制来检索其设置。下面是一个非常简单的“设置”类的示例,该类为其所属的程序集加载.config文件。publicstaticclassSettings{publicstaticSystem.Configuration.Configuration配置{get;私有集;}staticSettings(){//为此程序集加载一个.config文件varassembly=typeof(Settings).Assembly;Configuration=System.Configuration.ConfigurationManager.OpenExeConfiguration(assembly.Location);if(Configuration==null)thrownewSystem.Configuration.ConfigurationErrorsException(string.Format("无法在位置{1}加载程序集{0}的应用程序配置文件。",assembly.FullName,assembly.Location));}//此函数仅用于简化对配置文件中appSettings的访问,类似于静态System.Configuration.ConfigurationManager.AppSettings属性publicstaticstringGetAppSettingValue(stringkey){//尝试从该程序集的配置文件varsetting=Configuration.AppSettings.Settings[key];如果(设置!=null)返回设置值;否则返回null;}}用法...publicclassUsageExample{voidUsage(){stringmySetting=Settings.GetAppSettingValue("MySetting");varsection=Settings.Configuration.GetSection("MySection");现在,您仍然需要解决构建问题将“应用程序配置文件”(App.config)项添加到类库程序集会导致VisualStudio将其作为.dll.config复制到该程序集的输出文件夹,但它不会t自动将其复制到任何在可执行应用程序的输出文件夹中引用的项目。因此,如您所述,您需要添加一个构建后步骤,将文件复制到适当的位置。我考虑在类库上执行构建后步骤,将.config文件复制到解决方案级别的“Configurations”文件夹,然后为可执行项目创建一个构建后步骤,将“Configurations”文件夹中的所有内容复制到输出文件夹。我不确定这是否真的有效,但如果有效,那么您将不会在构建后步骤中在项目之间创建额外的依赖关系(这可能会使维护变得困难)。编辑:最后,你应该考虑这是否真的是你想要做的。这不是正常的方式,通常可以通过利用提到使用configSource属性的该问题的其他答案来更好地服务。这种方法的缺点(可能并不明显)是您不能将第三方组件的设置放入类库的配置文件中并期望它们被使用。例如,如果您的类库使用log4net,则不能将log4net的设置放在类库的配置文件中,因为log4net组件仍希望从可执行文件的配置文件中加载设置。以上就是C#学习教程:引用程序集的VisualC#app.config文件分享的所有内容。如果对大家有用,需要进一步了解C#学习教程,希望大家多多关注。本文来自网络收集,不代表作品如涉及侵权,请点击右边联系管理员删除。如需转载请注明出处:
