Commit f645316b authored by Andy James's avatar Andy James

Initial commit - Migrated NChronicle.Console

parents
.vs/
.idea/
packages/
*.DotSettings.user
*.csproj.user
*.nupkg
*.log
**/bin/
**/obj/
stages:
- Build
- Package
Build Solution:
stage: Build
script: "powershell .\\Build.ps1 NChronicle.Console.sln"
\ No newline at end of file
[submodule "NChronicle.Console.Wiki"]
path = _Wiki
url = [email protected]:NChronicle/NChronicle.Console.wiki.git
Param([string] $target, [string] $msbuild)
$PROGRAM_FILES_32 = ${env:ProgramFiles(x86)}
$DEFAULT_LOCATION_FOR_BUILDTOOLS = "$PROGRAM_FILES_32\Microsoft Visual Studio\2017\BuildTools\MSBuild\15.0\Bin\MSBuild.exe"
$DEFAULT_LOCATION_FOR_VS_COMMUNITY = "$PROGRAM_FILES_32\Microsoft Visual Studio\2017\Community\MSBuild\15.0\Bin\MSBuild.exe"
$DEFAULT_LOCATION_FOR_VS_PROFESSIONAL = "$PROGRAM_FILES_32\Microsoft Visual Studio\2017\Professional\MSBuild\15.0\Bin\MSBuild.exe"
$DEFAULT_LOCATION_FOR_VS_ENTERPRISE = "$PROGRAM_FILES_32\Microsoft Visual Studio\2017\Enterprise\MSBuild\15.0\Bin\MSBuild.exe"
if (![String]::IsNullOrEmpty($msbuild)) {
if (-not (Test-Path $msbuild)) {
Throw [System.IO.FileNotFoundException] "The path $msbuild was invalid or the file did not exist."
}
} else {
$msbuild = $DEFAULT_LOCATION_FOR_BUILDTOOLS
if (-not (Test-Path $msbuild)) {
$msbuild = $DEFAULT_LOCATION_FOR_VS_COMMUNITY
}
if (-not (Test-Path $msbuild)) {
$msbuild = $DEFAULT_LOCATION_FOR_VS_PROFESSIONAL
}
if (-not (Test-Path $msbuild)) {
$msbuild = $DEFAULT_LOCATION_FOR_VS_ENTERPRISE
}
if (-not (Test-Path $msbuild)) {
Throw [System.IO.FileNotFoundException] "Could not find a C# 7 MSBuild tool."
}
}
&$msbuild $target
\ No newline at end of file
Param([string] $sourcePath, [string] $buildPath)
$files = get-childitem "$sourcePath*.md";
$regex = [System.Text.RegularExpressions.Regex]::new("\<a href\=\`".*?\`"\>.*?\<\/a\>");
$targetRegex = [System.Text.RegularExpressions.Regex]::new("(?<=(href\=\`")).*?(?=\`")");
$titleRegex = [System.Text.RegularExpressions.Regex]::new("(?<=(\`"\>)).*?(?=(\<\/a\>))");
foreach ($file in $files) {
set-content $file $regex.Replace(([IO.File]::ReadAllText($file)), {
param($match);
$target = $targetRegex.Match($match).Value;
if ([String]::IsNullOrEmpty($target) -or $target.ToString().StartsWith('#') -or !(Test-Path "$sourcePath$target.md")) {
return $match;
}
Write-Host("Found link $match");
$title = $titleRegex.Match($match).Value;
if ([String]::IsNullOrEmpty($title)) {
$title = $target
}
Write-Host("Rewritten to [$title]($target)")
return "[$title]($target)"
});
}
Write-Host("Removing markdown files in $buildPath")
Remove-Item $buildPath\*.md
Write-Host("Removing media files in $buildPath")
Remove-Item -Force -Recurse $buildPath\media\
Write-Host("Copying markdown files from $sourcePath to $buildPath")
Copy-Item $sourcePath\*.md $buildPath\
Write-Host("Copying media files from $sourcePath to $buildPath")
Copy-Item -Force -Recurse $sourcePath\media $buildPath\
\ No newline at end of file
This diff is collapsed.
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading;
using System.Xml;
using System.Xml.Schema;
using NChronicle.Console.Configuration;
using NChronicle.Console.Delegates;
using NChronicle.Core.Interfaces;
using NChronicle.Core.Model;
namespace NChronicle.Console {
/// <summary>
/// A <see cref="IChronicleLibrary"/> writing <see cref="ChronicleRecord"/>s to the Console.
/// </summary>
public class ConsoleChronicleLibrary : IChronicleLibrary {
private readonly ConsoleChronicleLibraryConfiguration _configuration;
private readonly Dictionary<string, MethodHandler> _methods;
private readonly Dictionary<string, KeyHandler> _keys;
/// <summary>
/// Create a new <see cref="ConsoleChronicleLibrary"/> instance with the default configuration.
/// </summary>
public ConsoleChronicleLibrary () {
this._configuration = new ConsoleChronicleLibraryConfiguration ();
this._methods = new Dictionary<string, MethodHandler> {
{"TAGS", this.TagsMethodHandler}
};
this._keys = new Dictionary<string, KeyHandler> {
{"MSG", this.MessageKeyHandler},
{"EXC", this.ExceptionKeyHandler},
{"EMSG", this.ExceptionMessageKeyHandler},
{"TH", this.ThreadKeyHandler},
{"TAGS", this.TagsKeyHandler},
{"LVL", this.LevelKeyHandler}
};
}
/// <summary>
/// Render the record to the console (if not filtered by <see cref="ChronicleLevel"/> or tag ignorance).
/// </summary>
/// <param name="record">The <see cref="ChronicleRecord"/> to render.</param>
public void Store (ChronicleRecord record) {
if (!this.ListenTo (record))
return;
var pattern = this._configuration.OutputPattern;
var output = this.FormulateOutput (record, pattern);
this.SendToConsole (output, record.Level);
}
private bool ListenTo (ChronicleRecord record) {
return (this._configuration.Levels.Any () && this._configuration.Levels.ContainsKey (record.Level))
&& (!this._configuration.Tags.Any () || this._configuration.Tags.Keys.Any (record.Tags.Contains))
&& !this._configuration.IgnoredTags.Keys.Any (record.Tags.Contains);
}
private string FormulateOutput (ChronicleRecord record, string pattern) {
var output = pattern;
var currentTime = TimeZoneInfo.ConvertTimeFromUtc (DateTime.UtcNow, this._configuration.TimeZone);
foreach (var token in this.FindTokens (pattern)) {
var tokenBody = token.Substring (1, token.Length - 2);
var tokenIsDate = tokenBody.StartsWith ("%");
if (tokenIsDate) {
var dateFormatting = tokenBody.Remove (0, 1);
output = output.Replace (token, currentTime.ToString (dateFormatting));
continue;
}
var tokenIsQuery = tokenBody.Contains ("?");
if (tokenIsQuery) {
var queryKey = tokenBody.Split ('?') [0];
var tokenIsInverseQuery = false;
if (queryKey.EndsWith ("!")) {
queryKey = queryKey.Remove (queryKey.Length - 1);
tokenIsInverseQuery = true;
}
var hasMeaning = this._keys.ContainsKey (queryKey)
&& !string.IsNullOrEmpty (this._keys [queryKey] (record));
if (tokenIsInverseQuery == hasMeaning) {
output = output.Replace (token, string.Empty);
continue;
}
var queryBody = tokenBody.Substring (queryKey.Length + (tokenIsInverseQuery ? 2 : 1));
var queryOutput = this.FormulateOutput (record, queryBody);
output = output.Replace (token, queryOutput);
continue;
}
var tokenIsMethodInvokation = tokenBody.Contains ("|");
if (tokenIsMethodInvokation) {
var methodKey = tokenBody.Split ('|') [0];
var invokationArguments = tokenBody.Substring (methodKey.Length + 1).Split ('|');
if (this._methods.ContainsKey (methodKey)) {
output = output.Replace (token, this._methods [methodKey] (record, invokationArguments));
continue;
}
}
if (this._keys.ContainsKey (tokenBody)) {
output = output.Replace (token, this._keys [tokenBody] (record));
}
}
return output;
}
private IEnumerable<string> FindTokens (string input) {
var output = new List<string> ();
var nest = 0;
var position = -1;
var token = new StringBuilder ();
while (++position < input.Length) {
if (input [position] == '{') {
nest++;
}
if (nest > 0) {
token.Append (input [position]);
}
if (input [position] == '}') {
nest--;
if (nest == 0) {
output.Add (token.ToString ());
token.Clear ();
}
}
}
return output;
}
private string TagsMethodHandler (ChronicleRecord record, params string [] parameters) {
return parameters.Length < 1 ? string.Empty : string.Join (parameters [0], record.Tags);
}
private string MessageKeyHandler (ChronicleRecord record) {
return record.Message != record.Exception?.Message ? record.Message : string.Empty;
}
private string ExceptionKeyHandler (ChronicleRecord record) {
return record.Exception?.ToString ();
}
private string ExceptionMessageKeyHandler (ChronicleRecord record) {
return record.Exception?.Message;
}
private string ThreadKeyHandler (ChronicleRecord record) {
return Thread.CurrentThread.ManagedThreadId.ToString ();
}
private string TagsKeyHandler (ChronicleRecord record) {
return this.TagsMethodHandler (record, ", ");
}
private string LevelKeyHandler (ChronicleRecord record) {
return record.Level.ToString ();
}
private void SendToConsole (string output, ChronicleLevel level) {
lock (System.Console.Out) {
var prevBackgroundColor = System.Console.BackgroundColor;
var prevForegroundColor = System.Console.ForegroundColor;
System.Console.BackgroundColor = this._configuration.BackgroundColors [level];
System.Console.ForegroundColor = this._configuration.ForegroundColors [level];
System.Console.WriteLine (output);
System.Console.BackgroundColor = prevBackgroundColor;
System.Console.ForegroundColor = prevForegroundColor;
}
}
/// <summary>
/// Configure this <see cref="ConsoleChronicleLibrary"/> with the specified options.
/// </summary>
/// <param name="configurationDelegate">A function to set <see cref="ConsoleChronicleLibrary"/> configuration.</param>
/// <returns>This <see cref="ConsoleChronicleLibrary"/> instance.</returns>
public ConsoleChronicleLibrary Configure (ConsoleChronicleLibraryConfigurationDelegate configurationDelegate) {
configurationDelegate.Invoke (this._configuration);
return this;
}
private delegate string MethodHandler (ChronicleRecord record, params string [] parameters);
private delegate string KeyHandler (ChronicleRecord record);
#region Xml Serialization
/// <summary>
/// Required for XML serialization, this method offers no functionality.
/// </summary>
/// <returns>A null <see cref="XmlSchema"/>.</returns>
public XmlSchema GetSchema () => null;
/// <summary>
/// Populate configuration from XML via the specified <see cref="XmlReader" />.
/// </summary>
/// <param name="reader"><see cref="XmlReader" /> stream from the configuration file.</param>
/// <seealso cref="Core.NChronicle.ConfigureFrom(string, bool, int)"/>
public void ReadXml (XmlReader reader) => this._configuration.ReadXml (reader);
/// <summary>
/// Write configuration to XML via the specified <see cref="XmlWriter" />.
/// </summary>
/// <param name="writer"><see cref="XmlWriter" /> stream to the configuration file.</param>
/// <seealso cref="Core.NChronicle.SaveConfigurationTo(string)"/>
public void WriteXml (XmlWriter writer) => this._configuration.WriteXml (writer);
#endregion
}
}
\ No newline at end of file
using NChronicle.Console.Configuration;
namespace NChronicle.Console.Delegates {
/// <summary>
/// A function to set <see cref="ConsoleChronicleLibrary"/>.
/// </summary>
/// <param name="configuration">The <see cref="ConsoleChronicleLibrary"/> to configure.</param>
public delegate void ConsoleChronicleLibraryConfigurationDelegate (ConsoleChronicleLibraryConfiguration configuration);
}
\ No newline at end of file
using NChronicle.Core.Model;
namespace NChronicle.Console.Extensions {
/// <summary>
/// Container for configuration extension methods.
/// </summary>
public static class ConfigurationExtensions {
/// <summary>
/// Create and add a <see cref="ConsoleChronicleLibrary"/> to the specified <see cref="ChronicleConfiguration"/>.
/// </summary>
/// <param name="config">The <see cref="ChronicleConfiguration"/> for which to add the <see cref="ConsoleChronicleLibrary"/>.</param>
/// <returns>The created <see cref="ConsoleChronicleLibrary"/>.</returns>
public static ConsoleChronicleLibrary WithConsoleLibrary (this ChronicleConfiguration config) {
var lib = new ConsoleChronicleLibrary();
config.WithLibrary(lib);
return lib;
}
}
}
\ No newline at end of file
This diff is collapsed.
<?xml version="1.0" encoding="utf-8"?>
<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')" />
<PropertyGroup>
<Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
<Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
<ProjectGuid>{6908522A-FDD9-450E-9BC9-C3D8FF59540D}</ProjectGuid>
<OutputType>Library</OutputType>
<AppDesignerFolder>Properties</AppDesignerFolder>
<RootNamespace>NChronicle.Console</RootNamespace>
<AssemblyName>NChronicle.Console</AssemblyName>
<TargetFrameworkVersion>v4.0</TargetFrameworkVersion>
<FileAlignment>512</FileAlignment>
<AutoGenerateBindingRedirects>true</AutoGenerateBindingRedirects>
<TargetFrameworkProfile>
</TargetFrameworkProfile>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
<PlatformTarget>AnyCPU</PlatformTarget>
<DebugSymbols>true</DebugSymbols>
<DebugType>full</DebugType>
<Optimize>false</Optimize>
<OutputPath>bin\Debug\</OutputPath>
<DefineConstants>DEBUG;TRACE</DefineConstants>
<ErrorReport>prompt</ErrorReport>
<WarningLevel>4</WarningLevel>
<DocumentationFile>bin\Debug\NChronicle.Console.XML</DocumentationFile>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
<PlatformTarget>AnyCPU</PlatformTarget>
<DebugType>none</DebugType>
<Optimize>true</Optimize>
<OutputPath>bin\Release\</OutputPath>
<DefineConstants>TRACE</DefineConstants>
<ErrorReport>prompt</ErrorReport>
<WarningLevel>4</WarningLevel>
<RegisterForComInterop>false</RegisterForComInterop>
<DocumentationFile>bin\Release\NChronicle.Console.XML</DocumentationFile>
</PropertyGroup>
<PropertyGroup>
<StartupObject />
</PropertyGroup>
<ItemGroup>
<Compile Include="Extensions\ConfigurationExtensions.cs" />
<Compile Include="Delegates\ConsoleChronicleLibraryConfigurationDelegate.cs" />
<Compile Include="ConsoleChronicleLibrary.cs" />
<Compile Include="Configuration\ConsoleChronicleLibraryConfiguration.cs" />
<Compile Include="Properties\AssemblyInfo.cs" />
</ItemGroup>
<ItemGroup>
<Reference Include="NChronicle.Core, Version=1.0.3.0, Culture=neutral, processorArchitecture=MSIL">
<HintPath>packages\NChronicle.Core.1.0.3\lib\net40\NChronicle.Core.dll</HintPath>
</Reference>
<Reference Include="System" />
<Reference Include="System.XML" />
</ItemGroup>
<ItemGroup>
<None Include="NChronicle.Console.nuspec" />
<None Include="packages.config" />
</ItemGroup>
<ItemGroup />
<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
<!-- 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.
<Target Name="BeforeBuild">
</Target>
<Target Name="AfterBuild">
</Target>
-->
</Project>
\ No newline at end of file
<?xml version="1.0"?>
<package >
<metadata>
<id>NChronicle.Console</id>
<title>NChronicle.Console</title>
<version>1.0.3</version>
<authors>Andy James</authors>
<owners>Andy James</owners>
<licenseUrl>https://git.ikimi.co/NChronicle/NChronicle.Console/raw/master/LICENSE</licenseUrl>
<projectUrl>https://git.ikimi.co/NChronicle/NChronicle.Console</projectUrl>
<iconUrl>https://git.ikimi.co/uploads/group/avatar/5/NChronicle_Logo.png</iconUrl>
<requireLicenseAcceptance>false</requireLicenseAcceptance>
<summary>
NChronicle is an extensible logging and output library allowing centralized management and distribution of log messages to a number of logging destinations (known as 'Libraries'). NChronicle.Console is a highly configurable NChronicle Library dispatching log messages to STDOUT / the Console.
</summary>
<description>
NChronicle is an extensible logging and output library allowing centralized management and distribution of log messages to a number of logging destinations (known as 'Libraries').
NChronicle.Console is a highly configurable console logging Library for the NChronicle logging framework. NChronicle.Console includes options to ignore and/or listen solely to certain log messages via level and/or tags, completely customize the output format (date/time format specification, conditionals, and arguments), specify time zone, and of course customize colors.
Further Libraries planned for the NChronicle logging framework include NChronicle.File, NChronicle.Email, NChronicle.API and NChronicle.Owin.
</description>
<dependencies>
<group targetFramework="net40">
<dependency id="NChronicle.Core" version="1.0.2" />
</group>
</dependencies>
<frameworkAssemblies>
<frameworkAssembly assemblyName="System" targetFramework="net40" />
<frameworkAssembly assemblyName="System.Xml" targetFramework="net40" />
</frameworkAssemblies>
<language>en-us</language>
<releaseNotes>
Added extension method to append a ConsoleChronicleLibrary to NChronicle configuration.
</releaseNotes>
<copyright>Copyright 2016</copyright>
<tags>NChronicle Events Audit Logging Log Trail Recording History Tracking Output Console STDOUT Interactive</tags>
</metadata>
<files>
<file src="bin/Release/NChronicle.Console.dll" target="lib\net40" />
</files>
</package>
<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="4.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<PropertyGroup>
<!-- The configuration and platform will be used to determine which assemblies to include from solution and
project documentation sources -->
<Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
<Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
<SchemaVersion>2.0</SchemaVersion>
<ProjectGuid>{42aa9722-20df-4e5c-b051-eccb360461d8}</ProjectGuid>
<SHFBSchemaVersion>2015.6.5.0</SHFBSchemaVersion>
<!-- AssemblyName, Name, and RootNamespace are not used by SHFB but Visual Studio adds them anyway -->
<AssemblyName>Documentation</AssemblyName>
<RootNamespace>Documentation</RootNamespace>
<Name>Documentation</Name>
<!-- SHFB properties -->
<FrameworkVersion>.NET Framework 4.0</FrameworkVersion>
<OutputPath>bin\_Wiki\</OutputPath>
<HtmlHelpName>NChronicle.Console</HtmlHelpName>
<Language>en-US</Language>
<SaveComponentCacheCapacity>100</SaveComponentCacheCapacity>
<BuildAssemblerVerbosity>OnlyWarningsAndErrors</BuildAssemblerVerbosity>
<HelpFileFormat>Markdown</HelpFileFormat>
<IndentHtml>False</IndentHtml>
<KeepLogFile>True</KeepLogFile>
<DisableCodeBlockComponent>False</DisableCodeBlockComponent>
<CleanIntermediates>True</CleanIntermediates>
<WarnOnMissingSourceContext>False</WarnOnMissingSourceContext>
<SourceCodeBasePath>NChronicle.Console\</SourceCodeBasePath>
<MissingTags>Summary, Parameter, Returns, AutoDocumentCtors, TypeParameter, AutoDocumentDispose</MissingTags>
<DocumentationSources>
<DocumentationSource sourceFile="NChronicle.Console.csproj" />
</DocumentationSources>
<HelpFileVersion>1.0.2</HelpFileVersion>
<MaximumGroupParts>2</MaximumGroupParts>
<NamespaceGrouping>False</NamespaceGrouping>
<SyntaxFilters>C#, Visual Basic, F#</SyntaxFilters>
<SdkLinkTarget>Blank</SdkLinkTarget>
<RootNamespaceContainer>True</RootNamespaceContainer>
<PresentationStyle>Markdown</PresentationStyle>
<Preliminary>False</Preliminary>
<NamingMethod>MemberName</NamingMethod>
<HelpTitle>NChronicle.Console</HelpTitle>
<ContentPlacement>AboveNamespaces</ContentPlacement>
<FeedbackEMailLinkText>kana%40ikimi.co</FeedbackEMailLinkText>
<FeedbackEMailAddress>kana%40ikimi.co</FeedbackEMailAddress>
<ComponentConfigurations />
<PlugInConfigurations>
</PlugInConfigurations>
</PropertyGroup>
<!-- There are no properties for these groups. AnyCPU needs to appear in order for Visual Studio to perform
the build. The others are optional common platform types that may appear. -->
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|x86' ">
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|x86' ">
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|x64' ">
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|x64' ">
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|Win32' ">
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|Win32' ">
</PropertyGroup>
<!-- Import the SHFB build targets -->
<Import Project="$(SHFBROOT)\SandcastleHelpFileBuilder.targets" />
<!-- The pre-build and post-build event properties must appear *after* the targets file import in order to be
evaluated correctly. -->
<PropertyGroup>
<PreBuildEvent>
</PreBuildEvent>
<PostBuildEvent>powershell "$(ProjectDir)BuildFormattedWiki.ps1 '$(ProjectDir)$(OutputPath)' '$(ProjectDir)_Wiki'"</PostBuildEvent>
<RunPostBuildEvent>OnBuildSuccess</RunPostBuildEvent>
</PropertyGroup>
</Project>
\ No newline at end of file

Microsoft Visual Studio Solution File, Format Version 12.00
# Visual Studio 15
VisualStudioVersion = 15.0.26430.16
MinimumVisualStudioVersion = 10.0.40219.1
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "NChronicle.Console", "NChronicle.Console.csproj", "{6908522A-FDD9-450E-9BC9-C3D8FF59540D}"
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Wiki", "Wiki", "{E93D5371-746F-42D9-9662-422784CA4A7C}"
EndProject
Project("{7CF6DF6D-3B04-46F8-A40B-537D21BCA0B4}") = "NChronicle.Console", "NChronicle.Console.shfbproj", "{42AA9722-20DF-4E5C-B051-ECCB360461D8}"
EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|Any CPU = Debug|Any CPU
Release|Any CPU = Release|Any CPU
EndGlobalSection
GlobalSection(ProjectConfigurationPlatforms) = postSolution
{6908522A-FDD9-450E-9BC9-C3D8FF59540D}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{6908522A-FDD9-450E-9BC9-C3D8FF59540D}.Debug|Any CPU.Build.0 = Debug|Any CPU
{6908522A-FDD9-450E-9BC9-C3D8FF59540D}.Release|Any CPU.ActiveCfg = Release|Any CPU
{6908522A-FDD9-450E-9BC9-C3D8FF59540D}.Release|Any CPU.Build.0 = Release|Any CPU
{42AA9722-20DF-4E5C-B051-ECCB360461D8}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{42AA9722-20DF-4E5C-B051-ECCB360461D8}.Debug|Any CPU.Build.0 = Debug|Any CPU
{42AA9722-20DF-4E5C-B051-ECCB360461D8}.Release|Any CPU.ActiveCfg = Release|Any CPU
{42AA9722-20DF-4E5C-B051-ECCB360461D8}.Release|Any CPU.Build.0 = Release|Any CPU
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE
EndGlobalSection
GlobalSection(NestedProjects) = preSolution
{42AA9722-20DF-4E5C-B051-ECCB360461D8} = {E93D5371-746F-42D9-9662-422784CA4A7C}
EndGlobalSection
EndGlobal
using System.Reflection;
using System.Runtime.CompilerServices;
using System.Runtime.InteropServices;
// General Information about an assembly is controlled through the following
// set of attributes. Change these attribute values to modify the information
// associated with an assembly.
[assembly: AssemblyTitle("NChronicle.Console")]
[assembly: AssemblyDescription("A highly configurable console logging Library for the NChronicle logging framework.")]
[assembly: AssemblyConfiguration("")]
[assembly: AssemblyCompany("")]
[assembly: AssemblyProduct("NChronicle.Console")]
[assembly: AssemblyCopyright("Copyright © 2016")]
[assembly: AssemblyTrademark("")]
[assembly: AssemblyCulture("")]
// Setting ComVisible to false makes the types in this assembly not visible
// to COM components. If you need to access a type in this assembly from
// COM, set the ComVisible attribute to true on that type.
[assembly: ComVisible(false)]
// The following GUID is for the ID of the typelib if this project is exposed to COM
[assembly: Guid("6908522a-fdd9-450e-9bc9-c3d8ff59540d")]
// Version information for an assembly consists of the following four values:
//
// Major Version
// Minor Version
// Build Number
// Revision
//
// You can specify all the values or you can default the Build and Revision Numbers
// by using the '*' as shown below:
// [assembly: AssemblyVersion("1.0.*")]
[assembly: AssemblyVersion("1.0.3.0")]
[assembly: AssemblyFileVersion("1.0.3.0")]
_Wiki @ 6e0f5ee3
Subproject commit 6e0f5ee3bc11ae2a328ff5c6ba0c0e8ef57b3fe2
<?xml version="1.0" encoding="utf-8"?>
<packages>
<package id="NChronicle.Core" version="1.0.3" targetFramework="net40" />
</packages>
\ No newline at end of file
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