Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/275.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# .NET.config地狱_C#_.net_Configuration_Web Config_App Config - Fatal编程技术网

C# .NET.config地狱

C# .NET.config地狱,c#,.net,configuration,web-config,app-config,C#,.net,Configuration,Web Config,App Config,我有以下项目: MVC 控制台应用程序 类库 Windows窗体应用程序 COM库 所有这些应用程序都需要使用单个配置文件。据我所知,app.config文件用于windows、控制台应用程序和类库,而web.config文件用于web项目 在所有这些项目中都需要可以访问相同的配置。我已经读到建议使用机器配置文件,但我们并不总是能够访问该文件,因此配置文件必须驻留在我们的解决方案中 我不完全理解配置文件是如何生成的。目前我写了一个简单的项目,我有以下几点: 用于存储服务配置文件的类库。有人试图通

我有以下项目:

  • MVC
  • 控制台应用程序
  • 类库
  • Windows窗体应用程序
  • COM库
  • 所有这些应用程序都需要使用单个配置文件。据我所知,app.config文件用于windows、控制台应用程序和类库,而web.config文件用于web项目

    在所有这些项目中都需要可以访问相同的配置。我已经读到建议使用机器配置文件,但我们并不总是能够访问该文件,因此配置文件必须驻留在我们的解决方案中

    我不完全理解配置文件是如何生成的。目前我写了一个简单的项目,我有以下几点:

  • 用于存储服务配置文件的类库。有人试图通过反思来做到这一点
  • 应该从类库读取app.config的Windows应用程序
  • 当我执行以下代码时,我希望得到一个带有测试值的配置文件:

    _applicationSettings = ConfigurationManager.OpenExeConfiguration(
                        System.Reflection.Assembly.GetAssembly(typeof(WCSConfiguration)).Location
                        ).AppSettings;    
    
    我得到的是一个空的应用程序设置文件

    类库具有以下App.config:

    <?xml version="1.0" encoding="utf-8" ?>
    <configuration>
      <appSettings>
        <add key="TestTextKey" value="TestTextValue"/>
      </appSettings> 
    </configuration>
    
    
    
    我尝试过使用
    .getExecutionGassembly()
    方法,我希望该方法返回当前正在执行的代码的程序集。这不起作用,而是返回了Windows应用程序的程序集

    GetAssembly(type(WCSConfiguration))
    返回了正确的程序集,但是bin/debug目录中缺少配置文件

    我有一种感觉,要么是我做了一些根本错误的事情,要么是微软没有足够的灵活性。我也试着搜索MSDN的解释,但在IMO中并没有很好的记录

    我还将COM保留为粗体,因为我不确定COM库是否可以使用任何配置文件。首先,我想让其他项目工作

    我知道这是很多信息。任何帮助都将不胜感激。以前我们选择使用注册表,但结果证明这很糟糕,主要是因为在某些情况下无法访问注册表。此外,我们现在有多个版本的应用程序,在分支之间切换只需半小时:(

    多谢各位

    编辑:

    如果我将dll的配置部分添加到app.config,这意味着这些设置将仅从该应用程序中可用。如果我错了,请更正我。我提供的示例是一个缩小的版本。总共大约有十个windows应用程序、一个MVC项目和一系列类库,所有这些都需要使用这是一种配置

    配置设置主要是连接字符串、不属于数据库的查找值和少数其他次要设置。此时主要关注的是连接字符串。应用程序的次要版本很少,每个版本都指向不同的数据库

    我想从中得到的是一个很好的可行的解决方案,这样它就可以发布到网上,其他遇到同样问题的人就不会花很多天的时间

    故事的士气IMO: 使用App.config和Web.config存储您自己的配置文件的位置

    编写简单的XML序列化程序来读/写配置和DLL,以便为配置提供服务


    COM对象说来话长,是通过“黑客”实现的,因为App.config或Web.config在COM dll中都不可用。

    有几个一般要点——将dll的配置部分添加到App.config文件中,而不是依赖dll的配置文件来获取;而App.config在生成时实际上被重命名为.exe.config,因此需要确保该名称的文件可用

    此外--您不必使用默认的配置加载机制来配置应用程序。您可以创建自己的配置类,只需使用XML序列化即可任意进行反序列化和配置。

    注意,需要传递配置文件的文件名,而不是可执行文件

    您需要将
    .config
    附加到可执行文件的路径。若要获取可执行文件程序集,请使用

    如果您有要在多段代码之间共享的配置设置,但这些代码并不都在同一个.NET进程中,我建议您:

    • 将它们放在自己的
      myStuff.config
    • 在.NET代码中,使用
      ConfigurationManager.OpenExeConfiguration
      打开并访问
      myStuff.config
    • 非.NET代码将需要使用XML解析器来加载和读取设置
    • 在为.NET应用程序共享此配置的每个应用程序的app.config中,放置指向
      myStuff.config
      的路径。(非.NET应用程序:取决于该应用程序的工作方式。)

    另一种方法是,配置结构相同,但每个应用程序的设置都是自定义配置节。

    Hi.如果我将dll的配置节添加到app.config,这意味着这些设置将仅从该应用程序可用。我这样说对吗?我提供的示例是一个按比例缩小的示例总共有大约十个Windows应用程序、单个MVC项目和类库范围,所有这些都需要利用该配置。我将认真考虑不使用默认.NET机制,而是创建一个独立的配置库,它可以从您自己的XML序列化CON中提供配置信息。fig类。也就是说,在.NET 2+中,您还可以重定向到非默认配置文件——例如,在MSDN中查找ConfigurationManager.OpenMappedExconfiguration,对于.NET应用程序,它至少可以让您