Serilog не удается загрузить dll Sink, не указанную в проекте, но доступную в папке приложения.C#

Место общения программистов C#
Ответить
Anonymous
 Serilog не удается загрузить dll Sink, не указанную в проекте, но доступную в папке приложения.

Сообщение Anonymous »

Я столкнулся со следующей проблемой:
Я поддерживаю решение, содержащее несколько исполняемых проектов.
Решение использует централизованное управление пакетами.
Я публикую все проекты в одной папке, чтобы избежать дублирования всех задействованных DLL. До сих пор это работало отлично.
На данный момент все проекты использовали один и тот же приемник — файловый приемник. Теперь один проект также использует консольный приемник, и это, похоже, проблема.
Если я запущу один из проектов, имеющий только файловый приемник, я получу следующее исключение:
Unhandled exception. System.IO.FileNotFoundException: Could not load file or assembly 'Serilog.Sinks.Console, Version=5.0.1.0, Culture=neutral, PublicKeyToken=24c2f752a8e58a10'. The system can not find the specified file.
File name: 'Serilog.Sinks.Console, Version=5.0.1.0, Culture=neutral, PublicKeyToken=24c2f752a8e58a10'
at System.Reflection.RuntimeAssembly.InternalLoad(AssemblyName assemblyName, StackCrawlMark& stackMark, AssemblyLoadContext assemblyLoadContext, RuntimeAssembly requestingAssembly, Boolean throwOnFileNotFound)
at System.Reflection.Assembly.Load(AssemblyName assemblyRef)
at Serilog.Settings.Configuration.ConfigurationReader.LoadConfigurationAssemblies(IConfiguration section, AssemblyFinder assemblyFinder)
at Serilog.Settings.Configuration.ConfigurationReader..ctor(IConfiguration configSection, AssemblyFinder assemblyFinder, ConfigurationReaderOptions readerOptions, IConfiguration configuration)
at Serilog.ConfigurationLoggerConfigurationExtensions.GetConfigurationReader(IConfiguration configuration, ConfigurationReaderOptions readerOptions, DependencyContext dependencyContext)
at Serilog.ConfigurationLoggerConfigurationExtensions.Configuration(LoggerSettingsConfiguration settingConfiguration, IConfiguration configuration, ConfigurationReaderOptions readerOptions)

Неудавшийся проект не имеет ссылки на приемник консоли (и такой приемник не настроен), но, поскольку все копируется в один и тот же каталог, Serilog.Sinks.Console.dll доступен.
Если я удалю Serilog.Sinks.Console.dll или добавлю ссылку на него для связанного проекта, все будет работать. Так это происходит только в том случае, если проект никак не ссылается на приемник, но dll все еще доступен в папке приложения.
Что может быть причиной этого?
Мне кажется странным, что Serilog пытается загрузить сборки, не необходимые для предоставленной конфигурации логгера?
Мой раздел конфигурации выглядит следующим образом (json):
"Serilog": {
"Using": [
"Serilog.Sinks.File"
],
"MinimumLevel": "Debug",
"WriteTo": [
{
"Name": "File",
"Args": {
"path": "MyApp.log"
}
}
],
"Enrich": [
"FromLogContext"
]


И я применяю загруженную конфигурацию следующим образом:
public static ILoggerFactory ConfigureLogging(IConfigurationRoot configuration)
{
// configure Serilog
Log.Logger = new LoggerConfiguration()
.ReadFrom.Configuration(configuration)
.Enrich.WithProperty("Application", System.Reflection.Assembly.GetEntryAssembly()?.Name() ?? "MyApp")
.CreateLogger();

// register with Microsoft.Extensions.Logging
var loggerFactory = new LoggerFactory();
loggerFactory.AddProvider(new SerilogLoggerProvider());
//...
}


Подробнее здесь: https://stackoverflow.com/questions/777 ... ailable-in
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C#»