Commit 3cc75fb1 authored by Andy James's avatar Andy James

Add support for .NET Standard

parent 11c540d7
Pipeline #19 passed with stage
using System; using System;
using System.IO;
using System.Collections.Concurrent; using System.Collections.Concurrent;
using System.Linq; using System.Linq;
using System.Xml; using System.Xml;
...@@ -7,6 +8,9 @@ using System.Xml.Serialization; ...@@ -7,6 +8,9 @@ using System.Xml.Serialization;
using NChronicle.Core.Model; using NChronicle.Core.Model;
using NChronicle.File.Exceptions; using NChronicle.File.Exceptions;
using NChronicle.File.Interfaces; using NChronicle.File.Interfaces;
#if !NETFX
using System.Reflection;
#endif
namespace NChronicle.File.Configuration { namespace NChronicle.File.Configuration {
...@@ -37,7 +41,7 @@ namespace NChronicle.File.Configuration { ...@@ -37,7 +41,7 @@ namespace NChronicle.File.Configuration {
this.IgnoredTags = new ConcurrentDictionary<string, byte>(); this.IgnoredTags = new ConcurrentDictionary<string, byte>();
this.TimeZone = TimeZoneInfo.Local; this.TimeZone = TimeZoneInfo.Local;
this.OutputPattern = "{%yyyy/MM/dd HH:mm:ss.fff} [{TH}] {MSG?{MSG} {EXC?\n}}{EXC?{EXC}\n}{TAGS?[{TAGS}]}"; this.OutputPattern = "{%yyyy/MM/dd HH:mm:ss.fff} [{TH}] {MSG?{MSG} {EXC?\n}}{EXC?{EXC}\n}{TAGS?[{TAGS}]}";
this.OutputPath = System.IO.Path.Combine(Environment.CurrentDirectory, "chronicle.log"); this.OutputPath = System.IO.Path.Combine(Directory.GetCurrentDirectory(), "chronicle.log");
} }
/// <summary> /// <summary>
...@@ -169,17 +173,16 @@ namespace NChronicle.File.Configuration { ...@@ -169,17 +173,16 @@ namespace NChronicle.File.Configuration {
/// </summary> /// </summary>
/// <param name="path">The file path to append records to.</param> /// <param name="path">The file path to append records to.</param>
public void WithOutputPath (string path) { public void WithOutputPath (string path) {
if (path == null) { if (path == null) {
throw new ArgumentNullException(nameof(path)); throw new ArgumentNullException(nameof(path));
} }
if (path.Any(System.IO.Path.GetInvalidPathChars().Contains) if (path.Any(Path.GetInvalidPathChars().Contains)
|| System.IO.Path.GetFileName(path).Any(System.IO.Path.GetInvalidFileNameChars().Contains)) || Path.GetFileName(path).Any(Path.GetInvalidFileNameChars().Contains))
throw new InvalidFilePathException("The path or file name in the given path contains one or more invalid characters."); throw new InvalidFilePathException("The path or file name in the given path contains one or more invalid characters.");
if (!System.IO.Path.IsPathRooted(path)) if (!Path.IsPathRooted(path))
path = System.IO.Path.Combine(Environment.CurrentDirectory, path); path = Path.Combine(Directory.GetCurrentDirectory(), path);
if (!System.IO.File.Exists(path)) if (!System.IO.File.Exists(path))
System.IO.File.Create(path).Close(); System.IO.File.Create(path).Dispose();
this.OutputPath = path; this.OutputPath = path;
} }
...@@ -309,11 +312,13 @@ namespace NChronicle.File.Configuration { ...@@ -309,11 +312,13 @@ namespace NChronicle.File.Configuration {
/// <seealso cref="NotListening"/> /// <seealso cref="NotListening"/>
public void ListeningToAllLevels() { public void ListeningToAllLevels() {
this.Levels.Clear(); this.Levels.Clear();
foreach (var levelName in typeof (ChronicleLevel).GetEnumNames()) { var enumNames = Enum.GetNames(typeof(ChronicleLevel));
foreach (var levelName in enumNames) {
ChronicleLevel level; ChronicleLevel level;
Enum.TryParse(levelName, out level); Enum.TryParse(levelName, out level);
this.Levels[level] = 0; this.Levels[level] = 0;
} }
this._levelsAreDefault = false; this._levelsAreDefault = false;
} }
...@@ -491,7 +496,7 @@ namespace NChronicle.File.Configuration { ...@@ -491,7 +496,7 @@ namespace NChronicle.File.Configuration {
try { try {
this.WithTimeZone(TimeZoneInfo.FindSystemTimeZoneById(timeZone)); this.WithTimeZone(TimeZoneInfo.FindSystemTimeZoneById(timeZone));
} }
catch (TimeZoneNotFoundException) { catch (Exception) {
throw new XmlException($"Unexpected library configuration for {nameof(FileChronicleLibrary)}, value '{timeZone}' for {nameof(this.TimeZone)} is not a valid TimeZone ID."); throw new XmlException($"Unexpected library configuration for {nameof(FileChronicleLibrary)}, value '{timeZone}' for {nameof(this.TimeZone)} is not a valid TimeZone ID.");
} }
break; break;
...@@ -502,9 +507,13 @@ namespace NChronicle.File.Configuration { ...@@ -502,9 +507,13 @@ namespace NChronicle.File.Configuration {
var type = Type.GetType(typeStr, false, true); var type = Type.GetType(typeStr, false, true);
if (type == null) if (type == null)
throw new TypeLoadException($"Unexpected library configuration for {nameof(FileChronicleLibrary)}, type {typeStr} could not be found."); throw new TypeLoadException($"Unexpected library configuration for {nameof(FileChronicleLibrary)}, type {typeStr} could not be found.");
if (type.GetInterface(nameof(IRetentionPolicy)) == null) #if NETFX
if (!typeof(IRetentionPolicy).IsAssignableFrom(type))
#else
if (!typeof(IRetentionPolicy).GetTypeInfo().IsAssignableFrom(type.GetTypeInfo()))
#endif
throw new TypeLoadException($"Unexpected library configuration for {nameof(FileChronicleLibrary)}, type {type.Name} does not implement {nameof(IRetentionPolicy)}."); throw new TypeLoadException($"Unexpected library configuration for {nameof(FileChronicleLibrary)}, type {type.Name} does not implement {nameof(IRetentionPolicy)}.");
IRetentionPolicy retentionPolicy = null; IRetentionPolicy retentionPolicy = null;
try { try {
retentionPolicy = Activator.CreateInstance(type) as IRetentionPolicy; retentionPolicy = Activator.CreateInstance(type) as IRetentionPolicy;
} catch (MissingMethodException e) { } catch (MissingMethodException e) {
......
...@@ -10,19 +10,36 @@ using NChronicle.Core.Interfaces; ...@@ -10,19 +10,36 @@ using NChronicle.Core.Interfaces;
using NChronicle.Core.Model; using NChronicle.Core.Model;
using NChronicle.File.Configuration; using NChronicle.File.Configuration;
using NChronicle.File.Delegates; using NChronicle.File.Delegates;
using System.Collections.Concurrent;
namespace NChronicle.File { namespace NChronicle.File {
/// <summary> /// <summary>
/// A <see cref="IChronicleLibrary"/> writing <see cref="ChronicleRecord"/>s to a file. /// A <see cref="IChronicleLibrary"/> writing <see cref="ChronicleRecord"/>s to a file.
/// </summary> /// </summary>
public class FileChronicleLibrary : IChronicleLibrary, IDisposable { public class FileChronicleLibrary : IChronicleLibrary, IDisposable {
private readonly FileChronicleLibraryConfiguration _configuration; #if !NETFX
private volatile FileStream _fileStream; private static ConcurrentDictionary<string, object> _fsLockObjects = new ConcurrentDictionary<string, object>();
private string _fileStreamLockKey => string.Intern ($"{nameof (FileChronicleLibrary)}.{nameof (this._fileStream)}.{this._configuration.OutputPath}"); #endif
private readonly Dictionary<string, MethodHandler> _methods; private readonly FileChronicleLibraryConfiguration _configuration;
private volatile FileStream _fileStream;
#if NETFX
private string _fileStreamLockKey => string.Intern ($"{nameof (FileChronicleLibrary)}.{nameof (this._fileStream)}.{this._configuration.OutputPath}");
#else
private object _fileStreamLockKey {
get {
lock (FileChronicleLibrary._fsLockObjects) {
return FileChronicleLibrary._fsLockObjects.ContainsKey(this._configuration.OutputPath)
? FileChronicleLibrary._fsLockObjects[this._configuration.OutputPath]
: (FileChronicleLibrary._fsLockObjects[this._configuration.OutputPath] = new object());
}
}
}
#endif
private readonly Dictionary<string, MethodHandler> _methods;
private readonly Dictionary<string, KeyHandler> _keys; private readonly Dictionary<string, KeyHandler> _keys;
/// <summary> /// <summary>
...@@ -64,7 +81,7 @@ namespace NChronicle.File { ...@@ -64,7 +81,7 @@ namespace NChronicle.File {
private string FormulateOutput (ChronicleRecord record, string pattern) { private string FormulateOutput (ChronicleRecord record, string pattern) {
var output = pattern; var output = pattern;
var currentTime = TimeZoneInfo.ConvertTimeFromUtc (DateTime.UtcNow, this._configuration.TimeZone); var currentTime = TimeZoneInfo.ConvertTime(DateTime.UtcNow, TimeZoneInfo.Utc, this._configuration.TimeZone);
foreach (var token in this.FindTokens (pattern)) { foreach (var token in this.FindTokens (pattern)) {
var tokenBody = token.Substring (1, token.Length - 2); var tokenBody = token.Substring (1, token.Length - 2);
var tokenIsDate = tokenBody.StartsWith ("%"); var tokenIsDate = tokenBody.StartsWith ("%");
...@@ -160,7 +177,6 @@ namespace NChronicle.File { ...@@ -160,7 +177,6 @@ namespace NChronicle.File {
} }
private void SendToFile (string output) { private void SendToFile (string output) {
//if (this._disposed) return;
if (this._fileStream == null) { if (this._fileStream == null) {
lock (this._fileStreamLockKey) { lock (this._fileStreamLockKey) {
if (this._fileStream == null) { if (this._fileStream == null) {
...@@ -170,9 +186,9 @@ namespace NChronicle.File { ...@@ -170,9 +186,9 @@ namespace NChronicle.File {
} }
var bytes = Encoding.UTF8.GetBytes ($"{output}\r\n"); var bytes = Encoding.UTF8.GetBytes ($"{output}\r\n");
lock (this._fileStreamLockKey) { lock (this._fileStreamLockKey) {
if (this._configuration.RetentionPolicy != null) { if (this._configuration.RetentionPolicy != null) {
if (this._configuration.RetentionPolicy.CheckPolicy (this._configuration.OutputPath, bytes)) { if (this._configuration.RetentionPolicy.CheckPolicy (this._configuration.OutputPath, bytes)) {
this._fileStream.Close (); this._fileStream.Dispose ();
this._configuration.RetentionPolicy.InvokePolicy (this._configuration.OutputPath); this._configuration.RetentionPolicy.InvokePolicy (this._configuration.OutputPath);
this._fileStream = new FileStream (this._configuration.OutputPath, FileMode.Append, FileAccess.Write, FileShare.Read); this._fileStream = new FileStream (this._configuration.OutputPath, FileMode.Append, FileAccess.Write, FileShare.Read);
} }
...@@ -196,7 +212,7 @@ namespace NChronicle.File { ...@@ -196,7 +212,7 @@ namespace NChronicle.File {
private delegate string MethodHandler (ChronicleRecord record, params string [] parameters); private delegate string MethodHandler (ChronicleRecord record, params string [] parameters);
private delegate string KeyHandler (ChronicleRecord record); private delegate string KeyHandler (ChronicleRecord record);
#region Xml Serialization #region Xml Serialization
/// <summary> /// <summary>
/// Required for XML serialization, this method offers no functionality. /// Required for XML serialization, this method offers no functionality.
/// </summary> /// </summary>
...@@ -216,7 +232,7 @@ namespace NChronicle.File { ...@@ -216,7 +232,7 @@ namespace NChronicle.File {
/// <param name="writer"><see cref="XmlWriter" /> stream to the configuration file.</param> /// <param name="writer"><see cref="XmlWriter" /> stream to the configuration file.</param>
/// <seealso cref="Core.NChronicle.SaveConfigurationTo(string)"/> /// <seealso cref="Core.NChronicle.SaveConfigurationTo(string)"/>
public void WriteXml (XmlWriter writer) => this._configuration.WriteXml (writer); public void WriteXml (XmlWriter writer) => this._configuration.WriteXml (writer);
#endregion #endregion
/// <summary> /// <summary>
/// Conclude and close this <see cref="FileChronicleLibrary"/>. /// Conclude and close this <see cref="FileChronicleLibrary"/>.
...@@ -225,7 +241,7 @@ namespace NChronicle.File { ...@@ -225,7 +241,7 @@ namespace NChronicle.File {
if (this._fileStream != null) { if (this._fileStream != null) {
lock (this._fileStreamLockKey) { lock (this._fileStreamLockKey) {
this._fileStream.Flush (); this._fileStream.Flush ();
this._fileStream.Close (); this._fileStream.Dispose ();
} }
} }
GC.SuppressFinalize (this); GC.SuppressFinalize (this);
......
...@@ -3,11 +3,11 @@ ...@@ -3,11 +3,11 @@
<metadata> <metadata>
<id>NChronicle.File</id> <id>NChronicle.File</id>
<title>NChronicle.File</title> <title>NChronicle.File</title>
<version>1.0.1</version> <version>1.1.0</version>
<authors>Andy James</authors> <authors>Andy James</authors>
<owners>Andy James</owners> <owners>Andy James</owners>
<licenseUrl>https://git.ikimi.co/andrewj/NChronicle/raw/master/LICENSE</licenseUrl> <licenseUrl>https://git.ikimi.co/NChronicle/NChronicle.File/raw/master/LICENSE</licenseUrl>
<projectUrl>https://git.ikimi.co/andrewj/NChronicle</projectUrl> <projectUrl>https://git.ikimi.co/NChronicle/NChronicle.File</projectUrl>
<iconUrl>https://git.ikimi.co/uploads/project/avatar/2/NChronicle_simple_square.png</iconUrl> <iconUrl>https://git.ikimi.co/uploads/project/avatar/2/NChronicle_simple_square.png</iconUrl>
<requireLicenseAcceptance>false</requireLicenseAcceptance> <requireLicenseAcceptance>false</requireLicenseAcceptance>
<summary> <summary>
...@@ -22,7 +22,13 @@ Further Libraries planned for the NChronicle logging framework include NChronicl ...@@ -22,7 +22,13 @@ Further Libraries planned for the NChronicle logging framework include NChronicl
</description> </description>
<dependencies> <dependencies>
<group targetFramework="net40"> <group targetFramework="net40">
<dependency id="NChronicle.Core" version="1.0.3" /> <dependency id="NChronicle.Core" version="1.1.0" />
</group>
<group targetFramework="netstandard1.4">
<dependency id="NChronicle.Core" version="1.1.0" />
<dependency id="System.IO.FileSystem" version="4.3.0" />
<dependency id="System.Reflection" version="4.3.0" />
<dependency id="System.Threading.Thread" version="4.3.0" />
</group> </group>
</dependencies> </dependencies>
<frameworkAssemblies> <frameworkAssemblies>
...@@ -32,12 +38,13 @@ Further Libraries planned for the NChronicle logging framework include NChronicl ...@@ -32,12 +38,13 @@ Further Libraries planned for the NChronicle logging framework include NChronicl
</frameworkAssemblies> </frameworkAssemblies>
<language>en-us</language> <language>en-us</language>
<releaseNotes> <releaseNotes>
Added support for configuration from XML (including runtime configuration changes). Added support for .NET Standard
</releaseNotes> </releaseNotes>
<copyright>Copyright 2017</copyright> <copyright>Copyright 2017</copyright>
<tags>NChronicle Events Audit Logging Log Trail Recording History Tracking Output File Archive Retention</tags> <tags>NChronicle Events Audit Logging Log Trail Recording History Tracking Output File Archive Retention</tags>
</metadata> </metadata>
<files> <files>
<file src="bin/Release/NChronicle.File.dll" target="lib\net40" /> <file src="bin/Release/netfx4.0/NChronicle.File.dll" target="lib\net40" />
<file src="bin/Release/netstandard1.4/NChronicle.File.dll" target="lib\netstandard1.4" />
</files> </files>
</package> </package>
...@@ -28,7 +28,7 @@ ...@@ -28,7 +28,7 @@
<SourceCodeBasePath>.\</SourceCodeBasePath> <SourceCodeBasePath>.\</SourceCodeBasePath>
<MissingTags>Summary, Parameter, Returns, AutoDocumentCtors, TypeParameter, AutoDocumentDispose</MissingTags> <MissingTags>Summary, Parameter, Returns, AutoDocumentCtors, TypeParameter, AutoDocumentDispose</MissingTags>
<DocumentationSources> <DocumentationSources>
<DocumentationSource sourceFile="NChronicle.File.csproj" /> <DocumentationSource sourceFile="NChronicle.File_NetFx.csproj" />
</DocumentationSources> </DocumentationSources>
<HelpFileVersion>1.0.1</HelpFileVersion> <HelpFileVersion>1.0.1</HelpFileVersion>
<MaximumGroupParts>2</MaximumGroupParts> <MaximumGroupParts>2</MaximumGroupParts>
......
...@@ -3,12 +3,26 @@ Microsoft Visual Studio Solution File, Format Version 12.00 ...@@ -3,12 +3,26 @@ Microsoft Visual Studio Solution File, Format Version 12.00
# Visual Studio 15 # Visual Studio 15
VisualStudioVersion = 15.0.26430.16 VisualStudioVersion = 15.0.26430.16
MinimumVisualStudioVersion = 10.0.40219.1 MinimumVisualStudioVersion = 10.0.40219.1
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "NChronicle.File", "NChronicle.File.csproj", "{5CCFB68D-D230-48AA-9DDC-BCE65BA8EC87}" Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "NChronicle.File_NetFx", "NChronicle.File_NetFx.csproj", "{5CCFB68D-D230-48AA-9DDC-BCE65BA8EC87}"
EndProject EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Wiki", "Wiki", "{1338668E-E646-4575-B3D8-7E6F5980AE63}" Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Wiki", "Wiki", "{1338668E-E646-4575-B3D8-7E6F5980AE63}"
EndProject EndProject
Project("{7CF6DF6D-3B04-46F8-A40B-537D21BCA0B4}") = "NChronicle.File", "NChronicle.File.shfbproj", "{7D4D4587-76D5-4F06-980A-E9505DFCA7B6}" Project("{7CF6DF6D-3B04-46F8-A40B-537D21BCA0B4}") = "NChronicle.File", "NChronicle.File.shfbproj", "{7D4D4587-76D5-4F06-980A-E9505DFCA7B6}"
EndProject EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Meta", "Meta", "{34FC1FD6-3C79-401D-A6FD-DE4DF95FA268}"
ProjectSection(SolutionItems) = preProject
NChronicle.File.nuspec = NChronicle.File.nuspec
EndProjectSection
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Build", "Build", "{C655F21E-855F-4A70-BCB9-DCB8B200DD2F}"
ProjectSection(SolutionItems) = preProject
.gitlab-ci.yml = .gitlab-ci.yml
Build.ps1 = Build.ps1
BuildFormattedWiki.ps1 = BuildFormattedWiki.ps1
EndProjectSection
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "NChronicle.File_NetStandard", "NChronicle.File_NetStandard.csproj", "{88B7A5A9-538C-4DB6-8F50-6BC58D09F475}"
EndProject
Global Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|Any CPU = Debug|Any CPU Debug|Any CPU = Debug|Any CPU
...@@ -23,11 +37,16 @@ Global ...@@ -23,11 +37,16 @@ Global
{7D4D4587-76D5-4F06-980A-E9505DFCA7B6}.Debug|Any CPU.Build.0 = Debug|Any CPU {7D4D4587-76D5-4F06-980A-E9505DFCA7B6}.Debug|Any CPU.Build.0 = Debug|Any CPU
{7D4D4587-76D5-4F06-980A-E9505DFCA7B6}.Release|Any CPU.ActiveCfg = Release|Any CPU {7D4D4587-76D5-4F06-980A-E9505DFCA7B6}.Release|Any CPU.ActiveCfg = Release|Any CPU
{7D4D4587-76D5-4F06-980A-E9505DFCA7B6}.Release|Any CPU.Build.0 = Release|Any CPU {7D4D4587-76D5-4F06-980A-E9505DFCA7B6}.Release|Any CPU.Build.0 = Release|Any CPU
{88B7A5A9-538C-4DB6-8F50-6BC58D09F475}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{88B7A5A9-538C-4DB6-8F50-6BC58D09F475}.Debug|Any CPU.Build.0 = Debug|Any CPU
{88B7A5A9-538C-4DB6-8F50-6BC58D09F475}.Release|Any CPU.ActiveCfg = Release|Any CPU
{88B7A5A9-538C-4DB6-8F50-6BC58D09F475}.Release|Any CPU.Build.0 = Release|Any CPU
EndGlobalSection EndGlobalSection
GlobalSection(SolutionProperties) = preSolution GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE HideSolutionNode = FALSE
EndGlobalSection EndGlobalSection
GlobalSection(NestedProjects) = preSolution GlobalSection(NestedProjects) = preSolution
{7D4D4587-76D5-4F06-980A-E9505DFCA7B6} = {1338668E-E646-4575-B3D8-7E6F5980AE63} {7D4D4587-76D5-4F06-980A-E9505DFCA7B6} = {34FC1FD6-3C79-401D-A6FD-DE4DF95FA268}
{C655F21E-855F-4A70-BCB9-DCB8B200DD2F} = {34FC1FD6-3C79-401D-A6FD-DE4DF95FA268}
EndGlobalSection EndGlobalSection
EndGlobal EndGlobal
<?xml version="1.0" encoding="utf-8"?> <?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="14.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> <Project ToolsVersion="14.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<Import Project="$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props" Condition="Exists('$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props')" /> <Import Project="$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props" Condition="Exists('$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props')" />
<PropertyGroup> <PropertyGroup>
<Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration> <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
<Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform> <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
<ProjectGuid>{5CCFB68D-D230-48AA-9DDC-BCE65BA8EC87}</ProjectGuid> <ProjectGuid>{5CCFB68D-D230-48AA-9DDC-BCE65BA8EC87}</ProjectGuid>
<OutputType>Library</OutputType> <OutputType>Library</OutputType>
<AppDesignerFolder>Properties</AppDesignerFolder> <AppDesignerFolder>Properties</AppDesignerFolder>
<RootNamespace>NChronicle.File</RootNamespace> <RootNamespace>NChronicle.File</RootNamespace>
<AssemblyName>NChronicle.File</AssemblyName> <AssemblyName>NChronicle.File</AssemblyName>
<TargetFrameworkVersion>v4.0</TargetFrameworkVersion> <TargetFrameworkVersion>v4.0</TargetFrameworkVersion>
<FileAlignment>512</FileAlignment> <FileAlignment>512</FileAlignment>
<TargetFrameworkProfile /> <TargetFrameworkProfile />
</PropertyGroup> <ResolveNuGetPackages>false</ResolveNuGetPackages>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' "> </PropertyGroup>
<DebugSymbols>true</DebugSymbols> <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
<DebugType>full</DebugType> <DebugSymbols>true</DebugSymbols>
<Optimize>false</Optimize> <DebugType>full</DebugType>
<OutputPath>bin\Debug\</OutputPath> <Optimize>false</Optimize>
<DefineConstants>DEBUG;TRACE</DefineConstants> <OutputPath>bin\Debug\netfx4.0\</OutputPath>
<ErrorReport>prompt</ErrorReport> <DefineConstants>DEBUG;TRACE;NETFX</DefineConstants>
<WarningLevel>4</WarningLevel> <ErrorReport>prompt</ErrorReport>
<DocumentationFile>bin\Debug\NChronicle.File.XML</DocumentationFile> <WarningLevel>4</WarningLevel>
</PropertyGroup> <DocumentationFile>bin\Debug\NChronicle.File.XML</DocumentationFile>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' "> </PropertyGroup>
<DebugType>pdbonly</DebugType> <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
<Optimize>true</Optimize> <DebugType>none</DebugType>
<OutputPath>bin\Release\</OutputPath> <Optimize>true</Optimize>
<DefineConstants>TRACE</DefineConstants> <OutputPath>bin\Release\netfx4.0\</OutputPath>
<ErrorReport>prompt</ErrorReport> <DefineConstants>TRACE;NETFX</DefineConstants>
<WarningLevel>4</WarningLevel> <ErrorReport>prompt</ErrorReport>
<DocumentationFile>bin\Release\NChronicle.File.XML</DocumentationFile> <WarningLevel>4</WarningLevel>
</PropertyGroup> <DocumentationFile>bin\Release\NChronicle.File.XML</DocumentationFile>
<ItemGroup> </PropertyGroup>
<Reference Include="NChronicle.Core, Version=1.0.3.0, Culture=neutral, processorArchitecture=MSIL"> <ItemGroup>
<HintPath>packages\NChronicle.Core.1.0.3\lib\net40\NChronicle.Core.dll</HintPath> <Reference Include="NChronicle.Core, Version=1.0.3.0, Culture=neutral, processorArchitecture=MSIL">
</Reference> <HintPath>packages\NChronicle.Core.1.0.3\lib\net40\NChronicle.Core.dll</HintPath>
<Reference Include="System" /> </Reference>
<Reference Include="System.Core" /> <Reference Include="System" />
<Reference Include="System.Xml" /> <Reference Include="System.Core" />
</ItemGroup> <Reference Include="System.Xml" />
<ItemGroup> </ItemGroup>
<Compile Include="Configuration\FileChronicleLibraryConfiguration.cs" /> <ItemGroup>
<Compile Include="Configuration\RetentionPolicyConfiguration.cs" /> <Compile Include="Configuration\FileChronicleLibraryConfiguration.cs" />
<Compile Include="RetentionPolicy.cs" /> <Compile Include="Configuration\RetentionPolicyConfiguration.cs" />
<Compile Include="Delegates\RetentionPolicyConfigurationDelegate.cs" /> <Compile Include="RetentionPolicy.cs" />
<Compile Include="Interfaces\IRetentionPolicy.cs" /> <Compile Include="Delegates\RetentionPolicyConfigurationDelegate.cs" />
<Compile Include="Delegates\FileChronicleLibraryConfigurationDelegate.cs" /> <Compile Include="Interfaces\IRetentionPolicy.cs" />
<Compile Include="Exceptions\InvalidFilePathException.cs" /> <Compile Include="Delegates\FileChronicleLibraryConfigurationDelegate.cs" />
<Compile Include="Extensions\ConfigurationExtensions.cs" /> <Compile Include="Exceptions\InvalidFilePathException.cs" />
<Compile Include="FileChronicleLibrary.cs" /> <Compile Include="Extensions\ConfigurationExtensions.cs" />
<Compile Include="Properties\AssemblyInfo.cs" /> <Compile Include="FileChronicleLibrary.cs" />
</ItemGroup> <Compile Include="Properties\AssemblyInfo.cs" />
<ItemGroup> <None Include="packages.config" />
<None Include="packages.config" /> </ItemGroup>
</ItemGroup> <Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" /> <!-- To modify your build process, add your task inside one of the targets below and uncomment it.
<!-- To modify your build process, add your task inside one of the targets below and uncomment it. Other similar extension points exist, see Microsoft.Common.targets.
Other similar extension points exist, see Microsoft.Common.targets. <Target Name="BeforeBuild">
<Target Name="BeforeBuild"> </Target>
</Target> <Target Name="AfterBuild">
<Target Name="AfterBuild"> </Target>
</Target> -->
-->
</Project> </Project>
\ No newline at end of file
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<TargetFramework>netstandard1.4</TargetFramework>
<EnableDefaultCompileItems>false</EnableDefaultCompileItems>
<AssemblyName>NChronicle.File</AssemblyName>
<RootNamespace>NChronicle.File</RootNamespace>
<Version>1.1.0</Version>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|AnyCPU'">
<LangVersion>latest</LangVersion>
<DebugType>none</DebugType>
<DebugSymbols>false</DebugSymbols>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|AnyCPU'">
<DebugType>full</DebugType>
<DebugSymbols>true</DebugSymbols>
</PropertyGroup>
<ItemGroup>
<None Remove="**\*" />
<Compile Include="Configuration\FileChronicleLibraryConfiguration.cs" />
<Compile Include="Configuration\RetentionPolicyConfiguration.cs" />
<Compile Include="RetentionPolicy.cs" />
<Compile Include="Delegates\RetentionPolicyConfigurationDelegate.cs" />
<Compile Include="Interfaces\IRetentionPolicy.cs" />
<Compile Include="Delegates\FileChronicleLibraryConfigurationDelegate.cs" />
<Compile Include="Exceptions\InvalidFilePathException.cs" />
<Compile Include="Extensions\ConfigurationExtensions.cs" />
<Compile Include="FileChronicleLibrary.cs" />
<None Include="packages.config" />
</ItemGroup>
<ItemGroup>
<PackageReference Include="NChronicle.Core" Version="1.1.0" />
<PackageReference Include="System.IO.FileSystem" Version="4.3.0" />
<PackageReference Include="System.Reflection" Version="4.3.0" />
<PackageReference Include="System.Threading.Thread" Version="4.3.0" />
</ItemGroup>
</Project>
\ No newline at end of file
...@@ -31,5 +31,5 @@ using System.Runtime.InteropServices; ...@@ -31,5 +31,5 @@ using System.Runtime.InteropServices;
// You can specify all the values or you can default the Build and Revision Numbers // You can specify all the values or you can default the Build and Revision Numbers
// by using the '*' as shown below: // by using the '*' as shown below:
// [assembly: AssemblyVersion("1.0.*")] // [assembly: AssemblyVersion("1.0.*")]
[assembly: AssemblyVersion("1.0.1.0")] [assembly: AssemblyVersion("1.1.0.0")]
[assembly: AssemblyFileVersion("1.0.1.0")] [assembly: AssemblyFileVersion("1.1.0.0")]
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment