.NET 6.0 WinForm程序如何将NLog.config嵌入单文件EXE?
将NLog.Config嵌入.NET 6单文件WinForm程序的解决方案
步骤1:配置NLog.config的嵌入属性
- 在Visual Studio中找到项目里的
NLog.config文件,右键选择属性 - 将生成操作修改为
嵌入的资源 - 将复制到输出目录修改为
不复制
步骤2:在程序启动时加载嵌入的配置
在Program.cs的Main方法开头(或程序初始化的最早阶段)添加以下代码,从嵌入资源中读取并加载NLog配置:
using NLog; using NLog.Config; using System.Reflection; // 获取当前程序集 var currentAssembly = Assembly.GetExecutingAssembly(); // 替换为你的项目命名空间+NLog.config,例如项目根命名空间是MyWinApp,则路径为MyWinApp.NLog.config var configResourcePath = "YourProjectNamespace.NLog.config"; using var configStream = currentAssembly.GetManifestResourceStream(configResourcePath); if (configStream != null) { var loggingConfig = new XmlLoggingConfiguration(configStream, null); LogManager.Configuration = loggingConfig; } // 初始化日志实例并验证 var logger = LogManager.GetCurrentClassLogger(); logger.Info("NLog配置已从嵌入资源加载完成");
提示:项目根命名空间可在项目属性→应用程序标签页中查看。
步骤3:适配单文件发布设置
在项目的.csproj文件中添加以下配置,确保嵌入资源在单文件发布时能被正确读取:
<PropertyGroup> <PublishSingleFile>true</PublishSingleFile> <SelfContained>true</SelfContained> <!-- 若为非自包含发布,设为false即可 --> <IncludeAllContentForSelfExtract>true</IncludeAllContentForSelfExtract> </PropertyGroup>
注意事项
- 注释掉代码中原本自动加载外部
NLog.config的逻辑(例如默认的LogManager.LoadConfiguration()),避免冲突 - 发布后可删除输出目录中的
NLog.config文件,验证日志功能是否正常运行 - 嵌入配置后,如需修改日志规则需重新编译发布程序,无法通过外部文件调整
内容的提问来源于stack exchange,提问作者Steven Sheeley
相关产品推荐
相关产品推荐

