使用ILMerge后无法读取自定义配置部分

时间:2015-12-04 14:23:41

标签: .net app-config nlog ilmerge

主题: 我创建控制台应用程序(文档解析器)并使用NLog来记录处理事件。 构建之后我使用ILMerge工具将所有DLL合并到一个可执行文件中(使用结果工具需要更加舒适)

如果我使用外部NLog.config xml文件进行记录器配置 - 它的工作正常(在将所有dll-s和exe合并到单个文件之前和之后)

所以,问题: 但如果我试图使用" nlog" docsloader.exe.config文件中的部分 - 它只能在没有IL合并的情况下工作(如果所有dll和exe文件都在单独的模式下)。 如果我首先将结果合并到单个文件并运行docsloader.exe,我会看到:

Unhandled Exception: System.Configuration.ConfigurationErrorsException: An error occurred creating the configuration section handler for nlog: Could not load file or
 assembly 'NLog' or one of its dependencies. The system cannot find the file specified. (C:\d\projects\_\out\docsloader.exe.Config line 5)
---> System.IO.FileNotFoundException: Could not load file or assembly 'NLog' or one of its dependencies. The system cannot find the file specified.

docsloader.exe.config(前20个字符串)

<configSections>
      <section name="nlog" type="NLog.Config.ConfigSectionHandler, NLog" />
</configSections>  

<nlog xmlns="http://www.nlog-project.org/schemas/NLog.xsd">
  <targets>
        <target name="console" type="Console" layout="${date:format=HH\:mm\:ss}|${level}| ${message}" />
        <target name="file"  type="File" fileName="${basedir}/docsloader.log" layout="${date}|${level}| ${message}" />
    </targets>
    <rules>
        <logger name="*" minlevel="Debug" writeTo="console" />
        <logger name="*" minlevel="Trace" writeTo="file" />
    </rules>
  </nlog>

<startup> 
    <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.6"/>
</startup>

....

ILMerge命令:

C:\d\projects\_\ILMerge\ILMerge.exe /out:"C:\d\projects\_\_\out\docsloader.exe" "C:\d\projects\_\_\bin\Release\docsloader.exe" "C:\d\projects\_\_\bin\Release\*.dll" /target:exe /targetplatform:v4,C:\Windows\Microsoft.NET\Framework64\v4.0.30319 /lib:"C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.0" /wildcards

echo Coping docsloader.exe.config...
cp C:\d\projects\_\_\bin\Release\docsloader.exe.config C:\d\projects\_\_\out\docsloader.exe.config

PS:如果我删除-section并创建NLog.config - 它可以正常工作。 谢谢!

1 个答案:

答案 0 :(得分:2)

错误来自类型引用NLog.Config.ConfigSectionHandler, NLog,它引用NLog dll(逗号之后),它现在已经合并,不再存在。

您可以将其替换为NLog.Config.ConfigSectionHandler, docsloader,它可能会有效。