如何映射entlib.在webservices的webconfig上配置相对路径

本文关键字:webconfig 配置 路径 相对 webservices 何映射 映射 entlib | 更新日期: 2023-09-27 18:01:52

似乎如果我不给出正确的路径(即c:'something'entlib.config),我在运行webservice时得到以下错误:

先。FileNotFoundException:配置文件Entlib。找不到配置。(…)

这是指向entlib文件的Webconfig部分:

<enterpriseLibrary.ConfigurationSource selectedSource="EntLibconfig" parentSource="">
<sources>
  <add name="EntLibconfig"
       type="Microsoft.Practices.EnterpriseLibrary.Common.Configuration.FileConfigurationSource, Microsoft.Practices.EnterpriseLibrary.Common, Version=5.0.414.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"
       filePath="Entlib.config" />
</sources>
</enterpriseLibrary.ConfigurationSource>

我已经试过几种组合了filePath = " Entlib。配置"/>filePath ' Entlib = "。配置"/>filePath = " ~ ' Entlib。配置"/>filePath ' Entlib = "。配置"/>filePath = " ~ ' Entlib。配置"/>

如何映射entlib.在webservices的webconfig上配置相对路径

我相信这是第5版引入的错误。这个问题似乎在Microsoft Enterprise Library 5.0可选更新1中得到了修复。

或者您可以扩展FileConfigurationSource并覆盖CreateSource方法(如上面的bug报告注释所示)。

如果您使用的是项目设置文件夹,那么您可以添加一个自定义项目安装程序文件,然后在安装完成后,您可以找到entlib。配置文件,因为您从安装程序中知道文件的安装位置,然后打开entlib。配置并将当前路径替换为安装路径。

        private void serviceInstaller1_AfterInstall(object sender, InstallEventArgs e)
    {
        //Gets Installed Directory that user selected
        string installDirectory = Path.GetDirectoryName(Context.Parameters["assemblypath"]);

        string[] lines = File.ReadAllLines(installDirectory + "''NLog.config");
        File.Delete(installDirectory + NLOGFILE);
        StreamWriter sw = File.AppendText(installDirectory + "''NLog.config");
        foreach (string line in lines)
        {
            if (line.Contains("LOGS"))
            {
                string logDir = line.Replace("LOGS", installDirectory + "''LOGS");
                sw.WriteLine(logDir.Replace('''', '/'));
            }
            else
            {
                sw.WriteLine(line);
            }
        }
        sw.Flush();
        sw.Close();
    }

我对Nlog.config做了类似的事情。
更新
"路径可以是相对路径或绝对路径。"