提问人:Chaos 提问时间:11/8/2023 最后编辑:Chaos 更新时间:11/8/2023 访问量:27
Microsoft.extension.logging 中的编译时日志记录代码生成错误
Error with compile-time logging code generation in Microsoft.extension.logging
问:
我有一个包含多个项目的申请。为了重构我们在应用程序中处理日志记录的方式,我使用 ILoggerProvider 接口创建了一个具有特定提供程序的日志记录项目。我还实现了 ILogger 接口。
为了添加特定的日志记录方法,我使用了以下实现:
namespace Logger
{
public static partial class LogBasicExtensions
{
[LoggerMessage(
EventId = 0,
Level = LogLevel.Error,
Message = "Log basic exception")]
public static partial void LogException(this ILogger logger, Exception exception);
}
}
现在,为了保持干净的模式,我希望解决方案中的每个项目都声明它们将使用的日志记录方法。例如,在另一个项目中:
namespace AnotherProject
{
public static partial class ClientLogExtension
{
[LoggerMessage(
EventId = 1,
Level = LogLevel.Information,
Message = "Application Started")]
public static partial void ApplicationStarted(this ILogger logger);
[LoggerMessage(
EventId = 2,
Level = LogLevel.Information,
Message = "Code {coderead} reception from reader {readernumber}")]
public static partial void CodeReception(this ILogger logger, string coderead, uint readernumber);
}
}
但是,在尝试编译项目时,我遇到了以下错误:
CS0757: 分部方法不能有多个实现声明。 CS0102:类型“类型名称”已包含“标识符”的定义
以下是Microsoft.Extensions.Logging.Generators生成的代码:
partial class ClientLogExtension
{
[global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.Extensions.Logging.Generators", "7.0.8.27404")]
private static readonly global::System.Action<global::Microsoft.Extensions.Logging.ILogger, global::System.Exception?> __ApplicationStartedCallback =
global::Microsoft.Extensions.Logging.LoggerMessage.Define(global::Microsoft.Extensions.Logging.LogLevel.Information, new global::Microsoft.Extensions.Logging.EventId(1, nameof(ApplicationStarted)), "Application Started", new global::Microsoft.Extensions.Logging.LogDefineOptions() { SkipEnabledCheck = true });
[global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.Extensions.Logging.Generators", "7.0.8.27404")]
public static partial void ApplicationStarted(this global::Microsoft.Extensions.Logging.ILogger logger)
{
if (logger.IsEnabled(global::Microsoft.Extensions.Logging.LogLevel.Information))
{
__ApplicationStartedCallback(logger, null);
}
}
[global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.Extensions.Logging.Generators", "7.0.8.27404")]
private static readonly global::System.Action<global::Microsoft.Extensions.Logging.ILogger, global::System.String, global::System.UInt32, global::System.Exception?> __CodeReceptionCallback =
global::Microsoft.Extensions.Logging.LoggerMessage.Define<global::System.String, global::System.UInt32>(global::Microsoft.Extensions.Logging.LogLevel.Information, new global::Microsoft.Extensions.Logging.EventId(2, nameof(CodeReception)), "Code {coderead} reception from reader {readernumber}", new global::Microsoft.Extensions.Logging.LogDefineOptions() { SkipEnabledCheck = true });
[global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.Extensions.Logging.Generators", "7.0.8.27404")]
public static partial void CodeReception(this global::Microsoft.Extensions.Logging.ILogger logger, global::System.String coderead, global::System.UInt32 readernumber)
{
if (logger.IsEnabled(global::Microsoft.Extensions.Logging.LogLevel.Information))
{
__CodeReceptionCallback(logger, coderead, readernumber, null);
}
}
}
到目前为止,我已经尝试了各种方法。除了重新启动、重建和删除“bin”和“obj”文件夹之外,我还尝试重命名我的类和方法。我还创建了一个小型测试解决方案,该解决方案引用了 Logger 项目并以相同的方式使用它,并且它在那里工作。
现在,我知道它应该有效,但它仍然不起作用。
我认为Visual Studio可能会生成两组分部类,因此我删除了“Temp\VSGeneratedDocuments”目录中的所有文件,但这也没有解决问题。
任何帮助将不胜感激。
答: 暂无答案
下一个:ASP.NET Core 安装包
评论