如何在具有相对路径的Web服务Web配置上映射entlib.config?

时间:2011-07-13 11:44:50

标签: c# web-config enterprise-library

似乎如果我没有给出正确的路径(即c:\ something \ entlib.config),运行webservice时会出现以下错误:

System.IO.FileNotFoundException:找不到配置文件Entlib.config。 (...)

这是引用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.config”/&gt;            filePath =“。\ Entlib.config”/&gt;            filePath =“〜\ Entlib.config”/&gt;            filePath =“。\ Entlib.config”/&gt;            filePath =“〜\ Entlib.config”/&gt;

2 个答案:

答案 0 :(得分:2)

我相信这是bug introduced in version 5。它似乎已在Microsoft Enterprise Library 5.0 Optional Update 1中修复。

或者您可以扩展FileConfigurationSource并覆盖CreateSource方法(如上面的错误报告评论中所述)。

答案 1 :(得分:0)

如果您使用的是Project setyp文件夹,那么您可以添加自定义Project Installer文件,然后在安装完成后您可以找到entlib.config文件,因为您从安装程序知道文件的安装位置然后打开entlib.config并用安装的路径替换当前路径。

        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做类似的事情。
更新
“路径可以是相对路径或绝对路径。”有关详细信息,请参阅this link