C# 如何正确引用此配置文件,以便';我不是在硬编码路径吗?

C# 如何正确引用此配置文件,以便';我不是在硬编码路径吗?,c#,configuration,web-config,configuration-files,C#,Configuration,Web Config,Configuration Files,我试图引用与包含此代码的类位于同一文件夹中的配置文件。我想对它做一些类型的相对引用,这样我可以从其他地方使用它。当我尝试只使用文件名而不使用路径时,应用程序找不到该文件。我调试了它在IIS文件夹中查找的文件夹,这对我在IIS托管的wcf服务中使用它很有意义。无论如何,我怎样才能在不硬编码路径的情况下正确引用此配置文件?因此,它看起来在项目位置。谢谢你的帮助。祝你周末愉快 public void Init() { var fileMap = new ExeConfigur

我试图引用与包含此代码的类位于同一文件夹中的配置文件。我想对它做一些类型的相对引用,这样我可以从其他地方使用它。当我尝试只使用文件名而不使用路径时,应用程序找不到该文件。我调试了它在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

用于获取启动应用程序的路径,然后只需与文件名组合即可获取完整路径:

var filePath = Path.Combine(Application.StartupPath, "unity.config");
var fileMap = new ExeConfigurationFileMap { ExeConfigFilename = filePath };
这仅在winforms中有效


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

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

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

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

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

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

您不应该在
src
树中使用该版本。您的配置文件应设置为“复制到输出目录”,并且您应该在那里找到(并使用它)。是否有原因使项目上可用的设置功能(并放置在app.config/web.config中)不适用于您?在默认情况下,您不必关心查找文件的路径或加载configuration.kirk,因为它似乎没有复制。应该是内容还是嵌入式资源。那我怎么引用它呢?感谢Application.StartupPath位于哪个程序集中?这是否仅适用于windows窗体应用程序?谢谢