From b3c6db59970fcfe47c78abbc2421da27786d8e1b Mon Sep 17 00:00:00 2001 From: "kay.one" Date: Sat, 23 Feb 2013 11:38:25 -0800 Subject: [PATCH] moved log to object db. --- NzbDrone.Backbone/NzbDrone.Backbone.csproj | 4 +- .../Datastore/ObjectDatabaseFixture.cs | 3 - .../Datastore/SimpleRepositoryFixture.cs | 3 +- NzbDrone.Core.Test/Framework/ObjectDbTest.cs | 46 ++--- .../JobTests/JobRepositoryFixture.cs | 2 +- NzbDrone.Core.Test/NzbDrone.Core.Test.csproj | 2 +- .../NzbDrone.Core.Test.ncrunchproject | 2 +- .../LogProviderTests/LogProviderFixture.cs | 171 ------------------ NzbDrone.Core/ContainerExtentions.cs | 2 +- NzbDrone.Core/Datastore/BasicRepository.cs | 30 ++- .../Instrumentation/DatabaseTarget.cs | 11 +- NzbDrone.Core/Instrumentation/Log.cs | 13 +- NzbDrone.Core/Instrumentation/LogProvider.cs | 90 --------- .../Instrumentation/LogRepository.cs | 25 +++ NzbDrone.Core/Instrumentation/LogService.cs | 39 ++++ NzbDrone.Core/Instrumentation/TrimLogsJob.cs | 8 +- NzbDrone.Core/NzbDrone.Core.csproj | 3 +- NzbDrone.Test.Common/MockerExtensions.cs | 16 ++ .../NzbDrone.Test.Common.csproj | 1 + NzbDrone.ncrunchsolution | 1 + NzbDrone/NzbDrone.ncrunchproject | 6 +- 21 files changed, 157 insertions(+), 321 deletions(-) delete mode 100644 NzbDrone.Core.Test/ProviderTests/LogProviderTests/LogProviderFixture.cs delete mode 100644 NzbDrone.Core/Instrumentation/LogProvider.cs create mode 100644 NzbDrone.Core/Instrumentation/LogRepository.cs create mode 100644 NzbDrone.Core/Instrumentation/LogService.cs create mode 100644 NzbDrone.Test.Common/MockerExtensions.cs diff --git a/NzbDrone.Backbone/NzbDrone.Backbone.csproj b/NzbDrone.Backbone/NzbDrone.Backbone.csproj index 2e85c715e..dc1c964c1 100644 --- a/NzbDrone.Backbone/NzbDrone.Backbone.csproj +++ b/NzbDrone.Backbone/NzbDrone.Backbone.csproj @@ -130,8 +130,8 @@ - - + + diff --git a/NzbDrone.Core.Test/Datastore/ObjectDatabaseFixture.cs b/NzbDrone.Core.Test/Datastore/ObjectDatabaseFixture.cs index 58e9da80b..e5976c758 100644 --- a/NzbDrone.Core.Test/Datastore/ObjectDatabaseFixture.cs +++ b/NzbDrone.Core.Test/Datastore/ObjectDatabaseFixture.cs @@ -19,8 +19,6 @@ public class ObjectDatabaseFixture : ObjectDbTest [SetUp] public void SetUp() { - WithObjectDb(memory:false); - childModel = Builder .CreateNew() .With(s => s.OID = 0) @@ -31,7 +29,6 @@ public void SetUp() .With(e => e.OID = 0) .Build(); - } [Test] diff --git a/NzbDrone.Core.Test/Datastore/SimpleRepositoryFixture.cs b/NzbDrone.Core.Test/Datastore/SimpleRepositoryFixture.cs index 384156e39..b5a3c808f 100644 --- a/NzbDrone.Core.Test/Datastore/SimpleRepositoryFixture.cs +++ b/NzbDrone.Core.Test/Datastore/SimpleRepositoryFixture.cs @@ -17,7 +17,7 @@ public class SampleType : ModelBase } [TestFixture] - public class SimpleRepositoryFixture : ObjectDbTest> + public class SimpleRepositoryFixture : ObjectDbTest,SampleType> { private SampleType sampleType; @@ -25,7 +25,6 @@ public class SimpleRepositoryFixture : ObjectDbTest> [SetUp] public void Setup() { - WithObjectDb(); sampleType = Builder .CreateNew() .With(c => c.OID = 0) diff --git a/NzbDrone.Core.Test/Framework/ObjectDbTest.cs b/NzbDrone.Core.Test/Framework/ObjectDbTest.cs index ab7c8977a..0d5e372e2 100644 --- a/NzbDrone.Core.Test/Framework/ObjectDbTest.cs +++ b/NzbDrone.Core.Test/Framework/ObjectDbTest.cs @@ -1,4 +1,5 @@ using System; +using System.Collections.Generic; using System.IO; using System.Linq; using NUnit.Framework; @@ -7,32 +8,35 @@ namespace NzbDrone.Core.Test.Framework { - - - public abstract class RepositoryTest : ObjectDbTest - where TRepository : class, IBasicRepository + public abstract class ObjectDbTest : ObjectDbTest + where TSubject : class where TModel : ModelBase, new() { + private TSubject _subject; protected BasicRepository Storage { get; private set; } - [SetUp] - public void RepositoryTestSetup() + protected IList AllStoredModels { - WithObjectDb(); - Storage = Mocker.Resolve>(); + get + { + return Storage.All().ToList(); + } } - } - - public abstract class ObjectDbTest : ObjectDbTest where TSubject : class - { - private TSubject _subject; + protected TModel StoredModel + { + get + { + return Storage.All().Single(); + } + } [SetUp] public void CoreTestSetup() { _subject = null; + Storage = Mocker.Resolve>(); } protected TSubject Subject @@ -65,20 +69,18 @@ protected IObjectDatabase Db } } - protected void WithObjectDb(bool memory = true) + private void WithObjectDb(bool memory = true) { - //if (memory) - //{ - // _db = new SiaqoDbFactory(new DiskProvider(),new EnvironmentProvider()).CreateMemoryDb(); - //} - //else - //{ _db = new SiaqoDbFactory(new DiskProvider(), new EnvironmentProvider()).Create(Path.Combine(AppDomain.CurrentDomain.BaseDirectory, Guid.NewGuid().ToString())); - //} - Mocker.SetConstant(Db); } + [SetUp] + public void SetupReadDb() + { + WithObjectDb(); + } + [TearDown] public void ObjectDbTearDown() { diff --git a/NzbDrone.Core.Test/JobTests/JobRepositoryFixture.cs b/NzbDrone.Core.Test/JobTests/JobRepositoryFixture.cs index 357a66c32..2dda7f3c1 100644 --- a/NzbDrone.Core.Test/JobTests/JobRepositoryFixture.cs +++ b/NzbDrone.Core.Test/JobTests/JobRepositoryFixture.cs @@ -18,7 +18,7 @@ namespace NzbDrone.Core.Test.JobTests { [TestFixture] - public class JobRepositoryFixture : RepositoryTest + public class JobRepositoryFixture : ObjectDbTest { FakeJob _fakeJob; DisabledJob _disabledJob; diff --git a/NzbDrone.Core.Test/NzbDrone.Core.Test.csproj b/NzbDrone.Core.Test/NzbDrone.Core.Test.csproj index 8d4d55871..0084db5b2 100644 --- a/NzbDrone.Core.Test/NzbDrone.Core.Test.csproj +++ b/NzbDrone.Core.Test/NzbDrone.Core.Test.csproj @@ -233,7 +233,7 @@ - + diff --git a/NzbDrone.Core.Test/NzbDrone.Core.Test.ncrunchproject b/NzbDrone.Core.Test/NzbDrone.Core.Test.ncrunchproject index 937eca014..6f24d559b 100644 --- a/NzbDrone.Core.Test/NzbDrone.Core.Test.ncrunchproject +++ b/NzbDrone.Core.Test/NzbDrone.Core.Test.ncrunchproject @@ -55,5 +55,5 @@ NzbDrone\.Core\.Test\.ParserTests\.ParserFixture\..* - PostBuildEventDisabled + PostBuildEventDisabled;PreBuildEventDisabled \ No newline at end of file diff --git a/NzbDrone.Core.Test/ProviderTests/LogProviderTests/LogProviderFixture.cs b/NzbDrone.Core.Test/ProviderTests/LogProviderTests/LogProviderFixture.cs deleted file mode 100644 index 7ef6794da..000000000 --- a/NzbDrone.Core.Test/ProviderTests/LogProviderTests/LogProviderFixture.cs +++ /dev/null @@ -1,171 +0,0 @@ -// ReSharper disable InconsistentNaming -using System; -using System.Diagnostics; -using System.Linq; -using FizzWare.NBuilder; -using FluentAssertions; -using NLog; -using NUnit.Framework; -using NzbDrone.Core.Datastore; -using NzbDrone.Core.Tv; -using NzbDrone.Core.Instrumentation; -using NzbDrone.Core.Repository; -using NzbDrone.Core.Test.Framework; -using NzbDrone.Test.Common; - -namespace NzbDrone.Core.Test.ProviderTests.LogProviderTests -{ - [TestFixture] - public class LogProviderFixture : SqlCeTest - { - private const string LOGGER_NAME = "Core.Test.ProviderTests.LogProviderTests.LogProviderFixture"; - - private static string UniqueMessage; - - Logger Logger; - - [SetUp] - public void Setup() - { - WithRealDb(); - - new DatabaseTarget(Db).Register(); - Logger = LogManager.GetCurrentClassLogger(); - - UniqueMessage = "Unique message: " + Guid.NewGuid().ToString(); - - - } - - [Test] - public void write_log() - { - Logger.Info(UniqueMessage); - - //Assert - var logItem = Db.Fetch().Single(); - - logItem.Message.Should().Be(UniqueMessage); - VerifyLog(logItem, LogLevel.Info); - } - - - - [Test] - public void write_long_log() - { - //setup - var message = String.Empty; - for (int i = 0; i < 100; i++) - { - message += Guid.NewGuid(); - } - - //Act - Logger.Info(message); - - var logItem = Db.Fetch().Single(); - - logItem.Message.Should().HaveLength(message.Length); - logItem.Message.Should().Be(message); - VerifyLog(logItem, LogLevel.Info); - } - - - [Test] - public void clearLog() - { - WithTempAsAppPath(); - - //Act - for (int i = 0; i < 10; i++) - { - Logger.Info(UniqueMessage); - } - - var provider = Mocker.Resolve(); - provider.GetAllLogs().Should().HaveCount(10); - provider.DeleteAll(); - provider.GetAllLogs().Should().HaveCount(1); - } - - [Test] - public void write_log_exception() - { - var ex = new InvalidOperationException("Fake Exception"); - //Act - - Logger.ErrorException(UniqueMessage, ex); - - //Assert - var logItem = Db.Fetch().Single(); - - VerifyLog(logItem, LogLevel.Error); - logItem.Message.Should().Be(UniqueMessage + ": " + ex.Message); - logItem.ExceptionType.Should().Be(ex.GetType().ToString()); - logItem.Exception.Should().Be(ex.ToString()); - - ExceptionVerification.ExpectedErrors(1); - } - - [Test] - public void exception_log_with_no_message_should_use_exceptions_message() - { - - var ex = new InvalidOperationException("Fake Exception"); - UniqueMessage = String.Empty; - - - Logger.ErrorException(UniqueMessage, ex); - - var logItem = Db.Fetch().Single(); - - - logItem.Message.Should().Be(ex.Message); - - VerifyLog(logItem, LogLevel.Error); - - ExceptionVerification.ExpectedErrors(1); - } - - [Test] - public void null_string_as_arg_should_not_fail() - { - var epFile = new EpisodeFile(); - Logger.Trace("File {0} no longer exists on disk. removing from database.", epFile.Path); - - epFile.Path.Should().BeNull(); - } - - - [Test] - public void Trim_Logs_should_clear_logs_older_than_30_days() - { - //Setup - var historyItem = Builder.CreateListOfSize(30) - .TheFirst(20).With(c => c.Time = DateTime.Now) - .TheNext(10).With(c => c.Time = DateTime.Now.AddDays(-31)) - .Build(); - - Db.InsertMany(historyItem); - - //Act - Db.Fetch().Should().HaveCount(30); - Mocker.Resolve().Trim(); - - //Assert - var result = Db.Fetch(); - result.Should().HaveCount(20); - result.Should().OnlyContain(s => s.Time > DateTime.Now.AddDays(-30)); - } - - private void VerifyLog(Log logItem, LogLevel level) - { - logItem.Time.Should().BeWithin(TimeSpan.FromSeconds(2)); - logItem.Logger.Should().Be(LOGGER_NAME); - logItem.Level.Should().Be(level.Name); - logItem.Method.Should().Be(new StackTrace().GetFrame(1).GetMethod().Name); - Logger.Name.Should().EndWith(logItem.Logger); - } - } -} diff --git a/NzbDrone.Core/ContainerExtentions.cs b/NzbDrone.Core/ContainerExtentions.cs index 90adcd1ef..9bebe7808 100644 --- a/NzbDrone.Core/ContainerExtentions.cs +++ b/NzbDrone.Core/ContainerExtentions.cs @@ -80,7 +80,7 @@ private static void InitDatabase(this ContainerBuilder container) container.RegisterGeneric(typeof(BasicRepository<>)).As(typeof(IBasicRepository<>)); container.RegisterType().WithParameter(ResolvedParameter.ForNamed("DatabaseTarget")); - container.RegisterType().WithParameter(ResolvedParameter.ForNamed("LogProvider")); + container.RegisterType().WithParameter(ResolvedParameter.ForNamed("LogProvider")); } } } \ No newline at end of file diff --git a/NzbDrone.Core/Datastore/BasicRepository.cs b/NzbDrone.Core/Datastore/BasicRepository.cs index 65563379d..74dab15db 100644 --- a/NzbDrone.Core/Datastore/BasicRepository.cs +++ b/NzbDrone.Core/Datastore/BasicRepository.cs @@ -6,6 +6,7 @@ namespace NzbDrone.Core.Datastore public interface IBasicRepository { IEnumerable All(); + int Count(); TModel Get(int id); TModel Insert(TModel model); TModel Update(TModel model); @@ -13,6 +14,7 @@ public interface IBasicRepository void Delete(int id); IList InsertMany(IList model); IList UpdateMany(IList model); + void Purge(); } public class BasicRepository : IBasicRepository where TModel : ModelBase, new() @@ -31,6 +33,11 @@ public IEnumerable All() return Queryable.ToList(); } + public int Count() + { + return Queryable.Count(); + } + public TModel Get(int id) { return Queryable.Single(c => c.OID == id); @@ -58,11 +65,11 @@ public IList UpdateMany(IList model) public TModel Upsert(TModel model) { - if(model.OID == 0) - { - return ObjectDatabase.Insert(model); - } - return ObjectDatabase.Update(model); + if (model.OID == 0) + { + return ObjectDatabase.Insert(model); + } + return ObjectDatabase.Update(model); } public void Delete(int id) @@ -70,5 +77,18 @@ public void Delete(int id) var itemToDelete = Get(id); ObjectDatabase.Delete(itemToDelete); } + + public void DeleteMany(IEnumerable ids) + { + foreach (var id in ids) + { + Delete(id); + } + } + + public void Purge() + { + DeleteMany(Queryable.Select(c => c.OID)); + } } } diff --git a/NzbDrone.Core/Instrumentation/DatabaseTarget.cs b/NzbDrone.Core/Instrumentation/DatabaseTarget.cs index b4160565c..7c99b58ac 100644 --- a/NzbDrone.Core/Instrumentation/DatabaseTarget.cs +++ b/NzbDrone.Core/Instrumentation/DatabaseTarget.cs @@ -2,23 +2,20 @@ using NLog.Config; using NLog; using NLog.Targets; -using NLog.Targets.Wrappers; using NzbDrone.Common; -using PetaPoco; namespace NzbDrone.Core.Instrumentation { public class DatabaseTarget : Target { - private readonly IDatabase _database; + private readonly ILogRepository _repository; - public DatabaseTarget(IDatabase database) + public DatabaseTarget(ILogRepository repository) { - _database = database; + _repository = repository; } - public void Register() { LogManager.Configuration.AddTarget("DbLogger", this); @@ -62,7 +59,7 @@ protected override void Write(LogEventInfo logEvent) log.Level = logEvent.Level.Name; - _database.Insert(log); + _repository.Insert(log); } } } \ No newline at end of file diff --git a/NzbDrone.Core/Instrumentation/Log.cs b/NzbDrone.Core/Instrumentation/Log.cs index 4c06f791f..92a3b3432 100644 --- a/NzbDrone.Core/Instrumentation/Log.cs +++ b/NzbDrone.Core/Instrumentation/Log.cs @@ -1,15 +1,12 @@ using System; -using PetaPoco; +using NzbDrone.Core.Datastore; +using Sqo.Attributes; namespace NzbDrone.Core.Instrumentation { - [TableName("Logs")] - [PrimaryKey("LogId", autoIncrement = true)] - public class Log + public class Log : ModelBase { - - public Int64 LogId { get; protected set; } - + [Text] public string Message { get; set; } public DateTime Time { get; set; } @@ -18,11 +15,11 @@ public class Log public string Method { get; set; } + [Text] public string Exception { get; set; } public string ExceptionType { get; set; } public String Level { get; set; } - } } \ No newline at end of file diff --git a/NzbDrone.Core/Instrumentation/LogProvider.cs b/NzbDrone.Core/Instrumentation/LogProvider.cs deleted file mode 100644 index 84a5c3c53..000000000 --- a/NzbDrone.Core/Instrumentation/LogProvider.cs +++ /dev/null @@ -1,90 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using DataTables.Mvc.Core.Helpers; -using DataTables.Mvc.Core.Models; -using NLog; -using NzbDrone.Common; -using PetaPoco; - -namespace NzbDrone.Core.Instrumentation -{ - public class LogProvider - { - private readonly IDatabase _database; - private readonly DiskProvider _diskProvider; - private readonly EnvironmentProvider _environmentProvider; - private static readonly Logger Logger = LogManager.GetCurrentClassLogger(); - - public LogProvider(IDatabase database, DiskProvider diskProvider, EnvironmentProvider environmentProvider) - { - _database = database; - _diskProvider = diskProvider; - _environmentProvider = environmentProvider; - } - - public List GetAllLogs() - { - return _database.Fetch(); - } - - public IList TopLogs(int count) - { - var logs = _database.Fetch("SELECT TOP " + count + " * FROM Logs ORDER BY Time Desc"); - logs.Add(new Log - { - Time = DateTime.Now.AddYears(-100), - Level = "Info", - Logger = "Core.Instrumentation.LogProvider", - Message = String.Format("Number of logs currently shown: {0}. More may exist, check 'All' to see everything", Math.Min(count, logs.Count)) - }); - - return logs; - } - - public virtual Page GetPagedItems(DataTablesPageRequest pageRequest) - { - var query = Sql.Builder - .Select(@"*") - .From("Logs"); - - var startPage = (pageRequest.DisplayLength == 0) ? 1 : pageRequest.DisplayStart / pageRequest.DisplayLength + 1; - - if (!string.IsNullOrEmpty(pageRequest.Search)) - { - var whereClause = string.Join(" OR ", SqlBuilderHelper.GetSearchClause(pageRequest)); - - if (!string.IsNullOrEmpty(whereClause)) - query.Append("WHERE " + whereClause, "%" + pageRequest.Search + "%"); - } - - var orderBy = string.Join(",", SqlBuilderHelper.GetOrderByClause(pageRequest)); - - if (!string.IsNullOrEmpty(orderBy)) - { - query.Append("ORDER BY " + orderBy); - } - - return _database.Page(startPage, pageRequest.DisplayLength, query); - } - - public virtual long Count() - { - return _database.Single(@"SELECT COUNT(*) from Logs"); - } - - public void DeleteAll() - { - _database.Delete(""); - _diskProvider.DeleteFile(_environmentProvider.GetLogFileName()); - _diskProvider.DeleteFile(_environmentProvider.GetArchivedLogFileName()); - Logger.Info("Cleared Log History"); - } - - public void Trim() - { - _database.Delete("WHERE Time < @0", DateTime.Now.AddDays(-30).Date); - Logger.Debug("Logs have been trimmed, events older than 30 days have been removed"); - } - } -} \ No newline at end of file diff --git a/NzbDrone.Core/Instrumentation/LogRepository.cs b/NzbDrone.Core/Instrumentation/LogRepository.cs new file mode 100644 index 000000000..97f1dc98e --- /dev/null +++ b/NzbDrone.Core/Instrumentation/LogRepository.cs @@ -0,0 +1,25 @@ +using System; +using System.Linq; +using NzbDrone.Core.Datastore; + +namespace NzbDrone.Core.Instrumentation +{ + public interface ILogRepository : IBasicRepository + { + void Trim(); + } + + public class LogRepository : BasicRepository, ILogRepository + { + public LogRepository(IObjectDatabase objectDatabase) + : base(objectDatabase) + { + } + + public void Trim() + { + var oldIds = Queryable.Where(c => c.Time < DateTime.Now.AddDays(-30).Date).Select(c => c.OID); + DeleteMany(oldIds); + } + } +} \ No newline at end of file diff --git a/NzbDrone.Core/Instrumentation/LogService.cs b/NzbDrone.Core/Instrumentation/LogService.cs new file mode 100644 index 000000000..2905da326 --- /dev/null +++ b/NzbDrone.Core/Instrumentation/LogService.cs @@ -0,0 +1,39 @@ +using System.Linq; +using NLog; +using NzbDrone.Common; + +namespace NzbDrone.Core.Instrumentation +{ + public interface ILogService + { + void DeleteAll(); + void Trim(); + } + + public class LogService : ILogService + { + private readonly ILogRepository _logRepository; + private readonly DiskProvider _diskProvider; + private readonly EnvironmentProvider _environmentProvider; + private readonly Logger _logger; + + public LogService(ILogRepository logRepository, DiskProvider diskProvider, + EnvironmentProvider environmentProvider, Logger logger) + { + _logRepository = logRepository; + _diskProvider = diskProvider; + _environmentProvider = environmentProvider; + _logger = logger; + } + + public void DeleteAll() + { + _logRepository.Purge(); + } + + public void Trim() + { + _logRepository.Trim(); + } + } +} \ No newline at end of file diff --git a/NzbDrone.Core/Instrumentation/TrimLogsJob.cs b/NzbDrone.Core/Instrumentation/TrimLogsJob.cs index 10e75ab25..f25ff4dda 100644 --- a/NzbDrone.Core/Instrumentation/TrimLogsJob.cs +++ b/NzbDrone.Core/Instrumentation/TrimLogsJob.cs @@ -7,11 +7,11 @@ namespace NzbDrone.Core.Instrumentation { public class TrimLogsJob : IJob { - private readonly LogProvider _logProvider; + private readonly LogService _logService; - public TrimLogsJob(LogProvider logProvider) + public TrimLogsJob(LogService logService) { - _logProvider = logProvider; + _logService = logService; } public string Name @@ -26,7 +26,7 @@ public TimeSpan DefaultInterval public virtual void Start(ProgressNotification notification, dynamic options) { - _logProvider.Trim(); + _logService.Trim(); } } } \ No newline at end of file diff --git a/NzbDrone.Core/NzbDrone.Core.csproj b/NzbDrone.Core/NzbDrone.Core.csproj index 5ec05d2c4..23bfb734f 100644 --- a/NzbDrone.Core/NzbDrone.Core.csproj +++ b/NzbDrone.Core/NzbDrone.Core.csproj @@ -271,6 +271,7 @@ + @@ -283,7 +284,7 @@ - + diff --git a/NzbDrone.Test.Common/MockerExtensions.cs b/NzbDrone.Test.Common/MockerExtensions.cs new file mode 100644 index 000000000..91d50fecd --- /dev/null +++ b/NzbDrone.Test.Common/MockerExtensions.cs @@ -0,0 +1,16 @@ +using System.Linq; +using NzbDrone.Test.Common.AutoMoq; + +namespace NzbDrone.Test.Common +{ + public static class MockerExtensions + { + public static TInterface Resolve(this AutoMoqer mocker) + where TService : TInterface + { + var service = mocker.Resolve(); + mocker.SetConstant(service); + return service; + } + } +} \ No newline at end of file diff --git a/NzbDrone.Test.Common/NzbDrone.Test.Common.csproj b/NzbDrone.Test.Common/NzbDrone.Test.Common.csproj index 2888cf687..ef526fd4d 100644 --- a/NzbDrone.Test.Common/NzbDrone.Test.Common.csproj +++ b/NzbDrone.Test.Common/NzbDrone.Test.Common.csproj @@ -88,6 +88,7 @@ + diff --git a/NzbDrone.ncrunchsolution b/NzbDrone.ncrunchsolution index c725a019c..969da6dd4 100644 --- a/NzbDrone.ncrunchsolution +++ b/NzbDrone.ncrunchsolution @@ -2,6 +2,7 @@ 1 True true + true UseDynamicAnalysis Disabled Disabled diff --git a/NzbDrone/NzbDrone.ncrunchproject b/NzbDrone/NzbDrone.ncrunchproject index 8641d3614..73e1ebbb9 100644 --- a/NzbDrone/NzbDrone.ncrunchproject +++ b/NzbDrone/NzbDrone.ncrunchproject @@ -13,7 +13,9 @@ true true 60000 - - + + + AutoDetect + PostBuildEventDisabled \ No newline at end of file