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