【问题标题】:How can I properly reference this config file so I'm not hard coding the path?如何正确引用此配置文件,以免对路径进行硬编码?
【发布时间】:2011-05-06 02:55:36
【问题描述】:

我正在尝试引用与包含此代码的类位于同一文件夹中的此配置文件。我想对它做某种类型的相对引用,所以我可以从其他地方使用它。当我尝试仅使用不带路径的文件名时,应用程序找不到该文件。我调试了它似乎在 IIS 文件夹中查找的文件夹,这很有意义,因为我在 IIS 托管的 wcf 服务中使用它。无论如何,我如何正确引用这个配置文件而不用硬编码路径?所以它看起来在项目位置。谢谢你的帮助。周末愉快!

 public void Init()
    {
        var fileMap = new ExeConfigurationFileMap { ExeConfigFilename = @"C:\workspace\new\UnityDemo-v1.0.0.1\src\Core\unity.config" };

        Configuration configuration = ConfigurationManager.OpenMappedExeConfiguration(fileMap, ConfigurationUserLevel.None);
        var unitySection = (UnityConfigurationSection)configuration.GetSection("unity");
        _container = new UnityContainer().LoadConfiguration(unitySection);
    }

干杯,
~ck

【问题讨论】:

  • 您不应该在您的 src 树中使用该版本。你的配置文件应该设置为“复制到输出目录”,你应该在那里找到(并使用它)。
  • 项目中可用的设置功能(并放置在 app.config/web.config 中)是否对您不起作用?在默认情况下,您不必担心查找文件的路径或加载配置。
  • 柯克它似乎没有复制。它应该是内容还是嵌入式资源。那我该如何参考呢?谢谢

标签: c# configuration web-config configuration-files


【解决方案1】:

在 .NET 中对我有用的另一个选项是使用 Server.MapPath。这将返回 Web 应用程序中给定相对虚拟路径的完整路径。

var filePath = Server.MapPath("/unity.config")

然后可以使用此物理文件路径来创建上述文件映射。

【讨论】:

    【解决方案2】:

    将配置文件与托管在 IIS 中的服务一起使用是很棘手的,因为应用程序目录是 IIS 运行所在的目录,并且会受到严格保护,不会在其中放置任何文件。可能还有其他方法,但对我来说,将文件命名为 web.config 并将其复制到 .svc 文件所在的目录中,然后您可以直接读取设置而无需参考配置文件。我不知道有什么方法可以从程序本身进行这种复制。安装程序将能够做到这一点。 见:this question

    【讨论】:

      【解决方案3】:

      使用Application.StartupPath 获取应用程序启动的路径,然后简单地结合文件名获取完整路径:

      var filePath = Path.Combine(Application.StartupPath, "unity.config");
      var fileMap = new ExeConfigurationFileMap { ExeConfigFilename = filePath };
      

      这仅适用于 winforms。


      另一个选项是使用Environment.CurrentDirectory - 默认情况下它将设置为进程启动目录。请注意,此属性是可变的:

      var filePath = Path.Combine(Environment.CurrentDirectory, "unity.config");
      var fileMap = new ExeConfigurationFileMap { ExeConfigFilename = filePath };
      

      【讨论】:

      • Application.StartupPath 在什么程序集中?这仅适用于 Windows 窗体应用程序吗?谢谢
      猜你喜欢
      • 1970-01-01
      • 2011-01-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-02-26
      • 1970-01-01
      • 1970-01-01
      • 2021-11-11
      相关资源
      最近更新 更多