mirror of
https://github.com/Radarr/Radarr.git
synced 2026-04-19 21:46:50 -04:00
New: Add Sentry
This commit is contained in:
@@ -68,9 +68,8 @@
|
|||||||
<HintPath>..\packages\Nancy.Authentication.Forms.1.4.1\lib\net40\Nancy.Authentication.Forms.dll</HintPath>
|
<HintPath>..\packages\Nancy.Authentication.Forms.1.4.1\lib\net40\Nancy.Authentication.Forms.dll</HintPath>
|
||||||
<Private>True</Private>
|
<Private>True</Private>
|
||||||
</Reference>
|
</Reference>
|
||||||
<Reference Include="Newtonsoft.Json, Version=6.0.0.0, Culture=neutral, PublicKeyToken=30ad4fe6b2a6aeed, processorArchitecture=MSIL">
|
<Reference Include="Newtonsoft.Json, Version=9.0.0.0, Culture=neutral, PublicKeyToken=30ad4fe6b2a6aeed, processorArchitecture=MSIL">
|
||||||
<SpecificVersion>False</SpecificVersion>
|
<HintPath>..\packages\Newtonsoft.Json.9.0.1\lib\net40\Newtonsoft.Json.dll</HintPath>
|
||||||
<HintPath>..\packages\Newtonsoft.Json.6.0.6\lib\net40\Newtonsoft.Json.dll</HintPath>
|
|
||||||
</Reference>
|
</Reference>
|
||||||
<Reference Include="NLog, Version=4.0.0.0, Culture=neutral, PublicKeyToken=5120e14c03d0593c, processorArchitecture=MSIL">
|
<Reference Include="NLog, Version=4.0.0.0, Culture=neutral, PublicKeyToken=5120e14c03d0593c, processorArchitecture=MSIL">
|
||||||
<HintPath>..\packages\NLog.4.5.0-rc06\lib\net40-client\NLog.dll</HintPath>
|
<HintPath>..\packages\NLog.4.5.0-rc06\lib\net40-client\NLog.dll</HintPath>
|
||||||
|
|||||||
@@ -4,7 +4,7 @@
|
|||||||
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
|
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
|
||||||
<dependentAssembly>
|
<dependentAssembly>
|
||||||
<assemblyIdentity name="Newtonsoft.Json" publicKeyToken="30ad4fe6b2a6aeed" culture="neutral" />
|
<assemblyIdentity name="Newtonsoft.Json" publicKeyToken="30ad4fe6b2a6aeed" culture="neutral" />
|
||||||
<bindingRedirect oldVersion="0.0.0.0-6.0.0.0" newVersion="6.0.0.0" />
|
<bindingRedirect oldVersion="0.0.0.0-9.0.0.0" newVersion="9.0.0.0" />
|
||||||
</dependentAssembly>
|
</dependentAssembly>
|
||||||
<dependentAssembly>
|
<dependentAssembly>
|
||||||
<assemblyIdentity name="FluentMigrator" publicKeyToken="aacfc7de5acabf05" culture="neutral" />
|
<assemblyIdentity name="FluentMigrator" publicKeyToken="aacfc7de5acabf05" culture="neutral" />
|
||||||
|
|||||||
@@ -5,6 +5,6 @@
|
|||||||
<package id="Nancy" version="1.4.3" targetFramework="net40" />
|
<package id="Nancy" version="1.4.3" targetFramework="net40" />
|
||||||
<package id="Nancy.Authentication.Basic" version="1.4.1" targetFramework="net40" />
|
<package id="Nancy.Authentication.Basic" version="1.4.1" targetFramework="net40" />
|
||||||
<package id="Nancy.Authentication.Forms" version="1.4.1" targetFramework="net40" />
|
<package id="Nancy.Authentication.Forms" version="1.4.1" targetFramework="net40" />
|
||||||
<package id="Newtonsoft.Json" version="6.0.6" targetFramework="net40" />
|
<package id="Newtonsoft.Json" version="9.0.1" targetFramework="net40" />
|
||||||
<package id="NLog" version="4.5.0-rc06" targetFramework="net40" />
|
<package id="NLog" version="4.5.0-rc06" targetFramework="net40" />
|
||||||
</packages>
|
</packages>
|
||||||
@@ -4,7 +4,7 @@
|
|||||||
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
|
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
|
||||||
<dependentAssembly>
|
<dependentAssembly>
|
||||||
<assemblyIdentity name="Newtonsoft.Json" publicKeyToken="30ad4fe6b2a6aeed" culture="neutral" />
|
<assemblyIdentity name="Newtonsoft.Json" publicKeyToken="30ad4fe6b2a6aeed" culture="neutral" />
|
||||||
<bindingRedirect oldVersion="0.0.0.0-6.0.0.0" newVersion="6.0.0.0" />
|
<bindingRedirect oldVersion="0.0.0.0-9.0.0.0" newVersion="9.0.0.0" />
|
||||||
</dependentAssembly>
|
</dependentAssembly>
|
||||||
<dependentAssembly>
|
<dependentAssembly>
|
||||||
<assemblyIdentity name="FluentMigrator" publicKeyToken="aacfc7de5acabf05" culture="neutral" />
|
<assemblyIdentity name="FluentMigrator" publicKeyToken="aacfc7de5acabf05" culture="neutral" />
|
||||||
|
|||||||
@@ -1,12 +1,34 @@
|
|||||||
using System;
|
using System;
|
||||||
using System.IO;
|
using System.IO;
|
||||||
|
using System.Linq;
|
||||||
using System.Reflection;
|
using System.Reflection;
|
||||||
|
|
||||||
namespace NzbDrone.Common.EnvironmentInfo
|
namespace NzbDrone.Common.EnvironmentInfo
|
||||||
{
|
{
|
||||||
public static class BuildInfo
|
public static class BuildInfo
|
||||||
{
|
{
|
||||||
public static Version Version => Assembly.GetExecutingAssembly().GetName().Version;
|
static BuildInfo()
|
||||||
|
{
|
||||||
|
var assembly = Assembly.GetExecutingAssembly();
|
||||||
|
|
||||||
|
Version = assembly.GetName().Version;
|
||||||
|
|
||||||
|
var attributes = assembly.GetCustomAttributes(true);
|
||||||
|
|
||||||
|
Branch = "unknow";
|
||||||
|
|
||||||
|
var config = attributes.OfType<AssemblyConfigurationAttribute>().FirstOrDefault();
|
||||||
|
if (config != null)
|
||||||
|
{
|
||||||
|
Branch = config.Configuration;
|
||||||
|
}
|
||||||
|
|
||||||
|
Release = $"{Version}-{Branch}";
|
||||||
|
}
|
||||||
|
|
||||||
|
public static Version Version { get; }
|
||||||
|
public static String Branch { get; }
|
||||||
|
public static string Release { get; }
|
||||||
|
|
||||||
public static DateTime BuildDateTime
|
public static DateTime BuildDateTime
|
||||||
{
|
{
|
||||||
@@ -29,4 +51,4 @@ namespace NzbDrone.Common.EnvironmentInfo
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
using System;
|
using System;
|
||||||
using System.Text;
|
using System.Text;
|
||||||
|
|
||||||
namespace NzbDrone.Common
|
namespace NzbDrone.Common
|
||||||
@@ -26,5 +26,11 @@ namespace NzbDrone.Common
|
|||||||
}
|
}
|
||||||
return string.Format("{0:x8}", mCrc);
|
return string.Format("{0:x8}", mCrc);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static string AnonymousToken()
|
||||||
|
{
|
||||||
|
var seed = $"{Environment.ProcessorCount}_{Environment.OSVersion.Platform}_{Environment.MachineName}_{Environment.UserName}";
|
||||||
|
return HashUtil.CalculateCrc(seed);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -0,0 +1,43 @@
|
|||||||
|
using Newtonsoft.Json.Linq;
|
||||||
|
using NzbDrone.Common.Serializer;
|
||||||
|
|
||||||
|
namespace NzbDrone.Common.Instrumentation
|
||||||
|
{
|
||||||
|
public class CleansingJsonVisitor : JsonVisitor
|
||||||
|
{
|
||||||
|
public override void Visit(JArray json)
|
||||||
|
{
|
||||||
|
for (var i = 0; i < json.Count; i++)
|
||||||
|
{
|
||||||
|
if (json[i].Type == JTokenType.String)
|
||||||
|
{
|
||||||
|
var text = json[i].Value<string>();
|
||||||
|
json[i] = new JValue(CleanseLogMessage.Cleanse(text));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
foreach (JToken token in json)
|
||||||
|
{
|
||||||
|
Visit(token);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public override void Visit(JProperty property)
|
||||||
|
{
|
||||||
|
if (property.Value.Type == JTokenType.String)
|
||||||
|
{
|
||||||
|
property.Value = CleanseValue(property.Value as JValue);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
base.Visit(property);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private JValue CleanseValue(JValue value)
|
||||||
|
{
|
||||||
|
var text = value.Value<string>();
|
||||||
|
var cleansed = CleanseLogMessage.Cleanse(text);
|
||||||
|
return new JValue(cleansed);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,55 @@
|
|||||||
|
using System.Linq;
|
||||||
|
using NLog;
|
||||||
|
using NLog.Fluent;
|
||||||
|
|
||||||
|
namespace NzbDrone.Common.Instrumentation.Extensions
|
||||||
|
{
|
||||||
|
public static class SentryLoggerExtensions
|
||||||
|
{
|
||||||
|
public static readonly Logger SentryLogger = LogManager.GetLogger("Sentry");
|
||||||
|
|
||||||
|
public static LogBuilder SentryFingerprint(this LogBuilder logBuilder, params string[] fingerprint)
|
||||||
|
{
|
||||||
|
return logBuilder.Property("Sentry", fingerprint);
|
||||||
|
}
|
||||||
|
|
||||||
|
public static LogBuilder WriteSentryDebug(this LogBuilder logBuilder, params string[] fingerprint)
|
||||||
|
{
|
||||||
|
return LogSentryMessage(logBuilder, LogLevel.Debug, fingerprint);
|
||||||
|
}
|
||||||
|
|
||||||
|
public static LogBuilder WriteSentryInfo(this LogBuilder logBuilder, params string[] fingerprint)
|
||||||
|
{
|
||||||
|
return LogSentryMessage(logBuilder, LogLevel.Info, fingerprint);
|
||||||
|
}
|
||||||
|
|
||||||
|
public static LogBuilder WriteSentryWarn(this LogBuilder logBuilder, params string[] fingerprint)
|
||||||
|
{
|
||||||
|
return LogSentryMessage(logBuilder, LogLevel.Warn, fingerprint);
|
||||||
|
}
|
||||||
|
|
||||||
|
public static LogBuilder WriteSentryError(this LogBuilder logBuilder, params string[] fingerprint)
|
||||||
|
{
|
||||||
|
return LogSentryMessage(logBuilder, LogLevel.Error, fingerprint);
|
||||||
|
}
|
||||||
|
|
||||||
|
private static LogBuilder LogSentryMessage(LogBuilder logBuilder, LogLevel level, string[] fingerprint)
|
||||||
|
{
|
||||||
|
SentryLogger.Log(level)
|
||||||
|
.CopyLogEvent(logBuilder.LogEventInfo)
|
||||||
|
.SentryFingerprint(fingerprint)
|
||||||
|
.Write();
|
||||||
|
|
||||||
|
return logBuilder.Property("Sentry", null);
|
||||||
|
}
|
||||||
|
|
||||||
|
private static LogBuilder CopyLogEvent(this LogBuilder logBuilder, LogEventInfo logEvent)
|
||||||
|
{
|
||||||
|
return logBuilder.LoggerName(logEvent.LoggerName)
|
||||||
|
.TimeStamp(logEvent.TimeStamp)
|
||||||
|
.Message(logEvent.Message, logEvent.Parameters)
|
||||||
|
.Properties(logEvent.Properties.ToDictionary(v => v.Key, v => v.Value))
|
||||||
|
.Exception(logEvent.Exception);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -6,6 +6,7 @@ using NLog.Config;
|
|||||||
using NLog.Targets;
|
using NLog.Targets;
|
||||||
using NzbDrone.Common.EnvironmentInfo;
|
using NzbDrone.Common.EnvironmentInfo;
|
||||||
using NzbDrone.Common.Extensions;
|
using NzbDrone.Common.Extensions;
|
||||||
|
using NzbDrone.Common.Instrumentation.Sentry;
|
||||||
|
|
||||||
namespace NzbDrone.Common.Instrumentation
|
namespace NzbDrone.Common.Instrumentation
|
||||||
{
|
{
|
||||||
@@ -18,6 +19,7 @@ namespace NzbDrone.Common.Instrumentation
|
|||||||
LogManager.Configuration = new LoggingConfiguration();
|
LogManager.Configuration = new LoggingConfiguration();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
const string FILE_LOG_LAYOUT = @"${date:format=yyyy-M-d HH\:mm\:ss.f}|${level}|${logger}|${message}${onexception:inner=${newline}${newline}[v${assembly-version}] ${exception:format=ToString}${newline}}";
|
||||||
|
|
||||||
public static void Register(IStartupContext startupContext, bool updateApp, bool inConsole)
|
public static void Register(IStartupContext startupContext, bool updateApp, bool inConsole)
|
||||||
{
|
{
|
||||||
@@ -37,8 +39,7 @@ namespace NzbDrone.Common.Instrumentation
|
|||||||
RegisterDebugger();
|
RegisterDebugger();
|
||||||
}
|
}
|
||||||
|
|
||||||
//Disabling for now - until its fixed or we yank it out
|
RegisterSentry(updateApp);
|
||||||
//RegisterExceptron();
|
|
||||||
|
|
||||||
if (updateApp)
|
if (updateApp)
|
||||||
{
|
{
|
||||||
@@ -57,6 +58,36 @@ namespace NzbDrone.Common.Instrumentation
|
|||||||
LogManager.ReconfigExistingLoggers();
|
LogManager.ReconfigExistingLoggers();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private static void RegisterSentry(bool updateClient)
|
||||||
|
{
|
||||||
|
string dsn;
|
||||||
|
|
||||||
|
if (updateClient)
|
||||||
|
{
|
||||||
|
dsn = "https://40e47616afd84525bf49306123cb0926@sentry.radarr.video/10";
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
dsn = RuntimeInfo.IsProduction
|
||||||
|
? "https://ef145e92efdd4155a0771c11c099695e@sentry.radarr.video/2"
|
||||||
|
: "https://dee5b3fe26844368ac4458faa7d00a1f@sentry.radarr.video/9";
|
||||||
|
}
|
||||||
|
|
||||||
|
var target = new SentryTarget(dsn)
|
||||||
|
{
|
||||||
|
Name = "sentryTarget",
|
||||||
|
Layout = "${message}"
|
||||||
|
};
|
||||||
|
|
||||||
|
var loggingRule = new LoggingRule("*", updateClient ? LogLevel.Trace : LogLevel.Debug, target);
|
||||||
|
LogManager.Configuration.AddTarget("sentryTarget", target);
|
||||||
|
LogManager.Configuration.LoggingRules.Add(loggingRule);
|
||||||
|
|
||||||
|
// Events logged to Sentry go only to Sentry.
|
||||||
|
var loggingRuleSentry = new LoggingRule("Sentry", LogLevel.Debug, target) { Final = true };
|
||||||
|
LogManager.Configuration.LoggingRules.Insert(0, loggingRuleSentry);
|
||||||
|
}
|
||||||
|
|
||||||
private static void RegisterDebugger()
|
private static void RegisterDebugger()
|
||||||
{
|
{
|
||||||
DebuggerTarget target = new DebuggerTarget();
|
DebuggerTarget target = new DebuggerTarget();
|
||||||
@@ -84,8 +115,6 @@ namespace NzbDrone.Common.Instrumentation
|
|||||||
LogManager.Configuration.LoggingRules.Add(loggingRule);
|
LogManager.Configuration.LoggingRules.Add(loggingRule);
|
||||||
}
|
}
|
||||||
|
|
||||||
const string FILE_LOG_LAYOUT = @"${date:format=yy-M-d HH\:mm\:ss.f}|${level}|${logger}|${message}${onexception:inner=${newline}${newline}[v${assembly-version}] ${exception:format=ToString}${newline}}";
|
|
||||||
|
|
||||||
private static void RegisterAppFile(IAppFolderInfo appFolderInfo)
|
private static void RegisterAppFile(IAppFolderInfo appFolderInfo)
|
||||||
{
|
{
|
||||||
RegisterAppFile(appFolderInfo, "appFileInfo", "radarr.txt", 5, LogLevel.Info);
|
RegisterAppFile(appFolderInfo, "appFileInfo", "radarr.txt", 5, LogLevel.Info);
|
||||||
|
|||||||
@@ -0,0 +1,12 @@
|
|||||||
|
using SharpRaven.Data;
|
||||||
|
|
||||||
|
namespace NzbDrone.Common.Instrumentation.Sentry
|
||||||
|
{
|
||||||
|
public class MachineNameUserFactory : ISentryUserFactory
|
||||||
|
{
|
||||||
|
public SentryUser Create()
|
||||||
|
{
|
||||||
|
return new SentryUser(HashUtil.AnonymousToken());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,72 @@
|
|||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using SharpRaven.Data;
|
||||||
|
|
||||||
|
namespace NzbDrone.Common.Instrumentation.Sentry
|
||||||
|
{
|
||||||
|
public class RadarrJsonPacketFactory : IJsonPacketFactory
|
||||||
|
{
|
||||||
|
private readonly SentryPacketCleanser _cleanser;
|
||||||
|
|
||||||
|
public RadarrJsonPacketFactory()
|
||||||
|
{
|
||||||
|
_cleanser = new SentryPacketCleanser();
|
||||||
|
}
|
||||||
|
|
||||||
|
private static string ShortenPath(string path)
|
||||||
|
{
|
||||||
|
|
||||||
|
if (string.IsNullOrWhiteSpace(path))
|
||||||
|
{
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
var index = path.IndexOf("\\src\\", StringComparison.Ordinal);
|
||||||
|
|
||||||
|
if (index <= 0)
|
||||||
|
{
|
||||||
|
return path;
|
||||||
|
}
|
||||||
|
|
||||||
|
return path.Substring(index + "\\src".Length);
|
||||||
|
}
|
||||||
|
|
||||||
|
public JsonPacket Create(string project, SentryEvent @event)
|
||||||
|
{
|
||||||
|
var packet = new RadarrSentryPacket(project, @event);
|
||||||
|
|
||||||
|
try
|
||||||
|
{
|
||||||
|
foreach (var exception in packet.Exceptions)
|
||||||
|
{
|
||||||
|
foreach (var frame in exception.Stacktrace.Frames)
|
||||||
|
{
|
||||||
|
frame.Filename = ShortenPath(frame.Filename);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
_cleanser.CleansePacket(packet);
|
||||||
|
}
|
||||||
|
catch (Exception)
|
||||||
|
{
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
return packet;
|
||||||
|
}
|
||||||
|
|
||||||
|
[Obsolete]
|
||||||
|
public JsonPacket Create(string project, SentryMessage message, ErrorLevel level = ErrorLevel.Info, IDictionary<string, string> tags = null,
|
||||||
|
string[] fingerprint = null, object extra = null)
|
||||||
|
{
|
||||||
|
throw new NotImplementedException();
|
||||||
|
}
|
||||||
|
|
||||||
|
[Obsolete]
|
||||||
|
public JsonPacket Create(string project, Exception exception, SentryMessage message = null, ErrorLevel level = ErrorLevel.Error,
|
||||||
|
IDictionary<string, string> tags = null, string[] fingerprint = null, object extra = null)
|
||||||
|
{
|
||||||
|
throw new NotImplementedException();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,29 @@
|
|||||||
|
using Newtonsoft.Json;
|
||||||
|
using SharpRaven.Data;
|
||||||
|
|
||||||
|
namespace NzbDrone.Common.Instrumentation.Sentry
|
||||||
|
{
|
||||||
|
public class RadarrSentryPacket : JsonPacket
|
||||||
|
{
|
||||||
|
private readonly JsonSerializerSettings _setting;
|
||||||
|
|
||||||
|
public RadarrSentryPacket(string project, SentryEvent @event) :
|
||||||
|
base(project, @event)
|
||||||
|
{
|
||||||
|
_setting = new JsonSerializerSettings
|
||||||
|
{
|
||||||
|
DefaultValueHandling = DefaultValueHandling.Ignore
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
public override string ToString(Formatting formatting)
|
||||||
|
{
|
||||||
|
return JsonConvert.SerializeObject(this, formatting, _setting);
|
||||||
|
}
|
||||||
|
|
||||||
|
public override string ToString()
|
||||||
|
{
|
||||||
|
return ToString(Formatting.None);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,38 @@
|
|||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using NzbDrone.Common.Cache;
|
||||||
|
using NzbDrone.Common.EnvironmentInfo;
|
||||||
|
|
||||||
|
namespace NzbDrone.Common.Instrumentation.Sentry
|
||||||
|
{
|
||||||
|
public class SentryDebounce
|
||||||
|
{
|
||||||
|
private readonly TimeSpan _ttl;
|
||||||
|
private readonly Cached<bool> _cache;
|
||||||
|
|
||||||
|
public SentryDebounce()
|
||||||
|
{
|
||||||
|
_cache = new Cached<bool>();
|
||||||
|
_ttl = RuntimeInfo.IsProduction ? TimeSpan.FromHours(1) : TimeSpan.FromSeconds(10);
|
||||||
|
}
|
||||||
|
|
||||||
|
public bool Allowed(IEnumerable<string> fingerPrint)
|
||||||
|
{
|
||||||
|
var key = string.Join("|", fingerPrint);
|
||||||
|
var exists = _cache.Find(key);
|
||||||
|
|
||||||
|
if (exists)
|
||||||
|
{
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
_cache.Set(key, true, _ttl);
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void Clear()
|
||||||
|
{
|
||||||
|
_cache.Clear();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,27 @@
|
|||||||
|
using Newtonsoft.Json.Linq;
|
||||||
|
|
||||||
|
namespace NzbDrone.Common.Instrumentation.Sentry
|
||||||
|
{
|
||||||
|
public class SentryPacketCleanser
|
||||||
|
{
|
||||||
|
public void CleansePacket(RadarrSentryPacket packet)
|
||||||
|
{
|
||||||
|
packet.Message = CleanseLogMessage.Cleanse(packet.Message);
|
||||||
|
|
||||||
|
if (packet.Fingerprint != null)
|
||||||
|
{
|
||||||
|
for (var i = 0; i < packet.Fingerprint.Length; i++)
|
||||||
|
{
|
||||||
|
packet.Fingerprint[i] = CleanseLogMessage.Cleanse(packet.Fingerprint[i]);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (packet.Extra != null)
|
||||||
|
{
|
||||||
|
var target = JObject.FromObject(packet.Extra);
|
||||||
|
new CleansingJsonVisitor().Visit(target);
|
||||||
|
packet.Extra = target;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,268 @@
|
|||||||
|
using System;
|
||||||
|
using System.Collections;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.Data.SQLite;
|
||||||
|
using System.Linq;
|
||||||
|
using System.Net;
|
||||||
|
using System.Threading;
|
||||||
|
using NLog;
|
||||||
|
using NLog.Common;
|
||||||
|
using NLog.Targets;
|
||||||
|
using NzbDrone.Common.EnvironmentInfo;
|
||||||
|
using SharpRaven;
|
||||||
|
using SharpRaven.Data;
|
||||||
|
|
||||||
|
namespace NzbDrone.Common.Instrumentation.Sentry
|
||||||
|
{
|
||||||
|
[Target("Sentry")]
|
||||||
|
public class SentryTarget : TargetWithLayout
|
||||||
|
{
|
||||||
|
private readonly RavenClient _client;
|
||||||
|
|
||||||
|
// don't report uninformative SQLite exceptions
|
||||||
|
// busy/locked are benign https://forums.sonarr.tv/t/owin-sqlite-error-5-database-is-locked/5423/11
|
||||||
|
// The others will be user configuration problems and silt up Sentry
|
||||||
|
private static readonly HashSet<SQLiteErrorCode> FilteredSQLiteErrors = new HashSet<SQLiteErrorCode>
|
||||||
|
{
|
||||||
|
SQLiteErrorCode.Busy,
|
||||||
|
SQLiteErrorCode.Locked,
|
||||||
|
SQLiteErrorCode.Perm,
|
||||||
|
SQLiteErrorCode.ReadOnly,
|
||||||
|
SQLiteErrorCode.IoErr,
|
||||||
|
SQLiteErrorCode.Corrupt,
|
||||||
|
SQLiteErrorCode.Full,
|
||||||
|
SQLiteErrorCode.CantOpen,
|
||||||
|
SQLiteErrorCode.Auth
|
||||||
|
};
|
||||||
|
|
||||||
|
// use string and not Type so we don't need a reference to the project
|
||||||
|
// where these are defined
|
||||||
|
private static readonly HashSet<string> FilteredExceptionTypeNames = new HashSet<string>
|
||||||
|
{
|
||||||
|
// UnauthorizedAccessExceptions will just be user configuration issues
|
||||||
|
"UnauthorizedAccessException",
|
||||||
|
|
||||||
|
// Filter out people stuck in boot loops
|
||||||
|
"CorruptDatabaseException",
|
||||||
|
|
||||||
|
// This also filters some people in boot loops
|
||||||
|
"TinyIoCResolutionException"
|
||||||
|
};
|
||||||
|
|
||||||
|
public static readonly List<string> FilteredExceptionMessages = new List<string>
|
||||||
|
{
|
||||||
|
// Swallow the many, many exceptions flowing through from Jackett
|
||||||
|
"Jackett.Common.IndexerException",
|
||||||
|
|
||||||
|
// Fix openflixr being stupid with permissions
|
||||||
|
"openflixr"
|
||||||
|
};
|
||||||
|
|
||||||
|
// exception types in this list will additionally have the exception message added to the
|
||||||
|
// sentry fingerprint. Make sure that this message doesn't vary by exception
|
||||||
|
// (e.g. containing a path or a url) so that the sentry grouping is sensible
|
||||||
|
private static readonly HashSet<string> IncludeExceptionMessageTypes = new HashSet<string>
|
||||||
|
{
|
||||||
|
"SQLiteException"
|
||||||
|
};
|
||||||
|
|
||||||
|
private static readonly IDictionary<LogLevel, ErrorLevel> LoggingLevelMap = new Dictionary<LogLevel, ErrorLevel>
|
||||||
|
{
|
||||||
|
{LogLevel.Debug, ErrorLevel.Debug},
|
||||||
|
{LogLevel.Error, ErrorLevel.Error},
|
||||||
|
{LogLevel.Fatal, ErrorLevel.Fatal},
|
||||||
|
{LogLevel.Info, ErrorLevel.Info},
|
||||||
|
{LogLevel.Trace, ErrorLevel.Debug},
|
||||||
|
{LogLevel.Warn, ErrorLevel.Warning},
|
||||||
|
};
|
||||||
|
|
||||||
|
private readonly SentryDebounce _debounce;
|
||||||
|
private bool _unauthorized;
|
||||||
|
|
||||||
|
public bool FilterEvents { get; set; }
|
||||||
|
|
||||||
|
|
||||||
|
public SentryTarget(string dsn)
|
||||||
|
{
|
||||||
|
_client = new RavenClient(new Dsn(dsn), new RadarrJsonPacketFactory(), new SentryRequestFactory(), new MachineNameUserFactory())
|
||||||
|
{
|
||||||
|
Compression = true,
|
||||||
|
Environment = RuntimeInfo.IsProduction ? "production" : "development",
|
||||||
|
Release = BuildInfo.Release,
|
||||||
|
ErrorOnCapture = OnError
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
_client.Tags.Add("osfamily", OsInfo.Os.ToString());
|
||||||
|
_client.Tags.Add("runtime", PlatformInfo.PlatformName);
|
||||||
|
_client.Tags.Add("culture", Thread.CurrentThread.CurrentCulture.Name);
|
||||||
|
_client.Tags.Add("branch", BuildInfo.Branch);
|
||||||
|
_client.Tags.Add("version", BuildInfo.Version.ToString());
|
||||||
|
|
||||||
|
_debounce = new SentryDebounce();
|
||||||
|
|
||||||
|
FilterEvents = true;
|
||||||
|
}
|
||||||
|
|
||||||
|
private void OnError(Exception ex)
|
||||||
|
{
|
||||||
|
var webException = ex as WebException;
|
||||||
|
|
||||||
|
if (webException != null)
|
||||||
|
{
|
||||||
|
var response = webException.Response as HttpWebResponse;
|
||||||
|
var statusCode = response?.StatusCode;
|
||||||
|
if (statusCode == HttpStatusCode.Unauthorized)
|
||||||
|
{
|
||||||
|
_unauthorized = true;
|
||||||
|
_debounce.Clear();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
InternalLogger.Error(ex, "Unable to send error to Sentry");
|
||||||
|
}
|
||||||
|
|
||||||
|
private static List<string> GetFingerPrint(LogEventInfo logEvent)
|
||||||
|
{
|
||||||
|
if (logEvent.Properties.ContainsKey("Sentry"))
|
||||||
|
{
|
||||||
|
return ((string[])logEvent.Properties["Sentry"]).ToList();
|
||||||
|
}
|
||||||
|
|
||||||
|
var fingerPrint = new List<string>
|
||||||
|
{
|
||||||
|
logEvent.Level.Ordinal.ToString(),
|
||||||
|
logEvent.LoggerName,
|
||||||
|
logEvent.Message
|
||||||
|
};
|
||||||
|
|
||||||
|
var ex = logEvent.Exception;
|
||||||
|
|
||||||
|
if (ex != null)
|
||||||
|
{
|
||||||
|
fingerPrint.Add(ex.GetType().FullName);
|
||||||
|
fingerPrint.Add(ex.TargetSite.ToString());
|
||||||
|
if (ex.InnerException != null)
|
||||||
|
{
|
||||||
|
fingerPrint.Add(ex.InnerException.GetType().FullName);
|
||||||
|
}
|
||||||
|
else if (IncludeExceptionMessageTypes.Contains(ex.GetType().Name))
|
||||||
|
{
|
||||||
|
fingerPrint.Add(ex?.Message);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return fingerPrint;
|
||||||
|
}
|
||||||
|
|
||||||
|
private bool IsSentryMessage(LogEventInfo logEvent)
|
||||||
|
{
|
||||||
|
if (logEvent.Properties.ContainsKey("Sentry"))
|
||||||
|
{
|
||||||
|
return logEvent.Properties["Sentry"] != null;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (logEvent.Level >= LogLevel.Error && logEvent.Exception != null)
|
||||||
|
{
|
||||||
|
if (FilterEvents)
|
||||||
|
{
|
||||||
|
var sqlEx = logEvent.Exception as SQLiteException;
|
||||||
|
if (sqlEx != null && FilteredSQLiteErrors.Contains(sqlEx.ResultCode))
|
||||||
|
{
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (FilteredExceptionTypeNames.Contains(logEvent.Exception.GetType().Name))
|
||||||
|
{
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (FilteredExceptionMessages.Any(x => logEvent.Exception.Message.Contains(x)))
|
||||||
|
{
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
protected override void Write(LogEventInfo logEvent)
|
||||||
|
{
|
||||||
|
if (_unauthorized)
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
try
|
||||||
|
{
|
||||||
|
// don't report non-critical events without exceptions
|
||||||
|
if (!IsSentryMessage(logEvent))
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
var fingerPrint = GetFingerPrint(logEvent);
|
||||||
|
if (!_debounce.Allowed(fingerPrint))
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
var extras = logEvent.Properties.ToDictionary(x => x.Key.ToString(), x => x.Value.ToString());
|
||||||
|
extras.Remove("Sentry");
|
||||||
|
_client.Logger = logEvent.LoggerName;
|
||||||
|
|
||||||
|
if (logEvent.Exception != null)
|
||||||
|
{
|
||||||
|
foreach (DictionaryEntry data in logEvent.Exception.Data)
|
||||||
|
{
|
||||||
|
extras.Add(data.Key.ToString(), data.Value.ToString());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
var sentryMessage = new SentryMessage(logEvent.Message, logEvent.Parameters);
|
||||||
|
|
||||||
|
var sentryEvent = new SentryEvent(logEvent.Exception)
|
||||||
|
{
|
||||||
|
Level = LoggingLevelMap[logEvent.Level],
|
||||||
|
Message = sentryMessage,
|
||||||
|
Extra = extras,
|
||||||
|
Fingerprint =
|
||||||
|
{
|
||||||
|
logEvent.Level.ToString(),
|
||||||
|
logEvent.LoggerName,
|
||||||
|
logEvent.Message
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
if (logEvent.Exception != null)
|
||||||
|
{
|
||||||
|
sentryEvent.Fingerprint.Add(logEvent.Exception.GetType().FullName);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (logEvent.Properties.ContainsKey("Sentry"))
|
||||||
|
{
|
||||||
|
sentryEvent.Fingerprint.Clear();
|
||||||
|
Array.ForEach((string[])logEvent.Properties["Sentry"], sentryEvent.Fingerprint.Add);
|
||||||
|
}
|
||||||
|
|
||||||
|
var osName = Environment.GetEnvironmentVariable("OS_NAME");
|
||||||
|
var osVersion = Environment.GetEnvironmentVariable("OS_VERSION");
|
||||||
|
var runTimeVersion = Environment.GetEnvironmentVariable("RUNTIME_VERSION");
|
||||||
|
|
||||||
|
sentryEvent.Tags.Add("os_name", osName);
|
||||||
|
sentryEvent.Tags.Add("os_version", $"{osName} {osVersion}");
|
||||||
|
sentryEvent.Tags.Add("runtime_version", $"{PlatformInfo.PlatformName} {runTimeVersion}");
|
||||||
|
|
||||||
|
_client.Capture(sentryEvent);
|
||||||
|
}
|
||||||
|
catch (Exception e)
|
||||||
|
{
|
||||||
|
OnError(e);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -39,9 +39,8 @@
|
|||||||
<WarningLevel>4</WarningLevel>
|
<WarningLevel>4</WarningLevel>
|
||||||
</PropertyGroup>
|
</PropertyGroup>
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<Reference Include="Newtonsoft.Json, Version=6.0.0.0, Culture=neutral, PublicKeyToken=30ad4fe6b2a6aeed, processorArchitecture=MSIL">
|
<Reference Include="Newtonsoft.Json, Version=9.0.0.0, Culture=neutral, PublicKeyToken=30ad4fe6b2a6aeed, processorArchitecture=MSIL">
|
||||||
<SpecificVersion>False</SpecificVersion>
|
<HintPath>..\packages\Newtonsoft.Json.9.0.1\lib\net40\Newtonsoft.Json.dll</HintPath>
|
||||||
<HintPath>..\packages\Newtonsoft.Json.6.0.6\lib\net40\Newtonsoft.Json.dll</HintPath>
|
|
||||||
</Reference>
|
</Reference>
|
||||||
<Reference Include="NLog, Version=4.0.0.0, Culture=neutral, PublicKeyToken=5120e14c03d0593c, processorArchitecture=MSIL">
|
<Reference Include="NLog, Version=4.0.0.0, Culture=neutral, PublicKeyToken=5120e14c03d0593c, processorArchitecture=MSIL">
|
||||||
<HintPath>..\packages\NLog.4.5.0-rc06\lib\net40-client\NLog.dll</HintPath>
|
<HintPath>..\packages\NLog.4.5.0-rc06\lib\net40-client\NLog.dll</HintPath>
|
||||||
@@ -50,6 +49,9 @@
|
|||||||
<HintPath>..\packages\DotNet4.SocksProxy.1.3.2.0\lib\net40\Org.Mentalis.dll</HintPath>
|
<HintPath>..\packages\DotNet4.SocksProxy.1.3.2.0\lib\net40\Org.Mentalis.dll</HintPath>
|
||||||
<Private>True</Private>
|
<Private>True</Private>
|
||||||
</Reference>
|
</Reference>
|
||||||
|
<Reference Include="SharpRaven, Version=2.4.0.0, Culture=neutral, processorArchitecture=MSIL">
|
||||||
|
<HintPath>..\packages\SharpRaven.2.4.0\lib\net40\SharpRaven.dll</HintPath>
|
||||||
|
</Reference>
|
||||||
<Reference Include="SocksWebProxy, Version=1.3.2.0, Culture=neutral, processorArchitecture=MSIL">
|
<Reference Include="SocksWebProxy, Version=1.3.2.0, Culture=neutral, processorArchitecture=MSIL">
|
||||||
<HintPath>..\packages\DotNet4.SocksProxy.1.3.2.0\lib\net40\SocksWebProxy.dll</HintPath>
|
<HintPath>..\packages\DotNet4.SocksProxy.1.3.2.0\lib\net40\SocksWebProxy.dll</HintPath>
|
||||||
<Private>True</Private>
|
<Private>True</Private>
|
||||||
@@ -57,6 +59,9 @@
|
|||||||
<Reference Include="System" />
|
<Reference Include="System" />
|
||||||
<Reference Include="System.Configuration" />
|
<Reference Include="System.Configuration" />
|
||||||
<Reference Include="System.Configuration.Install" />
|
<Reference Include="System.Configuration.Install" />
|
||||||
|
<Reference Include="System.Data.SQLite">
|
||||||
|
<HintPath>..\Libraries\Sqlite\System.Data.SQLite.dll</HintPath>
|
||||||
|
</Reference>
|
||||||
<Reference Include="System.Core" />
|
<Reference Include="System.Core" />
|
||||||
<Reference Include="System.Data" />
|
<Reference Include="System.Data" />
|
||||||
<Reference Include="System.Drawing" />
|
<Reference Include="System.Drawing" />
|
||||||
@@ -199,11 +204,18 @@
|
|||||||
<Compile Include="Http\UnexpectedHtmlContentException.cs" />
|
<Compile Include="Http\UnexpectedHtmlContentException.cs" />
|
||||||
<Compile Include="Http\UserAgentBuilder.cs" />
|
<Compile Include="Http\UserAgentBuilder.cs" />
|
||||||
<Compile Include="Instrumentation\CleanseLogMessage.cs" />
|
<Compile Include="Instrumentation\CleanseLogMessage.cs" />
|
||||||
|
<Compile Include="Instrumentation\CleansingJsonVisitor.cs" />
|
||||||
<Compile Include="Instrumentation\Extensions\LoggerProgressExtensions.cs" />
|
<Compile Include="Instrumentation\Extensions\LoggerProgressExtensions.cs" />
|
||||||
<Compile Include="Instrumentation\GlobalExceptionHandlers.cs" />
|
<Compile Include="Instrumentation\GlobalExceptionHandlers.cs" />
|
||||||
<Compile Include="Instrumentation\LogEventExtensions.cs" />
|
<Compile Include="Instrumentation\LogEventExtensions.cs" />
|
||||||
<Compile Include="Instrumentation\NzbDroneFileTarget.cs" />
|
<Compile Include="Instrumentation\NzbDroneFileTarget.cs" />
|
||||||
<Compile Include="Instrumentation\NzbDroneLogger.cs" />
|
<Compile Include="Instrumentation\NzbDroneLogger.cs" />
|
||||||
|
<Compile Include="Instrumentation\Sentry\MachineNameUserFactory.cs" />
|
||||||
|
<Compile Include="Instrumentation\Sentry\RadarrJsonPacketFactory.cs" />
|
||||||
|
<Compile Include="Instrumentation\Sentry\RadarrSentryPacket.cs" />
|
||||||
|
<Compile Include="Instrumentation\Sentry\SentryDebounce.cs" />
|
||||||
|
<Compile Include="Instrumentation\Sentry\SentryPacketCleanser.cs" />
|
||||||
|
<Compile Include="Instrumentation\Sentry\SentryTarget.cs" />
|
||||||
<Compile Include="Instrumentation\VersionLayoutRenderer.cs" />
|
<Compile Include="Instrumentation\VersionLayoutRenderer.cs" />
|
||||||
<Compile Include="Extensions\LevenstheinExtensions.cs" />
|
<Compile Include="Extensions\LevenstheinExtensions.cs" />
|
||||||
<Compile Include="Messaging\IEvent.cs" />
|
<Compile Include="Messaging\IEvent.cs" />
|
||||||
@@ -224,6 +236,7 @@
|
|||||||
<Compile Include="Serializer\HttpUriConverter.cs" />
|
<Compile Include="Serializer\HttpUriConverter.cs" />
|
||||||
<Compile Include="Serializer\IntConverter.cs" />
|
<Compile Include="Serializer\IntConverter.cs" />
|
||||||
<Compile Include="Serializer\Json.cs" />
|
<Compile Include="Serializer\Json.cs" />
|
||||||
|
<Compile Include="Serializer\JsonVisitor.cs" />
|
||||||
<Compile Include="Serializer\UnderscoreStringEnumConverter.cs" />
|
<Compile Include="Serializer\UnderscoreStringEnumConverter.cs" />
|
||||||
<Compile Include="ServiceFactory.cs" />
|
<Compile Include="ServiceFactory.cs" />
|
||||||
<Compile Include="ServiceProvider.cs" />
|
<Compile Include="ServiceProvider.cs" />
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
using System.Reflection;
|
using System.Reflection;
|
||||||
using System.Runtime.InteropServices;
|
using System.Runtime.InteropServices;
|
||||||
|
|
||||||
[assembly: AssemblyConfiguration("")]
|
[assembly: AssemblyConfiguration("debug")]
|
||||||
[assembly: AssemblyCompany("radarr.video")]
|
[assembly: AssemblyCompany("radarr.video")]
|
||||||
[assembly: AssemblyProduct("Radarr")]
|
[assembly: AssemblyProduct("Radarr")]
|
||||||
[assembly: AssemblyVersion("10.0.0.*")]
|
[assembly: AssemblyVersion("10.0.0.*")]
|
||||||
|
|||||||
@@ -0,0 +1,95 @@
|
|||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.Linq;
|
||||||
|
using System.Text;
|
||||||
|
using Newtonsoft.Json.Linq;
|
||||||
|
|
||||||
|
namespace NzbDrone.Common.Serializer
|
||||||
|
{
|
||||||
|
|
||||||
|
public class JsonVisitor
|
||||||
|
{
|
||||||
|
protected void Dispatch(JToken json)
|
||||||
|
{
|
||||||
|
switch (json.Type)
|
||||||
|
{
|
||||||
|
case JTokenType.Object:
|
||||||
|
Visit(json as JObject);
|
||||||
|
break;
|
||||||
|
|
||||||
|
case JTokenType.Array:
|
||||||
|
Visit(json as JArray);
|
||||||
|
break;
|
||||||
|
|
||||||
|
case JTokenType.Raw:
|
||||||
|
Visit(json as JRaw);
|
||||||
|
break;
|
||||||
|
|
||||||
|
case JTokenType.Constructor:
|
||||||
|
Visit(json as JConstructor);
|
||||||
|
break;
|
||||||
|
|
||||||
|
case JTokenType.Property:
|
||||||
|
Visit(json as JProperty);
|
||||||
|
break;
|
||||||
|
|
||||||
|
case JTokenType.Comment:
|
||||||
|
case JTokenType.Integer:
|
||||||
|
case JTokenType.Float:
|
||||||
|
case JTokenType.String:
|
||||||
|
case JTokenType.Boolean:
|
||||||
|
case JTokenType.Null:
|
||||||
|
case JTokenType.Undefined:
|
||||||
|
case JTokenType.Date:
|
||||||
|
case JTokenType.Bytes:
|
||||||
|
case JTokenType.Guid:
|
||||||
|
case JTokenType.Uri:
|
||||||
|
case JTokenType.TimeSpan:
|
||||||
|
Visit(json as JValue);
|
||||||
|
break;
|
||||||
|
|
||||||
|
default:
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public virtual void Visit(JToken json)
|
||||||
|
{
|
||||||
|
Dispatch(json);
|
||||||
|
}
|
||||||
|
|
||||||
|
public virtual void Visit(JContainer json)
|
||||||
|
{
|
||||||
|
Dispatch(json);
|
||||||
|
}
|
||||||
|
|
||||||
|
public virtual void Visit(JArray json)
|
||||||
|
{
|
||||||
|
foreach (JToken token in json)
|
||||||
|
{
|
||||||
|
Visit(token);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
public virtual void Visit(JConstructor json)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
public virtual void Visit(JObject json)
|
||||||
|
{
|
||||||
|
foreach (JProperty property in json.Properties())
|
||||||
|
{
|
||||||
|
Visit(property);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public virtual void Visit(JProperty property)
|
||||||
|
{
|
||||||
|
Visit(property.Value);
|
||||||
|
}
|
||||||
|
|
||||||
|
public virtual void Visit(JValue value)
|
||||||
|
{
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -4,7 +4,7 @@
|
|||||||
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
|
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
|
||||||
<dependentAssembly>
|
<dependentAssembly>
|
||||||
<assemblyIdentity name="Newtonsoft.Json" publicKeyToken="30ad4fe6b2a6aeed" culture="neutral" />
|
<assemblyIdentity name="Newtonsoft.Json" publicKeyToken="30ad4fe6b2a6aeed" culture="neutral" />
|
||||||
<bindingRedirect oldVersion="0.0.0.0-6.0.0.0" newVersion="6.0.0.0" />
|
<bindingRedirect oldVersion="0.0.0.0-9.0.0.0" newVersion="9.0.0.0" />
|
||||||
</dependentAssembly>
|
</dependentAssembly>
|
||||||
</assemblyBinding>
|
</assemblyBinding>
|
||||||
</runtime>
|
</runtime>
|
||||||
|
|||||||
@@ -2,7 +2,8 @@
|
|||||||
<packages>
|
<packages>
|
||||||
<package id="DotNet4.SocksProxy" version="1.3.2.0" targetFramework="net40" />
|
<package id="DotNet4.SocksProxy" version="1.3.2.0" targetFramework="net40" />
|
||||||
<package id="ICSharpCode.SharpZipLib.Patched" version="0.86.5" targetFramework="net40" />
|
<package id="ICSharpCode.SharpZipLib.Patched" version="0.86.5" targetFramework="net40" />
|
||||||
<package id="Newtonsoft.Json" version="6.0.6" targetFramework="net40" />
|
<package id="Newtonsoft.Json" version="9.0.1" targetFramework="net40" />
|
||||||
<package id="NLog" version="4.5.0-rc06" targetFramework="net40" />
|
<package id="NLog" version="4.5.0-rc06" targetFramework="net40" />
|
||||||
|
<package id="SharpRaven" version="2.4.0" targetFramework="net40" />
|
||||||
<package id="System.ValueTuple" version="4.5.0" targetFramework="net40" />
|
<package id="System.ValueTuple" version="4.5.0" targetFramework="net40" />
|
||||||
</packages>
|
</packages>
|
||||||
@@ -72,9 +72,8 @@
|
|||||||
<SpecificVersion>False</SpecificVersion>
|
<SpecificVersion>False</SpecificVersion>
|
||||||
<HintPath>..\packages\Microsoft.Owin.Hosting.2.1.0\lib\net40\Microsoft.Owin.Hosting.dll</HintPath>
|
<HintPath>..\packages\Microsoft.Owin.Hosting.2.1.0\lib\net40\Microsoft.Owin.Hosting.dll</HintPath>
|
||||||
</Reference>
|
</Reference>
|
||||||
<Reference Include="Newtonsoft.Json, Version=6.0.0.0, Culture=neutral, PublicKeyToken=30ad4fe6b2a6aeed, processorArchitecture=MSIL">
|
<Reference Include="Newtonsoft.Json, Version=9.0.0.0, Culture=neutral, PublicKeyToken=30ad4fe6b2a6aeed, processorArchitecture=MSIL">
|
||||||
<SpecificVersion>False</SpecificVersion>
|
<HintPath>..\packages\Newtonsoft.Json.9.0.1\lib\net40\Newtonsoft.Json.dll</HintPath>
|
||||||
<HintPath>..\packages\Newtonsoft.Json.6.0.6\lib\net40\Newtonsoft.Json.dll</HintPath>
|
|
||||||
</Reference>
|
</Reference>
|
||||||
<Reference Include="NLog, Version=4.0.0.0, Culture=neutral, PublicKeyToken=5120e14c03d0593c, processorArchitecture=MSIL">
|
<Reference Include="NLog, Version=4.0.0.0, Culture=neutral, PublicKeyToken=5120e14c03d0593c, processorArchitecture=MSIL">
|
||||||
<HintPath>..\packages\NLog.4.5.0-rc06\lib\net40-client\NLog.dll</HintPath>
|
<HintPath>..\packages\NLog.4.5.0-rc06\lib\net40-client\NLog.dll</HintPath>
|
||||||
|
|||||||
@@ -2,7 +2,7 @@
|
|||||||
<packages>
|
<packages>
|
||||||
<package id="Microsoft.Owin" version="2.1.0" targetFramework="net40" />
|
<package id="Microsoft.Owin" version="2.1.0" targetFramework="net40" />
|
||||||
<package id="Microsoft.Owin.Hosting" version="2.1.0" targetFramework="net40" />
|
<package id="Microsoft.Owin.Hosting" version="2.1.0" targetFramework="net40" />
|
||||||
<package id="Newtonsoft.Json" version="6.0.6" targetFramework="net40" />
|
<package id="Newtonsoft.Json" version="9.0.1" targetFramework="net40" />
|
||||||
<package id="NLog" version="4.5.0-rc06" targetFramework="net40" />
|
<package id="NLog" version="4.5.0-rc06" targetFramework="net40" />
|
||||||
<package id="Owin" version="1.0" targetFramework="net40" />
|
<package id="Owin" version="1.0" targetFramework="net40" />
|
||||||
</packages>
|
</packages>
|
||||||
@@ -80,9 +80,8 @@
|
|||||||
<HintPath>..\packages\Unity.2.1.505.2\lib\NET35\Microsoft.Practices.Unity.Configuration.dll</HintPath>
|
<HintPath>..\packages\Unity.2.1.505.2\lib\NET35\Microsoft.Practices.Unity.Configuration.dll</HintPath>
|
||||||
<Private>True</Private>
|
<Private>True</Private>
|
||||||
</Reference>
|
</Reference>
|
||||||
<Reference Include="Newtonsoft.Json, Version=6.0.0.0, Culture=neutral, PublicKeyToken=30ad4fe6b2a6aeed, processorArchitecture=MSIL">
|
<Reference Include="Newtonsoft.Json, Version=9.0.0.0, Culture=neutral, PublicKeyToken=30ad4fe6b2a6aeed, processorArchitecture=MSIL">
|
||||||
<SpecificVersion>False</SpecificVersion>
|
<HintPath>..\packages\Newtonsoft.Json.9.0.1\lib\net40\Newtonsoft.Json.dll</HintPath>
|
||||||
<HintPath>..\packages\Newtonsoft.Json.6.0.6\lib\net40\Newtonsoft.Json.dll</HintPath>
|
|
||||||
</Reference>
|
</Reference>
|
||||||
<Reference Include="NLog, Version=4.0.0.0, Culture=neutral, PublicKeyToken=5120e14c03d0593c, processorArchitecture=MSIL">
|
<Reference Include="NLog, Version=4.0.0.0, Culture=neutral, PublicKeyToken=5120e14c03d0593c, processorArchitecture=MSIL">
|
||||||
<HintPath>..\packages\NLog.4.5.0-rc06\lib\net40-client\NLog.dll</HintPath>
|
<HintPath>..\packages\NLog.4.5.0-rc06\lib\net40-client\NLog.dll</HintPath>
|
||||||
|
|||||||
@@ -9,7 +9,7 @@
|
|||||||
<package id="Moq" version="4.0.10827" />
|
<package id="Moq" version="4.0.10827" />
|
||||||
<package id="NBuilder" version="4.0.0" targetFramework="net40" />
|
<package id="NBuilder" version="4.0.0" targetFramework="net40" />
|
||||||
<package id="NCrunch.Framework" version="1.46.0.9" targetFramework="net40" />
|
<package id="NCrunch.Framework" version="1.46.0.9" targetFramework="net40" />
|
||||||
<package id="Newtonsoft.Json" version="6.0.6" targetFramework="net40" />
|
<package id="Newtonsoft.Json" version="9.0.1" targetFramework="net40" />
|
||||||
<package id="NLog" version="4.5.0-rc06" targetFramework="net40" />
|
<package id="NLog" version="4.5.0-rc06" targetFramework="net40" />
|
||||||
<package id="NUnit" version="3.5.0" targetFramework="net40" />
|
<package id="NUnit" version="3.5.0" targetFramework="net40" />
|
||||||
<package id="Prowlin" version="0.9.4456.26422" targetFramework="net40" />
|
<package id="Prowlin" version="0.9.4456.26422" targetFramework="net40" />
|
||||||
|
|||||||
@@ -5,7 +5,7 @@
|
|||||||
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
|
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
|
||||||
<dependentAssembly>
|
<dependentAssembly>
|
||||||
<assemblyIdentity name="Newtonsoft.Json" publicKeyToken="30ad4fe6b2a6aeed" culture="neutral" />
|
<assemblyIdentity name="Newtonsoft.Json" publicKeyToken="30ad4fe6b2a6aeed" culture="neutral" />
|
||||||
<bindingRedirect oldVersion="0.0.0.0-6.0.0.0" newVersion="6.0.0.0" />
|
<bindingRedirect oldVersion="0.0.0.0-9.0.0.0" newVersion="9.0.0.0" />
|
||||||
</dependentAssembly>
|
</dependentAssembly>
|
||||||
<dependentAssembly>
|
<dependentAssembly>
|
||||||
<assemblyIdentity name="FluentMigrator" publicKeyToken="aacfc7de5acabf05" culture="neutral" />
|
<assemblyIdentity name="FluentMigrator" publicKeyToken="aacfc7de5acabf05" culture="neutral" />
|
||||||
|
|||||||
@@ -76,9 +76,8 @@
|
|||||||
<SpecificVersion>False</SpecificVersion>
|
<SpecificVersion>False</SpecificVersion>
|
||||||
<HintPath>..\packages\ImageResizer.3.4.3\lib\ImageResizer.dll</HintPath>
|
<HintPath>..\packages\ImageResizer.3.4.3\lib\ImageResizer.dll</HintPath>
|
||||||
</Reference>
|
</Reference>
|
||||||
<Reference Include="Newtonsoft.Json, Version=6.0.0.0, Culture=neutral, PublicKeyToken=30ad4fe6b2a6aeed, processorArchitecture=MSIL">
|
<Reference Include="Newtonsoft.Json, Version=9.0.0.0, Culture=neutral, PublicKeyToken=30ad4fe6b2a6aeed, processorArchitecture=MSIL">
|
||||||
<SpecificVersion>False</SpecificVersion>
|
<HintPath>..\packages\Newtonsoft.Json.9.0.1\lib\net40\Newtonsoft.Json.dll</HintPath>
|
||||||
<HintPath>..\packages\Newtonsoft.Json.6.0.6\lib\net40\Newtonsoft.Json.dll</HintPath>
|
|
||||||
</Reference>
|
</Reference>
|
||||||
<Reference Include="NLog, Version=4.0.0.0, Culture=neutral, PublicKeyToken=5120e14c03d0593c, processorArchitecture=MSIL">
|
<Reference Include="NLog, Version=4.0.0.0, Culture=neutral, PublicKeyToken=5120e14c03d0593c, processorArchitecture=MSIL">
|
||||||
<HintPath>..\packages\NLog.4.5.0-rc06\lib\net40-client\NLog.dll</HintPath>
|
<HintPath>..\packages\NLog.4.5.0-rc06\lib\net40-client\NLog.dll</HintPath>
|
||||||
|
|||||||
@@ -4,7 +4,7 @@
|
|||||||
<package id="FluentMigrator.Runner" version="1.6.2" targetFramework="net40" />
|
<package id="FluentMigrator.Runner" version="1.6.2" targetFramework="net40" />
|
||||||
<package id="FluentValidation" version="6.2.1.0" targetFramework="net40" />
|
<package id="FluentValidation" version="6.2.1.0" targetFramework="net40" />
|
||||||
<package id="ImageResizer" version="3.4.3" targetFramework="net40" />
|
<package id="ImageResizer" version="3.4.3" targetFramework="net40" />
|
||||||
<package id="Newtonsoft.Json" version="6.0.6" targetFramework="net40" />
|
<package id="Newtonsoft.Json" version="9.0.1" targetFramework="net40" />
|
||||||
<package id="NLog" version="4.5.0-rc06" targetFramework="net40" />
|
<package id="NLog" version="4.5.0-rc06" targetFramework="net40" />
|
||||||
<package id="OAuth" version="1.0.3" targetFramework="net40" />
|
<package id="OAuth" version="1.0.3" targetFramework="net40" />
|
||||||
<package id="Prowlin" version="0.9.4456.26422" targetFramework="net40" />
|
<package id="Prowlin" version="0.9.4456.26422" targetFramework="net40" />
|
||||||
|
|||||||
@@ -81,9 +81,8 @@
|
|||||||
<HintPath>..\packages\Nancy.Owin.1.4.1\lib\net40\Nancy.Owin.dll</HintPath>
|
<HintPath>..\packages\Nancy.Owin.1.4.1\lib\net40\Nancy.Owin.dll</HintPath>
|
||||||
<Private>True</Private>
|
<Private>True</Private>
|
||||||
</Reference>
|
</Reference>
|
||||||
<Reference Include="Newtonsoft.Json, Version=6.0.0.0, Culture=neutral, PublicKeyToken=30ad4fe6b2a6aeed, processorArchitecture=MSIL">
|
<Reference Include="Newtonsoft.Json, Version=9.0.0.0, Culture=neutral, PublicKeyToken=30ad4fe6b2a6aeed, processorArchitecture=MSIL">
|
||||||
<SpecificVersion>False</SpecificVersion>
|
<HintPath>..\packages\Newtonsoft.Json.9.0.1\lib\net40\Newtonsoft.Json.dll</HintPath>
|
||||||
<HintPath>..\packages\Newtonsoft.Json.6.0.6\lib\net40\Newtonsoft.Json.dll</HintPath>
|
|
||||||
</Reference>
|
</Reference>
|
||||||
<Reference Include="NLog, Version=4.0.0.0, Culture=neutral, PublicKeyToken=5120e14c03d0593c, processorArchitecture=MSIL">
|
<Reference Include="NLog, Version=4.0.0.0, Culture=neutral, PublicKeyToken=5120e14c03d0593c, processorArchitecture=MSIL">
|
||||||
<HintPath>..\packages\NLog.4.5.0-rc06\lib\net40-client\NLog.dll</HintPath>
|
<HintPath>..\packages\NLog.4.5.0-rc06\lib\net40-client\NLog.dll</HintPath>
|
||||||
|
|||||||
@@ -14,7 +14,7 @@
|
|||||||
<probing privatePath="libs" />
|
<probing privatePath="libs" />
|
||||||
<dependentAssembly>
|
<dependentAssembly>
|
||||||
<assemblyIdentity name="Newtonsoft.Json" publicKeyToken="30ad4fe6b2a6aeed" culture="neutral" />
|
<assemblyIdentity name="Newtonsoft.Json" publicKeyToken="30ad4fe6b2a6aeed" culture="neutral" />
|
||||||
<bindingRedirect oldVersion="0.0.0.0-6.0.0.0" newVersion="6.0.0.0" />
|
<bindingRedirect oldVersion="0.0.0.0-9.0.0.0" newVersion="9.0.0.0" />
|
||||||
</dependentAssembly>
|
</dependentAssembly>
|
||||||
<dependentAssembly>
|
<dependentAssembly>
|
||||||
<assemblyIdentity name="NLog" publicKeyToken="5120e14c03d0593c" culture="neutral" />
|
<assemblyIdentity name="NLog" publicKeyToken="5120e14c03d0593c" culture="neutral" />
|
||||||
|
|||||||
@@ -5,7 +5,7 @@
|
|||||||
<package id="Microsoft.Owin.Hosting" version="2.1.0" targetFramework="net40" />
|
<package id="Microsoft.Owin.Hosting" version="2.1.0" targetFramework="net40" />
|
||||||
<package id="Nancy" version="1.4.3" targetFramework="net40" />
|
<package id="Nancy" version="1.4.3" targetFramework="net40" />
|
||||||
<package id="Nancy.Owin" version="1.4.1" targetFramework="net40" />
|
<package id="Nancy.Owin" version="1.4.1" targetFramework="net40" />
|
||||||
<package id="Newtonsoft.Json" version="6.0.6" targetFramework="net40" />
|
<package id="Newtonsoft.Json" version="9.0.1" targetFramework="net40" />
|
||||||
<package id="NLog" version="4.5.0-rc06" targetFramework="net40" />
|
<package id="NLog" version="4.5.0-rc06" targetFramework="net40" />
|
||||||
<package id="Owin" version="1.0" targetFramework="net40" />
|
<package id="Owin" version="1.0" targetFramework="net40" />
|
||||||
</packages>
|
</packages>
|
||||||
@@ -72,9 +72,8 @@
|
|||||||
<HintPath>..\packages\Nancy.Owin.1.4.1\lib\net40\Nancy.Owin.dll</HintPath>
|
<HintPath>..\packages\Nancy.Owin.1.4.1\lib\net40\Nancy.Owin.dll</HintPath>
|
||||||
<Private>True</Private>
|
<Private>True</Private>
|
||||||
</Reference>
|
</Reference>
|
||||||
<Reference Include="Newtonsoft.Json, Version=6.0.0.0, Culture=neutral, PublicKeyToken=30ad4fe6b2a6aeed, processorArchitecture=MSIL">
|
<Reference Include="Newtonsoft.Json, Version=9.0.0.0, Culture=neutral, PublicKeyToken=30ad4fe6b2a6aeed, processorArchitecture=MSIL">
|
||||||
<SpecificVersion>False</SpecificVersion>
|
<HintPath>..\packages\Newtonsoft.Json.9.0.1\lib\net40\Newtonsoft.Json.dll</HintPath>
|
||||||
<HintPath>..\packages\Newtonsoft.Json.6.0.6\lib\net40\Newtonsoft.Json.dll</HintPath>
|
|
||||||
</Reference>
|
</Reference>
|
||||||
<Reference Include="NLog, Version=4.0.0.0, Culture=neutral, PublicKeyToken=5120e14c03d0593c, processorArchitecture=MSIL">
|
<Reference Include="NLog, Version=4.0.0.0, Culture=neutral, PublicKeyToken=5120e14c03d0593c, processorArchitecture=MSIL">
|
||||||
<HintPath>..\packages\NLog.4.5.0-rc06\lib\net40-client\NLog.dll</HintPath>
|
<HintPath>..\packages\NLog.4.5.0-rc06\lib\net40-client\NLog.dll</HintPath>
|
||||||
|
|||||||
@@ -9,7 +9,7 @@
|
|||||||
<package id="Moq" version="4.0.10827" targetFramework="net40" />
|
<package id="Moq" version="4.0.10827" targetFramework="net40" />
|
||||||
<package id="Nancy" version="1.4.3" targetFramework="net40" />
|
<package id="Nancy" version="1.4.3" targetFramework="net40" />
|
||||||
<package id="Nancy.Owin" version="1.4.1" targetFramework="net40" />
|
<package id="Nancy.Owin" version="1.4.1" targetFramework="net40" />
|
||||||
<package id="Newtonsoft.Json" version="6.0.6" targetFramework="net40" />
|
<package id="Newtonsoft.Json" version="9.0.1" targetFramework="net40" />
|
||||||
<package id="NLog" version="4.5.0-rc06" targetFramework="net40" />
|
<package id="NLog" version="4.5.0-rc06" targetFramework="net40" />
|
||||||
<package id="NUnit" version="3.5.0" targetFramework="net40" />
|
<package id="NUnit" version="3.5.0" targetFramework="net40" />
|
||||||
<package id="Owin" version="1.0" targetFramework="net40" />
|
<package id="Owin" version="1.0" targetFramework="net40" />
|
||||||
|
|||||||
@@ -46,9 +46,8 @@
|
|||||||
<HintPath>..\packages\FluentAssertions.4.18.0\lib\net40\FluentAssertions.Core.dll</HintPath>
|
<HintPath>..\packages\FluentAssertions.4.18.0\lib\net40\FluentAssertions.Core.dll</HintPath>
|
||||||
<Private>True</Private>
|
<Private>True</Private>
|
||||||
</Reference>
|
</Reference>
|
||||||
<Reference Include="Newtonsoft.Json, Version=6.0.0.0, Culture=neutral, PublicKeyToken=30ad4fe6b2a6aeed, processorArchitecture=MSIL">
|
<Reference Include="Newtonsoft.Json, Version=9.0.0.0, Culture=neutral, PublicKeyToken=30ad4fe6b2a6aeed, processorArchitecture=MSIL">
|
||||||
<SpecificVersion>False</SpecificVersion>
|
<HintPath>..\packages\Newtonsoft.Json.9.0.1\lib\net40\Newtonsoft.Json.dll</HintPath>
|
||||||
<HintPath>..\packages\Newtonsoft.Json.6.0.6\lib\net40\Newtonsoft.Json.dll</HintPath>
|
|
||||||
</Reference>
|
</Reference>
|
||||||
<Reference Include="nunit.framework, Version=3.5.0.0, Culture=neutral, PublicKeyToken=2638cd05610744eb, processorArchitecture=MSIL">
|
<Reference Include="nunit.framework, Version=3.5.0.0, Culture=neutral, PublicKeyToken=2638cd05610744eb, processorArchitecture=MSIL">
|
||||||
<HintPath>..\packages\NUnit.3.5.0\lib\net40\nunit.framework.dll</HintPath>
|
<HintPath>..\packages\NUnit.3.5.0\lib\net40\nunit.framework.dll</HintPath>
|
||||||
|
|||||||
@@ -4,7 +4,7 @@
|
|||||||
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
|
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
|
||||||
<dependentAssembly>
|
<dependentAssembly>
|
||||||
<assemblyIdentity name="Newtonsoft.Json" publicKeyToken="30ad4fe6b2a6aeed" culture="neutral" />
|
<assemblyIdentity name="Newtonsoft.Json" publicKeyToken="30ad4fe6b2a6aeed" culture="neutral" />
|
||||||
<bindingRedirect oldVersion="0.0.0.0-6.0.0.0" newVersion="6.0.0.0" />
|
<bindingRedirect oldVersion="0.0.0.0-9.0.0.0" newVersion="9.0.0.0" />
|
||||||
</dependentAssembly>
|
</dependentAssembly>
|
||||||
<dependentAssembly>
|
<dependentAssembly>
|
||||||
<assemblyIdentity name="FluentMigrator" publicKeyToken="aacfc7de5acabf05" culture="neutral" />
|
<assemblyIdentity name="FluentMigrator" publicKeyToken="aacfc7de5acabf05" culture="neutral" />
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
<?xml version="1.0" encoding="utf-8"?>
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
<packages>
|
<packages>
|
||||||
<package id="FluentAssertions" version="4.18.0" targetFramework="net40" />
|
<package id="FluentAssertions" version="4.18.0" targetFramework="net40" />
|
||||||
<package id="Newtonsoft.Json" version="6.0.6" targetFramework="net40" />
|
<package id="Newtonsoft.Json" version="9.0.1" targetFramework="net40" />
|
||||||
<package id="NUnit" version="3.5.0" targetFramework="net40" />
|
<package id="NUnit" version="3.5.0" targetFramework="net40" />
|
||||||
</packages>
|
</packages>
|
||||||
@@ -8,7 +8,7 @@
|
|||||||
</dependentAssembly>
|
</dependentAssembly>
|
||||||
<dependentAssembly>
|
<dependentAssembly>
|
||||||
<assemblyIdentity name="Newtonsoft.Json" publicKeyToken="30ad4fe6b2a6aeed" culture="neutral" />
|
<assemblyIdentity name="Newtonsoft.Json" publicKeyToken="30ad4fe6b2a6aeed" culture="neutral" />
|
||||||
<bindingRedirect oldVersion="0.0.0.0-6.0.0.0" newVersion="6.0.0.0" />
|
<bindingRedirect oldVersion="0.0.0.0-9.0.0.0" newVersion="9.0.0.0" />
|
||||||
</dependentAssembly>
|
</dependentAssembly>
|
||||||
<dependentAssembly>
|
<dependentAssembly>
|
||||||
<assemblyIdentity name="FluentMigrator" publicKeyToken="aacfc7de5acabf05" culture="neutral" />
|
<assemblyIdentity name="FluentMigrator" publicKeyToken="aacfc7de5acabf05" culture="neutral" />
|
||||||
|
|||||||
@@ -38,9 +38,8 @@
|
|||||||
<WarningLevel>4</WarningLevel>
|
<WarningLevel>4</WarningLevel>
|
||||||
</PropertyGroup>
|
</PropertyGroup>
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<Reference Include="Newtonsoft.Json, Version=6.0.0.0, Culture=neutral, PublicKeyToken=30ad4fe6b2a6aeed, processorArchitecture=MSIL">
|
<Reference Include="Newtonsoft.Json, Version=9.0.0.0, Culture=neutral, PublicKeyToken=30ad4fe6b2a6aeed, processorArchitecture=MSIL">
|
||||||
<SpecificVersion>False</SpecificVersion>
|
<HintPath>..\packages\Newtonsoft.Json.9.0.1\lib\net40\Newtonsoft.Json.dll</HintPath>
|
||||||
<HintPath>..\packages\Newtonsoft.Json.6.0.6\lib\net40\Newtonsoft.Json.dll</HintPath>
|
|
||||||
</Reference>
|
</Reference>
|
||||||
<Reference Include="System" />
|
<Reference Include="System" />
|
||||||
<Reference Include="System.Core" />
|
<Reference Include="System.Core" />
|
||||||
|
|||||||
@@ -4,7 +4,7 @@
|
|||||||
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
|
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
|
||||||
<dependentAssembly>
|
<dependentAssembly>
|
||||||
<assemblyIdentity name="Newtonsoft.Json" publicKeyToken="30ad4fe6b2a6aeed" culture="neutral" />
|
<assemblyIdentity name="Newtonsoft.Json" publicKeyToken="30ad4fe6b2a6aeed" culture="neutral" />
|
||||||
<bindingRedirect oldVersion="0.0.0.0-6.0.0.0" newVersion="6.0.0.0" />
|
<bindingRedirect oldVersion="0.0.0.0-9.0.0.0" newVersion="9.0.0.0" />
|
||||||
</dependentAssembly>
|
</dependentAssembly>
|
||||||
<dependentAssembly>
|
<dependentAssembly>
|
||||||
<assemblyIdentity name="FluentMigrator" publicKeyToken="aacfc7de5acabf05" culture="neutral" />
|
<assemblyIdentity name="FluentMigrator" publicKeyToken="aacfc7de5acabf05" culture="neutral" />
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
<?xml version="1.0" encoding="utf-8"?>
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
<packages>
|
<packages>
|
||||||
<package id="Newtonsoft.Json" version="6.0.6" targetFramework="net40" />
|
<package id="Newtonsoft.Json" version="9.0.1" targetFramework="net40" />
|
||||||
</packages>
|
</packages>
|
||||||
@@ -7,7 +7,7 @@
|
|||||||
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
|
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
|
||||||
<dependentAssembly>
|
<dependentAssembly>
|
||||||
<assemblyIdentity name="Newtonsoft.Json" publicKeyToken="30ad4fe6b2a6aeed" culture="neutral" />
|
<assemblyIdentity name="Newtonsoft.Json" publicKeyToken="30ad4fe6b2a6aeed" culture="neutral" />
|
||||||
<bindingRedirect oldVersion="0.0.0.0-6.0.0.0" newVersion="6.0.0.0" />
|
<bindingRedirect oldVersion="0.0.0.0-9.0.0.0" newVersion="9.0.0.0" />
|
||||||
</dependentAssembly>
|
</dependentAssembly>
|
||||||
<dependentAssembly>
|
<dependentAssembly>
|
||||||
<assemblyIdentity name="NLog" publicKeyToken="5120e14c03d0593c" culture="neutral" />
|
<assemblyIdentity name="NLog" publicKeyToken="5120e14c03d0593c" culture="neutral" />
|
||||||
|
|||||||
@@ -45,9 +45,8 @@
|
|||||||
<HintPath>..\packages\FluentAssertions.4.18.0\lib\net40\FluentAssertions.Core.dll</HintPath>
|
<HintPath>..\packages\FluentAssertions.4.18.0\lib\net40\FluentAssertions.Core.dll</HintPath>
|
||||||
<Private>True</Private>
|
<Private>True</Private>
|
||||||
</Reference>
|
</Reference>
|
||||||
<Reference Include="Newtonsoft.Json, Version=6.0.0.0, Culture=neutral, PublicKeyToken=30ad4fe6b2a6aeed, processorArchitecture=MSIL">
|
<Reference Include="Newtonsoft.Json, Version=9.0.0.0, Culture=neutral, PublicKeyToken=30ad4fe6b2a6aeed, processorArchitecture=MSIL">
|
||||||
<SpecificVersion>False</SpecificVersion>
|
<HintPath>..\packages\Newtonsoft.Json.9.0.1\lib\net40\Newtonsoft.Json.dll</HintPath>
|
||||||
<HintPath>..\packages\Newtonsoft.Json.6.0.6\lib\net40\Newtonsoft.Json.dll</HintPath>
|
|
||||||
</Reference>
|
</Reference>
|
||||||
<Reference Include="NLog, Version=4.0.0.0, Culture=neutral, PublicKeyToken=5120e14c03d0593c, processorArchitecture=MSIL">
|
<Reference Include="NLog, Version=4.0.0.0, Culture=neutral, PublicKeyToken=5120e14c03d0593c, processorArchitecture=MSIL">
|
||||||
<HintPath>..\packages\NLog.4.5.0-rc06\lib\net40-client\NLog.dll</HintPath>
|
<HintPath>..\packages\NLog.4.5.0-rc06\lib\net40-client\NLog.dll</HintPath>
|
||||||
|
|||||||
@@ -3,7 +3,7 @@
|
|||||||
<package id="CommonServiceLocator" version="1.0" />
|
<package id="CommonServiceLocator" version="1.0" />
|
||||||
<package id="FluentAssertions" version="4.18.0" targetFramework="net40" />
|
<package id="FluentAssertions" version="4.18.0" targetFramework="net40" />
|
||||||
<package id="Moq" version="4.0.10827" />
|
<package id="Moq" version="4.0.10827" />
|
||||||
<package id="Newtonsoft.Json" version="6.0.6" targetFramework="net40" />
|
<package id="Newtonsoft.Json" version="9.0.1" targetFramework="net40" />
|
||||||
<package id="NLog" version="4.5.0-rc06" targetFramework="net40" />
|
<package id="NLog" version="4.5.0-rc06" targetFramework="net40" />
|
||||||
<package id="NUnit" version="3.5.0" targetFramework="net40" />
|
<package id="NUnit" version="3.5.0" targetFramework="net40" />
|
||||||
<package id="RestSharp" version="105.2.3" targetFramework="net40" />
|
<package id="RestSharp" version="105.2.3" targetFramework="net40" />
|
||||||
|
|||||||
@@ -38,9 +38,8 @@
|
|||||||
</PropertyGroup>
|
</PropertyGroup>
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<Reference Include="Microsoft.CSharp" />
|
<Reference Include="Microsoft.CSharp" />
|
||||||
<Reference Include="Newtonsoft.Json, Version=6.0.0.0, Culture=neutral, PublicKeyToken=30ad4fe6b2a6aeed, processorArchitecture=MSIL">
|
<Reference Include="Newtonsoft.Json, Version=9.0.0.0, Culture=neutral, PublicKeyToken=30ad4fe6b2a6aeed, processorArchitecture=MSIL">
|
||||||
<SpecificVersion>False</SpecificVersion>
|
<HintPath>..\packages\Newtonsoft.Json.9.0.1\lib\net40\Newtonsoft.Json.dll</HintPath>
|
||||||
<HintPath>..\packages\Newtonsoft.Json.6.0.6\lib\net40\Newtonsoft.Json.dll</HintPath>
|
|
||||||
</Reference>
|
</Reference>
|
||||||
<Reference Include="NLog, Version=4.0.0.0, Culture=neutral, PublicKeyToken=5120e14c03d0593c, processorArchitecture=MSIL">
|
<Reference Include="NLog, Version=4.0.0.0, Culture=neutral, PublicKeyToken=5120e14c03d0593c, processorArchitecture=MSIL">
|
||||||
<HintPath>..\packages\NLog.4.5.0-rc06\lib\net40-client\NLog.dll</HintPath>
|
<HintPath>..\packages\NLog.4.5.0-rc06\lib\net40-client\NLog.dll</HintPath>
|
||||||
|
|||||||
@@ -11,7 +11,7 @@
|
|||||||
</dependentAssembly>
|
</dependentAssembly>
|
||||||
<dependentAssembly>
|
<dependentAssembly>
|
||||||
<assemblyIdentity name="Newtonsoft.Json" publicKeyToken="30ad4fe6b2a6aeed" culture="neutral" />
|
<assemblyIdentity name="Newtonsoft.Json" publicKeyToken="30ad4fe6b2a6aeed" culture="neutral" />
|
||||||
<bindingRedirect oldVersion="0.0.0.0-6.0.0.0" newVersion="6.0.0.0" />
|
<bindingRedirect oldVersion="0.0.0.0-9.0.0.0" newVersion="9.0.0.0" />
|
||||||
</dependentAssembly>
|
</dependentAssembly>
|
||||||
</assemblyBinding>
|
</assemblyBinding>
|
||||||
</runtime>
|
</runtime>
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
<?xml version="1.0" encoding="utf-8"?>
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
<packages>
|
<packages>
|
||||||
<package id="Newtonsoft.Json" version="6.0.6" targetFramework="net40" />
|
<package id="Newtonsoft.Json" version="9.0.1" targetFramework="net40" />
|
||||||
<package id="NLog" version="4.5.0-rc06" targetFramework="net40" />
|
<package id="NLog" version="4.5.0-rc06" targetFramework="net40" />
|
||||||
</packages>
|
</packages>
|
||||||
@@ -8,7 +8,7 @@
|
|||||||
</dependentAssembly>
|
</dependentAssembly>
|
||||||
<dependentAssembly>
|
<dependentAssembly>
|
||||||
<assemblyIdentity name="Newtonsoft.Json" publicKeyToken="30ad4fe6b2a6aeed" culture="neutral" />
|
<assemblyIdentity name="Newtonsoft.Json" publicKeyToken="30ad4fe6b2a6aeed" culture="neutral" />
|
||||||
<bindingRedirect oldVersion="0.0.0.0-6.0.0.0" newVersion="6.0.0.0" />
|
<bindingRedirect oldVersion="0.0.0.0-9.0.0.0" newVersion="9.0.0.0" />
|
||||||
</dependentAssembly>
|
</dependentAssembly>
|
||||||
<dependentAssembly>
|
<dependentAssembly>
|
||||||
<assemblyIdentity name="FluentMigrator" publicKeyToken="aacfc7de5acabf05" culture="neutral" />
|
<assemblyIdentity name="FluentMigrator" publicKeyToken="aacfc7de5acabf05" culture="neutral" />
|
||||||
|
|||||||
@@ -72,9 +72,8 @@
|
|||||||
<SpecificVersion>False</SpecificVersion>
|
<SpecificVersion>False</SpecificVersion>
|
||||||
<HintPath>..\packages\Microsoft.Owin.Hosting.2.1.0\lib\net40\Microsoft.Owin.Hosting.dll</HintPath>
|
<HintPath>..\packages\Microsoft.Owin.Hosting.2.1.0\lib\net40\Microsoft.Owin.Hosting.dll</HintPath>
|
||||||
</Reference>
|
</Reference>
|
||||||
<Reference Include="Newtonsoft.Json, Version=6.0.0.0, Culture=neutral, PublicKeyToken=30ad4fe6b2a6aeed, processorArchitecture=MSIL">
|
<Reference Include="Newtonsoft.Json, Version=9.0.0.0, Culture=neutral, PublicKeyToken=30ad4fe6b2a6aeed, processorArchitecture=MSIL">
|
||||||
<SpecificVersion>False</SpecificVersion>
|
<HintPath>..\packages\Newtonsoft.Json.9.0.1\lib\net40\Newtonsoft.Json.dll</HintPath>
|
||||||
<HintPath>..\packages\Newtonsoft.Json.6.0.6\lib\net40\Newtonsoft.Json.dll</HintPath>
|
|
||||||
</Reference>
|
</Reference>
|
||||||
<Reference Include="NLog, Version=4.0.0.0, Culture=neutral, PublicKeyToken=5120e14c03d0593c, processorArchitecture=MSIL">
|
<Reference Include="NLog, Version=4.0.0.0, Culture=neutral, PublicKeyToken=5120e14c03d0593c, processorArchitecture=MSIL">
|
||||||
<HintPath>..\packages\NLog.4.5.0-rc06\lib\net40-client\NLog.dll</HintPath>
|
<HintPath>..\packages\NLog.4.5.0-rc06\lib\net40-client\NLog.dll</HintPath>
|
||||||
|
|||||||
@@ -2,7 +2,7 @@
|
|||||||
<packages>
|
<packages>
|
||||||
<package id="Microsoft.Owin" version="2.1.0" targetFramework="net40" />
|
<package id="Microsoft.Owin" version="2.1.0" targetFramework="net40" />
|
||||||
<package id="Microsoft.Owin.Hosting" version="2.1.0" targetFramework="net40" />
|
<package id="Microsoft.Owin.Hosting" version="2.1.0" targetFramework="net40" />
|
||||||
<package id="Newtonsoft.Json" version="6.0.6" targetFramework="net40" />
|
<package id="Newtonsoft.Json" version="9.0.1" targetFramework="net40" />
|
||||||
<package id="NLog" version="4.5.0-rc06" targetFramework="net40" />
|
<package id="NLog" version="4.5.0-rc06" targetFramework="net40" />
|
||||||
<package id="Owin" version="1.0" targetFramework="net40" />
|
<package id="Owin" version="1.0" targetFramework="net40" />
|
||||||
</packages>
|
</packages>
|
||||||
Reference in New Issue
Block a user