所以我遇到麻烦,让他们经历了发布过程后运行的应用程序。他们从视觉工作室调试器工作,因为System.Net.hhtp的一个版本被放入调试目录。我相信这个DLL会被存放在客户端机器上,这就是为什么它不在输出中,我不明白的是我做错了什么。Serilog与seq无法找到System.Net.Http发布后与Windows 4.6.2
**:我想说明的是,我没有为linux上的dotnetcore设置这个问题,然后发布和运行。
下面是一个简单的命令行程序,我做展示和隔离我的问题:
using Serilog;
using Serilog.Events;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace SerilogTest
{
class Program
{
static void Main(string[] args)
{
SetStaticLoggerConfiguration("http://localhost:5341/", @"C:\Logs\IQLRServices\JobDispatcher-{Date}.txt");
Log.Information("The logger is working.");
}
private static void SetStaticLoggerConfiguration(string seqAddress = null, string rollingFileFormat = null)
{
LoggerConfiguration logConfig = new LoggerConfiguration();
if (!string.IsNullOrWhiteSpace(seqAddress))
{
logConfig.WriteTo.Seq(seqAddress, Serilog.Events.LogEventLevel.Verbose, 2500, TimeSpan.FromSeconds(10));
}
if (!string.IsNullOrWhiteSpace(rollingFileFormat))
{
logConfig.WriteTo.RollingFile(rollingFileFormat,
restrictedToMinimumLevel: Serilog.Events.LogEventLevel.Debug,
outputTemplate: "{Timestamp:MM-dd-yyyy HH:mm:ss.fff zzz} [{Level}] {Scope} {Properties} {Message} {NewLine}{Exception}");
}
if (Environment.UserInteractive)
{
logConfig.WriteTo.Console(LogEventLevel.Verbose);
}
var log = logConfig.CreateLogger();
Log.Logger = log;
Serilog.Debugging.SelfLog.Enable(msg => Log.Error("Serilog internal error: {@ErrorMessage}", msg));
}
}
}
这里是的NuGet依赖关系,我为了编译添加(我加了Serilog.Sinks.Seq包,其中有自己的DEPS,然后添加Serilog.Sinks.Console):
<packages>
<package id="Serilog" version="2.5.0" targetFramework="net462" />
<package id="Serilog.Formatting.Compact" version="1.0.0" targetFramework="net462" />
<package id="Serilog.Sinks.Console" version="3.0.1" targetFramework="net462" />
<package id="Serilog.Sinks.File" version="3.2.0" targetFramework="net462" />
<package id="Serilog.Sinks.PeriodicBatching" version="2.1.1" targetFramework="net462" />
<package id="Serilog.Sinks.RollingFile" version="3.3.0" targetFramework="net462" />
<package id="Serilog.Sinks.Seq" version="3.3.2" targetFramework="net462" />
<package id="System.Net.Http" version="4.3.1" targetFramework="net462" />
<package id="System.Security.Cryptography.Algorithms" version="4.3.0" targetFramework="net462" />
<package id="System.Security.Cryptography.Encoding" version="4.3.0" targetFramework="net462" />
<package id="System.Security.Cryptography.Primitives" version="4.3.0" targetFramework="net462" />
<package id="System.Security.Cryptography.X509Certificates" version="4.3.0" targetFramework="net462" />
</packages>
这里是发布应用程序的默认配置发布(这是我创建的InstallShield安装凸出会发生什么,当我直接从公布的结果vs):
Unhandled Exception: System.IO.FileNotFoundException: Could not load file or assembly 'System.Net.Http, Version=4.1.1.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a' or one of its dependencies. The system cannot find the file specified.
at SerilogTest.Program.SetStaticLoggerConfiguration(String seqAddress, String rollingFileFormat)
at SerilogTest.Program.Main(String[] args)
切换回的log4net为windows.This问题重现多的同事电脑,没有锁定已被发现。 – Theyouthis
这似乎是相对于 实际上,目标框架4.5+的项目具有对System.Net.Http的本地引用位于C:\ Program Files(x86)\ Reference Assemblies \ Microsoft \ Framework \ .NETFramework \ v4.X \ System.Net.Http.dll。 结果:导致Nuget软件包版本和框架版本之间的冲突... –
Michael