C# 为什么';NuGet包NLog是否适用于.NET Core?

C# 为什么';NuGet包NLog是否适用于.NET Core?,c#,.net-core,nlog,C#,.net Core,Nlog,完成以下步骤 创建新的.NET Core控制台项目(C#.NET Core 2.1) 添加NuGet包NLog,NLog.Config(目前是V4.5.8) 在class程序中添加记录器字段 static Logger logger = LogManager.GetCurrentClassLogger(); 添加logger.Info(“测试NLog”)在静态void Main(字符串[]args)中 但是,为什么运行程序不打印“Test NLog”?您可能有错误的版本。NuGet页

完成以下步骤

  • 创建新的.NET Core控制台项目(C#.NET Core 2.1)

  • 添加NuGet包NLog,NLog.Config(目前是V4.5.8)

  • 在class
    程序
    中添加记录器字段

     static Logger logger = LogManager.GetCurrentClassLogger();
    
  • 添加
    logger.Info(“测试NLog”)
    静态void Main(字符串[]args)


  • 但是,为什么运行程序不打印“Test NLog”?

    您可能有错误的版本。NuGet页面()提到了这一点:

    支持的平台:

    • .NET Framework 3.5、4、4.5、4.6和4.7
    • .NET标准1.3+和2.0+
    • .NET Framework 4客户端配置文件
    • Android、Xamarin iOS
    • 八,
    • 4和5
    • 四,
    对于ASP.NET Core,请选中:

    工作.NET核心示例:

    文件Program.cs
    公共类程序
    {
    公共静态void Main(字符串[]args)
    {
    //NLog:首先设置记录器以捕获所有错误
    var logger=NLog.Web.NLogBuilder.ConfigureNLog(“NLog.config”).GetCurrentClassLogger();
    尝试
    {
    BuildWebHost(args.Run();
    }
    捕获(例外情况除外)
    {
    //NLog:捕获设置错误
    logger.Error(例如,“由于异常而停止程序”);
    投掷;
    }
    最后
    {
    //确保在应用程序退出之前刷新并停止内部计时器/线程(避免Linux上的分段错误)
    NLog.LogManager.Shutdown();
    }
    }
    公共静态IWebHost BuildWebHost(字符串[]args)=>
    WebHost.CreateDefaultBuilder(args)
    .UseStartup()
    .ConfigureLogging(日志=>
    {
    logging.ClearProviders();
    logging.SetMinimumLevel(LogLevel.Trace);
    })
    .UseNLog()//NLog:为依赖项注入设置NLog
    .Build();
    }
    
    文件nlog.config
    
    
    自NLog 4.5以来,NLog完全支持.NET核心1和2

    这个问题可能是nuget的问题,即nlog.config没有与nlog.config包一起安装

    您应该检查nlog.config(并部署它)。如果不存在,则创建它

    我建议阅读:

    • -如果你想使用.NET的DI系统和ASP.NET Core 2,你需要这个
    但是,运行程序不会打印“测试NLog”


    您希望输出在哪里?请检查您的nlog.config。对于此

    ,nlog.config包不会将配置文件添加到项目中,您必须手动创建一个配置文件。您还必须手动确保将其复制到输出目录

    一个简单的配置文件如下所示:

    <?xml version="1.0" encoding="utf-8" ?>
    <nlog xmlns="http://www.nlog-project.org/schemas/NLog.xsd"
          xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
    
        <targets>
            <target name="logfile" xsi:type="File" fileName="file.txt" />
            <target name="logconsole" xsi:type="Console" />
        </targets>
    
        <rules>
            <logger name="*" minlevel="Info" writeTo="logconsole" />
            <logger name="*" minlevel="Debug" writeTo="logfile" />
        </rules>
    </nlog>
    
    
    
    确保将以下内容添加到.csproj文件中:

    <ItemGroup>
      <None Update="nlog.config" CopyToOutputDirectory="PreserveNewest" />
    </ItemGroup>
    
    
    
    确保类型为
    None
    ,而不是ASP.NET项目中显示的
    Content
    。控制台应用程序不复制
    内容
    文件

    另外,确保配置文件的第一行是
    确保不使用NuGet包。并且不应该用于新项目(NuGet包的描述中也提到)

    它会产生不必要的副作用,即在应用程序部署时重置实际的Nlog.config。当微软决定重新设计NuGet软件包格式时,NuGet软件包被破坏了


    另请参见:

    既然支持.Net标准1.3+,它是否应该支持.Net core 2.1?我也这么认为,但我还没有尝试过2.1,也找不到任何明确提到2.0以上版本的文档。我试图将该项目更改为.Net core 2.0,但它也不起作用。我有一个使用.Net core 2.0的小型测试项目,它可以工作。我使用的是NLog.Web.AspNetCore 4.5.4,var logger=NLog.Web.NLogBuilder.ConfigureNLog(“NLog.config”).GetCurrentClassLogger();在Program.csI中添加了
    NLog.Web.AspNetCore
    并删除了
    NLog
    ,但它仍然无法在我的机器上工作。
    <ItemGroup>
      <None Update="nlog.config" CopyToOutputDirectory="PreserveNewest" />
    </ItemGroup>