2017-07-24 31 views
1

所以我遇到麻煩,讓他們經歷了發佈過程後運行的應用程序。他們從視覺工作室調試器工作,因爲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) 
+0

切換回的log4net爲windows.This問題重現多的同事電腦,沒有鎖定已被發現。 – Theyouthis

+0

這似乎是相對於 實際上,目標框架4.5+的項目具有對System.Net.Http的本地引用位於C:\ Program Files(x86)\ Reference Assemblies \ Microsoft \ Framework \ .NETFramework \ v4.X \ System.Net.Http.dll。 結果:導致Nuget軟件包版本和框架版本之間的衝突... – Michael

回答

0

你需要添加以下到項目的CSPROJ文件:

<PropertyGroup> 
    <AutoGenerateBindingRedirects>true</AutoGenerateBindingRedirects> 
    <GenerateBindingRedirectsOutputType>true</GenerateBindingRedirectsOutputType> 
</PropertyGroup> 
+0

似乎沒有改變任何東西。我有第一個在那裏,但第二個沒有改變任何東西。 – Theyouthis