[
  {
    "path": ".gitignore",
    "content": "## Ignore Visual Studio temporary files, build results, and\n## files generated by popular Visual Studio add-ons.\n\n# User-specific files\n*.suo\n*.user\n*.userosscache\n*.sln.docstates\n\n# User-specific files (MonoDevelop/Xamarin Studio)\n*.userprefs\n\n# Build results\n[Dd]ebug/\n[Dd]ebugPublic/\n[Rr]elease/\n[Rr]eleases/\nx64/\nx86/\nbld/\n[Bb]in/\n[Oo]bj/\n[Ll]og/\n\n# Visual Studio 2015 cache/options directory\n.vs/\n# Uncomment if you have tasks that create the project's static files in wwwroot\n#wwwroot/\n\n# MSTest test Results\n[Tt]est[Rr]esult*/\n[Bb]uild[Ll]og.*\n\n# NUNIT\n*.VisualState.xml\nTestResult.xml\n\n# Build Results of an ATL Project\n[Dd]ebugPS/\n[Rr]eleasePS/\ndlldata.c\n\n# DNX\nproject.lock.json\nartifacts/\n\n*_i.c\n*_p.c\n*_i.h\n*.ilk\n*.meta\n*.obj\n*.pch\n*.pdb\n*.pgc\n*.pgd\n*.rsp\n*.sbr\n*.tlb\n*.tli\n*.tlh\n*.tmp\n*.tmp_proj\n*.log\n*.vspscc\n*.vssscc\n.builds\n*.pidb\n*.svclog\n*.scc\n\n# Chutzpah Test files\n_Chutzpah*\n\n# Visual C++ cache files\nipch/\n*.aps\n*.ncb\n*.opendb\n*.opensdf\n*.sdf\n*.cachefile\n*.VC.db\n*.VC.VC.opendb\n\n# Visual Studio profiler\n*.psess\n*.vsp\n*.vspx\n*.sap\n\n# TFS 2012 Local Workspace\n$tf/\n\n# Guidance Automation Toolkit\n*.gpState\n\n# ReSharper is a .NET coding add-in\n_ReSharper*/\n*.[Rr]e[Ss]harper\n*.DotSettings.user\n\n# JustCode is a .NET coding add-in\n.JustCode\n\n# TeamCity is a build add-in\n_TeamCity*\n\n# DotCover is a Code Coverage Tool\n*.dotCover\n\n# NCrunch\n_NCrunch_*\n.*crunch*.local.xml\nnCrunchTemp_*\n\n# MightyMoose\n*.mm.*\nAutoTest.Net/\n\n# Web workbench (sass)\n.sass-cache/\n\n# Installshield output folder\n[Ee]xpress/\n\n# DocProject is a documentation generator add-in\nDocProject/buildhelp/\nDocProject/Help/*.HxT\nDocProject/Help/*.HxC\nDocProject/Help/*.hhc\nDocProject/Help/*.hhk\nDocProject/Help/*.hhp\nDocProject/Help/Html2\nDocProject/Help/html\n\n# Click-Once directory\npublish/\n\n# Publish Web Output\n*.[Pp]ublish.xml\n*.azurePubxml\n# TODO: Comment the next line if you want to checkin your web deploy settings\n# but database connection strings (with potential passwords) will be unencrypted\n*.pubxml\n*.publishproj\n\n# Microsoft Azure Web App publish settings. Comment the next line if you want to\n# checkin your Azure Web App publish settings, but sensitive information contained\n# in these scripts will be unencrypted\nPublishScripts/\n\n# NuGet Packages\n*.nupkg\n# The packages folder can be ignored because of Package Restore\n**/packages/*\n# except build/, which is used as an MSBuild target.\n!**/packages/build/\n# Uncomment if necessary however generally it will be regenerated when needed\n#!**/packages/repositories.config\n# NuGet v3's project.json files produces more ignoreable files\n*.nuget.props\n*.nuget.targets\n\n# Microsoft Azure Build Output\ncsx/\n*.build.csdef\n\n# Microsoft Azure Emulator\necf/\nrcf/\n\n# Windows Store app package directories and files\nAppPackages/\nBundleArtifacts/\nPackage.StoreAssociation.xml\n_pkginfo.txt\n\n# Visual Studio cache files\n# files ending in .cache can be ignored\n*.[Cc]ache\n# but keep track of directories ending in .cache\n!*.[Cc]ache/\n\n# Others\nClientBin/\n~$*\n*~\n*.dbmdl\n*.dbproj.schemaview\n*.pfx\n*.publishsettings\nnode_modules/\norleans.codegen.cs\n\n# Since there are multiple workflows, uncomment next line to ignore bower_components\n# (https://github.com/github/gitignore/pull/1529#issuecomment-104372622)\n#bower_components/\n\n# RIA/Silverlight projects\nGenerated_Code/\n\n# Backup & report files from converting an old project file\n# to a newer Visual Studio version. Backup files are not needed,\n# because we have git ;-)\n_UpgradeReport_Files/\nBackup*/\nUpgradeLog*.XML\nUpgradeLog*.htm\n\n# SQL Server files\n*.mdf\n*.ldf\n\n# Business Intelligence projects\n*.rdl.data\n*.bim.layout\n*.bim_*.settings\n\n# Microsoft Fakes\nFakesAssemblies/\n\n# GhostDoc plugin setting file\n*.GhostDoc.xml\n\n# Node.js Tools for Visual Studio\n.ntvs_analysis.dat\n\n# Visual Studio 6 build log\n*.plg\n\n# Visual Studio 6 workspace options file\n*.opt\n\n# Visual Studio LightSwitch build output\n**/*.HTMLClient/GeneratedArtifacts\n**/*.DesktopClient/GeneratedArtifacts\n**/*.DesktopClient/ModelManifest.xml\n**/*.Server/GeneratedArtifacts\n**/*.Server/ModelManifest.xml\n_Pvt_Extensions\n\n# Paket dependency manager\n.paket/paket.exe\npaket-files/\n\n# FAKE - F# Make\n.fake/\n\n# JetBrains Rider\n.idea/\n*.sln.iml\n/nugetpack\n/src/Abplus.Common/Configuration\n/Nupkg/nugetpush.bat\n/Nupkg/push-all-packages.bat\n"
  },
  {
    "path": ".nuget/NuGet.Config",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<configuration>\n  <packageSources>\n    <add key=\"nuget.org\" value=\"https://api.nuget.org/v3/index.json\" protocolVersion=\"3\" />\n  </packageSources>\n</configuration>"
  },
  {
    "path": "Abplus.sln",
    "content": "﻿\nMicrosoft Visual Studio Solution File, Format Version 12.00\n# Visual Studio Version 16\nVisualStudioVersion = 16.0.30804.86\nMinimumVisualStudioVersion = 15.0.26124.0\nProject(\"{2150E333-8FDC-42A3-9474-1A3956D46DE8}\") = \"src\", \"src\", \"{28E1F8EC-E22A-45D3-941F-2A0756D6331D}\"\nEndProject\nProject(\"{9A19103F-16F7-4668-BE54-9A1E7A4F7556}\") = \"Abplus\", \"src\\Abplus\\Abplus.csproj\", \"{10C03A51-881C-4779-9B24-5BFCE234C175}\"\nEndProject\nProject(\"{9A19103F-16F7-4668-BE54-9A1E7A4F7556}\") = \"Abplus.MqMessages\", \"src\\Abplus.MqMessages\\Abplus.MqMessages.csproj\", \"{5FE016D8-4FBC-4D85-A7D8-165E6F7887F2}\"\nEndProject\nProject(\"{9A19103F-16F7-4668-BE54-9A1E7A4F7556}\") = \"Abplus.MqMessages.AuditingConsumerHandler\", \"src\\Abplus.MqMessages.AuditingConsumerHandler\\Abplus.MqMessages.AuditingConsumerHandler.csproj\", \"{B5E2EC5D-4D8A-4FBE-9434-23B422644B68}\"\nEndProject\nProject(\"{9A19103F-16F7-4668-BE54-9A1E7A4F7556}\") = \"Abplus.MqMessages.AuditingStore\", \"src\\Abplus.MqMessages.AuditingStore\\Abplus.MqMessages.AuditingStore.csproj\", \"{AC823FF0-0EEA-46D8-B6FF-BA9E255F5EB7}\"\nEndProject\nProject(\"{9A19103F-16F7-4668-BE54-9A1E7A4F7556}\") = \"Abplus.MqMessages.IndexToES\", \"src\\Abplus.MqMessages.IndexToES\\Abplus.MqMessages.IndexToES.csproj\", \"{17E54BAB-2FF4-42A1-ACBA-0F88066FF4FD}\"\nEndProject\nProject(\"{9A19103F-16F7-4668-BE54-9A1E7A4F7556}\") = \"Abplus.MqMessages.RebusCore\", \"src\\Abplus.MqMessages.RebusCore\\Abplus.MqMessages.RebusCore.csproj\", \"{D27E21C1-96C8-4EFF-AA4D-43A8ED7CC40B}\"\nEndProject\nProject(\"{9A19103F-16F7-4668-BE54-9A1E7A4F7556}\") = \"Abplus.MqMessages.RedisStoreMessageTracker\", \"src\\Abplus.MqMessages.RedisStoreMessageTracker\\Abplus.MqMessages.RedisStoreMessageTracker.csproj\", \"{7A5BE15C-4B89-4397-920F-A15FB8A76FA5}\"\nEndProject\nProject(\"{9A19103F-16F7-4668-BE54-9A1E7A4F7556}\") = \"Abplus.T4.PermissionsFromJson\", \"src\\Abplus.T4.PermissionsFromJson\\Abplus.T4.PermissionsFromJson.csproj\", \"{629C519A-14DD-4F1A-B235-AC73AC2622F7}\"\nEndProject\nProject(\"{9A19103F-16F7-4668-BE54-9A1E7A4F7556}\") = \"Abplus.MqMessages.RebusRabbitMqConsumer\", \"src\\Abplus.MqMessages.RebusRabbitMqConsumer\\Abplus.MqMessages.RebusRabbitMqConsumer.csproj\", \"{E0E26A07-B7A6-41FD-AB74-1CFCB5191F94}\"\nEndProject\nProject(\"{9A19103F-16F7-4668-BE54-9A1E7A4F7556}\") = \"Abplus.MqMessages.RebusRabbitMqPublisher\", \"src\\Abplus.MqMessages.RebusRabbitMqPublisher\\Abplus.MqMessages.RebusRabbitMqPublisher.csproj\", \"{1C7E75D5-F462-43C7-A230-4E31FAF8CC00}\"\nEndProject\nProject(\"{2150E333-8FDC-42A3-9474-1A3956D46DE8}\") = \"Solution Items\", \"Solution Items\", \"{BE7C78D3-C20F-46D4-A4DD-F66136691F17}\"\n\tProjectSection(SolutionItems) = preProject\n\t\tcommon.props = common.props\n\tEndProjectSection\nEndProject\nProject(\"{9A19103F-16F7-4668-BE54-9A1E7A4F7556}\") = \"Abplus.AspNetCore.SignalR\", \"src\\Abplus.AspNetCore.SignalR\\Abplus.AspNetCore.SignalR.csproj\", \"{6FA9C7E5-7ED9-4D09-856E-0D30D6D0E7AF}\"\nEndProject\nProject(\"{2150E333-8FDC-42A3-9474-1A3956D46DE8}\") = \"Samples\", \"Samples\", \"{9D43F9A2-6C7D-44DC-A0A0-3F0C693B9663}\"\nEndProject\nProject(\"{9A19103F-16F7-4668-BE54-9A1E7A4F7556}\") = \"Sample.MqMessages\", \"src\\Samples\\Sample.MqMessages\\Sample.MqMessages.csproj\", \"{D71B7FBA-E998-4141-81E6-E319C3941659}\"\nEndProject\nProject(\"{9A19103F-16F7-4668-BE54-9A1E7A4F7556}\") = \"Sample.DotNetCoreConsumerHost\", \"src\\Samples\\Sample.DotNetCoreConsumerHost\\Sample.DotNetCoreConsumerHost.csproj\", \"{3AFDA053-190A-4BBF-BF0D-626718239FA4}\"\nEndProject\nProject(\"{9A19103F-16F7-4668-BE54-9A1E7A4F7556}\") = \"Sample.DotNetCorePublisherHost\", \"src\\Samples\\Sample.DotNetCorePublisherHost\\Sample.DotNetCorePublisherHost.csproj\", \"{3EB8E5B8-B4A1-41EE-8E26-EED6AFF8AC8F}\"\nEndProject\nProject(\"{2150E333-8FDC-42A3-9474-1A3956D46DE8}\") = \"AuditingConsumer\", \"AuditingConsumer\", \"{D67F59C7-8882-4517-AD61-394DA98E94E5}\"\nEndProject\nProject(\"{9A19103F-16F7-4668-BE54-9A1E7A4F7556}\") = \"Sample.AuditingConsumerHandler\", \"src\\Samples\\AuditingConsumer\\Sample.AuditingConsumerHandler\\Sample.AuditingConsumerHandler.csproj\", \"{E840877E-2C05-4BF1-859A-3C6D49DFEFE6}\"\nEndProject\nProject(\"{9A19103F-16F7-4668-BE54-9A1E7A4F7556}\") = \"Sample.MqMessageAuditingStore\", \"src\\Samples\\AuditingConsumer\\Sample.MqMessageAuditingStore\\Sample.MqMessageAuditingStore.csproj\", \"{5DFA45F0-4E0E-4DF2-85E5-53ACF50CDD91}\"\nEndProject\nProject(\"{9A19103F-16F7-4668-BE54-9A1E7A4F7556}\") = \"Abplus.IO.LocalFileSystem\", \"src\\Abplus.IO.LocalFileSystem\\Abplus.IO.LocalFileSystem.csproj\", \"{5D62EA19-7E50-467A-B0BC-76334C2C69E9}\"\nEndProject\nProject(\"{9A19103F-16F7-4668-BE54-9A1E7A4F7556}\") = \"Abplus.IO.AzureBlobStorage\", \"src\\Abplus.IO.AzureBlobStorage\\Abplus.IO.AzureBlobStorage.csproj\", \"{3CD46A0D-61E6-4A0C-AF2D-176462DCF601}\"\nEndProject\nProject(\"{2150E333-8FDC-42A3-9474-1A3956D46DE8}\") = \"FileStorage\", \"FileStorage\", \"{89AE722E-588C-43F2-B4CB-A05CE184F721}\"\nEndProject\nProject(\"{9A19103F-16F7-4668-BE54-9A1E7A4F7556}\") = \"Sample.AzureBlobStorageConsole\", \"src\\Samples\\FileStorage\\Sample.AzureBlobStorage\\Sample.AzureBlobStorageConsole.csproj\", \"{EF146053-4951-4D97-9AAA-E0C1CA4801D6}\"\nEndProject\nProject(\"{9A19103F-16F7-4668-BE54-9A1E7A4F7556}\") = \"Sample.LocalFileSystemConsole\", \"src\\Samples\\FileStorage\\Sample.LocalFileSystem\\Sample.LocalFileSystemConsole.csproj\", \"{0FCE1B76-0720-4AD0-B353-F604C93DC05F}\"\nEndProject\nProject(\"{9A19103F-16F7-4668-BE54-9A1E7A4F7556}\") = \"Abplus.IO.AliyunOSSStorage\", \"src\\Abplus.IO.AliyunOSSStorage\\Abplus.IO.AliyunOSSStorage.csproj\", \"{D6E5E010-D782-4B02-94A1-1162852916D9}\"\nEndProject\nProject(\"{9A19103F-16F7-4668-BE54-9A1E7A4F7556}\") = \"Sample.AliyunOSSStorageConsole\", \"src\\Samples\\FileStorage\\Sample.AliyunOSSStorage\\Sample.AliyunOSSStorageConsole.csproj\", \"{543B7B29-B10C-4837-9479-949F7066DAAC}\"\nEndProject\nGlobal\n\tGlobalSection(SolutionConfigurationPlatforms) = preSolution\n\t\tDebug|Any CPU = Debug|Any CPU\n\t\tDebug|x64 = Debug|x64\n\t\tDebug|x86 = Debug|x86\n\t\tRelease|Any CPU = Release|Any CPU\n\t\tRelease|x64 = Release|x64\n\t\tRelease|x86 = Release|x86\n\tEndGlobalSection\n\tGlobalSection(ProjectConfigurationPlatforms) = postSolution\n\t\t{10C03A51-881C-4779-9B24-5BFCE234C175}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\n\t\t{10C03A51-881C-4779-9B24-5BFCE234C175}.Debug|Any CPU.Build.0 = Debug|Any CPU\n\t\t{10C03A51-881C-4779-9B24-5BFCE234C175}.Debug|x64.ActiveCfg = Debug|Any CPU\n\t\t{10C03A51-881C-4779-9B24-5BFCE234C175}.Debug|x64.Build.0 = Debug|Any CPU\n\t\t{10C03A51-881C-4779-9B24-5BFCE234C175}.Debug|x86.ActiveCfg = Debug|Any CPU\n\t\t{10C03A51-881C-4779-9B24-5BFCE234C175}.Debug|x86.Build.0 = Debug|Any CPU\n\t\t{10C03A51-881C-4779-9B24-5BFCE234C175}.Release|Any CPU.ActiveCfg = Release|Any CPU\n\t\t{10C03A51-881C-4779-9B24-5BFCE234C175}.Release|Any CPU.Build.0 = Release|Any CPU\n\t\t{10C03A51-881C-4779-9B24-5BFCE234C175}.Release|x64.ActiveCfg = Release|Any CPU\n\t\t{10C03A51-881C-4779-9B24-5BFCE234C175}.Release|x64.Build.0 = Release|Any CPU\n\t\t{10C03A51-881C-4779-9B24-5BFCE234C175}.Release|x86.ActiveCfg = Release|Any CPU\n\t\t{10C03A51-881C-4779-9B24-5BFCE234C175}.Release|x86.Build.0 = Release|Any CPU\n\t\t{5FE016D8-4FBC-4D85-A7D8-165E6F7887F2}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\n\t\t{5FE016D8-4FBC-4D85-A7D8-165E6F7887F2}.Debug|Any CPU.Build.0 = Debug|Any CPU\n\t\t{5FE016D8-4FBC-4D85-A7D8-165E6F7887F2}.Debug|x64.ActiveCfg = Debug|Any CPU\n\t\t{5FE016D8-4FBC-4D85-A7D8-165E6F7887F2}.Debug|x64.Build.0 = Debug|Any CPU\n\t\t{5FE016D8-4FBC-4D85-A7D8-165E6F7887F2}.Debug|x86.ActiveCfg = Debug|Any CPU\n\t\t{5FE016D8-4FBC-4D85-A7D8-165E6F7887F2}.Debug|x86.Build.0 = Debug|Any CPU\n\t\t{5FE016D8-4FBC-4D85-A7D8-165E6F7887F2}.Release|Any CPU.ActiveCfg = Release|Any CPU\n\t\t{5FE016D8-4FBC-4D85-A7D8-165E6F7887F2}.Release|Any CPU.Build.0 = Release|Any CPU\n\t\t{5FE016D8-4FBC-4D85-A7D8-165E6F7887F2}.Release|x64.ActiveCfg = Release|Any CPU\n\t\t{5FE016D8-4FBC-4D85-A7D8-165E6F7887F2}.Release|x64.Build.0 = Release|Any CPU\n\t\t{5FE016D8-4FBC-4D85-A7D8-165E6F7887F2}.Release|x86.ActiveCfg = Release|Any CPU\n\t\t{5FE016D8-4FBC-4D85-A7D8-165E6F7887F2}.Release|x86.Build.0 = Release|Any CPU\n\t\t{B5E2EC5D-4D8A-4FBE-9434-23B422644B68}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\n\t\t{B5E2EC5D-4D8A-4FBE-9434-23B422644B68}.Debug|Any CPU.Build.0 = Debug|Any CPU\n\t\t{B5E2EC5D-4D8A-4FBE-9434-23B422644B68}.Debug|x64.ActiveCfg = Debug|Any CPU\n\t\t{B5E2EC5D-4D8A-4FBE-9434-23B422644B68}.Debug|x64.Build.0 = Debug|Any CPU\n\t\t{B5E2EC5D-4D8A-4FBE-9434-23B422644B68}.Debug|x86.ActiveCfg = Debug|Any CPU\n\t\t{B5E2EC5D-4D8A-4FBE-9434-23B422644B68}.Debug|x86.Build.0 = Debug|Any CPU\n\t\t{B5E2EC5D-4D8A-4FBE-9434-23B422644B68}.Release|Any CPU.ActiveCfg = Release|Any CPU\n\t\t{B5E2EC5D-4D8A-4FBE-9434-23B422644B68}.Release|Any CPU.Build.0 = Release|Any CPU\n\t\t{B5E2EC5D-4D8A-4FBE-9434-23B422644B68}.Release|x64.ActiveCfg = Release|Any CPU\n\t\t{B5E2EC5D-4D8A-4FBE-9434-23B422644B68}.Release|x64.Build.0 = Release|Any CPU\n\t\t{B5E2EC5D-4D8A-4FBE-9434-23B422644B68}.Release|x86.ActiveCfg = Release|Any CPU\n\t\t{B5E2EC5D-4D8A-4FBE-9434-23B422644B68}.Release|x86.Build.0 = Release|Any CPU\n\t\t{AC823FF0-0EEA-46D8-B6FF-BA9E255F5EB7}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\n\t\t{AC823FF0-0EEA-46D8-B6FF-BA9E255F5EB7}.Debug|Any CPU.Build.0 = Debug|Any CPU\n\t\t{AC823FF0-0EEA-46D8-B6FF-BA9E255F5EB7}.Debug|x64.ActiveCfg = Debug|Any CPU\n\t\t{AC823FF0-0EEA-46D8-B6FF-BA9E255F5EB7}.Debug|x64.Build.0 = Debug|Any CPU\n\t\t{AC823FF0-0EEA-46D8-B6FF-BA9E255F5EB7}.Debug|x86.ActiveCfg = Debug|Any CPU\n\t\t{AC823FF0-0EEA-46D8-B6FF-BA9E255F5EB7}.Debug|x86.Build.0 = Debug|Any CPU\n\t\t{AC823FF0-0EEA-46D8-B6FF-BA9E255F5EB7}.Release|Any CPU.ActiveCfg = Release|Any CPU\n\t\t{AC823FF0-0EEA-46D8-B6FF-BA9E255F5EB7}.Release|Any CPU.Build.0 = Release|Any CPU\n\t\t{AC823FF0-0EEA-46D8-B6FF-BA9E255F5EB7}.Release|x64.ActiveCfg = Release|Any CPU\n\t\t{AC823FF0-0EEA-46D8-B6FF-BA9E255F5EB7}.Release|x64.Build.0 = Release|Any CPU\n\t\t{AC823FF0-0EEA-46D8-B6FF-BA9E255F5EB7}.Release|x86.ActiveCfg = Release|Any CPU\n\t\t{AC823FF0-0EEA-46D8-B6FF-BA9E255F5EB7}.Release|x86.Build.0 = Release|Any CPU\n\t\t{17E54BAB-2FF4-42A1-ACBA-0F88066FF4FD}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\n\t\t{17E54BAB-2FF4-42A1-ACBA-0F88066FF4FD}.Debug|Any CPU.Build.0 = Debug|Any CPU\n\t\t{17E54BAB-2FF4-42A1-ACBA-0F88066FF4FD}.Debug|x64.ActiveCfg = Debug|Any CPU\n\t\t{17E54BAB-2FF4-42A1-ACBA-0F88066FF4FD}.Debug|x64.Build.0 = Debug|Any CPU\n\t\t{17E54BAB-2FF4-42A1-ACBA-0F88066FF4FD}.Debug|x86.ActiveCfg = Debug|Any CPU\n\t\t{17E54BAB-2FF4-42A1-ACBA-0F88066FF4FD}.Debug|x86.Build.0 = Debug|Any CPU\n\t\t{17E54BAB-2FF4-42A1-ACBA-0F88066FF4FD}.Release|Any CPU.ActiveCfg = Release|Any CPU\n\t\t{17E54BAB-2FF4-42A1-ACBA-0F88066FF4FD}.Release|Any CPU.Build.0 = Release|Any CPU\n\t\t{17E54BAB-2FF4-42A1-ACBA-0F88066FF4FD}.Release|x64.ActiveCfg = Release|Any CPU\n\t\t{17E54BAB-2FF4-42A1-ACBA-0F88066FF4FD}.Release|x64.Build.0 = Release|Any CPU\n\t\t{17E54BAB-2FF4-42A1-ACBA-0F88066FF4FD}.Release|x86.ActiveCfg = Release|Any CPU\n\t\t{17E54BAB-2FF4-42A1-ACBA-0F88066FF4FD}.Release|x86.Build.0 = Release|Any CPU\n\t\t{D27E21C1-96C8-4EFF-AA4D-43A8ED7CC40B}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\n\t\t{D27E21C1-96C8-4EFF-AA4D-43A8ED7CC40B}.Debug|Any CPU.Build.0 = Debug|Any CPU\n\t\t{D27E21C1-96C8-4EFF-AA4D-43A8ED7CC40B}.Debug|x64.ActiveCfg = Debug|Any CPU\n\t\t{D27E21C1-96C8-4EFF-AA4D-43A8ED7CC40B}.Debug|x64.Build.0 = Debug|Any CPU\n\t\t{D27E21C1-96C8-4EFF-AA4D-43A8ED7CC40B}.Debug|x86.ActiveCfg = Debug|Any CPU\n\t\t{D27E21C1-96C8-4EFF-AA4D-43A8ED7CC40B}.Debug|x86.Build.0 = Debug|Any CPU\n\t\t{D27E21C1-96C8-4EFF-AA4D-43A8ED7CC40B}.Release|Any CPU.ActiveCfg = Release|Any CPU\n\t\t{D27E21C1-96C8-4EFF-AA4D-43A8ED7CC40B}.Release|Any CPU.Build.0 = Release|Any CPU\n\t\t{D27E21C1-96C8-4EFF-AA4D-43A8ED7CC40B}.Release|x64.ActiveCfg = Release|Any CPU\n\t\t{D27E21C1-96C8-4EFF-AA4D-43A8ED7CC40B}.Release|x64.Build.0 = Release|Any CPU\n\t\t{D27E21C1-96C8-4EFF-AA4D-43A8ED7CC40B}.Release|x86.ActiveCfg = Release|Any CPU\n\t\t{D27E21C1-96C8-4EFF-AA4D-43A8ED7CC40B}.Release|x86.Build.0 = Release|Any CPU\n\t\t{7A5BE15C-4B89-4397-920F-A15FB8A76FA5}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\n\t\t{7A5BE15C-4B89-4397-920F-A15FB8A76FA5}.Debug|Any CPU.Build.0 = Debug|Any CPU\n\t\t{7A5BE15C-4B89-4397-920F-A15FB8A76FA5}.Debug|x64.ActiveCfg = Debug|Any CPU\n\t\t{7A5BE15C-4B89-4397-920F-A15FB8A76FA5}.Debug|x64.Build.0 = Debug|Any CPU\n\t\t{7A5BE15C-4B89-4397-920F-A15FB8A76FA5}.Debug|x86.ActiveCfg = Debug|Any CPU\n\t\t{7A5BE15C-4B89-4397-920F-A15FB8A76FA5}.Debug|x86.Build.0 = Debug|Any CPU\n\t\t{7A5BE15C-4B89-4397-920F-A15FB8A76FA5}.Release|Any CPU.ActiveCfg = Release|Any CPU\n\t\t{7A5BE15C-4B89-4397-920F-A15FB8A76FA5}.Release|Any CPU.Build.0 = Release|Any CPU\n\t\t{7A5BE15C-4B89-4397-920F-A15FB8A76FA5}.Release|x64.ActiveCfg = Release|Any CPU\n\t\t{7A5BE15C-4B89-4397-920F-A15FB8A76FA5}.Release|x64.Build.0 = Release|Any CPU\n\t\t{7A5BE15C-4B89-4397-920F-A15FB8A76FA5}.Release|x86.ActiveCfg = Release|Any CPU\n\t\t{7A5BE15C-4B89-4397-920F-A15FB8A76FA5}.Release|x86.Build.0 = Release|Any CPU\n\t\t{629C519A-14DD-4F1A-B235-AC73AC2622F7}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\n\t\t{629C519A-14DD-4F1A-B235-AC73AC2622F7}.Debug|Any CPU.Build.0 = Debug|Any CPU\n\t\t{629C519A-14DD-4F1A-B235-AC73AC2622F7}.Debug|x64.ActiveCfg = Debug|Any CPU\n\t\t{629C519A-14DD-4F1A-B235-AC73AC2622F7}.Debug|x64.Build.0 = Debug|Any CPU\n\t\t{629C519A-14DD-4F1A-B235-AC73AC2622F7}.Debug|x86.ActiveCfg = Debug|Any CPU\n\t\t{629C519A-14DD-4F1A-B235-AC73AC2622F7}.Debug|x86.Build.0 = Debug|Any CPU\n\t\t{629C519A-14DD-4F1A-B235-AC73AC2622F7}.Release|Any CPU.ActiveCfg = Release|Any CPU\n\t\t{629C519A-14DD-4F1A-B235-AC73AC2622F7}.Release|Any CPU.Build.0 = Release|Any CPU\n\t\t{629C519A-14DD-4F1A-B235-AC73AC2622F7}.Release|x64.ActiveCfg = Release|Any CPU\n\t\t{629C519A-14DD-4F1A-B235-AC73AC2622F7}.Release|x64.Build.0 = Release|Any CPU\n\t\t{629C519A-14DD-4F1A-B235-AC73AC2622F7}.Release|x86.ActiveCfg = Release|Any CPU\n\t\t{629C519A-14DD-4F1A-B235-AC73AC2622F7}.Release|x86.Build.0 = Release|Any CPU\n\t\t{E0E26A07-B7A6-41FD-AB74-1CFCB5191F94}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\n\t\t{E0E26A07-B7A6-41FD-AB74-1CFCB5191F94}.Debug|Any CPU.Build.0 = Debug|Any CPU\n\t\t{E0E26A07-B7A6-41FD-AB74-1CFCB5191F94}.Debug|x64.ActiveCfg = Debug|Any CPU\n\t\t{E0E26A07-B7A6-41FD-AB74-1CFCB5191F94}.Debug|x64.Build.0 = Debug|Any CPU\n\t\t{E0E26A07-B7A6-41FD-AB74-1CFCB5191F94}.Debug|x86.ActiveCfg = Debug|Any CPU\n\t\t{E0E26A07-B7A6-41FD-AB74-1CFCB5191F94}.Debug|x86.Build.0 = Debug|Any CPU\n\t\t{E0E26A07-B7A6-41FD-AB74-1CFCB5191F94}.Release|Any CPU.ActiveCfg = Release|Any CPU\n\t\t{E0E26A07-B7A6-41FD-AB74-1CFCB5191F94}.Release|Any CPU.Build.0 = Release|Any CPU\n\t\t{E0E26A07-B7A6-41FD-AB74-1CFCB5191F94}.Release|x64.ActiveCfg = Release|Any CPU\n\t\t{E0E26A07-B7A6-41FD-AB74-1CFCB5191F94}.Release|x64.Build.0 = Release|Any CPU\n\t\t{E0E26A07-B7A6-41FD-AB74-1CFCB5191F94}.Release|x86.ActiveCfg = Release|Any CPU\n\t\t{E0E26A07-B7A6-41FD-AB74-1CFCB5191F94}.Release|x86.Build.0 = Release|Any CPU\n\t\t{1C7E75D5-F462-43C7-A230-4E31FAF8CC00}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\n\t\t{1C7E75D5-F462-43C7-A230-4E31FAF8CC00}.Debug|Any CPU.Build.0 = Debug|Any CPU\n\t\t{1C7E75D5-F462-43C7-A230-4E31FAF8CC00}.Debug|x64.ActiveCfg = Debug|Any CPU\n\t\t{1C7E75D5-F462-43C7-A230-4E31FAF8CC00}.Debug|x64.Build.0 = Debug|Any CPU\n\t\t{1C7E75D5-F462-43C7-A230-4E31FAF8CC00}.Debug|x86.ActiveCfg = Debug|Any CPU\n\t\t{1C7E75D5-F462-43C7-A230-4E31FAF8CC00}.Debug|x86.Build.0 = Debug|Any CPU\n\t\t{1C7E75D5-F462-43C7-A230-4E31FAF8CC00}.Release|Any CPU.ActiveCfg = Release|Any CPU\n\t\t{1C7E75D5-F462-43C7-A230-4E31FAF8CC00}.Release|Any CPU.Build.0 = Release|Any CPU\n\t\t{1C7E75D5-F462-43C7-A230-4E31FAF8CC00}.Release|x64.ActiveCfg = Release|Any CPU\n\t\t{1C7E75D5-F462-43C7-A230-4E31FAF8CC00}.Release|x64.Build.0 = Release|Any CPU\n\t\t{1C7E75D5-F462-43C7-A230-4E31FAF8CC00}.Release|x86.ActiveCfg = Release|Any CPU\n\t\t{1C7E75D5-F462-43C7-A230-4E31FAF8CC00}.Release|x86.Build.0 = Release|Any CPU\n\t\t{6FA9C7E5-7ED9-4D09-856E-0D30D6D0E7AF}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\n\t\t{6FA9C7E5-7ED9-4D09-856E-0D30D6D0E7AF}.Debug|Any CPU.Build.0 = Debug|Any CPU\n\t\t{6FA9C7E5-7ED9-4D09-856E-0D30D6D0E7AF}.Debug|x64.ActiveCfg = Debug|Any CPU\n\t\t{6FA9C7E5-7ED9-4D09-856E-0D30D6D0E7AF}.Debug|x64.Build.0 = Debug|Any CPU\n\t\t{6FA9C7E5-7ED9-4D09-856E-0D30D6D0E7AF}.Debug|x86.ActiveCfg = Debug|Any CPU\n\t\t{6FA9C7E5-7ED9-4D09-856E-0D30D6D0E7AF}.Debug|x86.Build.0 = Debug|Any CPU\n\t\t{6FA9C7E5-7ED9-4D09-856E-0D30D6D0E7AF}.Release|Any CPU.ActiveCfg = Release|Any CPU\n\t\t{6FA9C7E5-7ED9-4D09-856E-0D30D6D0E7AF}.Release|Any CPU.Build.0 = Release|Any CPU\n\t\t{6FA9C7E5-7ED9-4D09-856E-0D30D6D0E7AF}.Release|x64.ActiveCfg = Release|Any CPU\n\t\t{6FA9C7E5-7ED9-4D09-856E-0D30D6D0E7AF}.Release|x64.Build.0 = Release|Any CPU\n\t\t{6FA9C7E5-7ED9-4D09-856E-0D30D6D0E7AF}.Release|x86.ActiveCfg = Release|Any CPU\n\t\t{6FA9C7E5-7ED9-4D09-856E-0D30D6D0E7AF}.Release|x86.Build.0 = Release|Any CPU\n\t\t{D71B7FBA-E998-4141-81E6-E319C3941659}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\n\t\t{D71B7FBA-E998-4141-81E6-E319C3941659}.Debug|Any CPU.Build.0 = Debug|Any CPU\n\t\t{D71B7FBA-E998-4141-81E6-E319C3941659}.Debug|x64.ActiveCfg = Debug|Any CPU\n\t\t{D71B7FBA-E998-4141-81E6-E319C3941659}.Debug|x64.Build.0 = Debug|Any CPU\n\t\t{D71B7FBA-E998-4141-81E6-E319C3941659}.Debug|x86.ActiveCfg = Debug|Any CPU\n\t\t{D71B7FBA-E998-4141-81E6-E319C3941659}.Debug|x86.Build.0 = Debug|Any CPU\n\t\t{D71B7FBA-E998-4141-81E6-E319C3941659}.Release|Any CPU.ActiveCfg = Release|Any CPU\n\t\t{D71B7FBA-E998-4141-81E6-E319C3941659}.Release|Any CPU.Build.0 = Release|Any CPU\n\t\t{D71B7FBA-E998-4141-81E6-E319C3941659}.Release|x64.ActiveCfg = Release|Any CPU\n\t\t{D71B7FBA-E998-4141-81E6-E319C3941659}.Release|x64.Build.0 = Release|Any CPU\n\t\t{D71B7FBA-E998-4141-81E6-E319C3941659}.Release|x86.ActiveCfg = Release|Any CPU\n\t\t{D71B7FBA-E998-4141-81E6-E319C3941659}.Release|x86.Build.0 = Release|Any CPU\n\t\t{3AFDA053-190A-4BBF-BF0D-626718239FA4}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\n\t\t{3AFDA053-190A-4BBF-BF0D-626718239FA4}.Debug|Any CPU.Build.0 = Debug|Any CPU\n\t\t{3AFDA053-190A-4BBF-BF0D-626718239FA4}.Debug|x64.ActiveCfg = Debug|Any CPU\n\t\t{3AFDA053-190A-4BBF-BF0D-626718239FA4}.Debug|x64.Build.0 = Debug|Any CPU\n\t\t{3AFDA053-190A-4BBF-BF0D-626718239FA4}.Debug|x86.ActiveCfg = Debug|Any CPU\n\t\t{3AFDA053-190A-4BBF-BF0D-626718239FA4}.Debug|x86.Build.0 = Debug|Any CPU\n\t\t{3AFDA053-190A-4BBF-BF0D-626718239FA4}.Release|Any CPU.ActiveCfg = Release|Any CPU\n\t\t{3AFDA053-190A-4BBF-BF0D-626718239FA4}.Release|Any CPU.Build.0 = Release|Any CPU\n\t\t{3AFDA053-190A-4BBF-BF0D-626718239FA4}.Release|x64.ActiveCfg = Release|Any CPU\n\t\t{3AFDA053-190A-4BBF-BF0D-626718239FA4}.Release|x64.Build.0 = Release|Any CPU\n\t\t{3AFDA053-190A-4BBF-BF0D-626718239FA4}.Release|x86.ActiveCfg = Release|Any CPU\n\t\t{3AFDA053-190A-4BBF-BF0D-626718239FA4}.Release|x86.Build.0 = Release|Any CPU\n\t\t{3EB8E5B8-B4A1-41EE-8E26-EED6AFF8AC8F}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\n\t\t{3EB8E5B8-B4A1-41EE-8E26-EED6AFF8AC8F}.Debug|Any CPU.Build.0 = Debug|Any CPU\n\t\t{3EB8E5B8-B4A1-41EE-8E26-EED6AFF8AC8F}.Debug|x64.ActiveCfg = Debug|Any CPU\n\t\t{3EB8E5B8-B4A1-41EE-8E26-EED6AFF8AC8F}.Debug|x64.Build.0 = Debug|Any CPU\n\t\t{3EB8E5B8-B4A1-41EE-8E26-EED6AFF8AC8F}.Debug|x86.ActiveCfg = Debug|Any CPU\n\t\t{3EB8E5B8-B4A1-41EE-8E26-EED6AFF8AC8F}.Debug|x86.Build.0 = Debug|Any CPU\n\t\t{3EB8E5B8-B4A1-41EE-8E26-EED6AFF8AC8F}.Release|Any CPU.ActiveCfg = Release|Any CPU\n\t\t{3EB8E5B8-B4A1-41EE-8E26-EED6AFF8AC8F}.Release|Any CPU.Build.0 = Release|Any CPU\n\t\t{3EB8E5B8-B4A1-41EE-8E26-EED6AFF8AC8F}.Release|x64.ActiveCfg = Release|Any CPU\n\t\t{3EB8E5B8-B4A1-41EE-8E26-EED6AFF8AC8F}.Release|x64.Build.0 = Release|Any CPU\n\t\t{3EB8E5B8-B4A1-41EE-8E26-EED6AFF8AC8F}.Release|x86.ActiveCfg = Release|Any CPU\n\t\t{3EB8E5B8-B4A1-41EE-8E26-EED6AFF8AC8F}.Release|x86.Build.0 = Release|Any CPU\n\t\t{E840877E-2C05-4BF1-859A-3C6D49DFEFE6}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\n\t\t{E840877E-2C05-4BF1-859A-3C6D49DFEFE6}.Debug|Any CPU.Build.0 = Debug|Any CPU\n\t\t{E840877E-2C05-4BF1-859A-3C6D49DFEFE6}.Debug|x64.ActiveCfg = Debug|Any CPU\n\t\t{E840877E-2C05-4BF1-859A-3C6D49DFEFE6}.Debug|x64.Build.0 = Debug|Any CPU\n\t\t{E840877E-2C05-4BF1-859A-3C6D49DFEFE6}.Debug|x86.ActiveCfg = Debug|Any CPU\n\t\t{E840877E-2C05-4BF1-859A-3C6D49DFEFE6}.Debug|x86.Build.0 = Debug|Any CPU\n\t\t{E840877E-2C05-4BF1-859A-3C6D49DFEFE6}.Release|Any CPU.ActiveCfg = Release|Any CPU\n\t\t{E840877E-2C05-4BF1-859A-3C6D49DFEFE6}.Release|Any CPU.Build.0 = Release|Any CPU\n\t\t{E840877E-2C05-4BF1-859A-3C6D49DFEFE6}.Release|x64.ActiveCfg = Release|Any CPU\n\t\t{E840877E-2C05-4BF1-859A-3C6D49DFEFE6}.Release|x64.Build.0 = Release|Any CPU\n\t\t{E840877E-2C05-4BF1-859A-3C6D49DFEFE6}.Release|x86.ActiveCfg = Release|Any CPU\n\t\t{E840877E-2C05-4BF1-859A-3C6D49DFEFE6}.Release|x86.Build.0 = Release|Any CPU\n\t\t{5DFA45F0-4E0E-4DF2-85E5-53ACF50CDD91}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\n\t\t{5DFA45F0-4E0E-4DF2-85E5-53ACF50CDD91}.Debug|Any CPU.Build.0 = Debug|Any CPU\n\t\t{5DFA45F0-4E0E-4DF2-85E5-53ACF50CDD91}.Debug|x64.ActiveCfg = Debug|Any CPU\n\t\t{5DFA45F0-4E0E-4DF2-85E5-53ACF50CDD91}.Debug|x64.Build.0 = Debug|Any CPU\n\t\t{5DFA45F0-4E0E-4DF2-85E5-53ACF50CDD91}.Debug|x86.ActiveCfg = Debug|Any CPU\n\t\t{5DFA45F0-4E0E-4DF2-85E5-53ACF50CDD91}.Debug|x86.Build.0 = Debug|Any CPU\n\t\t{5DFA45F0-4E0E-4DF2-85E5-53ACF50CDD91}.Release|Any CPU.ActiveCfg = Release|Any CPU\n\t\t{5DFA45F0-4E0E-4DF2-85E5-53ACF50CDD91}.Release|Any CPU.Build.0 = Release|Any CPU\n\t\t{5DFA45F0-4E0E-4DF2-85E5-53ACF50CDD91}.Release|x64.ActiveCfg = Release|Any CPU\n\t\t{5DFA45F0-4E0E-4DF2-85E5-53ACF50CDD91}.Release|x64.Build.0 = Release|Any CPU\n\t\t{5DFA45F0-4E0E-4DF2-85E5-53ACF50CDD91}.Release|x86.ActiveCfg = Release|Any CPU\n\t\t{5DFA45F0-4E0E-4DF2-85E5-53ACF50CDD91}.Release|x86.Build.0 = Release|Any CPU\n\t\t{5D62EA19-7E50-467A-B0BC-76334C2C69E9}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\n\t\t{5D62EA19-7E50-467A-B0BC-76334C2C69E9}.Debug|Any CPU.Build.0 = Debug|Any CPU\n\t\t{5D62EA19-7E50-467A-B0BC-76334C2C69E9}.Debug|x64.ActiveCfg = Debug|Any CPU\n\t\t{5D62EA19-7E50-467A-B0BC-76334C2C69E9}.Debug|x64.Build.0 = Debug|Any CPU\n\t\t{5D62EA19-7E50-467A-B0BC-76334C2C69E9}.Debug|x86.ActiveCfg = Debug|Any CPU\n\t\t{5D62EA19-7E50-467A-B0BC-76334C2C69E9}.Debug|x86.Build.0 = Debug|Any CPU\n\t\t{5D62EA19-7E50-467A-B0BC-76334C2C69E9}.Release|Any CPU.ActiveCfg = Release|Any CPU\n\t\t{5D62EA19-7E50-467A-B0BC-76334C2C69E9}.Release|Any CPU.Build.0 = Release|Any CPU\n\t\t{5D62EA19-7E50-467A-B0BC-76334C2C69E9}.Release|x64.ActiveCfg = Release|Any CPU\n\t\t{5D62EA19-7E50-467A-B0BC-76334C2C69E9}.Release|x64.Build.0 = Release|Any CPU\n\t\t{5D62EA19-7E50-467A-B0BC-76334C2C69E9}.Release|x86.ActiveCfg = Release|Any CPU\n\t\t{5D62EA19-7E50-467A-B0BC-76334C2C69E9}.Release|x86.Build.0 = Release|Any CPU\n\t\t{3CD46A0D-61E6-4A0C-AF2D-176462DCF601}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\n\t\t{3CD46A0D-61E6-4A0C-AF2D-176462DCF601}.Debug|Any CPU.Build.0 = Debug|Any CPU\n\t\t{3CD46A0D-61E6-4A0C-AF2D-176462DCF601}.Debug|x64.ActiveCfg = Debug|Any CPU\n\t\t{3CD46A0D-61E6-4A0C-AF2D-176462DCF601}.Debug|x64.Build.0 = Debug|Any CPU\n\t\t{3CD46A0D-61E6-4A0C-AF2D-176462DCF601}.Debug|x86.ActiveCfg = Debug|Any CPU\n\t\t{3CD46A0D-61E6-4A0C-AF2D-176462DCF601}.Debug|x86.Build.0 = Debug|Any CPU\n\t\t{3CD46A0D-61E6-4A0C-AF2D-176462DCF601}.Release|Any CPU.ActiveCfg = Release|Any CPU\n\t\t{3CD46A0D-61E6-4A0C-AF2D-176462DCF601}.Release|Any CPU.Build.0 = Release|Any CPU\n\t\t{3CD46A0D-61E6-4A0C-AF2D-176462DCF601}.Release|x64.ActiveCfg = Release|Any CPU\n\t\t{3CD46A0D-61E6-4A0C-AF2D-176462DCF601}.Release|x64.Build.0 = Release|Any CPU\n\t\t{3CD46A0D-61E6-4A0C-AF2D-176462DCF601}.Release|x86.ActiveCfg = Release|Any CPU\n\t\t{3CD46A0D-61E6-4A0C-AF2D-176462DCF601}.Release|x86.Build.0 = Release|Any CPU\n\t\t{EF146053-4951-4D97-9AAA-E0C1CA4801D6}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\n\t\t{EF146053-4951-4D97-9AAA-E0C1CA4801D6}.Debug|Any CPU.Build.0 = Debug|Any CPU\n\t\t{EF146053-4951-4D97-9AAA-E0C1CA4801D6}.Debug|x64.ActiveCfg = Debug|Any CPU\n\t\t{EF146053-4951-4D97-9AAA-E0C1CA4801D6}.Debug|x64.Build.0 = Debug|Any CPU\n\t\t{EF146053-4951-4D97-9AAA-E0C1CA4801D6}.Debug|x86.ActiveCfg = Debug|Any CPU\n\t\t{EF146053-4951-4D97-9AAA-E0C1CA4801D6}.Debug|x86.Build.0 = Debug|Any CPU\n\t\t{EF146053-4951-4D97-9AAA-E0C1CA4801D6}.Release|Any CPU.ActiveCfg = Release|Any CPU\n\t\t{EF146053-4951-4D97-9AAA-E0C1CA4801D6}.Release|Any CPU.Build.0 = Release|Any CPU\n\t\t{EF146053-4951-4D97-9AAA-E0C1CA4801D6}.Release|x64.ActiveCfg = Release|Any CPU\n\t\t{EF146053-4951-4D97-9AAA-E0C1CA4801D6}.Release|x64.Build.0 = Release|Any CPU\n\t\t{EF146053-4951-4D97-9AAA-E0C1CA4801D6}.Release|x86.ActiveCfg = Release|Any CPU\n\t\t{EF146053-4951-4D97-9AAA-E0C1CA4801D6}.Release|x86.Build.0 = Release|Any CPU\n\t\t{0FCE1B76-0720-4AD0-B353-F604C93DC05F}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\n\t\t{0FCE1B76-0720-4AD0-B353-F604C93DC05F}.Debug|Any CPU.Build.0 = Debug|Any CPU\n\t\t{0FCE1B76-0720-4AD0-B353-F604C93DC05F}.Debug|x64.ActiveCfg = Debug|Any CPU\n\t\t{0FCE1B76-0720-4AD0-B353-F604C93DC05F}.Debug|x64.Build.0 = Debug|Any CPU\n\t\t{0FCE1B76-0720-4AD0-B353-F604C93DC05F}.Debug|x86.ActiveCfg = Debug|Any CPU\n\t\t{0FCE1B76-0720-4AD0-B353-F604C93DC05F}.Debug|x86.Build.0 = Debug|Any CPU\n\t\t{0FCE1B76-0720-4AD0-B353-F604C93DC05F}.Release|Any CPU.ActiveCfg = Release|Any CPU\n\t\t{0FCE1B76-0720-4AD0-B353-F604C93DC05F}.Release|Any CPU.Build.0 = Release|Any CPU\n\t\t{0FCE1B76-0720-4AD0-B353-F604C93DC05F}.Release|x64.ActiveCfg = Release|Any CPU\n\t\t{0FCE1B76-0720-4AD0-B353-F604C93DC05F}.Release|x64.Build.0 = Release|Any CPU\n\t\t{0FCE1B76-0720-4AD0-B353-F604C93DC05F}.Release|x86.ActiveCfg = Release|Any CPU\n\t\t{0FCE1B76-0720-4AD0-B353-F604C93DC05F}.Release|x86.Build.0 = Release|Any CPU\n\t\t{D6E5E010-D782-4B02-94A1-1162852916D9}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\n\t\t{D6E5E010-D782-4B02-94A1-1162852916D9}.Debug|Any CPU.Build.0 = Debug|Any CPU\n\t\t{D6E5E010-D782-4B02-94A1-1162852916D9}.Debug|x64.ActiveCfg = Debug|Any CPU\n\t\t{D6E5E010-D782-4B02-94A1-1162852916D9}.Debug|x64.Build.0 = Debug|Any CPU\n\t\t{D6E5E010-D782-4B02-94A1-1162852916D9}.Debug|x86.ActiveCfg = Debug|Any CPU\n\t\t{D6E5E010-D782-4B02-94A1-1162852916D9}.Debug|x86.Build.0 = Debug|Any CPU\n\t\t{D6E5E010-D782-4B02-94A1-1162852916D9}.Release|Any CPU.ActiveCfg = Release|Any CPU\n\t\t{D6E5E010-D782-4B02-94A1-1162852916D9}.Release|Any CPU.Build.0 = Release|Any CPU\n\t\t{D6E5E010-D782-4B02-94A1-1162852916D9}.Release|x64.ActiveCfg = Release|Any CPU\n\t\t{D6E5E010-D782-4B02-94A1-1162852916D9}.Release|x64.Build.0 = Release|Any CPU\n\t\t{D6E5E010-D782-4B02-94A1-1162852916D9}.Release|x86.ActiveCfg = Release|Any CPU\n\t\t{D6E5E010-D782-4B02-94A1-1162852916D9}.Release|x86.Build.0 = Release|Any CPU\n\t\t{543B7B29-B10C-4837-9479-949F7066DAAC}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\n\t\t{543B7B29-B10C-4837-9479-949F7066DAAC}.Debug|Any CPU.Build.0 = Debug|Any CPU\n\t\t{543B7B29-B10C-4837-9479-949F7066DAAC}.Debug|x64.ActiveCfg = Debug|Any CPU\n\t\t{543B7B29-B10C-4837-9479-949F7066DAAC}.Debug|x64.Build.0 = Debug|Any CPU\n\t\t{543B7B29-B10C-4837-9479-949F7066DAAC}.Debug|x86.ActiveCfg = Debug|Any CPU\n\t\t{543B7B29-B10C-4837-9479-949F7066DAAC}.Debug|x86.Build.0 = Debug|Any CPU\n\t\t{543B7B29-B10C-4837-9479-949F7066DAAC}.Release|Any CPU.ActiveCfg = Release|Any CPU\n\t\t{543B7B29-B10C-4837-9479-949F7066DAAC}.Release|Any CPU.Build.0 = Release|Any CPU\n\t\t{543B7B29-B10C-4837-9479-949F7066DAAC}.Release|x64.ActiveCfg = Release|Any CPU\n\t\t{543B7B29-B10C-4837-9479-949F7066DAAC}.Release|x64.Build.0 = Release|Any CPU\n\t\t{543B7B29-B10C-4837-9479-949F7066DAAC}.Release|x86.ActiveCfg = Release|Any CPU\n\t\t{543B7B29-B10C-4837-9479-949F7066DAAC}.Release|x86.Build.0 = Release|Any CPU\n\tEndGlobalSection\n\tGlobalSection(SolutionProperties) = preSolution\n\t\tHideSolutionNode = FALSE\n\tEndGlobalSection\n\tGlobalSection(NestedProjects) = preSolution\n\t\t{10C03A51-881C-4779-9B24-5BFCE234C175} = {28E1F8EC-E22A-45D3-941F-2A0756D6331D}\n\t\t{5FE016D8-4FBC-4D85-A7D8-165E6F7887F2} = {28E1F8EC-E22A-45D3-941F-2A0756D6331D}\n\t\t{B5E2EC5D-4D8A-4FBE-9434-23B422644B68} = {28E1F8EC-E22A-45D3-941F-2A0756D6331D}\n\t\t{AC823FF0-0EEA-46D8-B6FF-BA9E255F5EB7} = {28E1F8EC-E22A-45D3-941F-2A0756D6331D}\n\t\t{17E54BAB-2FF4-42A1-ACBA-0F88066FF4FD} = {28E1F8EC-E22A-45D3-941F-2A0756D6331D}\n\t\t{D27E21C1-96C8-4EFF-AA4D-43A8ED7CC40B} = {28E1F8EC-E22A-45D3-941F-2A0756D6331D}\n\t\t{7A5BE15C-4B89-4397-920F-A15FB8A76FA5} = {28E1F8EC-E22A-45D3-941F-2A0756D6331D}\n\t\t{629C519A-14DD-4F1A-B235-AC73AC2622F7} = {28E1F8EC-E22A-45D3-941F-2A0756D6331D}\n\t\t{E0E26A07-B7A6-41FD-AB74-1CFCB5191F94} = {28E1F8EC-E22A-45D3-941F-2A0756D6331D}\n\t\t{1C7E75D5-F462-43C7-A230-4E31FAF8CC00} = {28E1F8EC-E22A-45D3-941F-2A0756D6331D}\n\t\t{6FA9C7E5-7ED9-4D09-856E-0D30D6D0E7AF} = {28E1F8EC-E22A-45D3-941F-2A0756D6331D}\n\t\t{D71B7FBA-E998-4141-81E6-E319C3941659} = {9D43F9A2-6C7D-44DC-A0A0-3F0C693B9663}\n\t\t{3AFDA053-190A-4BBF-BF0D-626718239FA4} = {9D43F9A2-6C7D-44DC-A0A0-3F0C693B9663}\n\t\t{3EB8E5B8-B4A1-41EE-8E26-EED6AFF8AC8F} = {9D43F9A2-6C7D-44DC-A0A0-3F0C693B9663}\n\t\t{D67F59C7-8882-4517-AD61-394DA98E94E5} = {9D43F9A2-6C7D-44DC-A0A0-3F0C693B9663}\n\t\t{E840877E-2C05-4BF1-859A-3C6D49DFEFE6} = {D67F59C7-8882-4517-AD61-394DA98E94E5}\n\t\t{5DFA45F0-4E0E-4DF2-85E5-53ACF50CDD91} = {D67F59C7-8882-4517-AD61-394DA98E94E5}\n\t\t{5D62EA19-7E50-467A-B0BC-76334C2C69E9} = {28E1F8EC-E22A-45D3-941F-2A0756D6331D}\n\t\t{3CD46A0D-61E6-4A0C-AF2D-176462DCF601} = {28E1F8EC-E22A-45D3-941F-2A0756D6331D}\n\t\t{89AE722E-588C-43F2-B4CB-A05CE184F721} = {9D43F9A2-6C7D-44DC-A0A0-3F0C693B9663}\n\t\t{EF146053-4951-4D97-9AAA-E0C1CA4801D6} = {89AE722E-588C-43F2-B4CB-A05CE184F721}\n\t\t{0FCE1B76-0720-4AD0-B353-F604C93DC05F} = {89AE722E-588C-43F2-B4CB-A05CE184F721}\n\t\t{D6E5E010-D782-4B02-94A1-1162852916D9} = {28E1F8EC-E22A-45D3-941F-2A0756D6331D}\n\t\t{543B7B29-B10C-4837-9479-949F7066DAAC} = {89AE722E-588C-43F2-B4CB-A05CE184F721}\n\tEndGlobalSection\n\tGlobalSection(ExtensibilityGlobals) = postSolution\n\t\tSolutionGuid = {F860D614-C29A-4EBF-954C-8CB27921AB49}\n\tEndGlobalSection\nEndGlobal\n"
  },
  {
    "path": "LICENSE",
    "content": "MIT License\n\nCopyright (c) 2016 personball\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all\ncopies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\nSOFTWARE.\n"
  },
  {
    "path": "Nupkg/pack.bat",
    "content": "dotnet pack ..\\src\\Abplus\\Abplus.csproj -o ..\\..\\nupkg\\\ndotnet pack ..\\src\\Abplus.AspNetCore.SignalR\\Abplus.AspNetCore.SignalR.csproj -o ..\\..\\nupkg\\\ndotnet pack ..\\src\\Abplus.MqMessages\\Abplus.MqMessages.csproj -o ..\\..\\nupkg\\\ndotnet pack ..\\src\\Abplus.MqMessages.AuditingConsumerHandler\\Abplus.MqMessages.AuditingConsumerHandler.csproj -o ..\\..\\nupkg\\\ndotnet pack ..\\src\\Abplus.MqMessages.AuditingStore\\Abplus.MqMessages.AuditingStore.csproj -o ..\\..\\nupkg\\\ndotnet pack ..\\src\\Abplus.MqMessages.IndexToES\\Abplus.MqMessages.IndexToES.csproj -o ..\\..\\nupkg\\\ndotnet pack ..\\src\\Abplus.MqMessages.RebusCore\\Abplus.MqMessages.RebusCore.csproj -o ..\\..\\nupkg\\\ndotnet pack ..\\src\\Abplus.MqMessages.RebusRabbitMqConsumer\\Abplus.MqMessages.RebusRabbitMqConsumer.csproj -o ..\\..\\nupkg\\\ndotnet pack ..\\src\\Abplus.MqMessages.RebusRabbitMqPublisher\\Abplus.MqMessages.RebusRabbitMqPublisher.csproj -o ..\\..\\nupkg\\\ndotnet pack ..\\src\\Abplus.MqMessages.RedisStoreMessageTracker\\Abplus.MqMessages.RedisStoreMessageTracker.csproj -o ..\\..\\nupkg\\\ndotnet pack ..\\src\\Abplus.T4.PermissionsFromJson\\Abplus.T4.PermissionsFromJson.csproj -o ..\\..\\nupkg\\\n\ndotnet pack ..\\src\\Abplus.IO.AzureBlobStorage\\Abplus.IO.AzureBlobStorage.csproj -o ..\\..\\nupkg\\\ndotnet pack ..\\src\\Abplus.IO.AliyunOSSStorage\\Abplus.IO.AliyunOSSStorage.csproj -o ..\\..\\nupkg\\\n"
  },
  {
    "path": "Nupkg/push-all-packages-in-current_folder.bat",
    "content": "@echo off\nsetlocal enabledelayedexpansion\nset filepath=%cd%\nFOR /R %filepath% %%i IN (*.nupkg) DO (\nset file=%%i\ncall ./nugetpush.bat !file!\n\n)\npause\nexit"
  },
  {
    "path": "README.md",
    "content": "![abplus_icon](https://github.com/personball/abplus/blob/master/abplus_icon.png?raw=true)\n# abplus\nAbp plus, an extension for Abp Framework. \n\n*From 2.0.0, all components upgrade to netstandard2.0.*  \n注明 (deprecated)的将不再支持，将针对ef core, aspnet core, signalr core提供扩展。\n## Packages\n\n|Package|Status|\n|:------|:-----|\n|Abplus|[![NuGet version](https://badge.fury.io/nu/Abplus.svg)](https://badge.fury.io/nu/Abplus)|\n|Abplus.MqMessages|[![NuGet version](https://badge.fury.io/nu/Abplus.MqMessages.svg)](https://badge.fury.io/nu/Abplus.MqMessages)|\n|Abplus.MqMessages.AuditingStore|[![NuGet version](https://badge.fury.io/nu/Abplus.MqMessages.AuditingStore.svg)](https://badge.fury.io/nu/Abplus.MqMessages.AuditingStore)|\n|Abplus.MqMessages.AuditingConsumerHandler|[![NuGet version](https://badge.fury.io/nu/Abplus.MqMessages.AuditingConsumerHandler.svg)](https://badge.fury.io/nu/Abplus.MqMessages.AuditingConsumerHandler)|\n|Abplus.MqMessages.RebusCore|[![NuGet version](https://badge.fury.io/nu/Abplus.MqMessages.RebusCore.svg)](https://badge.fury.io/nu/Abplus.MqMessages.RebusCore)|\n|Abplus.MqMessages.RebusRabbitMqConsumer|[![NuGet version](https://badge.fury.io/nu/Abplus.MqMessages.RebusRabbitMqConsumer.svg)](https://badge.fury.io/nu/Abplus.MqMessages.RebusRabbitMqConsumer)|\n|Abplus.MqMessages.RebusRabbitMqPublisher|[![NuGet version](https://badge.fury.io/nu/Abplus.MqMessages.RebusRabbitMqPublisher.svg)](https://badge.fury.io/nu/Abplus.MqMessages.RebusRabbitMqPublisher)|\n|Abplus.MqMessages.RedisStoreMessageTracker|[![NuGet version](https://badge.fury.io/nu/Abplus.MqMessages.RedisStoreMessageTracker.svg)](https://badge.fury.io/nu/Abplus.MqMessages.RedisStoreMessageTracker)|\n|Abplus.T4.PermissionsFromJson|[![NuGet version](https://badge.fury.io/nu/Abplus.T4.PermissionsFromJson.svg)](https://badge.fury.io/nu/Abplus.T4.PermissionsFromJson)|\n|Abplus.MqMessages.IndexToES|[![NuGet version](https://badge.fury.io/nu/Abplus.MqMessages.IndexToES.svg)](https://badge.fury.io/nu/Abplus.MqMessages.IndexToES)|\n|Abplus.AspNetCore.SignalR|[![NuGet version](https://badge.fury.io/nu/Abplus.AspNetCore.SignalR.svg)](https://badge.fury.io/nu/Abplus.AspNetCore.SignalR)|\n|Abplus.EntityFramework (**deprecated**)|[![NuGet version](https://badge.fury.io/nu/Abplus.EntityFramework.svg)](https://badge.fury.io/nu/Abplus.EntityFramework)|\n|Abplus.Web.Api (**deprecated**)|[![NuGet version](https://badge.fury.io/nu/Abplus.Web.Api.svg)](https://badge.fury.io/nu/Abplus.Web.Api)|\n|Abplus.Web.SignalR (**deprecated**)|[![NuGet version](https://badge.fury.io/nu/Abplus.Web.SignalR.svg)](https://badge.fury.io/nu/Abplus.Web.SignalR)|\n\n## Remarks\n\n|Package|Remark|\n|:------|:-----|\n|Abplus|基础概念扩展及接口定义|\n|Abplus.MqMessages|集成消息队列的扩展方案|\n|Abplus.MqMessages.AuditingStore|集成消息队列的扩展方案，审计日志发送消息队列，使用方法参考 src/Samples/AuditingConsumer|\n|Abplus.MqMessages.AuditingConsumerHandler|集成消息队列的扩展方案，审计日志队列消费端，使用方法参考 src/Samples/AuditingConsumer|\n|Abplus.MqMessages.RebusCore|集成消息队列的扩展方案，Rebus Publisher的实现|\n|Abplus.MqMessages.RebusRabbitMqConsumer|集成消息队列的扩展方案，消费端模块（具备发布消息能力）,使用方法参考src/Samples/Sample.DotNetCoreConsumerHost或Sample.DotNetFxConsumerHost|\n|Abplus.MqMessages.RebusRabbitMqPublisher|集成消息队列的扩展方案，生产端模块，使用方法参考Samples/Sample.DotNetCorePublisherHost或Sample.DotNetFxPublisherHost|\n|Abplus.MqMessages.RedisStoreMessageTracker|集成消息队列的扩展方案，消费端消费行为的幂等支持|\n|Abplus.T4.PermissionsFromJson|提供T4工具，自动从Json文件定义中生成权限定义和权限树|\n|Abplus.MqMessages.IndexToES|提供一个泛型版RebusHandler及T4工具，自动替在MqMessagesT4Register注册的MqMessages通过T4生成代码，将消息索引到ElasticSearch。|\n|Abplus.AspNetCore.SignalR|基于Redis的OnlineClientManager，解决Abp自带的[OnlineClientManager](https://github.com/aspnetboilerplate/aspnetboilerplate/blob/dev/src/Abp/RealTime/OnlineClientManager.cs#L26)在线状态不跨进程共享的问题。|\n|Abplus.EntityFramework(**deprecated**)|EF辅助方法：预热，自动注册FluentApi配置类|\n|Abplus.Web.Api(**deprecated**)|WebApi基于请求头的版本化机制，使用方法见Samples/Abplus.WebApiVersionRoute.Sample。|\n|Abplus.Web.SignalR(**deprecated**)|基于Redis的OnlineClientManager，解决Abp自带的[OnlineClientManager](https://github.com/aspnetboilerplate/aspnetboilerplate/blob/dev/src/Abp/RealTime/OnlineClientManager.cs#L26)在线状态不跨进程共享的问题。|\n\n## License\n\n[MIT](LICENSE)\n\n"
  },
  {
    "path": "common.props",
    "content": "<Project>\n\t<PropertyGroup>\n\t\t<Version>6.0.0</Version>\n\t</PropertyGroup>\n</Project>"
  },
  {
    "path": "src/Abplus/Abplus.csproj",
    "content": "﻿<Project Sdk=\"Microsoft.NET.Sdk\">\n\n  <Import Project=\"..\\..\\common.props\"></Import>\n  \n  <PropertyGroup>\n    <TargetFrameworks>net5.0</TargetFrameworks>\n    <RootNamespace>Abp</RootNamespace>\n    <AssemblyName>Abplus</AssemblyName>\n  </PropertyGroup>\n\n  <ItemGroup>\n    <PackageReference Include=\"abp\" Version=\"6.3.1\" />\n  </ItemGroup>\n\n</Project>\n"
  },
  {
    "path": "src/Abplus/Abplus.nuspec",
    "content": "<?xml version=\"1.0\"?>\n<package >\n  <metadata>\n    <id>$id$</id>\n    <version>$version$</version>\n    <title>$title$</title>\n    <authors>personball</authors>\n    <owners>personball</owners>\n    <licenseUrl>https://raw.githubusercontent.com/personball/abplus/master/LICENSE</licenseUrl>\n    <projectUrl>https://github.com/personball/abplus</projectUrl>\n    <iconUrl>https://raw.githubusercontent.com/personball/abplus/master/abplus_icon.png</iconUrl>\n    <requireLicenseAcceptance>false</requireLicenseAcceptance>\n    <description>Abp plus, an extension for Abp Framework. </description>\n    <releaseNotes></releaseNotes>\n    <copyright>Copyright 2019</copyright>\n    <tags></tags>\n    <dependencies>\n      <dependency id=\"Abp\" version=\"4.5.0\" />\n    </dependencies>\n  </metadata>\n</package>"
  },
  {
    "path": "src/Abplus/Application/Navigation/MenuItemDefinitionPlugInExtensions.cs",
    "content": "﻿using System.Linq;\nusing Abp.Extensions;\nusing Abp.Localization;\n\nnamespace Abp.Application.Navigation\n{\n    public static class MenuItemDefinitionPlugInExtensions\n    {\n        public static MenuItemDefinition GetOrCreatePlugInsRootMenu(this MenuDefinition menu, string url, string icon, string plugInMenuName = \"PlugIns\", string fixedDisplayName = null, string requiredPermission = null)\n        {\n            if (plugInMenuName.IsNullOrWhiteSpace())\n            {\n                plugInMenuName = \"PlugIns\";\n            }\n\n            if (fixedDisplayName.IsNullOrWhiteSpace())\n            {\n                fixedDisplayName = \"PlugIns\";\n            }\n\n            var plugInRoot = menu.Items.FirstOrDefault(i => i.Name == plugInMenuName);\n            if (plugInRoot == null)\n            {\n                plugInRoot = new MenuItemDefinition(\n                    plugInMenuName,\n                    new FixedLocalizableString(fixedDisplayName),\n                    url: url,\n                    icon: icon\n                    //permissionDependency:\n                    //requiredPermissionName: requiredPermission\n                    );\n\n                menu.AddItem(plugInRoot);\n            }\n\n            return plugInRoot;\n        }\n    }\n}\n"
  },
  {
    "path": "src/Abplus/Application/Services/Dto/IHasDateTimeFilterRequest.cs",
    "content": "﻿namespace Abp.Application.Services.Dto\n{\n    using System;\n\n    public interface IHasDateTimeFilterRequest\n    {\n        DateTime? StartTime { get; set; }\n\n        DateTime? EndTime { get; set; }\n    }\n}\n"
  },
  {
    "path": "src/Abplus/Application/Services/Dto/IHasKeywordFilterRequest.cs",
    "content": "﻿namespace Abp.Application.Services.Dto\n{\n    public interface IHasKeywordFilterRequest\n    {\n        string Keyword { get; set; }\n    }\n}\n"
  },
  {
    "path": "src/Abplus/Application/Services/Dto/IPaginationResultRequest.cs",
    "content": "﻿namespace Abp.Application.Services.Dto\n{\n    public interface IPaginationResultRequest : ISortedResultRequest\n    {\n        int PageIndex { get; set; }\n\n        int PageSize { get; set; }\n    }\n}\n"
  },
  {
    "path": "src/Abplus/Application/Services/Dto/PaginationRequestInput.cs",
    "content": "﻿namespace Abp.Application.Services.Dto\n{\n    using System.ComponentModel.DataAnnotations;\n\n    public class PaginationResultRequestInput : IPaginationResultRequest\n    {\n        public PaginationResultRequestInput()\n        {\n            PageIndex = 1;\n            PageSize = 10;\n        }\n\n        [Range(1, 1000)]\n        public int PageIndex { get; set; }\n\n        [Range(1, 1000)]\n        public int PageSize { get; set; }\n\n        public string Sorting { get; set; }\n    }\n}\n"
  },
  {
    "path": "src/Abplus/Currencies/ChineseCentExtension.cs",
    "content": "﻿namespace Abp.Currencies\n{\n    public static class ChineseCentExtension\n    {\n        public static decimal ToYuan(this int moneyInCent)\n        {\n            return moneyInCent / 100m;\n        }\n\n        public static string ToYuanString(this int moneyInCent)\n        {\n            return $\"{moneyInCent.ToYuan().ToString(\"0.00\")}元\";\n        }\n    }\n}\n"
  },
  {
    "path": "src/Abplus/Events/Bus/ChangedEventData.cs",
    "content": "﻿namespace Abp.Events.Bus\n{\n    public abstract class ChangedEventData<T> : EventData\n    {\n        public T Origin { get; set; }\n        public T Current { get; set; }\n    }\n}\n"
  },
  {
    "path": "src/Abplus/Extensions/DateTimeExtensions.cs",
    "content": "﻿namespace Abp.Extensions\n{\n    using System;\n\n    /// <summary>\n    /// Extension methods for <see cref=\"DateTime\"/>.\n    /// </summary>\n    public static class DateTimeExtensions\n    {\n        /// <summary>\n        /// 转换为完整时间的字符串(yyyy-MM-dd HH:mm:ss)\n        /// </summary>\n        public static string ToFullTimeString(this DateTime source)\n        {\n            return source.ToString(\"yyyy-MM-dd HH:mm:ss\");\n        }\n\n        /// <summary>\n        /// 转换为短时间的字符串(yyyy-MM-dd HH:mm)\n        /// </summary>\n        public static string ToShortTimeString(this DateTime source)\n        {\n            return source.ToString(\"yyyy-MM-dd HH:mm\");\n        }\n\n        /// <summary>\n        /// 转换为只有日期的字符串(yyyy-MM-dd)\n        /// </summary>\n        public static string ToDateString(this DateTime source)\n        {\n            return source.ToString(\"yyyy-MM-dd\");\n        }\n    }\n}\n"
  },
  {
    "path": "src/Abplus/Extensions/EnumExtensions.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.ComponentModel.DataAnnotations;\nusing System.Linq;\nusing System.Reflection;\nusing System.Text;\nusing System.Threading.Tasks;\n\nnamespace Abp.Extensions\n{\n    public static class EnumExtensions\n    {\n        public static string GetDisplayName(FieldInfo field)\n        {\n            DisplayAttribute display = field.GetCustomAttribute<DisplayAttribute>(inherit: false);\n            if (display != null)\n            {\n                string name = display.GetName();\n                if (!String.IsNullOrEmpty(name))\n                {\n                    return name;\n                }\n            }\n\n            return field.Name;\n        }\n    }\n}\n"
  },
  {
    "path": "src/Abplus/Extensions/GuidExtensions.cs",
    "content": "﻿namespace Abp.Extensions\n{\n    using System;\n\n    public static class GuidExtensions\n    {\n        /// <summary>\n        /// 将Guid转换为经过Base64编码的22位字符串\n        /// </summary>\n        public static string ToShortString(this Guid source)\n        {\n            string base64 = Convert.ToBase64String(source.ToByteArray());\n            string result = base64.Replace(\"/\", \"_\").Replace(\"+\", \"-\").Substring(0, 22);\n            return result;\n        }\n\n        /// <summary>\n        /// 转换成sqlserver有序Guid,时间相关，精度为300分之一毫秒\n        /// </summary>\n        /// <param name=\"source\"></param>\n        /// <returns></returns>\n        public static Guid ToCombGuid(this Guid source)\n        {\n            byte[] guidArray = source.ToByteArray();\n            DateTime baseDate = new DateTime(1900, 1, 1);\n            DateTime now = DateTime.Now;\n            // Get the days and milliseconds which will be used to build the byte string \n            TimeSpan days = new TimeSpan(now.Ticks - baseDate.Ticks);\n            TimeSpan msecs = new TimeSpan(now.Ticks - (new DateTime(now.Year, now.Month, now.Day).Ticks));\n            // Convert to a byte array \n            // Note that SQL Server is accurate to 1/300th of a millisecond so we divide by 3.333333 \n            byte[] daysArray = BitConverter.GetBytes(days.Days);\n            byte[] msecsArray = BitConverter.GetBytes((long)(msecs.TotalMilliseconds / 3.333333));\n            // Reverse the bytes to match SQL Servers ordering \n            Array.Reverse(daysArray);\n            Array.Reverse(msecsArray);\n            // Copy the bytes into the guid \n            Array.Copy(daysArray, daysArray.Length - 2, guidArray, guidArray.Length - 6, 2);\n            Array.Copy(msecsArray, msecsArray.Length - 4, guidArray, guidArray.Length - 4, 4);\n            return new Guid(guidArray);\n        }\n    }\n}\n"
  },
  {
    "path": "src/Abplus/Extensions/IntExtension.cs",
    "content": "﻿using System;\nusing Abp.Application.Services.Dto;\n\nnamespace Abp.Extensions\n{\n    public static class IntExtension\n    {\n        public static int ToSkipCount(this IPaginationResultRequest pagination)\n        {\n            CheckErrors(pagination);\n\n            return (pagination.PageIndex - 1) * pagination.PageSize;\n        }\n\n        public static int ToMaxResultCount(this IPaginationResultRequest pagination)\n        {\n            CheckErrors(pagination);\n\n            return pagination.PageSize;\n        }\n\n        private static void CheckErrors(IPaginationResultRequest pagination)\n        {\n            if (pagination == null)\n            {\n                throw new ArgumentNullException(\"pagination\");\n            }\n\n            if (pagination.PageSize < 1)\n            {\n                throw new ArgumentOutOfRangeException(\"pagesize\");\n            }\n\n            if (pagination.PageIndex < 1)\n            {\n                throw new ArgumentOutOfRangeException(\"pageindex\");\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "src/Abplus/Extensions/NullableDateTimeExtensions.cs",
    "content": "﻿namespace Abp.Extensions\n{\n    using System;\n\n    public static class NullableDateTimeExtensions\n    {\n        /// <summary>\n        /// 转换为完整时间的字符串(yyyy-MM-dd HH:mm:ss)\n        /// </summary>\n        public static string ToFullString(this DateTime? source)\n        {\n            return source.HasValue ? source.Value.ToFullTimeString() : string.Empty;\n        }\n\n        /// <summary>\n        /// 转换为短时间的字符串(yyyy-MM-dd HH:mm)\n        /// </summary>\n        public static string ToShortString(this DateTime? source)\n        {\n            return source.HasValue ? source.Value.ToShortTimeString() : string.Empty;\n        }\n\n        /// <summary>\n        /// 转换为只有日期的字符串(yyyy-MM-dd)\n        /// </summary>\n        public static string ToDateString(this DateTime? source)\n        {\n            return source.HasValue ? source.Value.ToDateString() : string.Empty;\n        }\n    }\n}\n"
  },
  {
    "path": "src/Abplus/Extensions/StringExtensions.cs",
    "content": "﻿namespace Abp.Extensions\n{\n    using System;\n    using Newtonsoft.Json;\n\n    public static class StringExtensions\n    {\n        /// <summary>\n        /// 字符串转换为Guid类型\n        /// </summary>\n        /// <param name=\"str\"></param>\n        /// <returns>默认返回Guid.Empty</returns>\n        public static Guid ToGuid(this string str)\n        {\n            return str.ToGuid(null);\n        }\n\n        /// <summary>\n        /// 指定格式字符串转换为Guid类型\n        /// </summary>\n        /// <param name=\"str\"></param>\n        /// <param name=\"format\"></param>\n        /// <returns>默认返回Guid.Empty</returns>\n        public static Guid ToGuid(this string str, string format)\n        {\n            var result = Guid.Empty;\n            if (!format.IsNullOrWhiteSpace())\n            {\n                Guid.TryParseExact(str, format, out result);\n            }\n            else\n            {\n                Guid.TryParse(str, out result);\n            }\n\n            return result;\n        }\n\n        /// <summary>\n        /// 字符串转换为Guid类型或者null，不成功返回null\n        /// </summary>\n        public static Guid? ToGuidOrNull(this string str)\n        {\n            Guid? result = null;\n            if (!string.IsNullOrWhiteSpace(str))\n            {\n                Guid tmp;\n                if (Guid.TryParse(str, out tmp))\n                {\n                    result = tmp;\n                }\n            }\n\n            return result;\n        }\n\n        /// <summary>\n        /// 字符串转换为int类型或者null，不成功返回null\n        /// </summary>\n        public static int? ToIntOrNull(this string str)\n        {\n            int? result = null;\n            if (!string.IsNullOrWhiteSpace(str))\n            {\n                int tmp;\n                if (int.TryParse(str, out tmp))\n                {\n                    result = tmp;\n                }\n            }\n\n            return result;\n        }\n\n        /// <summary>\n        /// 将经过Base64编码的22位字符串还原为Guid\n        /// </summary>\n        public static Guid Base64ToGuid(this string str)\n        {\n            Guid result = Guid.Empty;\n            str = str.Trim();\n            string encoded = string.Concat(str.Trim().Replace(\"-\", \"+\").Replace(\"_\", \"/\"), \"==\");\n\n            try\n            {\n                byte[] base64 = Convert.FromBase64String(encoded);\n                result = new Guid(base64);\n            }\n            catch (Exception ex)\n            {\n                throw new AbpException(\"不是有效的参数格式\", ex);\n            }\n\n            return result;\n        }\n\n        /// <summary>\n        /// 由json字符串反序列化成指定类型的对象，字符串为空或不符合格式，则返回类型的默认值\n        /// </summary>\n        public static T ToObject<T>(this string json)\n        {\n            var obj = default(T);\n            if (json.IsNullOrWhiteSpace())\n            {\n                return obj;\n            }\n\n            try\n            {\n                obj = JsonConvert.DeserializeObject<T>(json);\n            }\n            catch\n            {\n                //eat exception to return default value\n            }\n\n            return obj;\n        }\n    }\n}\n"
  },
  {
    "path": "src/Abplus/IO/IFileStorage.cs",
    "content": "﻿using System.IO;\nusing System.Threading.Tasks;\nusing Abp.Dependency;\n\nnamespace Abp.IO\n{\n    public interface IFileStorage : ITransientDependency\n    {\n        Task<string> Save(Stream source, string fileName, string subPath = null);\n\n        Task<string> Save(byte[] source, string fileName, string subPath = null);\n\n        Task Delete(string fileName, string subPath = null);\n\n        Task<byte[]> ReadAsBytes(string fileName, string subPath = null);\n    }\n}\n"
  },
  {
    "path": "src/Abplus/IO/NullFileStorage.cs",
    "content": "﻿using System.IO;\nusing System.Threading.Tasks;\n\nnamespace Abp.IO\n{\n    public class NullFileStorage : IFileStorage\n    {\n        public static NullFileStorage Instance { get; } = new NullFileStorage();\n\n        public Task Delete(string fileName, string subPath = null)\n        {\n            return Task.FromResult(0);\n        }\n\n        public Task<byte[]> ReadAsBytes(string fileName, string subPath = null)\n        {\n            return Task.FromResult(new byte[0]);\n        }\n\n        public Task<string> Save(Stream source, string fileName, string subPath = null)\n        {\n            return Task.FromResult(\"\");\n        }\n\n        public Task<string> Save(byte[] source, string fileName, string subPath = null)\n        {\n            return Task.FromResult(\"\");\n        }\n    }\n}\n"
  },
  {
    "path": "src/Abplus/Interceptors/AsyncHandlingInterceptor.cs",
    "content": "﻿using System.Reflection;\nusing System.Threading.Tasks;\nusing Castle.DynamicProxy;\n\nnamespace Abp.Interceptors\n{\n    public abstract class AsyncHandlingInterceptor : IInterceptor\n    {\n        protected readonly IAsyncInterceptorHandler Handler;\n        private static readonly MethodInfo HandleAsyncMethodInfo = typeof(AsyncHandlingInterceptor).GetMethod(\"HandleAsyncWithResult\", BindingFlags.Instance | BindingFlags.NonPublic);\n\n        /// <summary>\n        /// \n        /// </summary>\n        /// <param name=\"handler\"></param>\n        protected AsyncHandlingInterceptor(IAsyncInterceptorHandler handler)\n        {\n            Handler = handler;\n        }\n\n        public void Intercept(IInvocation invocation)\n        {\n            var delegateType = GetDelegateType(invocation);\n            if (delegateType == MethodType.Synchronous)\n            {\n                Handler.Handle(invocation);\n                //Handle(() => invocation.Proceed());\n            }\n            if (delegateType == MethodType.AsyncAction)\n            {\n                Handler.HandleAsync(invocation);\n                //invocation.Proceed();\n                //invocation.ReturnValue = HandleAsync((Task)invocation.ReturnValue);\n            }\n            if (delegateType == MethodType.AsyncFunction)\n            {\n                //invocation.Proceed();\n                ExecuteHandleAsyncWithResultUsingReflection(invocation);\n            }\n        }\n        private void ExecuteHandleAsyncWithResultUsingReflection(IInvocation invocation)\n        {\n            var resultType = invocation.Method.ReturnType.GetGenericArguments()[0];\n            var mi = HandleAsyncMethodInfo.MakeGenericMethod(resultType);\n            invocation.ReturnValue = mi.Invoke(this, new[] { invocation });\n        }\n\n        /// <summary>\n        /// Used by Reflection\n        /// </summary>\n        /// <typeparam name=\"T\"></typeparam>\n        /// <param name=\"invocation\"></param>\n        /// <returns></returns>\n        protected virtual async Task<T> HandleAsyncWithResult<T>(IInvocation invocation)\n        {\n            return await Handler.HandleAsync<T>(invocation);\n        }\n\n        private MethodType GetDelegateType(IInvocation invocation)\n        {\n            var returnType = invocation.Method.ReturnType;\n            if (returnType == typeof(Task))\n                return MethodType.AsyncAction;\n            if (returnType.IsGenericType && returnType.GetGenericTypeDefinition() == typeof(Task<>))\n                return MethodType.AsyncFunction;\n            return MethodType.Synchronous;\n        }\n\n        private enum MethodType\n        {\n            Synchronous,\n            AsyncAction,\n            AsyncFunction\n        }\n    }\n}\n"
  },
  {
    "path": "src/Abplus/Interceptors/IAsyncInterceptorHandler.cs",
    "content": "﻿using System.Threading.Tasks;\nusing Castle.DynamicProxy;\n\nnamespace Abp.Interceptors\n{\n    /// <summary>\n    /// \n    /// </summary>\n    public interface IAsyncInterceptorHandler\n    {\n        /// <summary>\n        /// \n        /// </summary>\n        /// <param name=\"invocation\"></param>\n        void Handle(IInvocation invocation);\n\n        /// <summary>\n        /// \n        /// </summary>\n        /// <param name=\"invocation\"></param>\n        /// <returns></returns>\n        Task HandleAsync(IInvocation invocation);\n\n        /// <summary>\n        /// \n        /// </summary>\n        /// <typeparam name=\"T\"></typeparam>\n        /// <param name=\"invocation\"></param>\n        /// <returns></returns>\n        Task<T> HandleAsync<T>(IInvocation invocation);\n    }\n}\n"
  },
  {
    "path": "src/Abplus/Json/LargeNumJsonConverter.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing Newtonsoft.Json;\n\nnamespace Abp.Json\n{\n    /// <summary>\n    /// csharp long type number maybe overflow when it assigned to javascript in a json object, so serialize it as string when its value overflow.\n    /// </summary>\n    public class LargeNumJsonConverter : JsonConverter\n    {\n\n        public override bool CanRead => false;\n\n        public override void WriteJson(JsonWriter writer, object value, JsonSerializer serializer)\n        {\n            var num = value as long?;\n            if (num.HasValue && (num > _maxJsNum || num < _minJsNum))\n            {\n                writer.WriteValue(num.ToString());\n            }\n            else\n            {\n                writer.WriteValue(value);\n            }\n        }\n\n        public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer)\n        {\n            if (LargeNumTypes.Contains(objectType))\n            {\n                long result;\n                if (reader.Value != null && long.TryParse(reader.Value.ToString(), out result))\n                {\n                    return result;\n                }\n                return (long?)null;\n            }\n            return reader.Value;\n        }\n\n        public override bool CanConvert(Type objectType)\n        {\n            //9007199254740992\n            return LargeNumTypes.Contains(objectType);\n        }\n\n        private static long _maxJsNum = 9007199254740992;\n        private static long _minJsNum = -9007199254740992;\n\n        private static readonly List<Type> LargeNumTypes = new List<Type>\n            {\n                typeof(long),\n                typeof(long?)\n            };\n    }\n}\n"
  },
  {
    "path": "src/Abplus/MqMessages/IMqMessagePublisher.cs",
    "content": "﻿using System.Threading.Tasks;\nusing Abp.Dependency;\nnamespace Abp.MqMessages\n{\n    /// <summary>\n    /// 消息发布接口\n    /// </summary>\n    public interface IMqMessagePublisher : ITransientDependency\n    {\n        /// <summary>\n        /// 发布\n        /// </summary>\n        /// <param name=\"mqMessages\"></param>\n        void Publish(object mqMessages);\n\n        /// <summary>\n        /// 发布\n        /// </summary>\n        /// <param name=\"mqMessages\"></param>\n        /// <returns></returns>\n        Task PublishAsync(object mqMessages);\n    }\n}\n"
  },
  {
    "path": "src/Abplus/MqMessages/MessageTrackers/DefaultInMemoryMessageTracker.cs",
    "content": "﻿using System.Collections.Concurrent;\nusing System.Linq;\nusing System.Threading.Tasks;\n\nnamespace Abp.MqMessages.MessageTrackers\n{\n    public class DefaultInMemoryMessageTracker : IMessageTracker\n    {\n        private static readonly ConcurrentBag<string> InMemoryStore;\n\n        static DefaultInMemoryMessageTracker()\n        {\n            InMemoryStore = new ConcurrentBag<string>();\n        }\n\n        public static DefaultInMemoryMessageTracker Instance { get; } = new DefaultInMemoryMessageTracker();\n\n        public Task MarkAsProcessed(string processId)\n        {\n            InMemoryStore.Add(processId);\n            return Task.FromResult(0);\n        }\n\n        public Task<bool> HasProcessed(string processId)\n        {\n            return Task.FromResult(InMemoryStore.Contains(processId));\n        }\n    }\n}\n"
  },
  {
    "path": "src/Abplus/MqMessages/MessageTrackers/IMessageTracker.cs",
    "content": "﻿using System.Threading.Tasks;\n\nnamespace Abp.MqMessages.MessageTrackers\n{\n    public interface IMessageTracker\n    {\n        /// <summary>\n        /// 查询是否已处理过\n        /// </summary>\n        /// <param name=\"processId\">能唯一标记本次处理过程的Id，可采用msgId+HandlerName等组合</param>\n        /// <returns></returns>\n        Task<bool> HasProcessed(string processId);\n\n        /// <summary>\n        /// 标记为已处理过\n        /// </summary>\n        /// <param name=\"processId\">能唯一标记本次处理过程的Id，可采用msgId+HandlerName等组合</param>\n        /// <returns></returns>\n        Task MarkAsProcessed(string processId);\n    }\n}\n"
  },
  {
    "path": "src/Abplus/MqMessages/NullMqMessagePublisher.cs",
    "content": "﻿using System.Threading.Tasks;\n\nnamespace Abp.MqMessages\n{\n    /// <summary>\n    /// 空模式\n    /// </summary>\n    public class NullMqMessagePublisher : IMqMessagePublisher\n    {\n        /// <summary>\n        /// \n        /// </summary>\n        public static NullMqMessagePublisher Instance { get; } = new NullMqMessagePublisher();\n\n        /// <summary>\n        /// \n        /// </summary>\n        /// <param name=\"mqMessages\"></param>\n        /// <returns></returns>\n        public Task PublishAsync(object mqMessages)\n        {\n            //do nothing.\n            return Task.FromResult(0);\n        }\n\n        /// <summary>\n        /// \n        /// </summary>\n        /// <param name=\"mqMessages\"></param>\n        public void Publish(object mqMessages)\n        {\n            //do nothing.\n        }\n    }\n}\n"
  },
  {
    "path": "src/Abplus/PlugIns/IPlugInAreaRegistration.cs",
    "content": "﻿namespace Abp.PlugIns\n{\n    public interface IPlugInAreaRegistration\n    {\n    }\n}\n"
  },
  {
    "path": "src/Abplus/PlugIns/IPlugInAuthorizationProvider.cs",
    "content": "﻿namespace Abp.PlugIns\n{\n    public interface IPlugInAuthorizationProvider\n    {\n    }\n}\n"
  },
  {
    "path": "src/Abplus/PlugIns/IPlugInNavigationProvider.cs",
    "content": "﻿namespace Abp.PlugIns\n{\n    public interface IPlugInNavigationProvider\n    {\n    }\n}\n"
  },
  {
    "path": "src/Abplus/QrCode/IQrCodeScannedRealTimeNotifier.cs",
    "content": "﻿using System.Threading.Tasks;\n\nnamespace Abp.QrCode\n{\n    public interface IQrCodeScannedRealTimeNotifier\n    {\n        Task Notify(string scannerIdentifier, string connectionId, object properties = null);\n    }\n}\n"
  },
  {
    "path": "src/Abplus/Reservations/Events/ReservationCancelledEventData.cs",
    "content": "﻿namespace Abp.Reservations.Events\n{\n    /// <summary>\n    /// 预定取消事件抽象基类\n    /// </summary>\n    public abstract class ReservationCancelledEventData : ReservationEventDataBase\n    {\n    }\n}\n"
  },
  {
    "path": "src/Abplus/Reservations/Events/ReservationEventDataBase.cs",
    "content": "﻿using Abp.Events.Bus;\nusing Abp.TimeRanges;\n\nnamespace Abp.Reservations.Events\n{\n    /// <summary>\n    /// 预定发生变化的事件基类\n    /// </summary>\n    public abstract class ReservationEventDataBase : EventData\n    {\n        /// <summary>\n        /// 预定记录唯一标识\n        /// </summary>\n        public string ReservationCode { get; set; }\n        /// <summary>\n        /// 预定主题\n        /// </summary>\n        public string ReservationSubject { get; set; }\n        /// <summary>\n        /// 预定时间区间\n        /// </summary>\n        public TimeRange ReservationTimeRange { get; set; }\n    }\n}\n"
  },
  {
    "path": "src/Abplus/Reservations/Events/ReservationSuccessEventData.cs",
    "content": "﻿namespace Abp.Reservations.Events\n{\n    /// <summary>\n    /// 预定成功事件抽象基类\n    /// </summary>\n    public abstract class ReservationSuccessEventData : ReservationEventDataBase\n    {\n    }\n}\n"
  },
  {
    "path": "src/Abplus/Reservations/IReservation.cs",
    "content": "﻿using System.Collections.Generic;\nusing Abp.TimeRanges;\n\nnamespace Abp.Reservations\n{\n    /// <summary>\n    /// 预定\n    /// </summary>\n    public interface IReservation\n    {\n        /// <summary>\n        /// 预定的主题\n        /// </summary>\n        string ReservationSubject { get; }\n\n        /// <summary>\n        /// 预定的类型\n        /// </summary>\n        string ReservationType { get; }\n\n        /// <summary>\n        /// 预定的唯一编码\n        /// </summary>\n        string ReservationCode { get; }\n\n        /// <summary>\n        /// 预定的时间\n        /// </summary>\n        TimeRange ReservationTime { get; }\n\n        /// <summary>\n        /// 同一预定主体的两个预定应检测是否冲突\n        /// </summary>\n        /// <param name=\"reservation\"></param>\n        /// <returns></returns>\n        bool IsConflict(IReservation reservation);\n\n        /// <summary>\n        /// \n        /// </summary>\n        /// <param name=\"reservations\"></param>\n        /// <returns></returns>\n        bool IsConflict(IEnumerable<IReservation> reservations);\n    }\n}\n"
  },
  {
    "path": "src/Abplus/Reservations/IReservationBody.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\n\nnamespace Abp.Reservations\n{\n    /// <summary>\n    /// 可被预定的资源主体\n    /// </summary>\n    /// <typeparam name=\"T\"></typeparam>\n    public interface IReservationBody<T> where T : IReservation\n    {\n        /// <summary>\n        /// 可被预定的资源唯一标识（建议8位数字）\n        /// </summary>\n        string ResourceCode { get; }\n\n        /// <summary>\n        /// 资源的预定列表\n        /// </summary>\n        ICollection<T> Reservations { get; }\n\n        /// <summary>\n        /// 预定\n        /// </summary>\n        /// <param name=\"subject\"></param>\n        /// <param name=\"from\"></param>\n        /// <param name=\"to\"></param>\n        /// <returns></returns>\n        T Reserve(string subject, DateTime from, DateTime to);\n\n        /// <summary>\n        /// 取消预定\n        /// </summary>\n        /// <param name=\"reservationCode\"></param>\n        /// <returns></returns>\n        T CancelReservation(string reservationCode);\n    }\n}\n"
  },
  {
    "path": "src/Abplus/Reservations/ReservationBase.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.ComponentModel.DataAnnotations;\nusing System.Linq;\nusing Abp.Domain.Entities.Auditing;\nusing Abp.TimeRanges;\n\nnamespace Abp.Reservations\n{\n    /// <summary>\n    /// 预定基类，可被预定的资源拥有一个预定的列表，具体预定的实现可继承本基类\n    /// </summary>\n    public abstract class ReservationBase : CreationAuditedEntity<Guid>, IReservation\n    {\n        /// <summary>\n        /// 默认最小预定时间区间长度（单位：分钟）\n        /// </summary>\n        public const int DefaultMinTimeRangeLengthForReservationInMinutes = 3;//预定记录唯一编码受预定时间区间粒度影响\n\n        protected ReservationBase() { }\n\n        public ReservationBase(string reservationSubject, TimeRange reservationTime, string reservationType, string reservationResourceCode)\n        {\n            if (reservationTime.To.Subtract(reservationTime.From).TotalMinutes < MinTimeRangeLengthForReservationInMinutes)\n            {\n                throw new ArgumentException($\"预定时间区间应大于{MinTimeRangeLengthForReservationInMinutes}分钟!\");\n            }\n\n            ReservationType = reservationType;\n            ReservationSubject = reservationSubject;\n            ReservationTime = reservationTime;\n\n            SetReservationCode(reservationResourceCode);\n        }\n\n        protected virtual int MinTimeRangeLengthForReservationInMinutes\n        {\n            get\n            {\n                return DefaultMinTimeRangeLengthForReservationInMinutes;\n            }\n        }\n\n        /// <summary>\n        /// 生成预定唯一编码\n        /// </summary>\n        /// <param name=\"resourceCode\"></param>\n        protected virtual void SetReservationCode(string resourceCode)\n        {\n            ReservationCode = $\"{ReservationType}-{resourceCode}-{ReservationTime.From.ToString(\"yyyyMMddHHmm\")}\";\n        }\n\n        /// <summary>\n        /// 预定类型\n        /// </summary>\n        [MaxLength(10)]\n        public string ReservationType { get; private set; }\n\n        /// <summary>\n        /// 预定唯一编码\n        /// </summary>\n        public string ReservationCode { get; private set; }\n\n        /// <summary>\n        /// 预定主题\n        /// </summary>\n        [MaxLength(256)]\n        public string ReservationSubject { get; private set; }\n\n        /// <summary>\n        /// 所预定的时间区间\n        /// </summary>\n        public TimeRange ReservationTime { get; private set; }\n\n        /// <summary>\n        /// 是否冲突\n        /// </summary>\n        /// <param name=\"reservation\"></param>\n        /// <returns></returns>\n        public virtual bool IsConflict(IReservation reservation)\n        {\n            return ReservationTime.IsIntersect(reservation.ReservationTime);\n        }\n\n        /// <summary>\n        /// 是否冲突\n        /// </summary>\n        /// <param name=\"reservations\"></param>\n        /// <returns></returns>\n        public virtual bool IsConflict(IEnumerable<IReservation> reservations)//ICollection<IReservation> 不支持逆变\n        {\n            var times = reservations.Select(r => r.ReservationTime).ToList();\n            return ReservationTime.IsIntersect(times);\n        }\n    }\n}\n"
  },
  {
    "path": "src/Abplus/Reservations/ReservationBodyBase.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing Abp.Domain.Entities;\nusing Abp.Events.Bus;\nusing Abp.TimeRanges;\nusing Abp.Timing;\n\nnamespace Abp.Reservations\n{\n    /// <summary>\n    /// 可被预定主体的抽象基类\n    /// </summary>\n    /// <typeparam name=\"TReservation\"></typeparam>\n    /// <typeparam name=\"TPrimary\"></typeparam>\n    public abstract class ReservationBodyBase<TReservation, TPrimary> : AggregateRoot<TPrimary>, IReservationBody<TReservation> where TReservation : IReservation\n    {\n        /// <summary>\n        /// 可被预定主体的唯一标识\n        /// </summary>\n        public string ResourceCode { get; protected set; }\n\n        /// <summary>\n        /// 预定列表\n        /// </summary>\n        public virtual ICollection<TReservation> Reservations { get; protected set; }\n\n        /// <summary>\n        /// 获取预定取消时应触发的事件\n        /// </summary>\n        protected abstract Func<TReservation, IEventData> GetReservationCancelledEventData { get; }\n        /// <summary>\n        /// 检查新增预定是否与已有预定相冲突\n        /// </summary>\n        protected abstract Func<TReservation, IEnumerable<TReservation>, bool> GetIfTheseReservationsConflict { get; }\n        /// <summary>\n        /// 获取预定成功时应触发的事件\n        /// </summary>\n        protected abstract Func<TReservation, IEventData> GetReserveSuccessEventData { get; }\n        /// <summary>\n        /// 如果新增预定与已有预定相冲突时，应抛出的具体异常\n        /// </summary>\n        protected abstract Action ThrowIfTheseReservationsConflict { get; }\n\n        /// <summary>\n        /// 取消预定\n        /// </summary>\n        /// <param name=\"reservationCode\"></param>\n        /// <returns></returns>\n        public virtual TReservation CancelReservation(string reservationCode)\n        {\n            Check.NotNullOrWhiteSpace(reservationCode, nameof(reservationCode));\n\n            var reservation = Reservations.FirstOrDefault(r => r.ReservationCode == reservationCode);\n            if (reservation == null)\n            {\n                return reservation;\n            }\n\n            Reservations.Remove(reservation);\n\n            DomainEvents.Add(GetReservationCancelledEventData(reservation));\n\n            return reservation;\n        }\n\n        /// <summary>\n        /// 预定\n        /// </summary>\n        /// <param name=\"subject\">预定主题</param>\n        /// <param name=\"from\">时间区间起</param>\n        /// <param name=\"to\">时间区间止</param>\n        /// <returns></returns>\n        public virtual TReservation Reserve(string subject, DateTime from, DateTime to)\n        {\n            Check.NotNullOrWhiteSpace(subject, nameof(subject));\n\n            TReservation newReservation = (TReservation)Activator.CreateInstance(typeof(TReservation), subject, new TimeRange(from, to), ResourceCode);\n\n            var reservations = Reservations.Where(r => r.ReservationTime.To > Clock.Now).ToList();\n            if (reservations.Any())\n            {\n                if (GetIfTheseReservationsConflict(newReservation, reservations))\n                {\n                    ThrowIfTheseReservationsConflict();\n                }\n            }\n\n            Reservations.Add(newReservation);\n\n            DomainEvents.Add(GetReserveSuccessEventData(newReservation));\n\n            return newReservation;\n        }\n    }\n}\n"
  },
  {
    "path": "src/Abplus/Runtime/OS/EnvDescription.cs",
    "content": "﻿namespace Abp.Runtime.OS\n{\n    public class EnvDescription\n    {\n        public string FrameworkDescription { get; set; }\n        public string OSDescription { get; set; }\n        public string OSArchitecture { get; set; }\n        public string ProcessArchitecture { get; set; }\n    }\n}\n"
  },
  {
    "path": "src/Abplus/Runtime/OS/EnvironmentHelper.cs",
    "content": "﻿using System.Runtime.InteropServices;\n\nnamespace Abp.Runtime.OS\n{\n    public static class EnvironmentHelper\n    {\n        public static EnvDescription GetRuntimeInformation()\n        {\n            return new EnvDescription\n            {\n                FrameworkDescription = RuntimeInformation.FrameworkDescription,\n                OSArchitecture = RuntimeInformation.OSArchitecture.ToString(),\n                OSDescription = RuntimeInformation.OSDescription,\n                ProcessArchitecture = RuntimeInformation.ProcessArchitecture.ToString()\n            };\n        }\n    }\n}\n"
  },
  {
    "path": "src/Abplus/TimeRanges/TimeRange.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing Abp.Domain.Values;\n\nnamespace Abp.TimeRanges\n{\n    public class TimeRange : ValueObject\n    {\n        protected TimeRange() { }\n\n        public TimeRange(DateTime from, DateTime to)\n        {\n            Check.NotNull(from, nameof(from));\n            Check.NotNull(to, nameof(to));\n\n            if (from >= to)\n            {\n                throw new ArgumentException(\"时间区间的起点必须小于终点！\");\n            }\n\n            From = from;\n            To = to;\n        }\n\n        /// <summary>\n        /// 时间区间起\n        /// </summary>\n        public DateTime From { get; private set; }\n        /// <summary>\n        /// 时间区间止\n        /// </summary>\n        public DateTime To { get; private set; }\n\n        /// <summary>\n        /// 包含，一般用于匹配\n        /// </summary>\n        /// <param name=\"that\"></param>\n        /// <returns></returns>\n        public bool IsIncluding(TimeRange that)\n        {\n            Check.NotNull(that, nameof(that));\n\n            return From <= that.From && To >= that.To;\n        }\n\n        /// <summary>\n        /// 相交，一般用于检测冲突\n        /// </summary>\n        /// <param name=\"that\"></param>\n        /// <returns></returns>\n        public bool IsIntersect(TimeRange that)\n        {\n            Check.NotNull(that, nameof(that));\n\n            return To >= that.From && To <= that.To\n                || From >= that.From && To <= that.To\n                || From >= that.From && From <= that.To;\n        }\n\n        /// <summary>\n        /// 相交，一般用于检测冲突\n        /// </summary>\n        /// <param name=\"those\"></param>\n        /// <returns></returns>\n        public bool IsIntersect(ICollection<TimeRange> those)\n        {\n            Check.NotNull(those, nameof(those));\n            foreach (var that in those)\n            {\n                if (IsIntersect(that))\n                {\n                    return true;\n                }\n            }\n\n            return false;\n        }\n\n        protected override IEnumerable<object> GetAtomicValues()\n        {\n            yield return From;\n            yield return To;\n        }\n    }\n}\n"
  },
  {
    "path": "src/Abplus.AspNetCore.SignalR/Abplus.AspNetCore.SignalR.csproj",
    "content": "﻿<Project Sdk=\"Microsoft.NET.Sdk\">\n  <Import Project=\"..\\..\\common.props\"></Import>\n  \n  <PropertyGroup>\n    <TargetFramework>net5.0</TargetFramework>\n    <RootNamespace>Abp</RootNamespace>\n    <AssemblyName>Abplus.AspNetCore.SignalR</AssemblyName>\n  </PropertyGroup>\n\n  <ItemGroup>\n    <PackageReference Include=\"abp\" Version=\"6.3.1\" />\n    <PackageReference Include=\"Abp.AspNetCore.SignalR\" Version=\"4.5.0\" />\n    <PackageReference Include=\"stackexchange.redis\" Version=\"1.2.6\" />\n  </ItemGroup>\n\n  <ItemGroup>\n    <ProjectReference Include=\"..\\Abplus\\Abplus.csproj\" />\n  </ItemGroup>\n\n</Project>\n"
  },
  {
    "path": "src/Abplus.AspNetCore.SignalR/Abplus.AspNetCore.SignalR.nuspec",
    "content": "<?xml version=\"1.0\"?>\n<package >\n  <metadata>\n    <id>$id$</id>\n    <version>$version$</version>\n    <title>$title$</title>\n    <authors>personball</authors>\n    <owners>personball</owners>\n    <licenseUrl>https://raw.githubusercontent.com/personball/abplus/master/LICENSE</licenseUrl>\n    <projectUrl>https://github.com/personball/abplus</projectUrl>\n    <iconUrl>https://raw.githubusercontent.com/personball/abplus/master/abplus_icon.png</iconUrl>\n    <requireLicenseAcceptance>false</requireLicenseAcceptance>\n    <description>Abp plus, an extension for Abp Framework. </description>\n    <releaseNotes></releaseNotes>\n    <copyright>Copyright 2018</copyright>\n    <tags></tags>\n    <dependencies>\n      <dependency id=\"Abplus\" version=\"$version$\" />\n      <dependency id=\"Abp.AspNetCore.SignalR\" version=\"4.5.0\" />\n      <dependency id=\"StackExchange.Redis\" version=\"1.2.6\" />\n    </dependencies>\n  </metadata>\n</package>"
  },
  {
    "path": "src/Abplus.AspNetCore.SignalR/Configuration/Startup/RedisOnlineClientManagerConfiguationExtensions.cs",
    "content": "﻿using Abp.RealTime;\n\nnamespace Abp.Configuration.Startup\n{\n    public static class RedisOnlineClientManagerConfiguationExtensions\n    {\n        public static IRedisOnlineClientManagerModuleConfig UseRedisOnlineClientManager(this IModuleConfigurations configurations)\n        {\n            return configurations.AbpConfiguration.GetOrCreate(\"Modules.Abplus.RedisOnlineClientManager\", () => configurations.AbpConfiguration.IocManager.Resolve<IRedisOnlineClientManagerModuleConfig>());\n        }\n    }\n}\n"
  },
  {
    "path": "src/Abplus.AspNetCore.SignalR/RealTime/IRedisOnlineClientManagerModuleConfig.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Text;\nusing System.Threading.Tasks;\n\nnamespace Abp.RealTime\n{\n    public interface IRedisOnlineClientManagerModuleConfig\n    {\n        /// <summary>\n        /// Redis连接字符串\n        /// </summary>\n        string ConnectionString { get;  }\n\n        /// <summary>\n        /// 在线状态列表存储的键名\n        /// </summary>\n        string StoreKey { get; }\n\n\n        IRedisOnlineClientManagerModuleConfig ConnectTo(string connectionString);\n\n        IRedisOnlineClientManagerModuleConfig WithStoreKey(string storeKey);\n    }\n}\n"
  },
  {
    "path": "src/Abplus.AspNetCore.SignalR/RealTime/RedisOnlineClientManager.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.Collections.Immutable;\nusing Abp.Dependency;\nusing Abp.Extensions;\nusing Abp.Json;\nusing Castle.Core.Logging;\nusing Newtonsoft.Json;\nusing StackExchange.Redis;\n\nnamespace Abp.RealTime\n{\n    /// <summary>\n    /// 基于Redis的OnlineClientManager\n    /// </summary>\n    public class RedisOnlineClientManager : IOnlineClientManager\n    {\n        /// <summary>\n        /// Client 连接成功时\n        /// </summary>\n        public event EventHandler<OnlineClientEventArgs> ClientConnected;\n        /// <summary>\n        /// Client断开连接时\n        /// </summary>\n        public event EventHandler<OnlineClientEventArgs> ClientDisconnected;\n        /// <summary>\n        /// 用户连接成功时\n        /// </summary>\n        public event EventHandler<OnlineUserEventArgs> UserConnected;\n        /// <summary>\n        /// 用户断开连接时\n        /// </summary>\n        public event EventHandler<OnlineUserEventArgs> UserDisconnected;\n\n        private readonly string _connectionString;\n        private readonly string _storeKey;\n        private readonly string _clientStoreKey;\n        private readonly string _userStoreKey;\n\n        private readonly Lazy<ConnectionMultiplexer> _connectionMultiplexer;\n\n        private readonly object _syncObj = new object();\n\n        /// <summary>\n        /// 日志\n        /// </summary>\n        public ILogger Logger { get; set; }\n\n        /// <summary>\n        /// ctor\n        /// </summary>\n        public RedisOnlineClientManager()\n        {\n            var config = IocManager.Instance.Resolve<IRedisOnlineClientManagerModuleConfig>();\n            if (config == null || config.ConnectionString.IsNullOrWhiteSpace() || config.StoreKey.IsNullOrWhiteSpace())\n            {\n                throw new Exception(\"RedisOnlineClientManagerModuleConfig is invalid!\");\n            }\n\n            _connectionString = config.ConnectionString;\n            _storeKey = config.StoreKey;\n            _clientStoreKey = _storeKey + \".Clients\";\n            _userStoreKey = _storeKey + \".Users\";\n            Logger = NullLogger.Instance;\n\n            _connectionMultiplexer = new Lazy<ConnectionMultiplexer>(CreateConnectionMultiplexer);\n        }\n\n        private ConnectionMultiplexer CreateConnectionMultiplexer()\n        {\n            return ConnectionMultiplexer.Connect(_connectionString);\n        }\n\n        /// <summary>\n        /// 获取Redis Database\n        /// </summary>\n        /// <returns></returns>\n        protected IDatabase GetDatabase()\n        {\n            return _connectionMultiplexer.Value.GetDatabase();\n        }\n\n        /// <summary>\n        /// 添加Client\n        /// </summary>\n        /// <param name=\"client\"></param>\n        public void Add(IOnlineClient client)\n        {\n            lock (_syncObj)\n            {\n                var userWasAlreadyOnline = false;\n                var user = client.ToUserIdentifierOrNull();\n\n                if (user != null)\n                {\n                    userWasAlreadyOnline = IsUserOnline(user);\n                }\n\n                AddClientToRedisStore(client);\n\n                ClientConnected.InvokeSafely(this, new OnlineClientEventArgs(client));\n\n                if (user != null && !userWasAlreadyOnline)\n                {\n                    UserConnected.InvokeSafely(this, new OnlineUserEventArgs(user, client));\n                }\n            }\n        }\n\n        private bool IsUserOnline(UserIdentifier user)\n        {\n            var _database = GetDatabase();\n            return _database.HashExists(_userStoreKey, user.ToUserIdentifierString());\n        }\n\n        private void AddClientToRedisStore(IOnlineClient client)\n        {\n            var _database = GetDatabase();\n            _database.HashSet(_clientStoreKey, new HashEntry[] { new HashEntry(client.ConnectionId, client.ToString()) });\n            var userId = client.ToUserIdentifierOrNull();\n            if (userId == null)\n            {\n                return;\n            }\n\n            var userClients = new List<string>();\n            var userClientsValue = _database.HashGet(_userStoreKey, userId.ToUserIdentifierString());\n            if (userClientsValue.HasValue)\n            {\n                userClients = JsonConvert.DeserializeObject<List<string>>(userClientsValue);\n            }\n\n            if (userClients.Contains(client.ConnectionId))\n            {\n                return;\n            }\n\n            userClients.Add(client.ConnectionId);\n            _database.HashSet(_userStoreKey, new HashEntry[] { new HashEntry(userId.ToUserIdentifierString(), userClients.ToJsonString()) });\n        }\n\n        /// <summary>\n        /// 获取所有Clients\n        /// </summary>\n        /// <returns></returns>\n        public IReadOnlyList<IOnlineClient> GetAllClients()\n        {\n            lock (_syncObj)\n            {\n                var _database = GetDatabase();\n                var clientsEntries = _database.HashGetAll(_clientStoreKey);\n                var clients = new List<IOnlineClient>();\n                foreach (var entry in clientsEntries)\n                {\n                    clients.Add(JsonConvert.DeserializeObject<OnlineClient>(entry.Value));\n                }\n\n                return clients.ToImmutableList();\n            }\n        }\n\n        /// <summary>\n        /// 根据连接id获取client\n        /// </summary>\n        /// <param name=\"connectionId\"></param>\n        /// <returns></returns>\n        public IOnlineClient GetByConnectionIdOrNull(string connectionId)\n        {\n            lock (_syncObj)\n            {\n                var _database = GetDatabase();\n                var clientValue = _database.HashGet(_clientStoreKey, connectionId);\n                if (clientValue.IsNullOrEmpty)\n                {\n                    return null;\n                }\n\n                return JsonConvert.DeserializeObject<OnlineClient>(clientValue);\n            }\n        }\n\n        /// <summary>\n        /// 移除Client\n        /// </summary>\n        /// <param name=\"connectionId\"></param>\n        /// <returns></returns>\n        public bool Remove(string connectionId)\n        {\n            lock (_syncObj)\n            {\n                var _database = GetDatabase();\n                var clientValue = _database.HashGet(_clientStoreKey, connectionId);\n                if (clientValue.IsNullOrEmpty)\n                {\n                    return true;\n                }\n\n                var client = JsonConvert.DeserializeObject<OnlineClient>(clientValue);\n                var user = client.ToUserIdentifierOrNull();\n                if (user != null)\n                {\n                    //从_userStoreKey中移除一个client\n                    var userClientsValue = _database.HashGet(_userStoreKey, user.ToUserIdentifierString());\n                    if (userClientsValue.HasValue)\n                    {\n                        var userClients = JsonConvert.DeserializeObject<List<string>>(userClientsValue);\n                        userClients.Remove(connectionId);\n                        if (userClients.Count > 0)\n                        {\n                            //更新\n                            _database.HashSet(_userStoreKey, new HashEntry[] { new HashEntry(user.ToUserIdentifierString(), userClients.ToJsonString()) });\n                        }\n                        else\n                        {\n                            //删除\n                            _database.HashDelete(_userStoreKey, user.ToUserIdentifierString());\n                        }\n                    }\n\n                    _database.HashDelete(_clientStoreKey, connectionId);\n\n                    if (!IsUserOnline(user))\n                    {\n                        UserDisconnected.InvokeSafely(this, new OnlineUserEventArgs(user, client));\n                    }\n                }\n\n                ClientDisconnected.InvokeSafely(this, new OnlineClientEventArgs(client));\n                return true;\n            }\n        }\n\n        /// <summary>\n        /// 获取指定user的所有clients\n        /// </summary>\n        /// <param name=\"user\"></param>\n        /// <returns></returns>\n        public IReadOnlyList<IOnlineClient> GetAllByUserId(IUserIdentifier user)\n        {\n            var clients = new List<OnlineClient>();\n\n            var userIdentifier = new UserIdentifier(user.TenantId, user.UserId);\n            if (!IsUserOnline(userIdentifier))\n            {\n                return clients;\n            }\n\n            lock (_syncObj)\n            {\n                var _database = GetDatabase();\n\n                var userClients = new List<string>();\n                var userClientsValue = _database.HashGet(_userStoreKey, userIdentifier.ToUserIdentifierString());\n                if (userClientsValue.HasValue)\n                {\n                    userClients = JsonConvert.DeserializeObject<List<string>>(userClientsValue);\n                    foreach (var connectionId in userClients)\n                    {\n                        var clientValue = _database.HashGet(_clientStoreKey, connectionId);\n                        if (clientValue.IsNullOrEmpty)\n                        {\n                            continue;\n                        }\n\n                        clients.Add(JsonConvert.DeserializeObject<OnlineClient>(clientValue));\n                    }\n                }\n            }\n\n            return clients;\n        }\n    }\n}\n"
  },
  {
    "path": "src/Abplus.AspNetCore.SignalR/RealTime/RedisOnlineClientManagerModule.cs",
    "content": "﻿using System.Reflection;\nusing Abp.Dependency;\nusing Abp.Modules;\n\nnamespace Abp.RealTime\n{\n    public class RedisOnlineClientManagerModule : AbpModule\n    {\n        public override void PreInitialize()\n        {\n            //base.PreInitialize();\n            IocManager.Register<IRedisOnlineClientManagerModuleConfig, RedisOnlineClientManagerModuleConfig>();\n            IocManager.Register<IOnlineClientManager, RedisOnlineClientManager>(DependencyLifeStyle.Singleton);\n        }\n\n        public override void Initialize()\n        {\n            //base.Initialize();\n            IocManager.RegisterAssemblyByConvention(Assembly.GetExecutingAssembly());\n        }\n    }\n\n}\n"
  },
  {
    "path": "src/Abplus.AspNetCore.SignalR/RealTime/RedisOnlineClientManagerModuleConfig.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Text;\nusing System.Threading.Tasks;\n\nnamespace Abp.RealTime\n{\n    public class RedisOnlineClientManagerModuleConfig : IRedisOnlineClientManagerModuleConfig\n    {\n        public string ConnectionString { get; private set; }\n\n        public string StoreKey { get; private set; }\n\n        public RedisOnlineClientManagerModuleConfig()\n        {\n            ConnectionString = string.Empty;\n            StoreKey = \"Abplus.RealTime.OnlineClients\";\n        }\n\n        public IRedisOnlineClientManagerModuleConfig ConnectTo(string connectionString)\n        {\n            ConnectionString = connectionString;\n            return this;\n        }\n\n        public IRedisOnlineClientManagerModuleConfig WithStoreKey(string storeKey)\n        {\n            StoreKey = storeKey;\n            return this;\n        }\n    }\n}\n"
  },
  {
    "path": "src/Abplus.AspNetCore.SignalR/Web/SignalR/QrScan/SignalRQrCodeScannedRealTimeNotifier.cs",
    "content": "﻿using System;\nusing System.Threading.Tasks;\nusing Abp.AspNetCore.SignalR.Hubs;\nusing Abp.QrCode;\nusing Castle.Core.Logging;\nusing Microsoft.AspNetCore.SignalR;\n\nnamespace Abp.Web.SignalR.QrScan\n{\n    public class SignalRQrCodeScannedRealTimeNotifier : IQrCodeScannedRealTimeNotifier\n    {\n        /// <summary>\n        /// Reference to the logger.\n        /// </summary>\n        public ILogger Logger { get; set; }\n\n        private readonly IHubContext<AbpCommonHub> _commonHub;\n       \n        /// <summary>\n        /// Initializes a new instance of the <see cref=\"SignalRRealTimeNotifier\"/> class.\n        /// </summary>\n        public SignalRQrCodeScannedRealTimeNotifier(IHubContext<AbpCommonHub> commonHub)\n        {\n            Logger = NullLogger.Instance;\n            _commonHub = commonHub;\n        }\n\n        public Task Notify(string scannerId, string connectionId, object properties = null)\n        {\n            try\n            {\n                var signalRClient = _commonHub.Clients.Client(connectionId);\n                if (signalRClient == null)\n                {\n                    throw new Exception($\"Can not find the client with connectionId:{connectionId}\");\n                }\n\n                signalRClient.SendAsync(\"qrScanned\",scannerId, properties);\n            }\n            catch (Exception ex)\n            {\n                Logger.Warn(ex.ToString(), ex);\n            }\n\n            return Task.FromResult(0);\n        }\n    }\n}\n"
  },
  {
    "path": "src/Abplus.AspNetCore.SignalR/Web/SignalR/QrScan/SignalRQrCodeScannedRealTimeNotifierModule.cs",
    "content": "﻿using Abp.Modules;\nusing Abp.QrCode;\n\nnamespace Abp.Web.SignalR.QrScan\n{\n    public class SignalRQrCodeScannedRealTimeNotifierModule : AbpModule\n    {\n        public override void PreInitialize()\n        {\n            //base.PreInitialize();\n            IocManager.Register<IQrCodeScannedRealTimeNotifier, SignalRQrCodeScannedRealTimeNotifier>();\n        }\n    }\n}\n"
  },
  {
    "path": "src/Abplus.IO.AliyunOSSStorage/Abplus.IO.AliyunOSSStorage.csproj",
    "content": "﻿<Project Sdk=\"Microsoft.NET.Sdk\">\n<Import Project=\"..\\..\\common.props\"></Import>\n  <PropertyGroup>\n    <TargetFramework>net5.0</TargetFramework>\n     <RootNamespace>Abp</RootNamespace>\n  </PropertyGroup>\n\n  <ItemGroup>\n    <None Remove=\"Localization\\SourceFiles\\AliyunOSSStorage-zh-Hans.xml\" />\n    <None Remove=\"Localization\\SourceFiles\\AliyunOSSStorage.xml\" />\n  </ItemGroup>\n\n  <ItemGroup>\n    <EmbeddedResource Include=\"Localization\\SourceFiles\\AliyunOSSStorage-zh-Hans.xml\" />\n    <EmbeddedResource Include=\"Localization\\SourceFiles\\AliyunOSSStorage.xml\" />\n  </ItemGroup>\n\n  <ItemGroup>\n    <PackageReference Include=\"Abp\" Version=\"6.3.1\" />\n    <PackageReference Include=\"Aliyun.OSS.SDK.NetCore\" Version=\"2.9.1\" />\n  </ItemGroup>\n\n  <ItemGroup>\n    <ProjectReference Include=\"..\\Abplus\\Abplus.csproj\" />\n  </ItemGroup>\n\n</Project>\n"
  },
  {
    "path": "src/Abplus.IO.AliyunOSSStorage/Configuration/Startup/AliyunOSSStorageConfigurationExtensions.cs",
    "content": "﻿using Abp.IO.AliyunOSSStorage;\n\nnamespace Abp.Configuration.Startup\n{\n    public static class AliyunOSSStorageConfigurationExtensions\n    {\n        public static IAliyunOSSStorageModuleConfiguration UseAliyunOSSStorage(this IModuleConfigurations configurations)\n        {\n            return configurations.AbpConfiguration.GetOrCreate(\"Modules.Abplus.AliyunOSSStorage\",\n                () => configurations.AbpConfiguration.IocManager.Resolve<IAliyunOSSStorageModuleConfiguration>());\n        }\n    }\n}\n"
  },
  {
    "path": "src/Abplus.IO.AliyunOSSStorage/IO/AliyunOSSStorage/AliyunOSSStorage.cs",
    "content": "﻿using System;\nusing System.IO;\nusing System.Threading;\nusing System.Threading.Tasks;\nusing Abp.Dependency;\nusing Abp.Extensions;\nusing Abp.IO.Extensions;\nusing Aliyun.OSS;\nusing Castle.Core.Logging;\n\nnamespace Abp.IO.AliyunOSSStorage\n{\n    public class AliyunOSSStorage : IFileStorage\n    {\n        private static Lazy<OssClient> _client = new Lazy<OssClient>(InitClient, LazyThreadSafetyMode.PublicationOnly);\n\n        private static OssClient InitClient()\n        {\n            var c = IocManager.Instance.Resolve<IAliyunOSSStorageModuleConfiguration>();\n            return new OssClient(c.Endpoint, c.AccessKeyId, c.AccessKeySecret);\n        }\n\n        private readonly IAliyunOSSStorageModuleConfiguration _config;\n\n        protected ILogger Logger { get; set; }\n\n        public AliyunOSSStorage(IAliyunOSSStorageModuleConfiguration config)\n        {\n            _config = config;\n            Logger = NullLogger.Instance;\n        }\n\n        public Task Delete(string fileName, string subPath = null)\n        {\n            if (!subPath.IsNullOrWhiteSpace())\n            {\n                subPath = subPath.EnsureEndsWith('/');\n            }\n\n            _client.Value.DeleteObject(_config.BucketName, $\"{subPath}{fileName}\");\n            return Task.FromResult(0);\n        }\n\n        public Task<byte[]> ReadAsBytes(string fileName, string subPath = null)\n        {\n            if (!subPath.IsNullOrWhiteSpace())\n            {\n                subPath = subPath.EnsureEndsWith('/');\n            }\n\n            var ossObj = _client.Value.GetObject(_config.BucketName, $\"{subPath}{fileName}\");\n            try\n            {\n                using (var rs = ossObj.Content)\n                {\n                    var bytes = rs.GetAllBytes();\n                    return Task.FromResult(bytes);\n                }\n            }\n            catch (Exception ex)\n            {\n                Logger.Error(ex.Message, ex);\n                throw ex;\n            }\n        }\n\n        public Task<string> Save(Stream source, string fileName, string subPath = null)\n        {\n            if (!subPath.IsNullOrWhiteSpace())\n            {\n                subPath = subPath.EnsureEndsWith('/');\n            }\n\n            _client.Value.PutObject(_config.BucketName, $\"{subPath}{fileName}\", source);\n\n            if (!_config.UriPrefix.IsNullOrWhiteSpace())\n            {\n                return Task.FromResult($\"{_config.UriPrefix.EnsureEndsWith('/')}{subPath}{fileName}\");\n            }\n\n            return Task.FromResult($\"{subPath}{fileName}\");\n        }\n\n        public Task<string> Save(byte[] source, string fileName, string subPath = null)\n        {\n            if (!subPath.IsNullOrWhiteSpace())\n            {\n                subPath = subPath.EnsureEndsWith('/');\n            }\n\n            var stream = new MemoryStream(source);\n\n            _client.Value.PutObject(_config.BucketName, $\"{subPath}{fileName}\", stream);\n\n            if (!_config.UriPrefix.IsNullOrWhiteSpace())\n            {\n                return Task.FromResult($\"{_config.UriPrefix.EnsureEndsWith('/')}{subPath}{fileName}\");\n            }\n\n            return Task.FromResult($\"{subPath}{fileName}\");\n        }\n    }\n}\n"
  },
  {
    "path": "src/Abplus.IO.AliyunOSSStorage/IO/AliyunOSSStorage/AliyunOSSStorageModule.cs",
    "content": "﻿using System.Reflection;\nusing Abp.Localization;\nusing Abp.Modules;\n\nnamespace Abp.IO.AliyunOSSStorage\n{\n    [DependsOn(typeof(AbpKernelModule))]\n    public class AliyunOSSStorageModule : AbpModule\n    {\n        public override void PreInitialize()\n        {\n            IocManager.Register<IAliyunOSSStorageModuleConfiguration, AliyunOSSStorageModuleConfiguration>();\n        }\n        public override void Initialize()\n        {\n            IocManager.Register<IFileStorage, AliyunOSSStorage>();\n            IocManager.RegisterAssemblyByConvention(Assembly.GetExecutingAssembly());\n\n            AliyunOSSStorageLocalizationConfigurer.Configure(Configuration.Localization);\n        }\n    }\n}\n"
  },
  {
    "path": "src/Abplus.IO.AliyunOSSStorage/IO/AliyunOSSStorage/AliyunOSSStorageModuleConfiguration.cs",
    "content": "﻿namespace Abp.IO.AliyunOSSStorage\n{\n    public class AliyunOSSStorageModuleConfiguration : IAliyunOSSStorageModuleConfiguration\n    {\n        public string AccessKeyId { get; private set; }\n\n        public string AccessKeySecret { get; private set; }\n\n        public string Endpoint { get; private set; }\n\n        public string BucketName { get; private set; }\n\n        public string UriPrefix { get; private set; }\n\n        public IAliyunOSSStorageModuleConfiguration SetAccessKeyId(string id)\n        {\n            AccessKeyId = id;\n            return this;\n        }\n\n        public IAliyunOSSStorageModuleConfiguration SetAccessKeySecret(string secret)\n        {\n            AccessKeySecret = secret;\n            return this;\n        }\n\n        public IAliyunOSSStorageModuleConfiguration SetBucketName(string bucketName)\n        {\n            BucketName = bucketName;\n            return this;\n        }\n\n        public IAliyunOSSStorageModuleConfiguration SetEndpoint(string endpoint)\n        {\n            Endpoint = endpoint;\n            return this;\n        }\n\n        public IAliyunOSSStorageModuleConfiguration WithUriPrefix(string prefix)\n        {\n            UriPrefix = prefix;\n            return this;\n        }\n    }\n}\n"
  },
  {
    "path": "src/Abplus.IO.AliyunOSSStorage/IO/AliyunOSSStorage/IAliyunOSSStorageModuleConfiguration.cs",
    "content": "﻿namespace Abp.IO.AliyunOSSStorage\n{\n    public interface IAliyunOSSStorageModuleConfiguration\n    {\n        string AccessKeyId { get; }\n        string AccessKeySecret { get; }\n        string Endpoint { get; }\n        string BucketName { get; }\n        string UriPrefix { get; }\n\n        IAliyunOSSStorageModuleConfiguration SetAccessKeyId(string id);\n        IAliyunOSSStorageModuleConfiguration SetAccessKeySecret(string secret);\n        IAliyunOSSStorageModuleConfiguration SetEndpoint(string endpoint);\n        IAliyunOSSStorageModuleConfiguration SetBucketName(string bucketName);\n        IAliyunOSSStorageModuleConfiguration WithUriPrefix(string prefix);\n    }\n}\n"
  },
  {
    "path": "src/Abplus.IO.AliyunOSSStorage/IO/AliyunOSSStorageConsts.cs",
    "content": "﻿namespace Abp.IO\n{\n    public class AliyunOSSStorageConsts\n    {\n        public const string LocalizationSourceName = \"AliyunOSSStorage\";\n    }\n}\n"
  },
  {
    "path": "src/Abplus.IO.AliyunOSSStorage/Localization/AliyunOSSStorageLocalizationConfigurer.cs",
    "content": "﻿using Abp.Configuration.Startup;\nusing Abp.IO;\nusing Abp.Localization.Dictionaries;\nusing Abp.Localization.Dictionaries.Xml;\nusing Abp.Reflection.Extensions;\n\nnamespace Abp.Localization\n{\n    public class AliyunOSSStorageLocalizationConfigurer\n    {\n        public static void Configure(ILocalizationConfiguration localizationConfiguration)\n        {\n            localizationConfiguration.Sources.Add(\n                new DictionaryBasedLocalizationSource(AliyunOSSStorageConsts.LocalizationSourceName,\n                    new XmlEmbeddedFileLocalizationDictionaryProvider(\n                        typeof(AliyunOSSStorageLocalizationConfigurer).GetAssembly(),\n                        \"Abp.Localization.SourceFiles\"\n                    )\n                )\n            );\n        }\n    }\n}\n"
  },
  {
    "path": "src/Abplus.IO.AliyunOSSStorage/Localization/SourceFiles/AliyunOSSStorage-zh-Hans.xml",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\" ?>\n<localizationDictionary culture=\"zh-Hans\">\n  <texts>\n    <text name=\"HelloWorld\" value=\"你好，世界！\" />\n  </texts>\n</localizationDictionary>"
  },
  {
    "path": "src/Abplus.IO.AliyunOSSStorage/Localization/SourceFiles/AliyunOSSStorage.xml",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\" ?>\n<localizationDictionary culture=\"en\">\n  <texts>\n    <text name=\"HelloWorld\" value=\"Hello World!\" />\n  </texts>\n</localizationDictionary>"
  },
  {
    "path": "src/Abplus.IO.AzureBlobStorage/Abplus.IO.AzureBlobStorage.csproj",
    "content": "﻿<Project Sdk=\"Microsoft.NET.Sdk\">\n  <Import Project=\"..\\..\\common.props\"></Import>\n  <PropertyGroup>\n    <TargetFramework>net5.0</TargetFramework>\n    <RootNamespace>Abp</RootNamespace>\n  </PropertyGroup>\n  <ItemGroup>\n    <None Remove=\"Localization\\SourceFiles\\AbplusAzureBlobStorage-zh-Hans.xml\" />\n    <None Remove=\"Localization\\SourceFiles\\AbplusAzureBlobStorage.xml\" />\n  </ItemGroup>\n  <ItemGroup>\n    <EmbeddedResource Include=\"Localization\\SourceFiles\\AbplusAzureBlobStorage-zh-Hans.xml\" />\n    <EmbeddedResource Include=\"Localization\\SourceFiles\\AbplusAzureBlobStorage.xml\" />\n  </ItemGroup>\n  <ItemGroup>\n    <PackageReference Include=\"Microsoft.Azure.Storage.Blob\" Version=\"9.4.2\" />\n  </ItemGroup>\n  <ItemGroup>\n    <ProjectReference Include=\"..\\Abplus\\Abplus.csproj\" />\n  </ItemGroup>\n\n</Project>\n"
  },
  {
    "path": "src/Abplus.IO.AzureBlobStorage/Abplus.IO.AzureBlobStorage.nuspec",
    "content": "<?xml version=\"1.0\"?>\n<package >\n  <metadata>\n    <id>$id$</id>\n    <version>$version$</version>\n    <title>$title$</title>\n    <authors>personball</authors>\n    <owners>personball</owners>\n    <licenseUrl>https://raw.githubusercontent.com/personball/abplus/master/LICENSE</licenseUrl>\n    <projectUrl>https://github.com/personball/abplus</projectUrl>\n    <iconUrl>https://raw.githubusercontent.com/personball/abplus/master/abplus_icon.png</iconUrl>\n    <requireLicenseAcceptance>false</requireLicenseAcceptance>\n    <description>Abp plus, an extension for Abp Framework. </description>\n    <releaseNotes></releaseNotes>\n    <copyright>Copyright 2019</copyright>\n    <tags></tags>\n    <dependencies>\n      <dependency id=\"Abplus\" version=\"$version$\" />\n    </dependencies>\n  </metadata>\n</package>"
  },
  {
    "path": "src/Abplus.IO.AzureBlobStorage/Configuration/Startup/AzureBlobFileStorageConfigurationExtensions.cs",
    "content": "﻿using Abp.IO.AzureBlobStorage;\n\nnamespace Abp.Configuration.Startup\n{\n    public static  class AzureBlobFileStorageConfigurationExtensions\n    {\n        public static IAzureBlobFileStorageModuleConfig UseAzureBlobFileStorage(this IModuleConfigurations configurations)\n        {\n            return configurations.AbpConfiguration.GetOrCreate(\"Modules.Abplus.AzureBlobFileStorage\", \n                () => configurations.AbpConfiguration.IocManager.Resolve<IAzureBlobFileStorageModuleConfig>());\n        }\n    }\n}\n"
  },
  {
    "path": "src/Abplus.IO.AzureBlobStorage/IO/AzureBlobStorage/AzureBlobFileStorage.cs",
    "content": "﻿using System;\nusing System.IO;\nusing System.Threading.Tasks;\nusing Abp.Extensions;\nusing Abp.IO.Extensions;\nusing Castle.Core.Logging;\nusing Microsoft.WindowsAzure.Storage;\nusing Microsoft.WindowsAzure.Storage.Auth;\nusing Microsoft.WindowsAzure.Storage.Blob;\n\nnamespace Abp.IO.AzureBlobStorage\n{\n    public class AzureBlobFileStorage : IFileStorage\n    {\n        private readonly IAzureBlobFileStorageConfig _config;\n        protected ILogger Logger { get; set; }\n\n        public AzureBlobFileStorage(IAzureBlobFileStorageConfig config)\n        {\n            _config = config;\n            Logger = NullLogger.Instance;\n        }\n\n        public async Task Delete(string fileName, string subPath = null)\n        {\n            if (!subPath.IsNullOrWhiteSpace())\n            {\n                subPath = subPath.EnsureEndsWith('/');\n            }\n\n            var container = GetCloudBlobContainer(_config);\n            // Get the reference to the block blob from the container\n            CloudBlockBlob blockBlob = container.GetBlockBlobReference($\"{subPath}{fileName}\");\n\n            try\n            {\n                await blockBlob.DeleteIfExistsAsync();\n            }\n            catch (Exception ex)\n            {\n                Logger.Error(ex.Message, ex);\n                throw ex;\n            }\n        }\n\n        public async Task<byte[]> ReadAsBytes(string fileName, string subPath = null)\n        {\n            if (!subPath.IsNullOrWhiteSpace())\n            {\n                subPath = subPath.EnsureEndsWith('/');\n            }\n\n            var container = GetCloudBlobContainer(_config);\n            // Get the reference to the block blob from the container\n            CloudBlockBlob blockBlob = container.GetBlockBlobReference($\"{subPath}{fileName}\");\n\n            try\n            {\n                using (var rs = blockBlob.OpenRead())\n                {\n                    return rs.GetAllBytes();\n                }\n            }\n            catch (Exception ex)\n            {\n                Logger.Error(ex.Message, ex);\n                throw ex;\n            }\n        }\n\n        public async Task<string> Save(Stream source, string fileName, string subPath = null)\n        {\n            if (!subPath.IsNullOrWhiteSpace())\n            {\n                subPath = subPath.EnsureEndsWith('/');\n            }\n\n            await UploadFileToStorage(source, $\"{subPath}{fileName}\", _config);\n\n            return AbsoluteAccessPath(_config, $\"{subPath}{fileName}\");\n        }\n\n        public async Task<string> Save(byte[] source, string fileName, string subPath = null)\n        {\n            if (!subPath.IsNullOrWhiteSpace())\n            {\n                subPath = subPath.EnsureEndsWith('/');\n            }\n\n            await UploadFileToStorage(source, $\"{subPath}{fileName}\", _config);\n\n            return AbsoluteAccessPath(_config, $\"{subPath}{fileName}\");\n        }\n\n        private static string AbsoluteAccessPath(IAzureBlobFileStorageConfig config, string relativePathAndFileName)\n        {\n            return $\"https://{config.AccountName}.blob.{config.EndpointSuffix}/{config.Container}/{relativePathAndFileName}\";\n        }\n\n        private static async Task<bool> UploadFileToStorage(byte[] fileBytes, string fileName, IAzureBlobFileStorageConfig _storageConfig)\n        {\n            var container = GetCloudBlobContainer(_storageConfig);\n            // Get the reference to the block blob from the container\n            CloudBlockBlob blockBlob = container.GetBlockBlobReference(fileName);\n\n            // Upload the file\n            await blockBlob.UploadFromByteArrayAsync(fileBytes, 0, fileBytes.Length);\n\n            return await Task.FromResult(true);\n        }\n\n        private static async Task<bool> UploadFileToStorage(Stream fileStream, string fileName, IAzureBlobFileStorageConfig _storageConfig)\n        {\n            var container = GetCloudBlobContainer(_storageConfig);\n            // Get the reference to the block blob from the container\n            CloudBlockBlob blockBlob = container.GetBlockBlobReference(fileName);\n\n            // Upload the file\n            await blockBlob.UploadFromStreamAsync(fileStream);\n\n            return await Task.FromResult(true);\n        }\n\n        private static CloudBlobContainer GetCloudBlobContainer(IAzureBlobFileStorageConfig storageConfig)\n        {\n            // Create storagecredentials object by reading the values from the configuration (appsettings.json)\n            StorageCredentials storageCredentials = new StorageCredentials(storageConfig.AccountName, storageConfig.AccountKey);\n\n            // Create cloudstorage account by passing the storagecredentials\n            CloudStorageAccount storageAccount = new CloudStorageAccount(storageCredentials, storageConfig.EndpointSuffix, true);\n\n            // Create the blob client.\n            CloudBlobClient blobClient = storageAccount.CreateCloudBlobClient();\n\n            // Get reference to the blob container by passing the name by reading the value from the configuration (appsettings.json)\n            return blobClient.GetContainerReference(storageConfig.Container);\n        }\n\n    }\n}\n"
  },
  {
    "path": "src/Abplus.IO.AzureBlobStorage/IO/AzureBlobStorage/AzureBlobFileStorageConfig.cs",
    "content": "﻿namespace Abp.IO.AzureBlobStorage\n{\n    public class AzureBlobFileStorageConfig : IAzureBlobFileStorageConfig\n    {\n        private readonly IAzureBlobFileStorageModuleConfig _moduleConfig;\n\n        public AzureBlobFileStorageConfig(IAzureBlobFileStorageModuleConfig moduleConfig)\n        {\n            _moduleConfig = moduleConfig;\n        }\n\n        public string AccountName => _moduleConfig.AccountName;\n\n        public string AccountKey => _moduleConfig.AccountKey;\n\n        public string Container => _moduleConfig.Container;\n\n        public string EndpointSuffix => _moduleConfig.EndpointSuffix;\n    }\n}\n"
  },
  {
    "path": "src/Abplus.IO.AzureBlobStorage/IO/AzureBlobStorage/AzureBlobFileStorageModule.cs",
    "content": "﻿using System.Reflection;\nusing Abp.IO.AzureBlobStorage.Configuration;\nusing Abp.Localization;\nusing Abp.Modules;\n\nnamespace Abp.IO.AzureBlobStorage\n{\n    /// <summary>\n    /// TODO 是否由本模块自行实现相关setting设置接口？\n    /// </summary>\n    [DependsOn(typeof(AbpKernelModule))]//依赖SettingManager\n    public class AzureBlobFileStorageModule : AbpModule\n    {\n        public override void PreInitialize()\n        {\n            IocManager.Register<IAzureBlobFileStorageModuleConfig, AzureBlobFileStorageModuleConfig>();\n        }\n\n        public override void Initialize()\n        {\n            var moduleConfig = IocManager.Resolve<IAzureBlobFileStorageModuleConfig>();\n            if (moduleConfig.UseSettingManager)\n            {\n                IocManager.Register<IAzureBlobFileStorageConfig, AzureBlobFileStorageSetting>();\n            }\n            else\n            {\n                IocManager.Register<IAzureBlobFileStorageConfig, AzureBlobFileStorageConfig>();\n            }\n\n            IocManager.Register<IFileStorage, AzureBlobFileStorage>();\n            IocManager.RegisterAssemblyByConvention(Assembly.GetExecutingAssembly());\n\n            AzureBlobStorageLocalizationConfigurer.Configure(Configuration.Localization);\n        }\n    }\n}\n"
  },
  {
    "path": "src/Abplus.IO.AzureBlobStorage/IO/AzureBlobStorage/AzureBlobFileStorageModuleConfig.cs",
    "content": "﻿namespace Abp.IO.AzureBlobStorage\n{\n    public class AzureBlobFileStorageModuleConfig : IAzureBlobFileStorageModuleConfig\n    {\n        public AzureBlobFileStorageModuleConfig()\n        {\n            UseSettingManager = false;\n        }\n\n        #region AzureBlobStorageConfig\n\n        public string AccountName { get; private set; }\n\n        public string AccountKey { get; private set; }\n\n        public string Container { get; private set; }\n\n        public string EndpointSuffix { get; private set; }\n\n        #endregion\n\n        public bool UseSettingManager { get; private set; }\n\n        public IAzureBlobFileStorageModuleConfig ConfigAzureStorage()\n        {\n            UseSettingManager = false;\n            return this;\n        }\n\n        public void ConfigAzureStorageUseSettingManager()\n        {\n            UseSettingManager = true;\n        }\n\n        public IAzureBlobFileStorageModuleConfig SetAccountKey(string accountKey)\n        {\n            AccountKey = accountKey;\n            return this;\n        }\n\n        public IAzureBlobFileStorageModuleConfig SetAccountName(string accountName)\n        {\n            AccountName = accountName;\n            return this;\n        }\n\n        public IAzureBlobFileStorageModuleConfig SetContainer(string container)\n        {\n            Container = container;\n            return this;\n        }\n\n        public IAzureBlobFileStorageModuleConfig UseEndpointSuffix(string endpointSuffix)\n        {\n            EndpointSuffix = endpointSuffix;\n            return this;\n        }\n    }\n}\n"
  },
  {
    "path": "src/Abplus.IO.AzureBlobStorage/IO/AzureBlobStorage/Configuration/AzureBlobFileStorageSetting.cs",
    "content": "﻿using Abp.Configuration;\n\nnamespace Abp.IO.AzureBlobStorage.Configuration\n{\n    /// <summary>\n    /// use SettingManager to config azure blob storage per tenant\n    /// </summary>\n    public class AzureBlobFileStorageSetting : IAzureBlobFileStorageConfig\n    {\n        protected SettingManager SettingManager;\n\n        public AzureBlobFileStorageSetting(SettingManager settingManager)\n        {\n            SettingManager = settingManager;\n        }\n\n        public string AccountName\n        {\n            get\n            {\n                return SettingManager.GetSettingValue(AzureBlobFileStorageSettingNames.AccountName);\n            }\n        }\n\n        public string AccountKey\n        {\n            get\n            {\n                return SettingManager.GetSettingValue(AzureBlobFileStorageSettingNames.AccountKey);\n            }\n        }\n\n        public string Container\n        {\n\n            get\n            {\n                return SettingManager.GetSettingValue(AzureBlobFileStorageSettingNames.Container);\n            }\n        }\n\n        public string EndpointSuffix\n        {\n            get\n            {\n                return SettingManager.GetSettingValue(AzureBlobFileStorageSettingNames.EndpointSuffix);\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "src/Abplus.IO.AzureBlobStorage/IO/AzureBlobStorage/Configuration/AzureBlobFileStorageSettingNames.cs",
    "content": "﻿namespace Abp.IO.AzureBlobStorage.Configuration\n{\n    public static class AzureBlobFileStorageSettingNames\n    {\n        public const string AccountName = \"Abplus.IO.AzureBlobStorage.AccountName\";\n        public const string AccountKey = \"Abplus.IO.AzureBlobStorage.AccountKey\";\n        public const string Container = \"Abplus.IO.AzureBlobStorage.Container\";\n        public const string EndpointSuffix = \"Abplus.IO.AzureBlobStorage.EndpointSuffix\";\n        // string ThumbnailContainer { get; set; }\n    }\n}\n"
  },
  {
    "path": "src/Abplus.IO.AzureBlobStorage/IO/AzureBlobStorage/Configuration/AzureBlobFileStorageSettingProvider.cs",
    "content": "﻿using System.Collections.Generic;\nusing Abp.Configuration;\nusing Abp.Localization;\n\nnamespace Abp.IO.AzureBlobStorage.Configuration\n{\n    public class AzureBlobFileStorageSettingProvider : SettingProvider\n    {\n        public override IEnumerable<SettingDefinition> GetSettingDefinitions(SettingDefinitionProviderContext context)\n        {\n            return new List<SettingDefinition>\n           {\n               new SettingDefinition(\n                    AzureBlobFileStorageSettingNames.AccountName,\n                    \"\",\n                    L(\"AzureBlobFileStorageAccountName\"),\n                    scopes: SettingScopes.Application|SettingScopes.Tenant),\n\n               new SettingDefinition(\n                   AzureBlobFileStorageSettingNames.AccountKey,\n                   \"\",\n                   L(\"AzureBlobFileStorageAccountKey\"),\n                   scopes:SettingScopes.Application|SettingScopes.Tenant),\n\n               new SettingDefinition(\n                   AzureBlobFileStorageSettingNames.Container,\n                   \"\",\n                   L(\"AzureBlobFileStorageContainer\"),\n                   scopes:SettingScopes.Application|SettingScopes.Tenant),\n\n               new SettingDefinition(\n                   AzureBlobFileStorageSettingNames.EndpointSuffix,\n                   \"\",\n                   L(\"AzureBlobFileStorageEndpointSuffix\"),\n                   scopes:SettingScopes.Application|SettingScopes.Tenant)\n           };\n        }\n\n        private static LocalizableString L(string name)\n        {\n            return new LocalizableString(name, AzureBlobStorageConsts.LocalizationSourceName);\n        }\n    }\n}\n"
  },
  {
    "path": "src/Abplus.IO.AzureBlobStorage/IO/AzureBlobStorage/IAzureBlobFileStorageConfig.cs",
    "content": "﻿namespace Abp.IO.AzureBlobStorage\n{\n    public interface IAzureBlobFileStorageConfig\n    {\n        string AccountName { get;  }\n        string AccountKey { get; }\n        string Container { get;  }\n        // string ThumbnailContainer { get; }\n        string EndpointSuffix { get; }\n    }\n}\n"
  },
  {
    "path": "src/Abplus.IO.AzureBlobStorage/IO/AzureBlobStorage/IAzureBlobFileStorageModuleConfig.cs",
    "content": "﻿namespace Abp.IO.AzureBlobStorage\n{\n    public interface IAzureBlobFileStorageModuleConfig : IAzureBlobFileStorageConfig\n    {\n        bool UseSettingManager { get; }\n\n        void ConfigAzureStorageUseSettingManager();\n\n        IAzureBlobFileStorageModuleConfig ConfigAzureStorage();\n        IAzureBlobFileStorageModuleConfig SetAccountName(string accountName);\n        IAzureBlobFileStorageModuleConfig SetAccountKey(string accountKey);\n        IAzureBlobFileStorageModuleConfig SetContainer(string container);\n        IAzureBlobFileStorageModuleConfig UseEndpointSuffix(string endpointSuffix);\n    }\n}\n"
  },
  {
    "path": "src/Abplus.IO.AzureBlobStorage/IO/AzureBlobStorageConsts.cs",
    "content": "﻿namespace Abp.IO\n{\n    public class AzureBlobStorageConsts\n    {\n        public const string LocalizationSourceName = \"AbplusAzureBlobStorage\";\n    }\n}\n"
  },
  {
    "path": "src/Abplus.IO.AzureBlobStorage/Localization/AzureBlobStorageLocalizationConfigurer.cs",
    "content": "﻿using Abp.Configuration.Startup;\nusing Abp.IO;\nusing Abp.Localization.Dictionaries;\nusing Abp.Localization.Dictionaries.Xml;\nusing Abp.Reflection.Extensions;\n\nnamespace Abp.Localization\n{\n    public class AzureBlobStorageLocalizationConfigurer\n    {\n        public static void Configure(ILocalizationConfiguration localizationConfiguration)\n        {\n            localizationConfiguration.Sources.Add(\n                new DictionaryBasedLocalizationSource(AzureBlobStorageConsts.LocalizationSourceName,\n                    new XmlEmbeddedFileLocalizationDictionaryProvider(\n                        typeof(AzureBlobStorageLocalizationConfigurer).GetAssembly(),\n                        \"Abp.Localization.SourceFiles\"\n                    )\n                )\n            );\n        }\n    }\n}\n"
  },
  {
    "path": "src/Abplus.IO.AzureBlobStorage/Localization/SourceFiles/AbplusAzureBlobStorage-zh-Hans.xml",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\" ?>\n<localizationDictionary culture=\"zh-Hans\">\n  <texts>\n    <text name=\"AzureBlobFileStorageAccountName\" value=\"Azure存储账户\" />\n    <text name=\"AzureBlobFileStorageAccountKey\" value=\"访问认证Key\" />\n    <text name=\"AzureBlobFileStorageContainer\" value=\"Blob容器名称\" />\n    <!--Endpoint Suffix即Azure版本，国际版填写core.windows.net 世纪互联版填core.chinacloudapi.cn-->\n    <text name=\"AzureBlobFileStorageEndpointSuffix\" value=\"Endpoint Suffix\" />\n  </texts>\n</localizationDictionary>"
  },
  {
    "path": "src/Abplus.IO.AzureBlobStorage/Localization/SourceFiles/AbplusAzureBlobStorage.xml",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\" ?>\n<localizationDictionary culture=\"en\">\n  <texts>\n    <text name=\"AzureBlobFileStorageAccountName\" value=\"Azure Storage Account\" />\n    <text name=\"AzureBlobFileStorageAccountKey\" value=\"Access Key\" />\n    <text name=\"AzureBlobFileStorageContainer\" value=\"Container Name\" />\n    <text name=\"AzureBlobFileStorageEndpointSuffix\" value=\"Endpoint Suffix\" />\n  </texts>\n</localizationDictionary>"
  },
  {
    "path": "src/Abplus.IO.LocalFileSystem/Abplus.IO.LocalFileSystem.csproj",
    "content": "﻿<Project Sdk=\"Microsoft.NET.Sdk\">\n  <Import Project=\"..\\..\\common.props\"></Import>\n  <PropertyGroup>\n    <TargetFramework>net5.0</TargetFramework>\n    <RootNamespace>Abp</RootNamespace>\n  </PropertyGroup>\n  <ItemGroup>\n    <None Remove=\"Localization\\SourceFiles\\AbplusLocalFileSystem-zh-Hans.xml\" />\n    <None Remove=\"Localization\\SourceFiles\\AbplusLocalFileSystem.xml\" />\n  </ItemGroup>\n  <ItemGroup>\n    <EmbeddedResource Include=\"Localization\\SourceFiles\\AbplusLocalFileSystem-zh-Hans.xml\" />\n    <EmbeddedResource Include=\"Localization\\SourceFiles\\AbplusLocalFileSystem.xml\" />\n  </ItemGroup>\n\n  <ItemGroup>\n    <ProjectReference Include=\"..\\Abplus\\Abplus.csproj\" />\n  </ItemGroup>\n\n</Project>\n"
  },
  {
    "path": "src/Abplus.IO.LocalFileSystem/IO/LocalFileSystem/ILocalFileSystemStorageConfig.cs",
    "content": "﻿namespace Abp.IO.LocalFileSystem\n{\n    public interface ILocalFileSystemStorageConfig\n    {\n        string StoreRootDirectory { get; }\n\n        string AccessUriRootPath { get; }\n    }\n}\n"
  },
  {
    "path": "src/Abplus.IO.LocalFileSystem/IO/LocalFileSystem/LocalFileSystemStorage.cs",
    "content": "﻿using System.IO;\nusing System.Threading.Tasks;\nusing Abp.Extensions;\nusing Abp.IO.Extensions;\n#pragma warning disable CS1998\nnamespace Abp.IO.LocalFileSystem\n{\n    /// <summary>\n    /// 本地存储，和部署情况相关，只能针对Application配置\n    /// 先实现win系统\n    /// TODO@personball 跨平台兼容\n    /// </summary>\n    public class LocalFileSystemStorage : IFileStorage\n    {\n        private readonly ILocalFileSystemStorageConfig _config;\n\n        public LocalFileSystemStorage(ILocalFileSystemStorageConfig config)\n        {\n            _config = config;\n        }\n\n        public async Task Delete(string fileName, string subPath = null)\n        {\n            var filePath = $\"{_config.StoreRootDirectory.EnsureEndsWith('\\\\')}{subPath.EnsureEndsWith('\\\\')}{fileName}\";\n\n            if (File.Exists(filePath))\n            {\n                File.Delete(filePath);\n            }\n        }\n\n        public async Task<byte[]> ReadAsBytes(string fileName, string subPath = null)\n        {\n            var filePath = $\"{_config.StoreRootDirectory.EnsureEndsWith('\\\\')}{subPath.EnsureEndsWith('\\\\')}{fileName}\";\n\n            using (var fs = new FileStream(filePath, FileMode.Open, FileAccess.Read))\n            {\n                return fs.GetAllBytes();\n            }\n        }\n\n        public async Task<string> Save(Stream source, string fileName, string subPath = null)\n        {\n            if (!subPath.IsNullOrWhiteSpace())\n            {\n                subPath = subPath.EnsureEndsWith('\\\\');\n            }\n\n            var path = $\"{_config.StoreRootDirectory.EnsureEndsWith('\\\\')}{subPath}\";\n\n            if (!Directory.Exists(path))\n            {\n                Directory.CreateDirectory(path);\n            }\n\n            using (var fs = new FileStream($\"{path}{fileName}\", FileMode.Create))\n            {\n                await source.CopyToAsync(fs);\n            }\n\n            return AbsoluteAccessUri(_config, subPath.Replace('\\\\', '/'), fileName);\n        }\n\n        private string AbsoluteAccessUri(ILocalFileSystemStorageConfig config, string subPath, string fileName)\n        {\n            return $\"{config.AccessUriRootPath.EnsureEndsWith('/')}{subPath}{fileName}\";\n        }\n\n        public async Task<string> Save(byte[] source, string fileName, string subPath = null)\n        {\n            if (!subPath.IsNullOrWhiteSpace())\n            {\n                subPath = subPath.EnsureEndsWith('\\\\');\n            }\n\n            var path = $\"{_config.StoreRootDirectory.EnsureEndsWith('\\\\')}{subPath}\";\n\n            if (!Directory.Exists(path))\n            {\n                Directory.CreateDirectory(path);\n            }\n\n            File.WriteAllBytes($\"{path}{fileName}\", source);\n\n            return AbsoluteAccessUri(_config, subPath.Replace('\\\\', '/'), fileName);\n        }\n    }\n}\n#pragma warning restore CS1998\n"
  },
  {
    "path": "src/Abplus.IO.LocalFileSystem/IO/LocalFileSystem/LocalFileSystemStorageConfig.cs",
    "content": "﻿using Abp.Configuration;\n\nnamespace Abp.IO.LocalFileSystem\n{\n    public class LocalFileSystemStorageConfig : ILocalFileSystemStorageConfig\n    {\n        protected readonly ISettingManager SettingManager;\n\n        public LocalFileSystemStorageConfig(ISettingManager settingManager)\n        {\n            SettingManager = settingManager;\n        }\n\n        public string StoreRootDirectory\n        {\n            get\n            {\n                return SettingManager.GetSettingValueForApplication(\n                    LocalFileSystemStorageSettingNames.StoreRootDirectory);\n            }\n        }\n\n        public string AccessUriRootPath\n        {\n            get\n            {\n                return SettingManager.GetSettingValueForApplication(\n                    LocalFileSystemStorageSettingNames.AccessUriRootPath);\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "src/Abplus.IO.LocalFileSystem/IO/LocalFileSystem/LocalFileSystemStorageModule.cs",
    "content": "﻿using System.Reflection;\nusing Abp.Localization;\nusing Abp.Modules;\n\nnamespace Abp.IO.LocalFileSystem\n{\n    //TODO 是否由本模块自行实现相关setting设置接口？\n    [DependsOn(typeof(AbpKernelModule))]\n    public class LocalFileSystemStorageModule : AbpModule\n    {\n        public override void Initialize()\n        {\n            //IocManager.Register<ILocalFileSystemStorageConfig, LocalFileSystemStorageConfig>();\n\n            IocManager.Register<IFileStorage, LocalFileSystemStorage>();\n            IocManager.RegisterAssemblyByConvention(Assembly.GetExecutingAssembly());\n\n            LocalFileSystemLocalizationConfigurer.Configure(Configuration.Localization);\n        }\n    }\n}\n"
  },
  {
    "path": "src/Abplus.IO.LocalFileSystem/IO/LocalFileSystem/LocalFileSystemStorageSettingNames.cs",
    "content": "﻿namespace Abp.IO.LocalFileSystem\n{\n    public static class LocalFileSystemStorageSettingNames\n    {\n        /// <summary>\n        /// 存储的根目录，系统目录（注意不同OS的路径表示方式）\n        /// </summary>\n        public const string StoreRootDirectory = \"Abplus.IO.LocalSystemFileStorage.StoreRootDirectory\";\n\n        /// <summary>\n        /// 读取的URI路径\n        /// </summary>\n        public const string AccessUriRootPath = \"Abplus.IO.LocalSystemFileStorage.AccessUriRootPath\";\n    }\n}\n"
  },
  {
    "path": "src/Abplus.IO.LocalFileSystem/IO/LocalFileSystem/LocalFileSystemStorageSettingProvider.cs",
    "content": "﻿using System.Collections.Generic;\nusing Abp.Configuration;\nusing Abp.Localization;\n\nnamespace Abp.IO.LocalFileSystem\n{\n    public class LocalFileSystemStorageSettingProvider : SettingProvider\n    {\n        public override IEnumerable<SettingDefinition> GetSettingDefinitions(SettingDefinitionProviderContext context)\n        {\n            return new List<SettingDefinition>\n            {\n                new SettingDefinition(\n                    LocalFileSystemStorageSettingNames.StoreRootDirectory,\n                    \"\",\n                    L(\"StoreRootDirectory\"),\n                    scopes: SettingScopes.Application),\n\n                new SettingDefinition(\n                    LocalFileSystemStorageSettingNames.AccessUriRootPath,\n                    \"\",\n                    L(\"AccessUriRootPath\"),\n                    scopes:SettingScopes.Application)\n            };\n        }\n\n        private static LocalizableString L(string name)\n        {\n            return new LocalizableString(name, LocalFileSystemConsts.LocalizationSourceName);\n        }\n    }\n}\n"
  },
  {
    "path": "src/Abplus.IO.LocalFileSystem/IO/LocalFileSystemConsts.cs",
    "content": "﻿namespace Abp.IO\n{\n    public class LocalFileSystemConsts\n    {\n        public const string LocalizationSourceName = \"AbplusLocalFileSystem\";\n    }\n}\n"
  },
  {
    "path": "src/Abplus.IO.LocalFileSystem/Localization/LocalFileSystemLocalizationConfigurer.cs",
    "content": "﻿using Abp.Configuration.Startup;\nusing Abp.IO;\nusing Abp.Localization.Dictionaries;\nusing Abp.Localization.Dictionaries.Xml;\nusing Abp.Reflection.Extensions;\n\nnamespace Abp.Localization\n{\n    public  class LocalFileSystemLocalizationConfigurer\n    {\n        public static void Configure(ILocalizationConfiguration localizationConfiguration)\n        {\n            localizationConfiguration.Sources.Add(\n                new DictionaryBasedLocalizationSource(LocalFileSystemConsts.LocalizationSourceName,\n                    new XmlEmbeddedFileLocalizationDictionaryProvider(\n                        typeof(LocalFileSystemLocalizationConfigurer).GetAssembly(),\n                        \"Abp.Localization.SourceFiles\"\n                    )\n                )\n            );\n        }\n    }\n}\n"
  },
  {
    "path": "src/Abplus.IO.LocalFileSystem/Localization/SourceFiles/AbplusLocalFileSystem-zh-Hans.xml",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\" ?>\n<localizationDictionary culture=\"zh-Hans\">\n  <texts>\n    <text name=\"StoreRootDirectory\" value=\"本地文件存储根目录\" />\n    <text name=\"AccessUriRootPath\" value=\"根目录的Web访问地址\" />\n  </texts>\n</localizationDictionary>"
  },
  {
    "path": "src/Abplus.IO.LocalFileSystem/Localization/SourceFiles/AbplusLocalFileSystem.xml",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\" ?>\n<localizationDictionary culture=\"en\">\n  <texts>\n    <text name=\"StoreRootDirectory\" value=\"Root Directory\" />\n    <text name=\"AccessUriRootPath\" value=\"Access Uri Root Path\" />\n  </texts>\n</localizationDictionary>"
  },
  {
    "path": "src/Abplus.MqMessages/Abplus.MqMessages.csproj",
    "content": "﻿<Project Sdk=\"Microsoft.NET.Sdk\">\n\n  <Import Project=\"..\\..\\common.props\"></Import>\n  \n  <PropertyGroup>\n    <TargetFramework>net5.0</TargetFramework>\n    <RootNamespace>Abp</RootNamespace>\n  </PropertyGroup>\n\n  <ItemGroup>\n    <PackageReference Include=\"Abp\" Version=\"6.3.1\" />\n    <PackageReference Include=\"Abp.AutoMapper\" Version=\"4.5.0\" />\n  </ItemGroup>\n\n  <ItemGroup>\n    <ProjectReference Include=\"..\\Abplus\\Abplus.csproj\" />\n  </ItemGroup>\n\n</Project>\n"
  },
  {
    "path": "src/Abplus.MqMessages/Abplus.MqMessages.nuspec",
    "content": "<?xml version=\"1.0\"?>\n<package >\n  <metadata>\n    <id>$id$</id>\n    <version>$version$</version>\n    <title>$title$</title>\n    <authors>personball</authors>\n    <owners>personball</owners>\n    <licenseUrl>https://raw.githubusercontent.com/personball/abplus/master/LICENSE</licenseUrl>\n    <projectUrl>https://github.com/personball/abplus</projectUrl>\n    <iconUrl>https://raw.githubusercontent.com/personball/abplus/master/abplus_icon.png</iconUrl>\n    <requireLicenseAcceptance>false</requireLicenseAcceptance>\n    <description>Abp plus, an extension for Abp Framework. </description>\n    <releaseNotes></releaseNotes>\n    <copyright>Copyright 2018</copyright>\n    <tags></tags>\n    <dependencies>\n      <dependency id=\"Abplus\" version=\"$version$\" />\n      <dependency id=\"Abp.AutoMapper\" version=\"4.5.0\" />\n    </dependencies>\n  </metadata>\n</package>"
  },
  {
    "path": "src/Abplus.MqMessages/Configuration/Startup/ExceptionLogInterceptorRegistrar.cs",
    "content": "﻿using Abp.Dependency;\nusing Abp.MqMessages.MqHandlers;\nusing Abp.MqMessages.MqHandlers.ExceptionLogging;\nusing Castle.Core;\nusing Castle.MicroKernel;\n\nnamespace Abp.Configuration.Startup\n{\n    public static class ExceptionLogInterceptorRegistrar\n    {\n        public static void Initialize(IIocManager iocManager)\n        {\n            iocManager.Register<ExceptionLogHandler>();\n            iocManager.Register<ExceptionLogInterceptor>();\n            iocManager.IocContainer.Kernel.ComponentRegistered += Kernel_ComponentRegistered;\n        }\n\n        private static void Kernel_ComponentRegistered(string key, IHandler handler)\n        {\n            if (typeof(AbpMqHandlerBase).IsAssignableFrom(handler.ComponentModel.Implementation))\n            {\n                handler.ComponentModel.Interceptors.Add(new InterceptorReference(typeof(ExceptionLogInterceptor)));\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "src/Abplus.MqMessages/MqMessages/AuditingStores/AuditInfoMqMessage.cs",
    "content": "﻿using System;\n\nnamespace Abp.MqMessages.AuditingStores\n{\n    public class AuditInfoMqMessage\n    {\n        /// <summary>\n        /// TenantId.\n        /// </summary>\n        public int? TenantId { get; set; }\n\n        /// <summary>\n        /// UserId.\n        /// </summary>\n        public long? UserId { get; set; }\n\n        /// <summary>\n        /// ImpersonatorUserId.\n        /// </summary>\n        public long? ImpersonatorUserId { get; set; }\n\n        /// <summary>\n        /// ImpersonatorTenantId.\n        /// </summary>\n        public int? ImpersonatorTenantId { get; set; }\n\n        /// <summary>\n        /// Service (class/interface) name.\n        /// </summary>\n        public string ServiceName { get; set; }\n\n        /// <summary>\n        /// Executed method name.\n        /// </summary>\n        public string MethodName { get; set; }\n\n        /// <summary>\n        /// Calling parameters.\n        /// </summary>\n        public string Parameters { get; set; }\n\n        /// <summary>\n        /// Start time of the method execution.\n        /// </summary>\n        public DateTime ExecutionTime { get; set; }\n\n        /// <summary>\n        /// Total duration of the method call.\n        /// </summary>\n        public int ExecutionDuration { get; set; }\n\n        /// <summary>\n        /// IP address of the client.\n        /// </summary>\n        public string ClientIpAddress { get; set; }\n\n        /// <summary>\n        /// Name (generally computer name) of the client.\n        /// </summary>\n        public string ClientName { get; set; }\n\n        /// <summary>\n        /// Browser information if this method is called in a web request.\n        /// </summary>\n        public string BrowserInfo { get; set; }\n\n        /// <summary>\n        /// Optional custom data that can be filled and used.\n        /// </summary>\n        public string CustomData { get; set; }\n\n        /// <summary>\n        /// \n        /// </summary>\n        public string Exception { get; set; }\n    }\n}\n"
  },
  {
    "path": "src/Abplus.MqMessages/MqMessages/AutoGeneration/DontGenerateMqMessage.cs",
    "content": "﻿using System;\n\nnamespace Abp.MqMessages.AutoGeneration\n{\n    /// <summary>\n    /// 标记指定EventData不参与自动生成MqMessage\n    /// </summary>\n    [AttributeUsage(AttributeTargets.Class, Inherited = false)]\n    public class DontGenerateMqMessage : Attribute\n    {\n    }\n}\n"
  },
  {
    "path": "src/Abplus.MqMessages/MqMessages/AutoMapper/AutoEventsMapToMqMessagesHelper.cs",
    "content": "﻿using System.Linq;\nusing System.Reflection;\nusing Abp.MqMessages.Handlers;\nusing AutoMapper;\n\nnamespace Abp.MqMessages.AutoMapper\n{\n    public static class AutoEventsMapToMqMessagesHelper\n    {\n        public static void CreateEventsToMqMessagesMappings(this IMapperConfigurationExpression mapper, Assembly assembly)\n        {\n            var typesToRegister = assembly.GetTypes()\n                .Where(type => !string.IsNullOrEmpty(type.Namespace))\n                .Where(type => type.BaseType != null\n                && type.BaseType.IsGenericType\n                && (type.BaseType.GetGenericTypeDefinition() == typeof(EventDataPublishHandlerBase<,>)));\n\n            foreach (var type in typesToRegister)\n            {\n                var genericArgs = type.BaseType.GetGenericArguments();\n                if (genericArgs.Length > 1 && !genericArgs[0].BaseType.IsGenericType)\n                {\n                    mapper.CreateMap(genericArgs[0], genericArgs[1]);\n                }\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "src/Abplus.MqMessages/MqMessages/Handlers/EventDataPublishHandlerBase.cs",
    "content": "﻿using Abp.AutoMapper;\nusing Abp.Dependency;\nusing Abp.Domain.Uow;\nusing Abp.Events.Bus;\nusing Abp.Events.Bus.Handlers;\nusing Castle.Core.Logging;\n\nnamespace Abp.MqMessages.Handlers\n{\n    /// <summary>\n    /// 订阅EventData并发布消息到消息队列的抽象基类\n    /// </summary>\n    /// <typeparam name=\"TEventData\">Abp事件</typeparam>\n    /// <typeparam name=\"TMqMessage\">支持序列化的消息体（类DTO对象）</typeparam>\n    public abstract class EventDataPublishHandlerBase<TEventData, TMqMessage>\n        : IEventHandler<TEventData>, ITransientDependency\n        where TEventData : EventData\n        where TMqMessage : class\n    {\n        protected readonly IUnitOfWorkManager UnitOfWorkManager;\n\n        public ILogger Logger { get; set; }\n\n        public IMqMessagePublisher MqMessagePublisher { get; set; }\n\n        public EventDataPublishHandlerBase(IUnitOfWorkManager unitOfWorkManager)\n        {\n            UnitOfWorkManager = unitOfWorkManager;\n            Logger = NullLogger.Instance;\n            MqMessagePublisher = NullMqMessagePublisher.Instance;\n        }\n\n        public virtual void HandleEvent(TEventData eventData)\n        {\n            if (UnitOfWorkManager.Current == null)\n            {\n                MqMessagePublisher.Publish(ConvertEventDataToMqMessage(eventData));\n            }\n            else\n            {\n                UnitOfWorkManager.Current.Completed += (sender, e) => MqMessagePublisher.Publish(ConvertEventDataToMqMessage(eventData));\n            }\n        }\n\n        /// <summary>\n        /// 转换EventData为MqMessage，默认采用eventData.MapTo<TMqMessage>()\n        /// </summary>\n        /// <param name=\"eventData\"></param>\n        /// <returns></returns>\n        public virtual TMqMessage ConvertEventDataToMqMessage(TEventData eventData)\n        {\n            return eventData.MapTo<TMqMessage>();\n        }\n    }\n}\n"
  },
  {
    "path": "src/Abplus.MqMessages/MqMessages/MqHandlers/AbpMqHandlerBase.cs",
    "content": "﻿using System;\nusing System.Threading.Tasks;\nusing Abp.Dependency;\nusing Abp.MqMessages.MessageTrackers;\nnamespace Abp.MqMessages.MqHandlers\n{\n    public abstract class AbpMqHandlerBase : AbpServiceBase, ITransientDependency\n    {\n        public IMessageTracker MessageTracker { get; set; }\n\n        public AbpMqHandlerBase(string localizationSourceName)\n        {\n            LocalizationSourceName = localizationSourceName;\n            MessageTracker = DefaultInMemoryMessageTracker.Instance;\n        }\n\n        protected async Task<bool> IsTrueSetting(string settingKey)\n        {\n            return string.Equals(\"true\", await SettingManager.GetSettingValueForApplicationAsync(settingKey), StringComparison.CurrentCultureIgnoreCase);\n        }\n    }\n}\n"
  },
  {
    "path": "src/Abplus.MqMessages/MqMessages/MqHandlers/ExceptionLoggling/ExceptionLogAttribute.cs",
    "content": "﻿using System;\nusing Abp.Logging;\n\nnamespace Abp.MqMessages.MqHandlers.ExceptionLogging\n{\n    public class ExceptionLogAttribute : Attribute\n    {\n        /// <summary>\n        /// 需拦截的异常\n        /// </summary>\n        public Type[] ExceptionTypes { get; set; }\n\n        /// <summary>\n        /// 是否记录日志,默认true\n        /// </summary>\n        public bool Logged { get; set; }\n\n        /// <summary>\n        /// 日志级别，默认Warn\n        /// </summary>\n        public LogSeverity LogLevel { get; set; }\n\n        /// <summary>\n        /// 是否吃掉异常，默认false\n        /// </summary>\n        public bool NotThrow { get; set; }\n\n        /// <summary>\n        /// \n        /// </summary>\n        /// <param name=\"exceptionTypes\"></param>\n        public ExceptionLogAttribute(params Type[] exceptionTypes)\n            : this(true, LogSeverity.Warn, false, exceptionTypes)\n        {\n        }\n\n        /// <summary>\n        /// \n        /// </summary>\n        /// <param name=\"notThrow\"></param>\n        /// <param name=\"exceptionTypes\"></param>\n        public ExceptionLogAttribute(bool notThrow, params Type[] exceptionTypes)\n            : this(true, LogSeverity.Warn, notThrow, exceptionTypes)\n        {\n        }\n\n        /// <summary>\n        /// \n        /// </summary>\n        /// <param name=\"logged\"></param>\n        /// <param name=\"logLevel\"></param>\n        /// <param name=\"exceptionTypes\"></param>\n        public ExceptionLogAttribute(bool logged, LogSeverity logLevel, params Type[] exceptionTypes)\n            : this(logged, logLevel, false, exceptionTypes)\n        {\n        }\n\n        /// <summary>\n        /// \n        /// </summary>\n        /// <param name=\"logged\">记录日志（警告级别），默认true</param>\n        /// <param name=\"logLevel\">日志等级</param>\n        /// <param name=\"notThrow\">是否吃掉异常</param>\n        /// <param name=\"exceptionTypes\">需拦截的异常</param>\n        public ExceptionLogAttribute(bool logged, LogSeverity logLevel, bool notThrow, params Type[] exceptionTypes)\n        {\n            Logged = logged;\n            LogLevel = logLevel;\n            NotThrow = notThrow;\n            ExceptionTypes = exceptionTypes;\n        }\n    }\n}\n"
  },
  {
    "path": "src/Abplus.MqMessages/MqMessages/MqHandlers/ExceptionLoggling/ExceptionLogHandler.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Reflection;\nusing System.Threading.Tasks;\nusing Abp.Extensions;\nusing Abp.Interceptors;\nusing Castle.Core.Logging;\nusing Castle.DynamicProxy;\n\nnamespace Abp.MqMessages.MqHandlers.ExceptionLogging\n{\n    public class ExceptionLogHandler : IAsyncInterceptorHandler\n    {\n        public ILogger Logger { get; set; }\n\n        public ExceptionLogHandler()\n        {\n            Logger = NullLogger.Instance;\n        }\n\n        public void Handle(IInvocation invocation)\n        {\n            var handleExceptionAttributes = GetAttributesOfMemberAndDeclaringType<ExceptionLogAttribute>(\n                invocation.MethodInvocationTarget);\n\n            if (handleExceptionAttributes.Count <= 0)\n            {\n                invocation.Proceed();\n                return;\n            }\n            else\n            {\n                try\n                {\n                    invocation.Proceed();\n                }\n                catch (Exception ex)\n                {\n                    var exType = ex.GetType();\n                    var attribute = handleExceptionAttributes.FirstOrDefault(h => h.ExceptionTypes.Contains(exType));\n\n                    if (attribute == null)\n                    {\n                        ex.ReThrow();\n                    }\n\n                    LogException(attribute, ex, invocation.MethodInvocationTarget);\n\n                    if (!attribute.NotThrow)\n                    {\n                        ex.ReThrow();\n                    }\n                }\n            }\n        }\n\n        public async Task HandleAsync(IInvocation invocation)\n        {\n            var handleExceptionAttributes = GetAttributesOfMemberAndDeclaringType<ExceptionLogAttribute>(\n                 invocation.MethodInvocationTarget);\n\n            if (handleExceptionAttributes.Count <= 0)\n            {\n                invocation.Proceed();\n                await (Task)invocation.ReturnValue;\n            }\n            else\n            {\n                try\n                {\n                    invocation.Proceed();\n                    await (Task)invocation.ReturnValue;\n                }\n                catch (Exception ex)\n                {\n                    var exType = ex.GetType();\n                    var attribute = handleExceptionAttributes.FirstOrDefault(h => h.ExceptionTypes.Contains(exType));\n\n                    if (attribute == null)\n                    {\n                        ex.ReThrow();\n                    }\n\n                    LogException(attribute, ex, invocation.MethodInvocationTarget);\n\n                    if (!attribute.NotThrow)\n                    {\n                        ex.ReThrow();\n                    }\n                }\n            }\n        }\n\n        public async Task<T> HandleAsync<T>(IInvocation invocation)\n        {\n            var handleExceptionAttributes = GetAttributesOfMemberAndDeclaringType<ExceptionLogAttribute>(\n               invocation.MethodInvocationTarget);\n\n            if (handleExceptionAttributes.Count <= 0)\n            {\n                invocation.Proceed();\n                return await (Task<T>)invocation.ReturnValue;\n            }\n            else\n            {\n                try\n                {\n                    invocation.Proceed();\n                    return await (Task<T>)invocation.ReturnValue;\n                }\n                catch (Exception ex)\n                {\n                    var exType = ex.GetType();\n                    var attribute = handleExceptionAttributes.FirstOrDefault(h => h.ExceptionTypes.Contains(exType));\n\n                    if (attribute == null)\n                    {\n                        ex.ReThrow();\n                    }\n\n                    LogException(attribute, ex, invocation.MethodInvocationTarget);\n\n                    if (!attribute.NotThrow)\n                    {\n                        ex.ReThrow();\n                    }\n\n                    return default(T);\n                }\n            }\n        }\n\n        private static List<TAttribute> GetAttributesOfMemberAndDeclaringType<TAttribute>(MemberInfo memberInfo)\n           where TAttribute : Attribute\n        {\n            var attributeList = new List<TAttribute>();\n\n            //Add attributes on the member\n            if (memberInfo.IsDefined(typeof(TAttribute), true))\n            {\n                attributeList.AddRange(memberInfo.GetCustomAttributes(typeof(TAttribute), true).Cast<TAttribute>());\n            }\n\n            //Add attributes on the class\n            if (memberInfo.DeclaringType != null && memberInfo.DeclaringType.IsDefined(typeof(TAttribute), true))\n            {\n                attributeList.AddRange(memberInfo.DeclaringType.GetCustomAttributes(typeof(TAttribute), true).Cast<TAttribute>());\n            }\n\n            return attributeList;\n        }\n\n        private void LogException(ExceptionLogAttribute attribute, Exception ex, MethodInfo methodInfo)\n        {\n            if (attribute.Logged)\n            {\n                var msg = $\"{methodInfo.DeclaringType.FullName}.{$\".{methodInfo.Name}\"} Fail:{ex.Message}\";\n\n                switch (attribute.LogLevel)\n                {\n                    case Abp.Logging.LogSeverity.Debug:\n                        Logger.Debug(msg, ex);\n                        return;\n                    case Abp.Logging.LogSeverity.Info:\n                        Logger.Info(msg, ex);\n                        return;\n                    case Abp.Logging.LogSeverity.Warn:\n                        Logger.Warn(msg, ex);\n                        return;\n                    case Abp.Logging.LogSeverity.Error:\n                        Logger.Error(msg, ex);\n                        return;\n                    case Abp.Logging.LogSeverity.Fatal:\n                        Logger.Fatal(msg, ex);\n                        return;\n                    default:\n                        Logger.Warn(msg, ex);\n                        return;\n                }\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "src/Abplus.MqMessages/MqMessages/MqHandlers/ExceptionLoggling/ExceptionLogInterceptor.cs",
    "content": "﻿using Abp.Interceptors;\n\nnamespace Abp.MqMessages.MqHandlers.ExceptionLogging\n{\n    public class ExceptionLogInterceptor : AsyncHandlingInterceptor\n    {\n        public ExceptionLogInterceptor(ExceptionLogHandler handler) : base(handler)\n        {\n        }\n    }\n}\n"
  },
  {
    "path": "src/Abplus.MqMessages.AuditingConsumerHandler/Abplus.MqMessages.AuditingConsumerHandler.csproj",
    "content": "﻿<Project Sdk=\"Microsoft.NET.Sdk\">\n  \n  <Import Project=\"..\\..\\common.props\"></Import>\n  \n  <PropertyGroup>\n    <TargetFramework>net5.0</TargetFramework>\n    <RootNamespace>Abp</RootNamespace>\n  </PropertyGroup>\n\n  <ItemGroup>\n    <PackageReference Include=\"abp\" Version=\"6.3.1\" />\n    <PackageReference Include=\"rebus\" Version=\"4.2.1\" />\n  </ItemGroup>\n\n  <ItemGroup>\n    <ProjectReference Include=\"..\\Abplus.MqMessages\\Abplus.MqMessages.csproj\" />\n  </ItemGroup>\n\n</Project>\n"
  },
  {
    "path": "src/Abplus.MqMessages.AuditingConsumerHandler/Abplus.MqMessages.AuditingConsumerHandler.nuspec",
    "content": "<?xml version=\"1.0\"?>\n<package >\n  <metadata>\n    <id>$id$</id>\n    <version>$version$</version>\n    <title>$title$</title>\n    <authors>personball</authors>\n    <owners>personball</owners>\n    <licenseUrl>https://raw.githubusercontent.com/personball/abplus/master/LICENSE</licenseUrl>\n    <projectUrl>https://github.com/personball/abplus</projectUrl>\n    <iconUrl>https://raw.githubusercontent.com/personball/abplus/master/abplus_icon.png</iconUrl>\n    <requireLicenseAcceptance>false</requireLicenseAcceptance>\n    <description>Abp plus, an extension for Abp Framework. </description>\n    <releaseNotes></releaseNotes>\n    <copyright>Copyright 2018</copyright>\n    <tags></tags>\n    <dependencies>\n      <dependency id=\"Abplus.MqMessages\" version=\"$version$\" />\n      <dependency id=\"Rebus\" version=\"4.2.1\" />\n    </dependencies>\n  </metadata>\n</package>"
  },
  {
    "path": "src/Abplus.MqMessages.AuditingConsumerHandler/Auditing/AuditingStore/AuditingConsumerRebusHandlerModule.cs",
    "content": "﻿using Abp.Modules;\nusing System.Reflection;\n\nnamespace Abp.Auditing.AuditingStore\n{\n    public class AuditingConsumerRebusHandlerModule : AbpModule\n    {\n        public override void PreInitialize()\n        {\n            IocManager.Register<IAuditingConsumerRebusHandlerModuleConfig, AuditingConsumerRebusHandlerModuleConfig>();\n        }\n\n        public override void Initialize()\n        {\n            IocManager.RegisterAssemblyByConvention(Assembly.GetExecutingAssembly());\n        }\n\n        public override void PostInitialize()\n        {\n            MqMessageAuditingStoreRebusHandler.Timer.Start();\n        }\n\n        public override void Shutdown()\n        {\n            MqMessageAuditingStoreRebusHandler.Timer.Stop();\n        }\n    }\n}\n"
  },
  {
    "path": "src/Abplus.MqMessages.AuditingConsumerHandler/Auditing/AuditingStore/AuditingConsumerRebusHandlerModuleConfig.cs",
    "content": "﻿using Abp.MqMessages.AuditingStores;\nusing System;\nusing System.Collections.Generic;\n\nnamespace Abp.Auditing.AuditingStore\n{\n    public class AuditingConsumerRebusHandlerModuleConfig : IAuditingConsumerRebusHandlerModuleConfig\n    {\n        public AuditingConsumerRebusHandlerModuleConfig()\n        {\n            BatchSize = 100;\n            Period = TimeSpan.FromSeconds(1);\n            BatchStoreAction = (msgList) => { };\n        }\n        public int BatchSize { get; private set; }\n\n        public Action<IEnumerable<AuditInfoMqMessage>> BatchStoreAction { get; private set; }\n\n        public TimeSpan Period { get; private set; }\n\n        public IAuditingConsumerRebusHandlerModuleConfig Batch(int batchSize)\n        {\n            BatchSize = batchSize;\n            return this;\n        }\n\n        public IAuditingConsumerRebusHandlerModuleConfig Do(Action<IEnumerable<AuditInfoMqMessage>> storeAction)\n        {\n            BatchStoreAction = storeAction;\n            return this;\n        }\n\n        public IAuditingConsumerRebusHandlerModuleConfig EveryPeriodIn(TimeSpan period)\n        {\n            Period = period;\n            return this;\n        }\n    }\n}\n"
  },
  {
    "path": "src/Abplus.MqMessages.AuditingConsumerHandler/Auditing/AuditingStore/IAuditingConsumerRebusHandlerModuleConfig.cs",
    "content": "﻿using Abp.MqMessages.AuditingStores;\nusing System;\nusing System.Collections.Generic;\n\nnamespace Abp.Auditing.AuditingStore\n{\n    public interface IAuditingConsumerRebusHandlerModuleConfig\n    {\n        /// <summary>\n        /// 每批大小\n        /// </summary>\n        int BatchSize { get; }\n\n        /// <summary>\n        /// 执行间隔（单位：秒）\n        /// </summary>\n        TimeSpan Period { get; }\n\n        /// <summary>\n        /// 批量存储的委托\n        /// </summary>\n        Action<IEnumerable<AuditInfoMqMessage>> BatchStoreAction { get; }\n\n        /// <summary>\n        /// 设置执行间隔(单位:秒)\n        /// </summary>\n        /// <param name=\"seconds\"></param>\n        /// <returns></returns>\n        IAuditingConsumerRebusHandlerModuleConfig EveryPeriodIn(TimeSpan period);\n        \n        /// <summary>\n        /// 设置每批大小\n        /// </summary>\n        /// <param name=\"batchSize\"></param>\n        /// <returns></returns>\n        IAuditingConsumerRebusHandlerModuleConfig Batch(int batchSize);\n\n        /// <summary>\n        /// 批量存储逻辑,如何处理消息\n        /// </summary>\n        /// <param name=\"storeAction\"></param>\n        /// <returns></returns>\n        IAuditingConsumerRebusHandlerModuleConfig Do(Action<IEnumerable<AuditInfoMqMessage>> storeAction);\n    }\n}\n"
  },
  {
    "path": "src/Abplus.MqMessages.AuditingConsumerHandler/Auditing/AuditingStore/MqMessageAuditingStoreRebusHandler.cs",
    "content": "﻿using Abp.Dependency;\nusing Abp.MqMessages.AuditingStores;\nusing Abp.Threading.Timers;\nusing Rebus.Handlers;\nusing System.Collections.Concurrent;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Threading.Tasks;\n\nnamespace Abp.Auditing.AuditingStore\n{\n    public class MqMessageAuditingStoreRebusHandler :\n         IHandleMessages<AuditInfoMqMessage>\n        , ITransientDependency\n    {\n        private static ConcurrentQueue<AuditInfoMqMessage> InMemoryAuditInfoQueue;\n        public static AbpTimer Timer;\n\n        static MqMessageAuditingStoreRebusHandler()\n        {\n            InMemoryAuditInfoQueue = new ConcurrentQueue<AuditInfoMqMessage>();\n\n            var config = IocManager.Instance.Resolve<IAuditingConsumerRebusHandlerModuleConfig>();\n            Timer = new AbpTimer((int)config.Period.TotalMilliseconds, true);\n\n            Timer.Elapsed += (s, e) =>\n            {\n                var tmpMsg = new List<AuditInfoMqMessage>();\n                for (int i = 0; i < config.BatchSize; i++)\n                {\n                    AuditInfoMqMessage msg;\n                    if (InMemoryAuditInfoQueue.TryDequeue(out msg))\n                    {\n                        tmpMsg.Add(msg);\n                    }\n                    else\n                    {\n                        break;\n                    }\n                }\n\n                if (tmpMsg.Any())\n                {\n                    config.BatchStoreAction(tmpMsg);\n                }\n            };\n        }\n\n        public async Task Handle(AuditInfoMqMessage message)\n        {\n            InMemoryAuditInfoQueue.Enqueue(message);\n        }\n    }\n}\n"
  },
  {
    "path": "src/Abplus.MqMessages.AuditingConsumerHandler/Configuration/Startup/AuditingConsumerRebusHandlerConfigurationExtensions.cs",
    "content": "﻿using Abp.Auditing.AuditingStore;\n\nnamespace Abp.Configuration.Startup\n{\n    public static class AuditingConsumerRebusHandlerConfigurationExtensions\n    {\n        public static IAuditingConsumerRebusHandlerModuleConfig AuditingConsumer(this IModuleConfigurations configurations)\n        {\n            return configurations.AbpConfiguration.GetOrCreate(\"Modules.Abplus.AuditingConsumer\", () => configurations.AbpConfiguration.IocManager.Resolve<IAuditingConsumerRebusHandlerModuleConfig>());\n        }\n    }\n}\n"
  },
  {
    "path": "src/Abplus.MqMessages.AuditingStore/Abplus.MqMessages.AuditingStore.csproj",
    "content": "﻿<Project Sdk=\"Microsoft.NET.Sdk\">\n\n  <Import Project=\"..\\..\\common.props\"></Import>\n\n  <PropertyGroup>\n    <TargetFramework>net5.0</TargetFramework>\n    <RootNamespace>Abp</RootNamespace>\n  </PropertyGroup>\n\n  <ItemGroup>\n    <PackageReference Include=\"abp\" Version=\"6.3.1\" />\n  </ItemGroup>\n\n  <ItemGroup>\n    <ProjectReference Include=\"..\\Abplus.MqMessages\\Abplus.MqMessages.csproj\" />\n    <ProjectReference Include=\"..\\Abplus.MqMessages.RebusCore\\Abplus.MqMessages.RebusCore.csproj\" />\n  </ItemGroup>\n\n</Project>\n"
  },
  {
    "path": "src/Abplus.MqMessages.AuditingStore/Abplus.MqMessages.AuditingStore.nuspec",
    "content": "<?xml version=\"1.0\"?>\n<package >\n  <metadata>\n    <id>$id$</id>\n    <version>$version$</version>\n    <title>$title$</title>\n    <authors>personball</authors>\n    <owners>personball</owners>\n    <licenseUrl>https://raw.githubusercontent.com/personball/abplus/master/LICENSE</licenseUrl>\n    <projectUrl>https://github.com/personball/abplus</projectUrl>\n    <iconUrl>https://raw.githubusercontent.com/personball/abplus/master/abplus_icon.png</iconUrl>\n    <requireLicenseAcceptance>false</requireLicenseAcceptance>\n    <description>Abp plus, an extension for Abp Framework. </description>\n    <releaseNotes></releaseNotes>\n    <copyright>Copyright 2018</copyright>\n    <tags></tags>\n    <dependencies>\n      <dependency id=\"Abplus.MqMessages\" version=\"$version$\" />\n      <dependency id=\"Abplus.MqMessages.RebusCore\" version=\"$version$\" />\n    </dependencies>\n  </metadata>\n</package>"
  },
  {
    "path": "src/Abplus.MqMessages.AuditingStore/Auditing/AuditingStores/MqMessageAuditingStore.cs",
    "content": "﻿using Abp.Dependency;\nusing Abp.MqMessages;\nusing Abp.MqMessages.AuditingStores;\nusing Abp.Threading;\nusing System;\nusing System.Threading.Tasks;\n\nnamespace Abp.Auditing.AuditingStores\n{\n    public class MqMessageAuditingStore : IAuditingStore, ITransientDependency\n    {\n        private readonly Lazy<IMqMessagePublisher> MqMessagePublisher;//why this need Lazy<>?\n\n        public MqMessageAuditingStore()\n        {\n            MqMessagePublisher = new Lazy<IMqMessagePublisher>(() =>\n            {\n                return IocManager.Instance.Resolve<IMqMessagePublisher>();\n            });\n        }\n\n        public void Save(AuditInfo auditInfo)\n        {\n            AsyncHelper.RunSync(() => SaveAsync(auditInfo));\n        }\n\n        public async Task SaveAsync(AuditInfo auditInfo)\n        {\n            var mqMsgAuditInfo = new AuditInfoMqMessage\n            {\n                BrowserInfo = auditInfo.BrowserInfo,\n                ClientIpAddress = auditInfo.ClientIpAddress,\n                ClientName = auditInfo.ClientName,\n                CustomData = auditInfo.CustomData,\n                ExecutionDuration = auditInfo.ExecutionDuration,\n                ImpersonatorTenantId = auditInfo.ImpersonatorTenantId,\n                ImpersonatorUserId = auditInfo.ImpersonatorUserId,\n                MethodName = auditInfo.MethodName,\n                Parameters = auditInfo.Parameters,\n                ServiceName = auditInfo.ServiceName,\n                UserId = auditInfo.UserId,\n                ExecutionTime = auditInfo.ExecutionTime,\n                TenantId = auditInfo.TenantId\n            };\n\n            if (auditInfo.Exception != null)\n            {\n                mqMsgAuditInfo.CustomData += $\" {auditInfo.Exception.Message}\";\n                mqMsgAuditInfo.Exception = auditInfo.Exception.StackTrace;\n                if (auditInfo.Exception.InnerException != null)\n                {\n                    mqMsgAuditInfo.CustomData += $\" {auditInfo.Exception.InnerException.Message}\";\n                    mqMsgAuditInfo.Exception = auditInfo.Exception.InnerException.StackTrace;\n                }\n            }\n\n            await MqMessagePublisher.Value.PublishAsync(mqMsgAuditInfo);\n        }\n    }\n}\n"
  },
  {
    "path": "src/Abplus.MqMessages.AuditingStore/Auditing/AuditingStores/MqMessageAuditingStoreModule.cs",
    "content": "﻿using Abp.Modules;\nusing Abp.MqMessages.Publishers;\n\nnamespace Abp.Auditing.AuditingStores\n{\n    [DependsOn(typeof(RebusRabbitMqPublisherCoreModule))]\n    public class MqMessageAuditingStoreModule : AbpModule\n    {\n        public override void PreInitialize()\n        {\n            IocManager.Register<IAuditingStore, MqMessageAuditingStore>();\n        }\n    }\n}\n"
  },
  {
    "path": "src/Abplus.MqMessages.IndexToES/Abplus.MqMessages.IndexToES.csproj",
    "content": "﻿<Project Sdk=\"Microsoft.NET.Sdk\">\n\n  <Import Project=\"..\\..\\common.props\"></Import>\n\n  <PropertyGroup>\n    <TargetFramework>net5.0</TargetFramework>\n    <RootNamespace>Abp</RootNamespace>\n  </PropertyGroup>\n\n  <ItemGroup>\n    <Compile Remove=\"MqMessages\\MqHandlers\\MqMessagesT4Register.cs\" />\n  </ItemGroup>\n\n  <ItemGroup>\n    <Page Include=\"MqMessages\\MqHandlers\\MqMessagesT4Register.cs\" />\n  </ItemGroup>\n\n  <ItemGroup>\n    <None Update=\"MqMessages\\MqHandlers\\MqMessageIndexToESHandlerBuilder.tt\">\n      <Generator>TextTemplatingFileGenerator</Generator>\n      <LastGenOutput>MqMessageIndexToESHandlerBuilder.cs</LastGenOutput>\n    </None>\n  </ItemGroup>\n\n  <ItemGroup>\n    <Service Include=\"{508349b6-6b84-4df5-91f0-309beebad82d}\" />\n  </ItemGroup>\n\n  <ItemGroup>\n    <Compile Update=\"MqMessages\\MqHandlers\\MqMessageIndexToESHandlerBuilder.cs\">\n      <DesignTime>True</DesignTime>\n      <AutoGen>True</AutoGen>\n      <DependentUpon>MqMessageIndexToESHandlerBuilder.tt</DependentUpon>\n    </Compile>\n  </ItemGroup>\n\n  <ItemGroup>\n    <PackageReference Include=\"abp\" Version=\"6.3.1\" />\n    <PackageReference Include=\"nest\" Version=\"6.2.0\" />\n    <PackageReference Include=\"rebus\" Version=\"4.2.1\" />\n  </ItemGroup>\n\n  <ItemGroup>\n    <ProjectReference Include=\"..\\Abplus.MqMessages\\Abplus.MqMessages.csproj\" />\n  </ItemGroup>\n\n</Project>\n"
  },
  {
    "path": "src/Abplus.MqMessages.IndexToES/Abplus.MqMessages.IndexToES.nuspec",
    "content": "<?xml version=\"1.0\"?>\n<package >\n  <metadata>\n    <id>$id$</id>\n    <version>$version$</version>\n    <title>$title$</title>\n    <authors>personball</authors>\n    <owners>personball</owners>\n    <licenseUrl>https://raw.githubusercontent.com/personball/abplus/master/LICENSE</licenseUrl>\n    <projectUrl>https://github.com/personball/abplus</projectUrl>\n    <iconUrl>https://raw.githubusercontent.com/personball/abplus/master/abplus_icon.png</iconUrl>\n    <requireLicenseAcceptance>false</requireLicenseAcceptance>\n    <description>Abp plus, an extension for Abp Framework. </description>\n    <releaseNotes></releaseNotes>\n    <copyright>Copyright 2018</copyright>\n    <tags></tags>\n    <dependencies>\n      <dependency id=\"Rebus\" version=\"4.2.1\" />\n      <dependency id=\"NEST\" version=\"6.2.0\" />\n      <dependency id=\"Abplus.MqMessages\" version=\"$version$\" />\n    </dependencies>\n    <contentFiles>\n      <files include=\"MqMessages\\MqHandlers\\MqMessagesT4Register.cs\" />\n      <files include=\"MqMessages\\MqHandlers\\MqMessageIndexToESHandlerBuilder.tt\" />\n      <files include=\"MqMessages\\MqHandlers\\T4MultipleOutputManager.ttinclude\" />\n    </contentFiles>\n  </metadata>\n</package>"
  },
  {
    "path": "src/Abplus.MqMessages.IndexToES/DateTimeExtensions.cs",
    "content": "﻿using System;\n\nnamespace Abp\n{\n    public static class DateTimeExtensions\n    {\n        public static string GetESIndexName(this DateTime now, string defaultIndexName, IndexFreq freqSetting)\n        {\n            Check.NotNullOrWhiteSpace(defaultIndexName, nameof(defaultIndexName));\n\n            if (freqSetting == IndexFreq.PerDay)\n            {\n                return $\"{defaultIndexName}-{DateTime.Now.Date.ToString(\"yyyy.MM.dd\")}\";\n            }\n            else if (freqSetting == IndexFreq.PerMonth)\n            {\n                return $\"{defaultIndexName}-{DateTime.Now.Date.ToString(\"yyyy.MM\")}\";\n            }\n            else if (freqSetting == IndexFreq.PerYear)\n            {\n                return $\"{defaultIndexName}-{DateTime.Now.Date.ToString(\"yyyy\")}\";\n            }\n            else\n            {\n                return defaultIndexName;\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "src/Abplus.MqMessages.IndexToES/IndexFreq.cs",
    "content": "﻿namespace Abp\n{\n    /// <summary>\n    /// 定义创建索引的频率\n    /// </summary>\n    public enum IndexFreq\n    {\n        /// <summary>\n        /// 每天一个索引\n        /// </summary>\n        PerDay = 0,\n\n        /// <summary>\n        /// 每月一个索引\n        /// </summary>\n        PerMonth = 1,\n\n        /// <summary>\n        /// 每年一个索引\n        /// </summary>\n        PerYear = 2,\n\n        /// <summary>\n        /// 仅一个索引，索引名不加日期后缀\n        /// </summary>\n        None = 3\n    }\n}\n"
  },
  {
    "path": "src/Abplus.MqMessages.IndexToES/MqMessages/MqHandlers/MqMessageIndexToESHandlerBase.cs",
    "content": "﻿using System;\nusing System.Threading.Tasks;\nusing Abp.Dependency;\nusing Nest;\nusing Rebus.Handlers;\n\nnamespace Abp.MqMessages.MqHandlers\n{\n    public abstract class MqMessageIndexToESHandlerBase<TMqMessage> : AbpMqHandlerBase\n        , IHandleMessages<TMqMessage>\n        , ITransientDependency where TMqMessage : class\n    {\n\n        protected string DefaultIndexName { get; set; }\n\n        protected IndexFreq IndexFreq { get; set; }\n\n        public IElasticClient ElasticClient { get; set; }\n\n        public MqMessageIndexToESHandlerBase(string defaultIndexName, IndexFreq indexFreq, string localizationSourceName)\n            : base(localizationSourceName)\n        {\n            DefaultIndexName = defaultIndexName;\n            IndexFreq = indexFreq;\n        }\n\n        public async Task Handle(TMqMessage message)\n        {\n            var indexName = CustomIndexName();\n            var indexFreq = CustomIndexFreq();\n\n            await ElasticClient.IndexAsync(message, i => i.Index(DateTime.Now.GetESIndexName(indexName, indexFreq)));\n        }\n\n        public virtual string CustomIndexName()\n        {\n            return DefaultIndexName;\n        }\n\n        public virtual IndexFreq CustomIndexFreq()\n        {\n            return IndexFreq;\n        }\n    }\n}\n"
  },
  {
    "path": "src/Abplus.MqMessages.IndexToES/MqMessages/MqHandlers/MqMessageIndexToESHandlerBuilder.cs",
    "content": "﻿"
  },
  {
    "path": "src/Abplus.MqMessages.IndexToES/MqMessages/MqHandlers/MqMessageIndexToESHandlerBuilder.tt",
    "content": "﻿<#@ template debug=\"false\" hostspecific=\"true\" language=\"C#\" #>\n\n<#@ include file=\"T4MultipleOutputManager.ttinclude\" #>\n\n<#@ assembly name=\"System.Core\" #>\n<#@ assembly name=\"System.IO\" #>\n<#@ assembly name=\"$(SolutionDir)packages\\Newtonsoft.Json.9.0.1\\lib\\net45\\Newtonsoft.Json.dll\" #>\n<#@ assembly name=\"$(ProjectDir)bin\\$(ConfigurationName)\\$(ProjectName).exe\" #>\n<#@ import namespace=\"System.Linq\" #>\n<#@ import namespace=\"System.Text\" #>\n<#@ import namespace=\"System.Collections.Generic\" #>\n<#@ import namespace=\"Newtonsoft.Json\" #>\n<#@ import namespace=\"Newtonsoft.Json.Linq\" #>\n<#@ import namespace=\"System.Globalization\" #>\n<#@ import namespace=\"Abp.MqMessages.MqHandlers\" #>\n<#@ output extension=\".cs\" #>\n\n\n<#\n\tvar tempateManager = Manager.Create(Host,GenerationEnvironment);\n\tstring projectName = Host.ResolveAssemblyReference(\"$(ProjectName)\");\n\t\n\tvar types=MqMessagesT4Register.MqMessageTypes;\n\tforeach(var type in types)\n\t{\n\t\ttempateManager.StartNewFile(type.Name+\"IndexToESHandler.cs\");\n#>\nusing Abp;\nusing Abp.MqMessages.MqHandlers;\nusing <#=type.Namespace#>;\n\nnamespace <#=projectName#>.MqMessages.MqHandlers\n{\n    public class <#=type.Name#>IndexToESHandler : MqMessageIndexToESHandlerBase<<#=type.Name#>>\n    {\n        public <#=type.Name#>IndexToESHandler() \n\t\t\t: base(【DefaultIndexName】, IndexFreq.PerMonth, 【Consts.LocalizationSourceName】)\n        {\n        }\n    }\n}\n<#\n\t}//foreach-end\n\t\t\t\t\n\ttempateManager.EndBlock();\n\ttempateManager.Process(true); \n#>\n\n\n"
  },
  {
    "path": "src/Abplus.MqMessages.IndexToES/MqMessages/MqHandlers/MqMessagesT4Register.cs",
    "content": "﻿using System;\n\nnamespace Abp.MqMessages.MqHandlers\n{\n    public static class MqMessagesT4Register\n    {\n        public static Type[] MqMessageTypes = new Type[] {\n            //typeof(SampleMqMessage)\n        };\n    }\n}\n"
  },
  {
    "path": "src/Abplus.MqMessages.IndexToES/MqMessages/MqHandlers/T4MultipleOutputManager.ttinclude",
    "content": "<#@ assembly name=\"System.Core\"\n#><#@ assembly name=\"System.Data.Linq\"\n#><#@ assembly name=\"EnvDTE\"\n#><#@ assembly name=\"System.Xml\"\n#><#@ assembly name=\"System.Xml.Linq\"\n#><#@ import namespace=\"System.Collections.Generic\"\n#><#@ import namespace=\"System.IO\"\n#><#@ import namespace=\"System.Text\"\n#><#@ import namespace=\"Microsoft.VisualStudio.TextTemplating\"\n#><#+\n// https://raw.github.com/damieng/DamienGKit\n// http://damieng.com/blog/2009/11/06/multiple-outputs-from-t4-made-easy-revisited\n\n// Manager class records the various blocks so it can split them up\nclass Manager {\n    private class Block {\n        public String Name;\n        public int Start, Length;\n        public bool IncludeInDefault;\n    }\n\n    private Block currentBlock;\n    private readonly List<Block> files = new List<Block>();\n    private readonly Block footer = new Block();\n    private readonly Block header = new Block();\n    private readonly ITextTemplatingEngineHost host;\n    private readonly StringBuilder template;\n    protected readonly List<String> generatedFileNames = new List<String>();\n\n    public static Manager Create(ITextTemplatingEngineHost host, StringBuilder template) {\n        return (host is IServiceProvider) ? new VSManager(host, template) : new Manager(host, template);\n    }\n\n    public void StartNewFile(String name) {\n        if (name == null)\n            throw new ArgumentNullException(\"name\");\n        CurrentBlock = new Block { Name = name };\n    }\n\n    public void StartFooter(bool includeInDefault=true) {\n        CurrentBlock = footer;\n        footer.IncludeInDefault = includeInDefault;\n    }\n\n    public void StartHeader(bool includeInDefault=true) {\n        CurrentBlock = header;\n        header.IncludeInDefault = includeInDefault;\n    }\n\n    public void EndBlock() {\n        if (CurrentBlock == null)\n            return;\n        CurrentBlock.Length = template.Length - CurrentBlock.Start;\n        if (CurrentBlock != header && CurrentBlock != footer)\n            files.Add(CurrentBlock);\n        currentBlock = null;\n    }\n\n    public virtual void Process(bool split, bool sync =true) {\n        if (split) {\n            EndBlock();\n            String headerText = template.ToString(header.Start, header.Length);\n            String footerText = template.ToString(footer.Start, footer.Length);\n            String outputPath = Path.GetDirectoryName(host.TemplateFile);\n            files.Reverse();\n            if (!footer.IncludeInDefault)\n                template.Remove(footer.Start, footer.Length);\n            foreach(Block block in files) {\n                String fileName = Path.Combine(outputPath, block.Name);\n                String content = headerText + template.ToString(block.Start, block.Length) + footerText;\n                generatedFileNames.Add(fileName);\n                CreateFile(fileName, content);\n                template.Remove(block.Start, block.Length);\n            }\n            if (!header.IncludeInDefault)\n                template.Remove(header.Start, header.Length);\n        }\n    }\n\n    protected virtual void CreateFile(String fileName, String content) {\n        if (IsFileContentDifferent(fileName, content))\n            File.WriteAllText(fileName, content);\n    }\n\n    public virtual String GetCustomToolNamespace(String fileName) {\n        return null;\n    }\n\n    public virtual String DefaultProjectNamespace {\n        get { return null; }\n    }\n\n    protected bool IsFileContentDifferent(String fileName, String newContent) {\n        return !(File.Exists(fileName) && File.ReadAllText(fileName) == newContent);\n    }\n\n    private Manager(ITextTemplatingEngineHost host, StringBuilder template) {\n        this.host = host;\n        this.template = template;\n    }\n\n    private Block CurrentBlock {\n        get { return currentBlock; }\n        set {\n            if (CurrentBlock != null)\n                EndBlock();\n            if (value != null)\n                value.Start = template.Length;\n            currentBlock = value;\n        }\n    }\n\n    private class VSManager: Manager {\n        private readonly EnvDTE.ProjectItem templateProjectItem;\n        private readonly EnvDTE.DTE dte;\n        private readonly Action<String> checkOutAction;\n        private readonly Action<List<String>> projectSyncAction;\n\n        public override String DefaultProjectNamespace {\n            get {\n                return templateProjectItem.ContainingProject.Properties.Item(\"DefaultNamespace\").Value.ToString();\n            }\n        }\n\n        public override String GetCustomToolNamespace(string fileName) {\n            return dte.Solution.FindProjectItem(fileName).Properties.Item(\"CustomToolNamespace\").Value.ToString();\n        }\n\n        public override void Process(bool split, bool sync) {\n            if (templateProjectItem.ProjectItems == null)\n                return;\n            base.Process(split, sync);\n            if (sync)\n                projectSyncAction.EndInvoke(projectSyncAction.BeginInvoke(generatedFileNames, null, null));\n        }\n\n        protected override void CreateFile(String fileName, String content) {\n            if (IsFileContentDifferent(fileName, content)) {\n                CheckoutFileIfRequired(fileName);\n                File.WriteAllText(fileName, content);\n            }\n        }\n\n        internal VSManager(ITextTemplatingEngineHost host, StringBuilder template)\n            : base(host, template) {\n            var hostServiceProvider = (IServiceProvider)host;\n            if (hostServiceProvider == null)\n                throw new ArgumentNullException(\"Could not obtain IServiceProvider\");\n            dte = (EnvDTE.DTE) hostServiceProvider.GetService(typeof(EnvDTE.DTE));\n            if (dte == null)\n                throw new ArgumentNullException(\"Could not obtain DTE from host\");\n            templateProjectItem = dte.Solution.FindProjectItem(host.TemplateFile);\n            checkOutAction = fileName => dte.SourceControl.CheckOutItem(fileName);\n            projectSyncAction = keepFileNames => ProjectSync(templateProjectItem, keepFileNames);\n        }\n\n        private static void ProjectSync(EnvDTE.ProjectItem templateProjectItem, List<String> keepFileNames) {\n            var keepFileNameSet = new HashSet<String>(keepFileNames);\n            var projectFiles = new Dictionary<String, EnvDTE.ProjectItem>();\n            var originalFilePrefix = Path.GetFileNameWithoutExtension(templateProjectItem.FileNames[0]) + \".\";\n            foreach (EnvDTE.ProjectItem projectItem in templateProjectItem.ProjectItems)\n                projectFiles.Add(projectItem.FileNames[0], projectItem);\n\n            // Remove unused items from the project\n            foreach (var pair in projectFiles)\n                if (!keepFileNames.Contains(pair.Key) && !(Path.GetFileNameWithoutExtension(pair.Key) + \".\").StartsWith(originalFilePrefix))\n                    pair.Value.Delete();\n\n            // Add missing files to the project\n            foreach(String fileName in keepFileNameSet)\n                if (!projectFiles.ContainsKey(fileName))\n                    templateProjectItem.ProjectItems.AddFromFile(fileName);\n        }\n\n        private void CheckoutFileIfRequired(String fileName) {\n            var sc = dte.SourceControl;\n            if (sc != null && sc.IsItemUnderSCC(fileName) && !sc.IsItemCheckedOut(fileName))\n                checkOutAction.EndInvoke(checkOutAction.BeginInvoke(fileName, null, null));\n        }\n    }\n} #>"
  },
  {
    "path": "src/Abplus.MqMessages.RebusCore/Abplus.MqMessages.RebusCore.csproj",
    "content": "﻿<Project Sdk=\"Microsoft.NET.Sdk\">\n\n  <Import Project=\"..\\..\\common.props\"></Import>\n\n  <PropertyGroup>\n    <TargetFramework>net5.0</TargetFramework>\n    <RootNamespace>Abp</RootNamespace>\n    \n  </PropertyGroup>\n\n  <ItemGroup>\n    <PackageReference Include=\"abp\" Version=\"6.3.1\" />\n    <PackageReference Include=\"rebus\" Version=\"4.2.1\" />\n  </ItemGroup>\n\n  <ItemGroup>\n    <ProjectReference Include=\"..\\Abplus\\Abplus.csproj\" />\n  </ItemGroup>\n\n</Project>\n"
  },
  {
    "path": "src/Abplus.MqMessages.RebusCore/Abplus.MqMessages.RebusCore.nuspec",
    "content": "<?xml version=\"1.0\"?>\n<package >\n  <metadata>\n    <id>$id$</id>\n    <version>$version$</version>\n    <title>$title$</title>\n    <authors>personball</authors>\n    <owners>personball</owners>\n    <licenseUrl>https://raw.githubusercontent.com/personball/abplus/master/LICENSE</licenseUrl>\n    <projectUrl>https://github.com/personball/abplus</projectUrl>\n    <iconUrl>https://raw.githubusercontent.com/personball/abplus/master/abplus_icon.png</iconUrl>\n    <requireLicenseAcceptance>false</requireLicenseAcceptance>\n    <description>Abp plus, an extension for Abp Framework. </description>\n    <releaseNotes></releaseNotes>\n    <copyright>Copyright 2018</copyright>\n    <tags></tags>\n    <dependencies>\n      <dependency id=\"Abplus\" version=\"$version$\" />\n      <dependency id=\"Rebus\" version=\"4.2.1\" />\n    </dependencies>\n  </metadata>\n</package>"
  },
  {
    "path": "src/Abplus.MqMessages.RebusCore/MqMessages/Publishers/RebusRabbitMqPublisher.cs",
    "content": "﻿using System.Threading.Tasks;\nusing Abp.Json;\nusing Abp.Runtime.Session;\nusing Abp.Threading;\nusing Castle.Core.Logging;\nusing Rebus.Bus;\n\nnamespace Abp.MqMessages.Publishers\n{\n    public class RebusRabbitMqPublisher : IMqMessagePublisher\n    {\n        private readonly IBus _bus;\n\n        public ILogger Logger { get; set; }\n\n        public IAbpSession AbpSession { get; set; }\n\n        public RebusRabbitMqPublisher(IBus bus)\n        {\n            _bus = bus;\n            Logger = NullLogger.Instance;\n            AbpSession = NullAbpSession.Instance;\n        }\n\n        public void Publish(object mqMessages)\n        {\n            TryFillSessionInfo(mqMessages);\n\n            Logger.Debug(mqMessages.GetType().FullName + \":\" + mqMessages.ToJsonString());\n\n            AsyncHelper.RunSync(() => _bus.Publish(mqMessages));\n        }\n\n        private void TryFillSessionInfo(object mqMessages)\n        {\n            if (AbpSession.UserId.HasValue)\n            {\n                var operatorUserIdProperty = mqMessages.GetType().GetProperty(\"OperatorUserId\");\n                if (operatorUserIdProperty != null && (operatorUserIdProperty.PropertyType == typeof(long?)))\n                {\n                    operatorUserIdProperty.SetValue(mqMessages, AbpSession.UserId);\n                }\n            }\n\n            if (AbpSession.TenantId.HasValue)\n            {\n                var tenantIdProperty = mqMessages.GetType().GetProperty(\"TenantId\");\n                if (tenantIdProperty != null && (tenantIdProperty.PropertyType == typeof(int?)))\n                {\n                    tenantIdProperty.SetValue(mqMessages, AbpSession.TenantId);\n                }\n            }\n        }\n\n        public async Task PublishAsync(object mqMessages)\n        {\n\t        TryFillSessionInfo(mqMessages);\n\n\t\t\tLogger.Debug(mqMessages.GetType().FullName + \":\" + mqMessages.ToJsonString());\n\n            await _bus.Publish(mqMessages);\n        }\n    }\n}\n"
  },
  {
    "path": "src/Abplus.MqMessages.RebusCore/MqMessages/Publishers/RebusRabbitMqPublisherCoreModule.cs",
    "content": "﻿using Abp.Modules;\n\nnamespace Abp.MqMessages.Publishers\n{\n    public class RebusRabbitMqPublisherCoreModule : AbpModule\n    {\n        public override void PreInitialize()\n        {\n            IocManager.Register<IMqMessagePublisher, RebusRabbitMqPublisher>();\n        }\n    }\n}\n"
  },
  {
    "path": "src/Abplus.MqMessages.RebusRabbitMqConsumer/Abplus.MqMessages.RebusRabbitMqConsumer.csproj",
    "content": "﻿<Project Sdk=\"Microsoft.NET.Sdk\">\n\n   <Import Project=\"..\\..\\common.props\"></Import>\n  \n  <PropertyGroup>\n    <TargetFramework>net5.0</TargetFramework>\n    <RootNamespace>Abp</RootNamespace>\n    \n  </PropertyGroup>\n\n  <ItemGroup>\n    <PackageReference Include=\"abp\" Version=\"6.3.1\" />\n    <PackageReference Include=\"Rebus.Castle.Windsor\" Version=\"4.1.0\" />\n    <PackageReference Include=\"rebus.rabbitmq\" Version=\"4.4.2\" />\n  </ItemGroup>\n\n  <ItemGroup>\n    <ProjectReference Include=\"..\\Abplus.MqMessages.RebusCore\\Abplus.MqMessages.RebusCore.csproj\" />\n  </ItemGroup>\n\n</Project>\n"
  },
  {
    "path": "src/Abplus.MqMessages.RebusRabbitMqConsumer/Abplus.MqMessages.RebusRabbitMqConsumer.nuspec",
    "content": "<?xml version=\"1.0\"?>\n<package >\n  <metadata>\n    <id>$id$</id>\n    <version>$version$</version>\n    <title>$title$</title>\n    <authors>personball</authors>\n    <owners>personball</owners>\n    <licenseUrl>https://raw.githubusercontent.com/personball/abplus/master/LICENSE</licenseUrl>\n    <projectUrl>https://github.com/personball/abplus</projectUrl>\n    <iconUrl>https://raw.githubusercontent.com/personball/abplus/master/abplus_icon.png</iconUrl>\n    <requireLicenseAcceptance>false</requireLicenseAcceptance>\n    <description>Abp plus, an extension for Abp Framework. </description>\n    <releaseNotes></releaseNotes>\n    <copyright>Copyright 2018</copyright>\n    <tags></tags>\n    <dependencies>\n      <dependency id=\"Abplus\" version=\"$version$\" />\n      <dependency id=\"Abplus.MqMessages.RebusCore\" version=\"$version$\"/>\n      <dependency id=\"Rebus.Castle.Windsor\" version=\"4.1.0\" />\n      <dependency id=\"Rebus.RabbitMq\" version=\"4.4.2\" />\n    </dependencies>\n  </metadata>\n</package>"
  },
  {
    "path": "src/Abplus.MqMessages.RebusRabbitMqConsumer/Configuration/Startup/RebusRabbitMqConsumerConfigurationExtensions.cs",
    "content": "﻿using Abp.MqMessages.Consumers;\n\nnamespace Abp.Configuration.Startup\n{\n    public static class RebusRabbitMqConsumerConfigurationExtensions\n    {\n        public static IRebusRabbitMqConsumerModuleConfig UseAbplusRebusRabbitMqConsumer(this IModuleConfigurations configurations)\n        {\n            return configurations.AbpConfiguration.GetOrCreate(\"Modules.Abp.RebusRabbitMqConsumer\", () => configurations.AbpConfiguration.IocManager.Resolve<IRebusRabbitMqConsumerModuleConfig>());\n        }\n    }\n}\n"
  },
  {
    "path": "src/Abplus.MqMessages.RebusRabbitMqConsumer/MqMessages/Consumers/IRebusRabbitMqConsumerModuleConfig.cs",
    "content": "﻿using System;\nusing System.Reflection;\nusing Rebus.Config;\nusing Rebus.Serialization;\n\nnamespace Abp.MqMessages.Consumers\n{\n    public interface IRebusRabbitMqConsumerModuleConfig\n    {\n        /// <summary>\n        /// 是否启用，默认启用\n        /// </summary>\n        bool Enabled { get; }\n\n        /// <summary>\n        /// RabbitMq连接字符串\n        /// </summary>\n        string ConnectString { get; }\n\n        /// <summary>\n        /// 队列名\n        /// </summary>\n        string QueueName { get; }\n\n        /// <summary>\n        /// 最大并行数\n        /// </summary>\n        int MaxParallelism { get; }\n\n        /// <summary>\n        /// 最大Worker数\n        /// </summary>\n        int NumberOfWorkers { get; }\n\n        /// <summary>\n        /// 消费时每次拉取的消息个数\n        /// </summary>\n        int PrefetchCount { get; }\n\n        /// <summary>\n        /// 消息审计是否开启，默认不开启\n        /// </summary>\n        bool MessageAuditingEnabled { get; }\n\n        /// <summary>\n        /// 消息审计队列名，默认不启用\n        /// </summary>\n        string MessageAuditingQueueName { get; }\n\n        /// <summary>\n        /// 包含RebusMqMessageHandler的程序集(自动订阅消息和自动注册handler)\n        /// </summary>\n        Assembly[] AssemblysIncludeRebusMqMessageHandlers { get; }\n\n        /// <summary>\n        /// 配置日志组件\n        /// </summary>\n        Action<RebusLoggingConfigurer> LoggingConfigurer { get; }\n\n        /// <summary>\n        /// 其他选项配置\n        /// </summary>\n        Action<OptionsConfigurer> OptionsConfigurer { get; }\n\n        /// <summary>\n        /// 序列化组件配置\n        /// </summary>\n        Action<StandardConfigurer<ISerializer>> SerializerConfigurer { get; }\n\n        /// <summary>\n        /// \n        /// </summary>\n        /// <param name=\"enabled\">是否启用，默认启用</param>\n        /// <returns></returns>\n        IRebusRabbitMqConsumerModuleConfig Enable(bool enabled);\n        /// <summary>\n        /// \n        /// </summary>\n        /// <param name=\"connectString\">RabbitMq连接字符串</param>\n        /// <returns></returns>\n        IRebusRabbitMqConsumerModuleConfig ConnectTo(string connectString);\n\n        /// <summary>\n        /// \n        /// </summary>\n        /// <param name=\"queueName\">使用队列名</param>\n        /// <returns></returns>\n        IRebusRabbitMqConsumerModuleConfig UseQueue(string queueName);\n\n        /// <summary>\n        /// \n        /// </summary>\n        /// <param name=\"maxParallelism\">最大并行数</param>\n        /// <returns></returns>\n        IRebusRabbitMqConsumerModuleConfig SetMaxParallelism(int maxParallelism);\n\n        /// <summary>\n        /// 设置最大工作线程数\n        /// </summary>\n        /// <param name=\"numberOfWorkers\">最大Worker数</param>\n        /// <returns></returns>\n        IRebusRabbitMqConsumerModuleConfig SetNumberOfWorkers(int numberOfWorkers);\n\n        /// <summary>\n        /// 设置每次拉取消息数量,默认50\n        /// </summary>\n        /// <param name=\"count\"></param>\n        /// <returns></returns>\n        IRebusRabbitMqConsumerModuleConfig Prefetch(int count);\n\n        /// <summary>\n        /// 启用消息审计\n        /// </summary>\n        /// <param name=\"messageAuditingQueueName\">消息审计队列名</param>\n        /// <returns></returns>\n        IRebusRabbitMqConsumerModuleConfig EnableMessageAuditing(string messageAuditingQueueName);\n\n        /// <summary>\n        /// 注册Rebus Handlers\n        /// </summary>\n        /// <param name=\"assemblys\">包含Rebus Handlers的程序集</param>\n        /// <returns></returns>\n        IRebusRabbitMqConsumerModuleConfig RegisterHandlerInAssemblys(params Assembly[] assemblys);\n\n        /// <summary>\n        /// 配置日志组件\n        /// </summary>\n        /// <param name=\"loggingConfigurer\"></param>\n        /// <returns></returns>\n        IRebusRabbitMqConsumerModuleConfig UseLogging(Action<RebusLoggingConfigurer> loggingConfigurer);\n        /// <summary>\n        /// 配置其他选项\n        /// </summary>\n        /// <param name=\"optionsConfigurer\"></param>\n        /// <returns></returns>\n        IRebusRabbitMqConsumerModuleConfig UseOptions(Action<OptionsConfigurer> optionsConfigurer);\n\n        /// <summary>\n        /// 自定义序列化机制\n        /// </summary>\n        /// <param name=\"serializerConfigurer\"></param>\n        /// <returns></returns>\n        IRebusRabbitMqConsumerModuleConfig UseSerializer(Action<StandardConfigurer<ISerializer>> serializerConfigurer);\n    }\n}\n"
  },
  {
    "path": "src/Abplus.MqMessages.RebusRabbitMqConsumer/MqMessages/Consumers/RebusRabbitMqConsumerModule.cs",
    "content": "﻿using Abp.Modules;\nusing Abp.MqMessages.Publishers;\nusing Rebus.Auditing.Messages;\nusing Rebus.Bus;\nusing Rebus.CastleWindsor;\nusing Rebus.Config;\nusing Rebus.Handlers;\nusing System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Reflection;\n\nnamespace Abp.MqMessages.Consumers\n{\n    [DependsOn(typeof(RebusRabbitMqPublisherCoreModule))]\n    public class RebusRabbitMqConsumerModule : AbpModule\n    {\n        private IBus _bus;\n\n        public override void PreInitialize()\n        {\n            IocManager.Register<IRebusRabbitMqConsumerModuleConfig, RebusRabbitMqConsumerModuleConfig>();\n        }\n\n        public override void Initialize()\n        {\n            IocManager.RegisterAssemblyByConvention(Assembly.GetExecutingAssembly());\n        }\n\n        public override void PostInitialize()\n        {\n            var moduleConfig = IocManager.Resolve<IRebusRabbitMqConsumerModuleConfig>();\n\n            if (moduleConfig.Enabled)\n            {\n                var rebusConfig = Configure.With(new CastleWindsorContainerAdapter(IocManager.IocContainer));\n\n                if (moduleConfig.LoggingConfigurer != null)\n                {\n                    rebusConfig.Logging(moduleConfig.LoggingConfigurer);\n                }\n\n                if (moduleConfig.SerializerConfigurer != null)\n                {\n                    rebusConfig.Serialization(moduleConfig.SerializerConfigurer);\n                }\n\n                if (moduleConfig.OptionsConfigurer != null)\n                {\n                    rebusConfig.Options(moduleConfig.OptionsConfigurer);\n                }\n\n                rebusConfig.Options(c =>\n                {\n                    c.SetMaxParallelism(moduleConfig.MaxParallelism);\n                    c.SetNumberOfWorkers(moduleConfig.NumberOfWorkers);\n                });\n\n                if (moduleConfig.MessageAuditingEnabled)\n                {\n                    rebusConfig.Options(o => o.EnableMessageAuditing(moduleConfig.MessageAuditingQueueName));\n                }\n\n                var mqMessageTypes = new List<Type>();\n                //Register handlers first!\n                foreach (var assembly in moduleConfig.AssemblysIncludeRebusMqMessageHandlers)\n                {\n                    IocManager.IocContainer.AutoRegisterHandlersFromAssembly(assembly);\n\n                    mqMessageTypes.AddRange(assembly.GetTypes()\n                        .Where(t => t.GetInterfaces().Any(i => i.IsGenericType && i.GetGenericTypeDefinition() == typeof(IHandleMessages<>)))\n                        .SelectMany(t => t.GetInterfaces())\n                        .Distinct()\n                        .SelectMany(t => t.GetGenericArguments())\n                        .Distinct());\n                }\n\n                //https://github.com/rebus-org/Rebus.RabbitMq/tree/master/Rebus.RabbitMq/Config  more option about RabbitMqOptionsBuilder\n                _bus = rebusConfig.Transport(c => c.UseRabbitMq(moduleConfig.ConnectString, moduleConfig.QueueName).Prefetch(moduleConfig.PrefetchCount))\n                    .Start();\n\n                //Subscribe messages\n                mqMessageTypes = mqMessageTypes.Distinct().ToList();\n\n                foreach (var mqMessageType in mqMessageTypes)\n                {\n                    _bus.Subscribe(mqMessageType);\n                }\n            }\n        }\n\n        public override void Shutdown()\n        {\n            if (_bus != null)\n            {\n                _bus.Dispose();\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "src/Abplus.MqMessages.RebusRabbitMqConsumer/MqMessages/Consumers/RebusRabbitMqConsumerModuleConfig.cs",
    "content": "﻿using System;\nusing System.Reflection;\nusing Newtonsoft.Json;\nusing Rebus.Config;\n//using Rebus.NewtonsoftJson;//nupkg不兼容\nusing Rebus.Serialization;\n\nnamespace Abp.MqMessages.Consumers\n{\n    public class RebusRabbitMqConsumerModuleConfig : IRebusRabbitMqConsumerModuleConfig\n    {\n        public RebusRabbitMqConsumerModuleConfig()\n        {\n            Enabled = true;\n            MessageAuditingEnabled = false;\n            MaxParallelism = 1;\n            NumberOfWorkers = 1;\n            PrefetchCount = 50;\n            //  SerializerConfigurer = c => c.UseNewtonsoftJson(new JsonSerializerSettings { TypeNameHandling = TypeNameHandling.All });//不兼容，以及core运行时下，用完整类型名称限定太死 https://github.com/rebus-org/Rebus/issues/672\n        }\n\n        public Assembly[] AssemblysIncludeRebusMqMessageHandlers { get; private set; }\n\n        public string ConnectString { get; private set; }\n\n        public bool Enabled { get; private set; }\n\n        public Action<RebusLoggingConfigurer> LoggingConfigurer { get; private set; }\n\n        public int MaxParallelism { get; private set; }\n\n        public bool MessageAuditingEnabled { get; private set; }\n\n        public string MessageAuditingQueueName { get; private set; }\n\n        public int NumberOfWorkers { get; private set; }\n\n        public Action<OptionsConfigurer> OptionsConfigurer { get; private set; }\n\n        public string QueueName { get; private set; }\n\n        public Action<StandardConfigurer<ISerializer>> SerializerConfigurer { get; private set; }\n\n        public int PrefetchCount { get; private set; }\n\n        public IRebusRabbitMqConsumerModuleConfig ConnectTo(string connectString)\n        {\n            ConnectString = connectString;\n            return this;\n        }\n\n        public IRebusRabbitMqConsumerModuleConfig Enable(bool enabled)\n        {\n            Enabled = enabled;\n            return this;\n        }\n\n        public IRebusRabbitMqConsumerModuleConfig EnableMessageAuditing(string messageAuditingQueueName)\n        {\n            MessageAuditingEnabled = true;\n            MessageAuditingQueueName = messageAuditingQueueName;\n            return this;\n        }\n\n        public IRebusRabbitMqConsumerModuleConfig Prefetch(int count)\n        {\n            PrefetchCount = count;\n            return this;\n        }\n\n        public IRebusRabbitMqConsumerModuleConfig RegisterHandlerInAssemblys(params Assembly[] assemblys)\n        {\n            AssemblysIncludeRebusMqMessageHandlers = assemblys;\n            return this;\n        }\n\n        public IRebusRabbitMqConsumerModuleConfig SetMaxParallelism(int maxParallelism)\n        {\n            MaxParallelism = maxParallelism;\n            return this;\n        }\n\n        public IRebusRabbitMqConsumerModuleConfig SetNumberOfWorkers(int numberOfWorkers)\n        {\n            NumberOfWorkers = numberOfWorkers;\n            return this;\n        }\n\n        public IRebusRabbitMqConsumerModuleConfig UseLogging(Action<RebusLoggingConfigurer> loggingConfigurer)\n        {\n            LoggingConfigurer = loggingConfigurer;\n            return this;\n        }\n\n        public IRebusRabbitMqConsumerModuleConfig UseOptions(Action<OptionsConfigurer> optionsConfigurer)\n        {\n            OptionsConfigurer = optionsConfigurer;\n            return this;\n        }\n\n        public IRebusRabbitMqConsumerModuleConfig UseQueue(string queueName)\n        {\n            QueueName = queueName;\n            return this;\n        }\n\n        public IRebusRabbitMqConsumerModuleConfig UseSerializer(Action<StandardConfigurer<ISerializer>> serializerConfigurer)\n        {\n            SerializerConfigurer = serializerConfigurer;\n            return this;\n        }\n    }\n}\n"
  },
  {
    "path": "src/Abplus.MqMessages.RebusRabbitMqPublisher/Abplus.MqMessages.RebusRabbitMqPublisher.csproj",
    "content": "﻿<Project Sdk=\"Microsoft.NET.Sdk\">\n\n  <Import Project=\"..\\..\\common.props\"></Import>\n\n  <PropertyGroup>\n    <TargetFramework>net5.0</TargetFramework>\n    <RootNamespace>Abp</RootNamespace>\n  </PropertyGroup>\n\n  <ItemGroup>\n    <PackageReference Include=\"abp\" Version=\"6.3.1\" />\n    <PackageReference Include=\"Rebus.Castle.Windsor\" Version=\"4.1.0\" />\n    <PackageReference Include=\"rebus.rabbitmq\" Version=\"4.4.2\" />\n  </ItemGroup>\n\n  <ItemGroup>\n    <ProjectReference Include=\"..\\Abplus.MqMessages.RebusCore\\Abplus.MqMessages.RebusCore.csproj\" />\n  </ItemGroup>\n\n</Project>\n"
  },
  {
    "path": "src/Abplus.MqMessages.RebusRabbitMqPublisher/Abplus.MqMessages.RebusRabbitMqPublisher.nuspec",
    "content": "<?xml version=\"1.0\"?>\n<package >\n  <metadata>\n    <id>$id$</id>\n    <version>$version$</version>\n    <title>$title$</title>\n    <authors>personball</authors>\n    <owners>personball</owners>\n    <licenseUrl>https://raw.githubusercontent.com/personball/abplus/master/LICENSE</licenseUrl>\n    <projectUrl>https://github.com/personball/abplus</projectUrl>\n    <iconUrl>https://raw.githubusercontent.com/personball/abplus/master/abplus_icon.png</iconUrl>\n    <requireLicenseAcceptance>false</requireLicenseAcceptance>\n    <description>Abp plus, an extension for Abp Framework. </description>\n    <releaseNotes></releaseNotes>\n    <copyright>Copyright 2018</copyright>\n    <tags></tags>\n    <dependencies>\n      <dependency id=\"Abplus\" version=\"$version$\" />\n      <dependency id=\"Abplus.MqMessages.RebusCore\" version=\"$version$\"/>\n      <dependency id=\"Rebus.Castle.Windsor\" version=\"4.1.0\" />\n      <dependency id=\"Rebus.RabbitMq\" version=\"4.4.2\" />\n    </dependencies>\n  </metadata>\n</package>"
  },
  {
    "path": "src/Abplus.MqMessages.RebusRabbitMqPublisher/Configuration/Startup/RebusRabbitMqPublisherConfigurationExtensions.cs",
    "content": "﻿using Abp.MqMessages.Publishers;\n\nnamespace Abp.Configuration.Startup\n{\n    public static class RebusRabbitMqPublisherConfigurationExtensions\n    {\n        public static IRebusRabbitMqPublisherModuleConfig  UseAbplusRebusRabbitMqPublisher(this IModuleConfigurations configurations)\n        {\n            return configurations.AbpConfiguration.GetOrCreate(\"Modules.Abp.RebusRabbitMqPublisher\", () => configurations.AbpConfiguration.IocManager.Resolve<IRebusRabbitMqPublisherModuleConfig>());\n        }\n    }\n}\n"
  },
  {
    "path": "src/Abplus.MqMessages.RebusRabbitMqPublisher/MqMessages/Publishers/IRebusRabbitMqPublisherModuleConfig.cs",
    "content": "﻿using System;\nusing Rebus.Config;\n\nnamespace Abp.MqMessages.Publishers\n{\n    public interface IRebusRabbitMqPublisherModuleConfig\n    {\n        /// <summary>\n        /// 是否启用，默认启用\n        /// </summary>\n        bool Enabled { get; }\n\n        /// <summary>\n        /// 日志配置委托\n        /// </summary>\n        Action<RebusLoggingConfigurer> LoggingConfigurer { get; }\n\n        /// <summary>\n        /// RabbitMq连接字符串\n        /// </summary>\n        string ConnectionString { get; }\n\n        /// <summary>\n        /// 消息审计是否开启，默认不开启\n        /// </summary>\n        bool MessageAuditingEnabled { get; }\n\n        /// <summary>\n        /// 消息审计队列名，默认不启用\n        /// </summary>\n        string MessageAuditingQueueName { get; }\n\n        /// <summary>\n        /// 是否启用，默认启用\n        /// </summary>\n        /// <param name=\"enabled\"></param>\n        /// <returns></returns>\n        IRebusRabbitMqPublisherModuleConfig Enable(bool enabled);\n\n        /// <summary>\n        /// 设置RabbitMq连接字符串\n        /// </summary>\n        /// <param name=\"connectionString\"></param>\n        /// <returns></returns>\n        IRebusRabbitMqPublisherModuleConfig ConnectTo(string connectionString);\n\n        /// <summary>\n        /// 配置日志组件\n        /// </summary>\n        /// <param name=\"loggingConfigurer\"></param>\n        /// <returns></returns>\n        IRebusRabbitMqPublisherModuleConfig UseLogging(Action<RebusLoggingConfigurer> loggingConfigurer);\n\n        /// <summary>\n        /// 是否启用消息审计，默认不启用\n        /// </summary>\n        /// <param name=\"messageAuditingQueueName\">审计队列名</param>\n        /// <returns></returns>\n        IRebusRabbitMqPublisherModuleConfig EnableMessageAuditing(string messageAuditingQueueName);\n    }\n}\n"
  },
  {
    "path": "src/Abplus.MqMessages.RebusRabbitMqPublisher/MqMessages/Publishers/RebusRabbitMqPublisherModule.cs",
    "content": "﻿using System.Reflection;\nusing Abp.Modules;\nusing Rebus.Auditing.Messages;\nusing Rebus.Bus;\nusing Rebus.Config;\n\nnamespace Abp.MqMessages.Publishers\n{\n    [DependsOn(typeof(RebusRabbitMqPublisherCoreModule))]\n    public class RebusRabbitMqPublisherModule : AbpModule\n    {\n        private IBus _bus;\n\n        public override void PreInitialize()\n        {\n            IocManager.Register<IRebusRabbitMqPublisherModuleConfig, RebusRabbitMqPublisherModuleConfig>();\n        }\n\n        public override void Initialize()\n        {\n            IocManager.RegisterAssemblyByConvention(Assembly.GetExecutingAssembly());\n        }\n\n        public override void PostInitialize()\n        {\n            var moduleConfig = IocManager.Resolve<IRebusRabbitMqPublisherModuleConfig>();\n            if (moduleConfig.Enabled)\n            {\n                var rebusConfig = Configure.With(new CastleWindsorContainerAdapter(IocManager.IocContainer));\n                if (moduleConfig.MessageAuditingEnabled)\n                {\n                    rebusConfig.Options(o => o.EnableMessageAuditing(moduleConfig.MessageAuditingQueueName));\n                }\n\n                if (moduleConfig.LoggingConfigurer != null)\n                {\n                    rebusConfig.Logging(moduleConfig.LoggingConfigurer);\n                }\n\n                //https://github.com/rebus-org/Rebus.RabbitMq/tree/master/Rebus.RabbitMq/Config  more option about RabbitMqOptionsBuilder\n                _bus = rebusConfig.Transport(t => t.UseRabbitMqAsOneWayClient(moduleConfig.ConnectionString))\n                     .Start();\n            }\n        }\n\n        public override void Shutdown()\n        {\n            if (_bus != null)\n            {\n                _bus.Dispose();\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "src/Abplus.MqMessages.RebusRabbitMqPublisher/MqMessages/Publishers/RebusRabbitMqPublisherModuleConfig.cs",
    "content": "﻿using System;\nusing Rebus.Config;\n\nnamespace Abp.MqMessages.Publishers\n{\n    public class RebusRabbitMqPublisherModuleConfig : IRebusRabbitMqPublisherModuleConfig\n    {\n        public RebusRabbitMqPublisherModuleConfig()\n        {\n            Enabled = true;\n            MessageAuditingEnabled = false;\n        }\n        public string ConnectionString { get; private set; }\n\n        public bool Enabled { get; private set; }\n\n        public Action<RebusLoggingConfigurer> LoggingConfigurer { get; private set; }\n\n        public bool MessageAuditingEnabled { get; private set; }\n\n        public string MessageAuditingQueueName { get; private set; }\n\n        public IRebusRabbitMqPublisherModuleConfig ConnectTo(string connectionString)\n        {\n            ConnectionString = connectionString;\n            return this;\n        }\n\n        public IRebusRabbitMqPublisherModuleConfig Enable(bool enabled)\n        {\n            Enabled = enabled;\n            return this;\n        }\n\n        public IRebusRabbitMqPublisherModuleConfig EnableMessageAuditing(string messageAuditingQueueName)\n        {\n            MessageAuditingEnabled = true;\n            MessageAuditingQueueName = messageAuditingQueueName;\n            return this;\n        }\n\n        public IRebusRabbitMqPublisherModuleConfig UseLogging(Action<RebusLoggingConfigurer> loggingConfigurer)\n        {\n            LoggingConfigurer = loggingConfigurer;\n            return this;\n        }\n    }\n}\n"
  },
  {
    "path": "src/Abplus.MqMessages.RedisStoreMessageTracker/Abplus.MqMessages.RedisStoreMessageTracker.csproj",
    "content": "﻿<Project Sdk=\"Microsoft.NET.Sdk\">\n\n  <Import Project=\"..\\..\\common.props\"></Import>\n  \n  <PropertyGroup>\n    <TargetFramework>net5.0</TargetFramework>\n    <RootNamespace>Abp</RootNamespace>\n  </PropertyGroup>\n\n  <ItemGroup>\n    <PackageReference Include=\"abp\" Version=\"6.3.1\" />\n    <PackageReference Include=\"abp.rediscache\" Version=\"4.5.0\" />\n  </ItemGroup>\n\n  <ItemGroup>\n    <ProjectReference Include=\"..\\Abplus\\Abplus.csproj\" />\n  </ItemGroup>\n\n</Project>\n"
  },
  {
    "path": "src/Abplus.MqMessages.RedisStoreMessageTracker/Abplus.MqMessages.RedisStoreMessageTracker.nuspec",
    "content": "<?xml version=\"1.0\"?>\n<package >\n  <metadata>\n    <id>$id$</id>\n    <version>$version$</version>\n    <title>$title$</title>\n    <authors>personball</authors>\n    <owners>personball</owners>\n    <licenseUrl>https://raw.githubusercontent.com/personball/abplus/master/LICENSE</licenseUrl>\n    <projectUrl>https://github.com/personball/abplus</projectUrl>\n    <iconUrl>https://raw.githubusercontent.com/personball/abplus/master/abplus_icon.png</iconUrl>\n    <requireLicenseAcceptance>false</requireLicenseAcceptance>\n    <description>Abp plus, an extension for Abp Framework. </description>\n    <releaseNotes></releaseNotes>\n    <copyright>Copyright 2018</copyright>\n    <tags></tags>\n    <dependencies>\n      <dependency id=\"Abplus\" version=\"$version$\" />\n      <dependency id=\"Abp.RedisCache\" version=\"4.5.0\"/>\n    </dependencies>\n  </metadata>\n</package>"
  },
  {
    "path": "src/Abplus.MqMessages.RedisStoreMessageTracker/MqMessages/MessageTrackers/RedisStoreMessageTracker.cs",
    "content": "﻿using System;\nusing System.Threading.Tasks;\nusing Abp.Extensions;\nusing Abp.Runtime.Caching;\n\nnamespace Abp.MqMessages.MessageTrackers\n{\n    public class RedisStoreMessageTracker : IMessageTracker\n    {\n        private const string CacheKey = \"Abplus.MqMessages.MessageTrackers.RedisStoreMessageTracker\";\n        private readonly ICacheManager _cacheManager;\n\n        public RedisStoreMessageTracker(ICacheManager cacheManager)\n        {\n            _cacheManager = cacheManager;\n        }\n\n        public async Task<bool> HasProcessed(string processId)\n        {\n            var value = await _cacheManager.GetCache<string, string>(CacheKey).GetOrDefaultAsync(processId);\n            return !value.IsNullOrWhiteSpace();\n        }\n\n        public async Task MarkAsProcessed(string processId)\n        {\n            await _cacheManager.GetCache<string, string>(CacheKey).SetAsync(processId, \"1\", TimeSpan.FromDays(30));\n        }\n    }\n}\n"
  },
  {
    "path": "src/Abplus.MqMessages.RedisStoreMessageTracker/MqMessages/MessageTrackers/RedisStoreMessageTrackerModule.cs",
    "content": "﻿using Abp.Modules;\nusing Abp.Runtime.Caching.Redis;\n\nnamespace Abp.MqMessages.MessageTrackers\n{\n    [DependsOn(typeof(AbpRedisCacheModule))]\n    public class RedisStoreMessageTrackerModule : AbpModule\n    {\n        public override void PreInitialize()\n        {\n            IocManager.Register<IMessageTracker, RedisStoreMessageTracker>();\n        }\n\n        public override void Initialize()\n        {\n            //IocManager.RegisterIfNot<ISerializer, NewtonsoftSerializer>(DependencyLifeStyle.Singleton);\n            //IocManager.RegisterIfNot<ICacheClient, StackExchangeRedisCacheClient>(DependencyLifeStyle.Singleton);\n        }\n    }\n}\n"
  },
  {
    "path": "src/Abplus.T4.PermissionsFromJson/Abplus.T4.PermissionsFromJson.csproj",
    "content": "﻿<Project Sdk=\"Microsoft.NET.Sdk\">\n\n  <Import Project=\"..\\..\\common.props\"></Import>\n  \n  <PropertyGroup>\n    <TargetFramework>net5.0</TargetFramework>\n    <RootNamespace>Abp</RootNamespace>\n  \n  </PropertyGroup>\n  \n  <ItemGroup>\n    <Compile Remove=\"Authorization\\Builders\\BuilderUtils.cs\" />\n    <Compile Remove=\"Authorization\\Builders\\PermissionBuilder.cs\" />\n  </ItemGroup>\n  \n  <ItemGroup>\n    <None Include=\"Authorization\\Builders\\PermissionBuilder.cs\" />\n  </ItemGroup>\n  \n  <ItemGroup>\n    <Page Include=\"Authorization\\Builders\\BuilderUtils.cs\" />\n  </ItemGroup>\n\n  <ItemGroup>\n    <None Update=\"Authorization\\Builders\\PermissionBuilder.tt\">\n      <Generator>TextTemplatingFileGenerator</Generator>\n    </None>\n  </ItemGroup>\n\n</Project>\n"
  },
  {
    "path": "src/Abplus.T4.PermissionsFromJson/Abplus.T4.PermissionsFromJson.nuspec",
    "content": "<?xml version=\"1.0\"?>\n<package >\n  <metadata>\n    <id>$id$</id>\n    <version>$version$</version>\n    <title>$title$</title>\n    <authors>personball</authors>\n    <owners>personball</owners>\n    <licenseUrl>https://raw.githubusercontent.com/personball/abplus/master/LICENSE</licenseUrl>\n    <projectUrl>https://github.com/personball/abplus</projectUrl>\n    <iconUrl>https://raw.githubusercontent.com/personball/abplus/master/abplus_icon.png</iconUrl>\n    <requireLicenseAcceptance>false</requireLicenseAcceptance>\n    <description>Abp plus, an extension for Abp Framework. </description>\n    <releaseNotes></releaseNotes>\n    <copyright>Copyright 2018</copyright>\n    <tags></tags>\n    <contentFiles>\n      <files include=\"Authorization\\Builders\\Permissions\\Sample.json\" buildAction=\"EmbeddedResource\" />\n      <files include=\"Authorization\\Builders\\BuilderUtils.cs\" />\n      <files include=\"Authorization\\Builders\\PermissionBuilder.tt\" />\n      <files include=\"Authorization\\Builders\\T4MultipleOutputManager.ttinclude\" />\n    </contentFiles>\n    </metadata>\n</package>"
  },
  {
    "path": "src/Abplus.T4.PermissionsFromJson/Authorization/Builders/BuilderUtils.cs",
    "content": "﻿using System.Collections.Generic;\nusing System.Globalization;\nusing System.IO;\nusing System.Linq;\nusing System.Linq.Dynamic;\nusing System.Reflection;\nusing Abp.Authorization;\nusing Abp.Localization;\nusing Abp.MultiTenancy;\nusing Newtonsoft.Json;\n\nnamespace 【YourCompany.YourProject】.Authorization\n{\n    public static class BuilderUtils\n    {\n        public static void Build(IPermissionDefinitionContext context, string name)\n        {\n            var asm = Assembly.GetExecutingAssembly();//读取嵌入式资源\n            var sm = asm.GetManifestResourceStream(\"【YourCompany.YourProject】.Authorization.Builders.Permissions.\" + name + \".json\");\n            var list = GetPermissionJson(sm);\n            foreach (var item in list)\n            {\n                var module = context.CreatePermission(\n                    item.Name, \n                    new FixedLocalizableString(item.DisplayName), \n                    multiTenancySides: item.GetMultiTenancySides());\n\n                var children = item.GetChildren();\n                BuildChildrenPermission(children, module, item.Name);\n            }\n        }\n\n        //供t4调用\n        public static Dictionary<string, List<PermissionConst>> GeneratePermission()\n        {\n            var dic = new Dictionary<string, List<PermissionConst>>();\n            var asm = Assembly.GetExecutingAssembly();//读取嵌入式资源\n            var jsons =\n                asm.GetManifestResourceNames()\n                    .Where(c => c.StartsWith(\"【YourCompany.YourProject】.Authorization.Builders.Permissions\") && c.EndsWith(\".json\"));\n            foreach (var item in jsons)\n            {\n                var name =\n                    item.Replace(\"【YourCompany.YourProject】.Authorization.Builders.Permissions.\", \"\")\n                        .Replace(\".json\", \"\");\n                var sm = asm.GetManifestResourceStream(item);\n                var list = BuildPermissionConst(GetPermissionJson(sm));\n                dic.Add(name, list);\n            }\n            return dic;\n        }\n\n        private static List<PermissionJson> GetPermissionJson(Stream sm)\n        {\n            using (var reader = new StreamReader(sm))\n            {\n                string text = reader.ReadToEnd();\n                var json = JsonConvert.DeserializeObject<List<PermissionJson>>(text).OrderBy(c => c.Order).ToList();\n                return json;\n            }\n        }\n\n        private static void BuildChildrenPermission(List<PermissionJson> children, Permission module, string parentName)\n        {\n            foreach (var item in children)\n            {\n                var name = $\"{parentName}.{item.Name}\";\n                var itemModule = module.CreateChildPermission(name,\n                    new FixedLocalizableString(item.DisplayName),\n                    multiTenancySides: item.GetMultiTenancySides());\n                var itemchildren = item.GetChildren();\n                if (itemchildren.Any())\n                {\n                    BuildChildrenPermission(itemchildren, itemModule, name);\n                }\n            }\n        }\n\n        private static List<PermissionConst> BuildPermissionConst(List<PermissionJson> permissionJsons, string name = null, string value = null, string summary = null, List<PermissionConst> permissionConsts = null)\n        {\n            permissionConsts = permissionConsts ?? new List<PermissionConst>();\n            foreach (var item in permissionJsons)\n            {\n                var permissionConst = new PermissionConst\n                {\n                    Summary = $\"{summary}_{item.DisplayName}\".Trim('_'),\n                    Name = $\"{name}_{item.Name}\".Trim('_').Replace('.', '_'),\n                    Value = $\"{value}.{item.Name}\".Trim('.').Replace('_', '.')\n                };\n                permissionConsts.Add(permissionConst);\n                var children = item.GetChildren();\n                if (children.Any())\n                {\n                    BuildPermissionConst(children, permissionConst.Name, permissionConst.Value, permissionConst.Summary,\n                        permissionConsts);\n                }\n            }\n            return permissionConsts;\n        }\n    }\n\n    public class PermissionJson\n    {\n        public PermissionJson()\n        {\n            Order = 100;\n        }\n\n        public string Name { get; set; }\n        public string DisplayName { get; set; }\n        public string Description { get; set; }\n        [JsonProperty(PropertyName = \"multiTenancySides\")]\n        public MultiTenancySides? MultiTenancySide { private get; set; }\n        public bool DefaultPermission { private get; set; }\n        public List<PermissionJson> Children { private get; set; }\n        public int Order { get; set; }\n        public List<int> DisableOrder { get; set; }\n\n        public List<PermissionJson> GetChildren()\n        {\n            Children = Children ?? new List<PermissionJson>();\n            DisableOrder = DisableOrder ?? new List<int>();\n            if (DefaultPermission)\n            {\n                Children.Add(new PermissionJson\n                {\n                    Name = \"Create\",\n                    DisplayName = \"新增\",\n                    Order = 10,\n                    DefaultPermission = false\n                });\n                Children.Add(new PermissionJson\n                {\n                    Name = \"Edit\",\n                    DisplayName = \"编辑\",\n                    Order = 20,\n                    DefaultPermission = false\n                });\n                Children.Add(new PermissionJson\n                {\n                    Name = \"Delete\",\n                    DisplayName = \"删除\",\n                    Order = 30,\n                    DefaultPermission = false\n                });\n            }\n            if (MultiTenancySide.HasValue)\n            {\n                Children.ForEach(c =>\n                {\n                    c.MultiTenancySide = MultiTenancySide.Value;\n                });\n            }\n            return Children.OrderBy(c => c.Order).Where(c => !DisableOrder.Contains(c.Order)).ToList();\n        }\n\n        public MultiTenancySides GetMultiTenancySides()\n        {\n            if (MultiTenancySide.HasValue)\n            {\n                return MultiTenancySide.Value;\n            }\n            return MultiTenancySides.Tenant | MultiTenancySides.Host;\n        }\n    }\n\n    public class PermissionConst\n    {\n        public string Summary { get; set; }\n        public string Name { get; set; }\n        public string Value { get; set; }\n    }\n}"
  },
  {
    "path": "src/Abplus.T4.PermissionsFromJson/Authorization/Builders/PermissionBuilder.cs",
    "content": ""
  },
  {
    "path": "src/Abplus.T4.PermissionsFromJson/Authorization/Builders/PermissionBuilder.tt",
    "content": "﻿<#@ template debug=\"false\" hostspecific=\"true\" language=\"C#\" #>\n\n<#@ include file=\"T4MultipleOutputManager.ttinclude\" #>\n\n<#@ assembly name=\"System.Core\" #>\n<#@ assembly name=\"System.IO\" #>\n<#@ assembly name=\"$(SolutionDir)packages\\Newtonsoft.Json.9.0.1\\lib\\net45\\Newtonsoft.Json.dll\" #>\n<#@ assembly name=\"$(ProjectDir)bin\\$(ConfigurationName)\\【YourCompany.YourProject】.Core.dll\" #>\n<#@ import namespace=\"System.Linq\" #>\n<#@ import namespace=\"System.Text\" #>\n<#@ import namespace=\"System.Collections.Generic\" #>\n<#@ import namespace=\"Newtonsoft.Json\" #>\n<#@ import namespace=\"Newtonsoft.Json.Linq\" #>\n<#@ import namespace=\"System.Globalization\" #>\n<#@ import namespace=\"【YourCompany.YourProject】.Authorization\" #>\n\n<#@ output extension=\".cs\" #>\n\n\n<#\n\t\t\t\tvar tempateManager = Manager.Create(Host,GenerationEnvironment);\n\t\t\t\tstring solutionsPath = Host.ResolveAssemblyReference(\"$(SolutionDir)\");  \n\t\t\t\tstring projectPath = Host.ResolveAssemblyReference(\"$(ProjectDir)\");\n                \n\t\t\t\tvar dic = BuilderUtils.GeneratePermission();\n\t\t\t\t\n\t\t\t\tforeach(var item in dic)\n\t\t\t\t{\t\n\t\t\t\t\t var list= item.Value;\n\t\t\t\t\t tempateManager.StartNewFile(item.Key+\"Permissions.cs\");\n\t\t\t\t\n\t\t\t\t#>\nnamespace 【YourCompany.YourProject】.Authorization\n{\n    /// <summary>\n    /// Permissions definition\n    /// </summary>\n    public static class <#=item.Key #>Permissions\n    {\n<# \n\t\t\t\t\t\t\t\tforeach(var item1 in list){\n#>\n\t\t/// <summary>\n\t\t/// <#=item1.Summary #>\n\t\t/// </summary>\n\t\tpublic const string <#=item1.Name #> = \"<#=item1.Value #>\";\n\n<# \n\t}\n#>\n}\n}\n<#\n}\n\ttempateManager.EndBlock();\n\ttempateManager.Process(true); \n#>\n\n\n"
  },
  {
    "path": "src/Abplus.T4.PermissionsFromJson/Authorization/Builders/Permissions/Sample.json",
    "content": "﻿[\n  {\n    \"name\": \"User\",\n    \"displayName\": \"用户中心\",\n    \"children\": [\n      {\n        \"name\": \"UserInfo\",\n        \"displayName\": \"用户管理\",\n        \"defaultPermission\": false\n      },\n      {\n        \"name\": \"UserIdCard\",\n        \"displayName\": \"身份信息管理\",\n        \"defaultPermission\": false,\n        \"children\": [\n          {\n            \"name\": \"Reviewed\",\n            \"displayName\": \"审核/编辑\"\n          }\n        ]\n      }\n    ]\n  }\n]\n"
  },
  {
    "path": "src/Abplus.T4.PermissionsFromJson/Authorization/Builders/T4MultipleOutputManager.ttinclude",
    "content": "<#@ assembly name=\"System.Core\"\n#><#@ assembly name=\"System.Data.Linq\"\n#><#@ assembly name=\"EnvDTE\"\n#><#@ assembly name=\"System.Xml\"\n#><#@ assembly name=\"System.Xml.Linq\"\n#><#@ import namespace=\"System.Collections.Generic\"\n#><#@ import namespace=\"System.IO\"\n#><#@ import namespace=\"System.Text\"\n#><#@ import namespace=\"Microsoft.VisualStudio.TextTemplating\"\n#><#+\n// https://raw.github.com/damieng/DamienGKit\n// http://damieng.com/blog/2009/11/06/multiple-outputs-from-t4-made-easy-revisited\n\n// Manager class records the various blocks so it can split them up\nclass Manager {\n    private class Block {\n        public String Name;\n        public int Start, Length;\n        public bool IncludeInDefault;\n    }\n\n    private Block currentBlock;\n    private readonly List<Block> files = new List<Block>();\n    private readonly Block footer = new Block();\n    private readonly Block header = new Block();\n    private readonly ITextTemplatingEngineHost host;\n    private readonly StringBuilder template;\n    protected readonly List<String> generatedFileNames = new List<String>();\n\n    public static Manager Create(ITextTemplatingEngineHost host, StringBuilder template) {\n        return (host is IServiceProvider) ? new VSManager(host, template) : new Manager(host, template);\n    }\n\n    public void StartNewFile(String name) {\n        if (name == null)\n            throw new ArgumentNullException(\"name\");\n        CurrentBlock = new Block { Name = name };\n    }\n\n    public void StartFooter(bool includeInDefault=true) {\n        CurrentBlock = footer;\n        footer.IncludeInDefault = includeInDefault;\n    }\n\n    public void StartHeader(bool includeInDefault=true) {\n        CurrentBlock = header;\n        header.IncludeInDefault = includeInDefault;\n    }\n\n    public void EndBlock() {\n        if (CurrentBlock == null)\n            return;\n        CurrentBlock.Length = template.Length - CurrentBlock.Start;\n        if (CurrentBlock != header && CurrentBlock != footer)\n            files.Add(CurrentBlock);\n        currentBlock = null;\n    }\n\n    public virtual void Process(bool split, bool sync =true) {\n        if (split) {\n            EndBlock();\n            String headerText = template.ToString(header.Start, header.Length);\n            String footerText = template.ToString(footer.Start, footer.Length);\n            String outputPath = Path.GetDirectoryName(host.TemplateFile);\n            files.Reverse();\n            if (!footer.IncludeInDefault)\n                template.Remove(footer.Start, footer.Length);\n            foreach(Block block in files) {\n                String fileName = Path.Combine(outputPath, block.Name);\n                String content = headerText + template.ToString(block.Start, block.Length) + footerText;\n                generatedFileNames.Add(fileName);\n                CreateFile(fileName, content);\n                template.Remove(block.Start, block.Length);\n            }\n            if (!header.IncludeInDefault)\n                template.Remove(header.Start, header.Length);\n        }\n    }\n\n    protected virtual void CreateFile(String fileName, String content) {\n        if (IsFileContentDifferent(fileName, content))\n            File.WriteAllText(fileName, content);\n    }\n\n    public virtual String GetCustomToolNamespace(String fileName) {\n        return null;\n    }\n\n    public virtual String DefaultProjectNamespace {\n        get { return null; }\n    }\n\n    protected bool IsFileContentDifferent(String fileName, String newContent) {\n        return !(File.Exists(fileName) && File.ReadAllText(fileName) == newContent);\n    }\n\n    private Manager(ITextTemplatingEngineHost host, StringBuilder template) {\n        this.host = host;\n        this.template = template;\n    }\n\n    private Block CurrentBlock {\n        get { return currentBlock; }\n        set {\n            if (CurrentBlock != null)\n                EndBlock();\n            if (value != null)\n                value.Start = template.Length;\n            currentBlock = value;\n        }\n    }\n\n    private class VSManager: Manager {\n        private readonly EnvDTE.ProjectItem templateProjectItem;\n        private readonly EnvDTE.DTE dte;\n        private readonly Action<String> checkOutAction;\n        private readonly Action<List<String>> projectSyncAction;\n\n        public override String DefaultProjectNamespace {\n            get {\n                return templateProjectItem.ContainingProject.Properties.Item(\"DefaultNamespace\").Value.ToString();\n            }\n        }\n\n        public override String GetCustomToolNamespace(string fileName) {\n            return dte.Solution.FindProjectItem(fileName).Properties.Item(\"CustomToolNamespace\").Value.ToString();\n        }\n\n        public override void Process(bool split, bool sync) {\n            if (templateProjectItem.ProjectItems == null)\n                return;\n            base.Process(split, sync);\n            if (sync)\n                projectSyncAction.EndInvoke(projectSyncAction.BeginInvoke(generatedFileNames, null, null));\n        }\n\n        protected override void CreateFile(String fileName, String content) {\n            if (IsFileContentDifferent(fileName, content)) {\n                CheckoutFileIfRequired(fileName);\n                File.WriteAllText(fileName, content);\n            }\n        }\n\n        internal VSManager(ITextTemplatingEngineHost host, StringBuilder template)\n            : base(host, template) {\n            var hostServiceProvider = (IServiceProvider)host;\n            if (hostServiceProvider == null)\n                throw new ArgumentNullException(\"Could not obtain IServiceProvider\");\n            dte = (EnvDTE.DTE) hostServiceProvider.GetService(typeof(EnvDTE.DTE));\n            if (dte == null)\n                throw new ArgumentNullException(\"Could not obtain DTE from host\");\n            templateProjectItem = dte.Solution.FindProjectItem(host.TemplateFile);\n            checkOutAction = fileName => dte.SourceControl.CheckOutItem(fileName);\n            projectSyncAction = keepFileNames => ProjectSync(templateProjectItem, keepFileNames);\n        }\n\n        private static void ProjectSync(EnvDTE.ProjectItem templateProjectItem, List<String> keepFileNames) {\n            var keepFileNameSet = new HashSet<String>(keepFileNames);\n            var projectFiles = new Dictionary<String, EnvDTE.ProjectItem>();\n            var originalFilePrefix = Path.GetFileNameWithoutExtension(templateProjectItem.FileNames[0]) + \".\";\n            foreach (EnvDTE.ProjectItem projectItem in templateProjectItem.ProjectItems)\n                projectFiles.Add(projectItem.FileNames[0], projectItem);\n\n            // Remove unused items from the project\n            foreach (var pair in projectFiles)\n                if (!keepFileNames.Contains(pair.Key) && !(Path.GetFileNameWithoutExtension(pair.Key) + \".\").StartsWith(originalFilePrefix))\n                    pair.Value.Delete();\n\n            // Add missing files to the project\n            foreach(String fileName in keepFileNameSet)\n                if (!projectFiles.ContainsKey(fileName))\n                    templateProjectItem.ProjectItems.AddFromFile(fileName);\n        }\n\n        private void CheckoutFileIfRequired(String fileName) {\n            var sc = dte.SourceControl;\n            if (sc != null && sc.IsItemUnderSCC(fileName) && !sc.IsItemCheckedOut(fileName))\n                checkOutAction.EndInvoke(checkOutAction.BeginInvoke(fileName, null, null));\n        }\n    }\n} #>"
  },
  {
    "path": "src/Samples/AuditingConsumer/Sample.AuditingConsumerHandler/Program.cs",
    "content": "﻿using System;\n\nnamespace Sample.AuditingConsumerHandler\n{\n    class Program\n    {\n        static void Main(string[] args)\n        {\n            var bs = new SampleAuditingConsumerHandlerBootstrap();\n            bs.Start();\n\n            Console.ReadLine();\n        }\n    }\n}\n"
  },
  {
    "path": "src/Samples/AuditingConsumer/Sample.AuditingConsumerHandler/Sample.AuditingConsumerHandler.csproj",
    "content": "<Project Sdk=\"Microsoft.NET.Sdk\">\n\n  <PropertyGroup>\n    <OutputType>Exe</OutputType>\n    <TargetFramework>net5.0</TargetFramework>\n  </PropertyGroup>\n\n  <ItemGroup>\n    <ProjectReference Include=\"..\\..\\..\\Abplus.MqMessages.AuditingConsumerHandler\\Abplus.MqMessages.AuditingConsumerHandler.csproj\" />\n    <ProjectReference Include=\"..\\..\\..\\Abplus.MqMessages.RebusRabbitMqConsumer\\Abplus.MqMessages.RebusRabbitMqConsumer.csproj\" />\n    <ProjectReference Include=\"..\\..\\..\\Abplus.MqMessages\\Abplus.MqMessages.csproj\" />\n    <ProjectReference Include=\"..\\..\\..\\Abplus\\Abplus.csproj\" />\n  </ItemGroup>\n\n</Project>\n"
  },
  {
    "path": "src/Samples/AuditingConsumer/Sample.AuditingConsumerHandler/SampleAuditingConsumerHandlerBootstrap.cs",
    "content": "﻿using Abp;\n\nnamespace Sample.AuditingConsumerHandler\n{\n    public class SampleAuditingConsumerHandlerBootstrap\n    {\n        private static readonly AbpBootstrapper _bs = AbpBootstrapper.Create<SampleAuditingConsumerHandlerModule>();\n\n        public void Start()\n        {\n            //LogManager.Configuration = new XmlLoggingConfiguration(\"nlog.config\");\n            _bs.Initialize();\n        }\n\n        public void Stop()\n        {\n            _bs.Dispose();\n        }\n    }\n}\n"
  },
  {
    "path": "src/Samples/AuditingConsumer/Sample.AuditingConsumerHandler/SampleAuditingConsumerHandlerModule.cs",
    "content": "﻿using Abp.Auditing.AuditingStore;\nusing Abp.Configuration.Startup;\nusing Abp.Json;\nusing Abp.Modules;\nusing Abp.MqMessages.Consumers;\nusing System;\nusing System.Collections.Generic;\nusing System.IO;\nusing System.Reflection;\n\nnamespace Sample.AuditingConsumerHandler\n{\n    [DependsOn(\n        typeof(RebusRabbitMqConsumerModule)\n        , typeof(AuditingConsumerRebusHandlerModule))]\n    public class SampleAuditingConsumerHandlerModule : AbpModule\n    {\n        public override void PreInitialize()\n        {\n            Configuration.Modules.UseAbplusRebusRabbitMqConsumer()\n                .UseLogging(c => c.ColoredConsole())\n                .ConnectTo(\"amqp://dev:dev@rabbitmq.local.abplus.cn/\")//set your own connection string of rabbitmq\n                .UseQueue(Assembly.GetExecutingAssembly().GetName().Name)//TODO@personball 需要开放更多队列选项，比如审计日志队列对可靠性要求不用很高，通过禁用队列持久化以提升消息发布速度\n                .Prefetch(100)//用于控制每次拉取的资源消耗(内存,带宽),消费速度还要看消费端自己的消息处理速度\n                .RegisterHandlerInAssemblys(Assembly.GetAssembly(typeof(AuditingConsumerRebusHandlerModule)));//注册AuditingConsumerRebusHandler\n\n            Configuration.Modules.AuditingConsumer()\n                .EveryPeriodIn(TimeSpan.FromMilliseconds(100))//每隔多久调用一次Do\n                .Batch(100)//请实际测试审计消息的产生速度和消费速度，适当调节Prefetch、EveryPeriodIn以及Batch，以免消费端发生消息堆积导致内存溢出\n                .Do(async (messageList) =>\n                {\n                    var lines = new List<string>();\n                    foreach (var message in messageList)\n                    {\n                        lines.Add(message.ToJsonString());\n                    }\n                    await File.AppendAllLinesAsync(AppDomain.CurrentDomain.BaseDirectory + \"\\\\messages.txt\", lines);\n                });\n\n        }\n\n        public override void Initialize()\n        {\n            base.Initialize();\n        }\n\n        public override void PostInitialize()\n        {\n            //Abp.Dependency.IocManager.Instance.IocContainer.AddFacility<LoggingFacility>(f => f.LogUsing<NLogFactory>().WithConfig(\"nlog.config\"));\n        }\n    }\n}\n"
  },
  {
    "path": "src/Samples/AuditingConsumer/Sample.MqMessageAuditingStore/Application/ITestAuditingStoreAppService.cs",
    "content": "﻿using Abp.Application.Services;\nusing System.Threading.Tasks;\n\nnamespace Sample.MqMessageAuditingStore.Application\n{\n    public interface ITestAuditingStoreAppService : IApplicationService\n    {\n        Task TestAuditing(TestAuditingInput input);\n    }\n}\n"
  },
  {
    "path": "src/Samples/AuditingConsumer/Sample.MqMessageAuditingStore/Application/TestAuditingInput.cs",
    "content": "﻿namespace Sample.MqMessageAuditingStore.Application\n{\n    public class TestAuditingInput\n    {\n        public string Name { get; set; }\n        public string Value { get; set; }\n    }\n}"
  },
  {
    "path": "src/Samples/AuditingConsumer/Sample.MqMessageAuditingStore/Application/TestAuditingStoreAppService.cs",
    "content": "﻿using System;\nusing System.Threading.Tasks;\nusing Abp.Json;\n\nnamespace Sample.MqMessageAuditingStore.Application\n{\n    public class TestAuditingStoreAppService : ITestAuditingStoreAppService\n    {\n        public Task TestAuditing(TestAuditingInput input)\n        {\n            Console.WriteLine(input.ToJsonString());\n            return Task.FromResult(0);\n        }\n    }\n}\n"
  },
  {
    "path": "src/Samples/AuditingConsumer/Sample.MqMessageAuditingStore/BackgroudWorker/TestWorker.cs",
    "content": "﻿using Abp.Dependency;\nusing Abp.Threading;\nusing Abp.Threading.BackgroundWorkers;\nusing Abp.Threading.Timers;\nusing Sample.MqMessageAuditingStore.Application;\nusing System;\n\nnamespace Sample.MqMessageAuditingStore.BackgroudWorker\n{\n    public class TestWorker : PeriodicBackgroundWorkerBase, ISingletonDependency\n    {\n        private readonly ITestAuditingStoreAppService _testApp;\n        public TestWorker(AbpTimer timer, ITestAuditingStoreAppService testAuditingStoreAppService)\n            : base(timer)\n        {\n            _testApp = testAuditingStoreAppService;\n            Timer.Period = 1 * 1000;//1 seconds\n            Timer.RunOnStart = true;\n        }\n\n        protected override void DoWork()\n        {\n            AsyncHelper.RunSync(() => _testApp.TestAuditing(new TestAuditingInput\n            {\n                Name = \"Invoke Time\",\n                Value = DateTime.Now.ToLongTimeString()\n            }));\n        }\n    }\n}\n"
  },
  {
    "path": "src/Samples/AuditingConsumer/Sample.MqMessageAuditingStore/Program.cs",
    "content": "﻿using System;\n\nnamespace Sample.MqMessageAuditingStore\n{\n    class Program\n    {\n        static void Main(string[] args)\n        {\n            var bs = new SampleMqMessageAuditingStoreBootstrap();\n            bs.Start();\n\n            Console.ReadLine();\n        }\n    }\n}\n"
  },
  {
    "path": "src/Samples/AuditingConsumer/Sample.MqMessageAuditingStore/Sample.MqMessageAuditingStore.csproj",
    "content": "<Project Sdk=\"Microsoft.NET.Sdk\">\n\n  <PropertyGroup>\n    <OutputType>Exe</OutputType>\n    <TargetFramework>net5.0</TargetFramework>\n  </PropertyGroup>\n\n  <ItemGroup>\n    <PackageReference Include=\"abp\" Version=\"6.3.1\" />\n  </ItemGroup>\n\n  <ItemGroup>\n    <ProjectReference Include=\"..\\..\\..\\Abplus.MqMessages.AuditingStore\\Abplus.MqMessages.AuditingStore.csproj\" />\n    <ProjectReference Include=\"..\\..\\..\\Abplus.MqMessages.RebusCore\\Abplus.MqMessages.RebusCore.csproj\" />\n    <ProjectReference Include=\"..\\..\\..\\Abplus.MqMessages.RebusRabbitMqPublisher\\Abplus.MqMessages.RebusRabbitMqPublisher.csproj\" />\n  </ItemGroup>\n\n</Project>\n"
  },
  {
    "path": "src/Samples/AuditingConsumer/Sample.MqMessageAuditingStore/SampleMqMessageAuditingStoreBootstrap.cs",
    "content": "﻿using Abp;\n\nnamespace Sample.MqMessageAuditingStore\n{\n    public class SampleMqMessageAuditingStoreBootstrap\n    {\n        private static readonly AbpBootstrapper _bs = AbpBootstrapper.Create<SampleMqMessageAuditingStoreModule>();\n\n        public void Start()\n        {\n            //LogManager.Configuration = new XmlLoggingConfiguration(\"nlog.config\");\n            _bs.Initialize();\n        }\n\n        public void Stop()\n        {\n            _bs.Dispose();\n        }\n    }\n}\n"
  },
  {
    "path": "src/Samples/AuditingConsumer/Sample.MqMessageAuditingStore/SampleMqMessageAuditingStoreModule.cs",
    "content": "﻿using Abp.Auditing.AuditingStores;\nusing Abp.Configuration.Startup;\nusing Abp.Modules;\nusing Abp.MqMessages.Publishers;\nusing Abp.Threading.BackgroundWorkers;\nusing Sample.MqMessageAuditingStore.BackgroudWorker;\nusing System.Reflection;\n\nnamespace Sample.MqMessageAuditingStore\n{\n    [DependsOn(\n        typeof(RebusRabbitMqPublisherModule)//依赖消息发布机制\n        , typeof(MqMessageAuditingStoreModule))]//加上模块依赖即可替换默认的审计日志存储机制\n    public class SampleMqMessageAuditingStoreModule : AbpModule\n    {\n        public override void PreInitialize()\n        {\n            //消息发布配置\n            Configuration.Modules.UseAbplusRebusRabbitMqPublisher()\n                .UseLogging(c => c.ColoredConsole())\n                .ConnectTo(\"amqp://dev:dev@rabbitmq.local.abplus.cn/\");//set your own connection string of rabbitmq\n\n            Configuration.BackgroundJobs.IsJobExecutionEnabled = true;\n\n            Configuration.Auditing.IsEnabled = true;\n            Configuration.Auditing.IsEnabledForAnonymousUsers = true;//开启匿名审计,TestAuditingStoreAppService没有要求用户认证\n        }\n\n        public override void Initialize()\n        {\n            IocManager.RegisterAssemblyByConvention(Assembly.GetExecutingAssembly());\n        }\n\n        public override void PostInitialize()\n        {\n            //Abp.Dependency.IocManager.Instance.IocContainer.AddFacility<LoggingFacility>(f => f.LogUsing<NLogFactory>().WithConfig(\"nlog.config\"));\n\n            var workManager = IocManager.Resolve<IBackgroundWorkerManager>();\n            workManager.Add(IocManager.Resolve<TestWorker>());//为了demo项目足够小,都用console中的worker进行演示,在mvc项目中使用ApplicationService效果相同\n        }\n    }\n}"
  },
  {
    "path": "src/Samples/FileStorage/Sample.AliyunOSSStorage/BackgroundWorker/TestWorker.cs",
    "content": "﻿using System;\nusing System.IO;\nusing Abp.Dependency;\nusing Abp.IO;\nusing Abp.Threading;\nusing Abp.Threading.BackgroundWorkers;\nusing Abp.Threading.Timers;\n\nnamespace Sample.AliyunOSSStorage.BackgroundWorker\n{\n    public class TestWorker : PeriodicBackgroundWorkerBase, ISingletonDependency\n    {\n        private readonly IFileStorage _fileStorage;\n\n        public TestWorker(AbpTimer timer, IFileStorage fileStorage)\n            : base(timer)\n        {\n            _fileStorage = fileStorage;\n\n            Timer.Period =  3000;//300 seconds\n            Timer.RunOnStart = true;\n        }\n\n        protected override void DoWork()\n        {\n            var file = File.ReadAllBytes(\"plane.jpg\");\n            var newName = $\"{DateTime.Now.ToString(\"yyyyMMddHHmmss\")}.jpg\";\n            var url = AsyncHelper.RunSync(() => _fileStorage.Save(file, newName, \"canteen/product\"));\n            Console.WriteLine(url);\n\n            var bytesFromAzure = AsyncHelper.RunSync(() => _fileStorage.ReadAsBytes(newName, \"canteen/product\"));\n            File.WriteAllBytes(newName, bytesFromAzure);\n\n            AsyncHelper.RunSync(() => _fileStorage.Delete(newName, \"canteen/product\"));\n\n            using (var fs = new FileStream(\"plane.jpg\", FileMode.Open))\n            {\n                var sName = $\"{newName}-as-stream.jpg\";\n                var url2 = AsyncHelper.RunSync(() => _fileStorage.Save(fs, sName, \"canteen/product\"));\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "src/Samples/FileStorage/Sample.AliyunOSSStorage/Program.cs",
    "content": "﻿using System;\n\nnamespace Sample.AliyunOSSStorage\n{\n    class Program\n    {\n        static void Main(string[] args)\n        {\n            //As Topshelf not support dotnet core yet, just simple run below code for a sample.\n            var bs = new SampleAliyunOSSStorageBootstrap();\n            bs.Start();\n\n            Console.ReadLine();\n        }\n    }\n}\n"
  },
  {
    "path": "src/Samples/FileStorage/Sample.AliyunOSSStorage/Sample.AliyunOSSStorageConsole.csproj",
    "content": "﻿<Project Sdk=\"Microsoft.NET.Sdk\">\n\n  <PropertyGroup>\n    <OutputType>Exe</OutputType>\n    <TargetFramework>net5.0</TargetFramework>\n    <RootNamespace>Sample.AliyunOSSStorage</RootNamespace>\n  </PropertyGroup>\n\n  <ItemGroup>\n    <PackageReference Include=\"Abp\" Version=\"6.3.1\" />\n  </ItemGroup>\n\n  <ItemGroup>\n    <ProjectReference Include=\"..\\..\\..\\Abplus.IO.AliyunOSSStorage\\Abplus.IO.AliyunOSSStorage.csproj\" />\n    <ProjectReference Include=\"..\\..\\..\\Abplus\\Abplus.csproj\" />\n  </ItemGroup>\n\n  <ItemGroup>\n    <None Update=\"plane.jpg\">\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </None>\n  </ItemGroup>\n\n</Project>\n"
  },
  {
    "path": "src/Samples/FileStorage/Sample.AliyunOSSStorage/SampleAliyunOSSStorageBootstrap.cs",
    "content": "﻿using Abp;\n\nnamespace Sample.AliyunOSSStorage\n{\n    internal class SampleAliyunOSSStorageBootstrap\n    {\n        private static readonly AbpBootstrapper _bs = AbpBootstrapper.Create<SampleAliyunOSSStorageModule>();\n\n        public void Start()\n        {\n            //LogManager.Configuration = new XmlLoggingConfiguration(\"nlog.config\");\n            _bs.Initialize();\n        }\n\n        public void Stop()\n        {\n            _bs.Dispose();\n        }\n    }\n}"
  },
  {
    "path": "src/Samples/FileStorage/Sample.AliyunOSSStorage/SampleAliyunOSSStorageModule.cs",
    "content": "﻿using System.Reflection;\nusing Abp.IO.AliyunOSSStorage;\nusing Abp.Modules;\nusing Abp.Configuration.Startup;\nusing Abp.Threading.BackgroundWorkers;\nusing Sample.AliyunOSSStorage.BackgroundWorker;\n\nnamespace Sample.AliyunOSSStorage\n{\n    [DependsOn(typeof(AliyunOSSStorageModule))]\n    public class SampleAliyunOSSStorageModule : AbpModule\n    {\n        public override void PreInitialize()\n        {\n            Configuration.Modules.UseAliyunOSSStorage()\n                .SetAccessKeyId(\"\")\n                .SetAccessKeySecret(\"\")\n                .SetBucketName(\"xxxxx\")\n                .SetEndpoint(\"oss-cn-hangzhou.aliyuncs.com\")\n                .WithUriPrefix(\"https://xxxxx.oss-cn-hangzhou.aliyuncs.com\");\n        }\n\n        public override void Initialize()\n        {\n            IocManager.RegisterAssemblyByConvention(Assembly.GetExecutingAssembly());\n        }\n\n        public override void PostInitialize()\n        {\n            //Abp.Dependency.IocManager.Instance.IocContainer.AddFacility<LoggingFacility>(f => f.LogUsing<NLogFactory>().WithConfig(\"nlog.config\"));\n\n            var workManager = IocManager.Resolve<IBackgroundWorkerManager>();\n            workManager.Add(IocManager.Resolve<TestWorker>());\n        }\n    }\n}"
  },
  {
    "path": "src/Samples/FileStorage/Sample.AzureBlobStorage/BackgroundWorker/TestWorker.cs",
    "content": "﻿using System;\nusing System.IO;\nusing Abp.Dependency;\nusing Abp.IO;\nusing Abp.Threading;\nusing Abp.Threading.BackgroundWorkers;\nusing Abp.Threading.Timers;\n\nnamespace Sample.AzureBlobStorage.BackgroundWorker\n{\n    public class TestWorker : PeriodicBackgroundWorkerBase, ISingletonDependency\n    {\n        private readonly IFileStorage _fileStorage;\n\n        public TestWorker(AbpTimer timer, IFileStorage fileStorage)\n            : base(timer)\n        {\n            _fileStorage = fileStorage;\n\n            Timer.Period = 300 * 1000;//300 seconds\n            Timer.RunOnStart = true;\n        }\n\n        protected override void DoWork()\n        {\n            var file = File.ReadAllBytes(\"plane.jpg\");\n            var newName = $\"{DateTime.Now.ToString(\"yyyyMMddHHmmss\")}.jpg\";\n            var url = AsyncHelper.RunSync(() => _fileStorage.Save(file, newName, \"test\"));\n            Console.WriteLine(url);\n\n            var bytesFromAzure = AsyncHelper.RunSync(() => _fileStorage.ReadAsBytes(newName, \"test\"));\n            File.WriteAllBytes(newName, bytesFromAzure);\n\n            AsyncHelper.RunSync(() => _fileStorage.Delete(newName, \"test\"));\n\n            using (var fs = new FileStream(\"plane.jpg\", FileMode.Open))\n            {\n                var sName = $\"{newName}-as-stream.jpg\";\n                var url2 = AsyncHelper.RunSync(() => _fileStorage.Save(fs, sName, \"test\"));\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "src/Samples/FileStorage/Sample.AzureBlobStorage/Program.cs",
    "content": "﻿using System;\n\nnamespace Sample.AzureBlobStorage\n{\n    class Program\n    {\n        static void Main(string[] args)\n        {\n            //As Topshelf not support dotnet core yet, just simple run below code for a sample.\n            var bs = new SampleAzureBlobStorageBootstrap();\n            bs.Start();\n\n            Console.ReadLine();\n        }\n    }\n}\n"
  },
  {
    "path": "src/Samples/FileStorage/Sample.AzureBlobStorage/Sample.AzureBlobStorageConsole.csproj",
    "content": "<Project Sdk=\"Microsoft.NET.Sdk\">\n\n  <PropertyGroup>\n    <OutputType>Exe</OutputType>\n    <TargetFramework>net5.0</TargetFramework>\n    <RootNamespace>Sample.AzureBlobStorage</RootNamespace>\n  </PropertyGroup>\n\n  <ItemGroup>\n    <PackageReference Include=\"Abp\" Version=\"6.3.1\" />\n  </ItemGroup>\n\n  <ItemGroup>\n    <ProjectReference Include=\"..\\..\\..\\Abplus.IO.AzureBlobStorage\\Abplus.IO.AzureBlobStorage.csproj\" />\n    <ProjectReference Include=\"..\\..\\..\\Abplus\\Abplus.csproj\" />\n  </ItemGroup>\n\n  <ItemGroup>\n    <None Update=\"plane.jpg\">\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </None>\n  </ItemGroup>\n\n</Project>\n"
  },
  {
    "path": "src/Samples/FileStorage/Sample.AzureBlobStorage/SampleAzureBlobStorageBootstrap.cs",
    "content": "﻿using Abp;\n\nnamespace Sample.AzureBlobStorage\n{\n    internal class SampleAzureBlobStorageBootstrap\n    {\n        private static readonly AbpBootstrapper _bs = AbpBootstrapper.Create<SampleAzureBlobStorageModule>();\n\n        public void Start()\n        {\n            //LogManager.Configuration = new XmlLoggingConfiguration(\"nlog.config\");\n            _bs.Initialize();\n        }\n\n        public void Stop()\n        {\n            _bs.Dispose();\n        }\n    }\n}"
  },
  {
    "path": "src/Samples/FileStorage/Sample.AzureBlobStorage/SampleAzureBlobStorageModule.cs",
    "content": "﻿using System.Reflection;\nusing Abp.Configuration.Startup;\nusing Abp.IO.AzureBlobStorage;\nusing Abp.Modules;\nusing Abp.Threading.BackgroundWorkers;\nusing Sample.AzureBlobStorage.BackgroundWorker;\n\nnamespace Sample.AzureBlobStorage\n{\n    [DependsOn(typeof(AzureBlobFileStorageModule))]\n    public class SampleAzureBlobStorageModule : AbpModule\n    {\n        public override void PreInitialize()\n        {\n            Configuration.Modules.UseAzureBlobFileStorage()\n                .ConfigAzureStorage()\n                .SetAccountName(\"\")\n                .SetAccountKey(\"\")\n                .SetContainer(\"images\")\n                .UseEndpointSuffix(\"core.chinacloudapi.cn\");\n\n            //Configuration.Modules.UseAzureBlobFileStorage()\n            //    .ConfigAzureStorageUseSettingManager();\n        }\n\n        public override void Initialize()\n        {\n            IocManager.RegisterAssemblyByConvention(Assembly.GetExecutingAssembly());\n        }\n\n        public override void PostInitialize()\n        {\n            //Abp.Dependency.IocManager.Instance.IocContainer.AddFacility<LoggingFacility>(f => f.LogUsing<NLogFactory>().WithConfig(\"nlog.config\"));\n\n            var workManager = IocManager.Resolve<IBackgroundWorkerManager>();\n            workManager.Add(IocManager.Resolve<TestWorker>());\n        }\n    }\n}"
  },
  {
    "path": "src/Samples/FileStorage/Sample.LocalFileSystem/Program.cs",
    "content": "﻿using System;\n\nnamespace Sample.LocalFileSystem\n{\n    class Program\n    {\n        static void Main(string[] args)\n        {\n            //As Topshelf not support dotnet core yet, just simple run below code for a sample.\n            var bs = new SampleLocalFileSystemBootstrap();\n            bs.Start();\n\n            Console.ReadLine();\n        }\n    }\n}\n"
  },
  {
    "path": "src/Samples/FileStorage/Sample.LocalFileSystem/Sample.LocalFileSystemConsole.csproj",
    "content": "<Project Sdk=\"Microsoft.NET.Sdk\">\n\n  <PropertyGroup>\n    <OutputType>Exe</OutputType>\n    <TargetFramework>net5.0</TargetFramework>\n    <RootNamespace>Sample.LocalFileSystem</RootNamespace>\n  </PropertyGroup>\n\n  <ItemGroup>\n    <PackageReference Include=\"Abp\" Version=\"6.3.1\" />\n  </ItemGroup>\n\n  <ItemGroup>\n    <ProjectReference Include=\"..\\..\\..\\Abplus.IO.LocalFileSystem\\Abplus.IO.LocalFileSystem.csproj\" />\n    <ProjectReference Include=\"..\\..\\..\\Abplus\\Abplus.csproj\" />\n  </ItemGroup>\n\n</Project>\n"
  },
  {
    "path": "src/Samples/FileStorage/Sample.LocalFileSystem/SampleLocalFileSystemBootstrap.cs",
    "content": "﻿using Abp;\n\nnamespace Sample.LocalFileSystem\n{\n    internal class SampleLocalFileSystemBootstrap\n    {\n        private static readonly AbpBootstrapper _bs = AbpBootstrapper.Create<SampleLocalFileSystemModule>();\n\n        public void Start()\n        {\n            //LogManager.Configuration = new XmlLoggingConfiguration(\"nlog.config\");\n            _bs.Initialize();\n        }\n\n        public void Stop()\n        {\n            _bs.Dispose();\n        }\n    }\n}"
  },
  {
    "path": "src/Samples/FileStorage/Sample.LocalFileSystem/SampleLocalFileSystemModule.cs",
    "content": "﻿using System.Reflection;\nusing Abp.IO.LocalFileSystem;\nusing Abp.Modules;\n\nnamespace Sample.LocalFileSystem\n{\n    [DependsOn(typeof(LocalFileSystemStorageModule))]\n    internal class SampleLocalFileSystemModule : AbpModule\n    {\n        public override void PreInitialize()\n        {\n            \n        }\n\n        public override void Initialize()\n        {\n            IocManager.RegisterAssemblyByConvention(Assembly.GetExecutingAssembly());\n        }\n\n        public override void PostInitialize()\n        {\n            //Abp.Dependency.IocManager.Instance.IocContainer.AddFacility<LoggingFacility>(f => f.LogUsing<NLogFactory>().WithConfig(\"nlog.config\"));\n\n            //var workManager = IocManager.Resolve<IBackgroundWorkerManager>();\n            //workManager.Add(IocManager.Resolve<TestWorker>());\n        }\n    }\n}"
  },
  {
    "path": "src/Samples/Sample.DotNetCoreConsumerHost/Handlers/TestHandler.cs",
    "content": "﻿using Abp.MqMessages;\nusing Castle.Core.Logging;\nusing Rebus.Handlers;\nusing System.Threading.Tasks;\n\nnamespace Sample.DotNetCoreConsumerHost.Handlers\n{\n    public class TestHandler : IHandleMessages<TestMessage>\n    {\n        public ILogger Logger { get; set; }\n        public IMqMessagePublisher Publisher { get; set; }\n        public TestHandler()\n        {\n            Publisher = NullMqMessagePublisher.Instance;\n            Logger = NullLogger.Instance;\n        }\n\n        public async Task Handle(TestMessage message)\n        {\n            var msg = $\"{Logger.GetType()}:{message.Value},{message.Time}\";\n            Logger.Debug(msg);\n            //await Publisher.PublishAsync(msg);//send it again!\n        }\n    }\n}\n"
  },
  {
    "path": "src/Samples/Sample.DotNetCoreConsumerHost/Program.cs",
    "content": "﻿using System;\n\nnamespace Sample.DotNetCoreConsumerHost\n{\n    class Program\n    {\n        static void Main(string[] args)\n        {\n            var bs = new SampleConsumerHostBootstrap();\n            bs.Start();\n\n            Console.ReadLine();\n        }\n    }\n}\n"
  },
  {
    "path": "src/Samples/Sample.DotNetCoreConsumerHost/Sample.DotNetCoreConsumerHost.csproj",
    "content": "<Project Sdk=\"Microsoft.NET.Sdk\">\n\n  <PropertyGroup>\n    <OutputType>Exe</OutputType>\n    <TargetFramework>net5.0</TargetFramework>\n  </PropertyGroup>\n\n  <ItemGroup>\n    <PackageReference Include=\"abp\" Version=\"6.3.1\" />\n  </ItemGroup>\n\n  <ItemGroup>\n    <ProjectReference Include=\"..\\..\\Abplus.MqMessages.RebusRabbitMqConsumer\\Abplus.MqMessages.RebusRabbitMqConsumer.csproj\" />\n    <ProjectReference Include=\"..\\Sample.MqMessages\\Sample.MqMessages.csproj\" />\n  </ItemGroup>\n\n</Project>\n"
  },
  {
    "path": "src/Samples/Sample.DotNetCoreConsumerHost/SampleConsumerHostBootstrap.cs",
    "content": "﻿using Abp;\n\nnamespace Sample.DotNetCoreConsumerHost\n{\n    public class SampleConsumerHostBootstrap\n    {\n        private static readonly AbpBootstrapper _bs = AbpBootstrapper.Create<SampleConsumerHostModule>();\n\n        public void Start()\n        {\n            //LogManager.Configuration = new XmlLoggingConfiguration(\"nlog.config\");\n            _bs.Initialize();\n        }\n\n        public void Stop()\n        {\n            _bs.Dispose();\n        }\n    }\n}\n"
  },
  {
    "path": "src/Samples/Sample.DotNetCoreConsumerHost/SampleConsumerHostModule.cs",
    "content": "﻿using Abp.Configuration.Startup;\nusing Abp.Modules;\nusing Abp.MqMessages.Consumers;\nusing System.Reflection;\n\nnamespace Sample.DotNetCoreConsumerHost\n{\n    [DependsOn(typeof(RebusRabbitMqConsumerModule))]\n    public class SampleConsumerHostModule : AbpModule\n    {\n        public override void PreInitialize()\n        {\n            Configuration.Modules.UseAbplusRebusRabbitMqConsumer()\n                .UseLogging(c => c.ColoredConsole())\n                .ConnectTo(\"amqp://dev:dev@rabbitmq.local.abplus.cn/\")//set your own connection string of rabbitmq\n                .UseQueue(Assembly.GetExecutingAssembly().GetName().Name)\n                .Prefetch(100)//用于控制每次拉取的资源消耗(内存,带宽),消费速度还要看消费端自己的消息处理速度\n                .RegisterHandlerInAssemblys(Assembly.GetExecutingAssembly());\n        }\n\n        public override void Initialize()\n        {\n            base.Initialize();\n        }\n\n        public override void PostInitialize()\n        {\n            //Abp.Dependency.IocManager.Instance.IocContainer.AddFacility<LoggingFacility>(f => f.LogUsing<NLogFactory>().WithConfig(\"nlog.config\"));\n        }\n    }\n}"
  },
  {
    "path": "src/Samples/Sample.DotNetCorePublisherHost/BackgroundWorker/TestWorker.cs",
    "content": "﻿using Abp.Dependency;\nusing Abp.MqMessages;\nusing Abp.Threading.BackgroundWorkers;\nusing Abp.Threading.Timers;\nusing System;\n\nnamespace Sample.DotNetCorePublisherHost.BackgroundWorker\n{\n    public class TestWorker : PeriodicBackgroundWorkerBase, ISingletonDependency\n    {\n        private readonly IMqMessagePublisher _publisher;\n\n        public TestWorker(AbpTimer timer, IMqMessagePublisher publisher)\n            : base(timer)\n        {\n            _publisher = publisher;\n            Timer.Period = 1 * 1000;//3 seconds\n            Timer.RunOnStart = true;\n        }\n\n        protected override void DoWork()\n        {\n            Logger.Info($\"TestWork Done! Time:{DateTime.Now}\");\n            _publisher.Publish(new TestMessage\n            {\n                Value = \"TestWork from DotNetCoreHost:BlaBlaBlaBlaBlaBla\",\n                Time = DateTime.Now\n            });\n        }\n    }\n}\n"
  },
  {
    "path": "src/Samples/Sample.DotNetCorePublisherHost/Program.cs",
    "content": "﻿using System;\n\nnamespace Sample.DotNetCorePublisherHost\n{\n    class Program\n    {\n        static void Main()\n        {\n            //As Topshelf not support dotnet core yet, just simple run below code for a sample.\n            var bs = new SamplePublisherHostBootstrap();\n            bs.Start();\n\n            Console.ReadLine();\n        }\n    }\n}\n"
  },
  {
    "path": "src/Samples/Sample.DotNetCorePublisherHost/Sample.DotNetCorePublisherHost.csproj",
    "content": "﻿<Project Sdk=\"Microsoft.NET.Sdk\">\n\n  <PropertyGroup>\n    <OutputType>Exe</OutputType>\n    <TargetFramework>net5.0</TargetFramework>\n  </PropertyGroup>\n\n  <ItemGroup>\n    <PackageReference Include=\"abp\" Version=\"6.3.1\" />\n  </ItemGroup>\n\n  <ItemGroup>\n    <ProjectReference Include=\"..\\..\\Abplus.MqMessages.RebusCore\\Abplus.MqMessages.RebusCore.csproj\" />\n    <ProjectReference Include=\"..\\..\\Abplus.MqMessages.RebusRabbitMqPublisher\\Abplus.MqMessages.RebusRabbitMqPublisher.csproj\" />\n    <ProjectReference Include=\"..\\Sample.MqMessages\\Sample.MqMessages.csproj\" />\n  </ItemGroup>\n\n</Project>\n"
  },
  {
    "path": "src/Samples/Sample.DotNetCorePublisherHost/SamplePublisherHostBootstrap.cs",
    "content": "﻿using Abp;\n\nnamespace Sample.DotNetCorePublisherHost\n{\n    public class SamplePublisherHostBootstrap\n    {\n        private static readonly AbpBootstrapper _bs = AbpBootstrapper.Create<SamplePublisherHostModule>();\n\n        public void Start()\n        {\n            //LogManager.Configuration = new XmlLoggingConfiguration(\"nlog.config\");\n            _bs.Initialize();\n        }\n\n        public void Stop()\n        {\n            _bs.Dispose();\n        }\n    }\n}\n"
  },
  {
    "path": "src/Samples/Sample.DotNetCorePublisherHost/SamplePublisherHostModule.cs",
    "content": "﻿using Abp.Configuration.Startup;\nusing Abp.Modules;\nusing Abp.MqMessages.Publishers;\nusing Abp.Threading.BackgroundWorkers;\nusing Sample.DotNetCorePublisherHost.BackgroundWorker;\nusing System.Reflection;\n\nnamespace Sample.DotNetCorePublisherHost\n{\n    [DependsOn(typeof(RebusRabbitMqPublisherModule))]\n    public class SamplePublisherHostModule : AbpModule\n    {\n        public override void PreInitialize()\n        {\n            Configuration.Modules.UseAbplusRebusRabbitMqPublisher()\n                .UseLogging(c => c.ColoredConsole())\n                .ConnectTo(\"amqp://dev:dev@rabbitmq.local.abplus.cn/\");//set your own connection string of rabbitmq\n\n            Configuration.BackgroundJobs.IsJobExecutionEnabled = true;\n        }\n\n        public override void Initialize()\n        {\n            IocManager.RegisterAssemblyByConvention(Assembly.GetExecutingAssembly());\n        }\n\n        public override void PostInitialize()\n        {\n            //Abp.Dependency.IocManager.Instance.IocContainer.AddFacility<LoggingFacility>(f => f.LogUsing<NLogFactory>().WithConfig(\"nlog.config\"));\n\n            var workManager = IocManager.Resolve<IBackgroundWorkerManager>();\n            workManager.Add(IocManager.Resolve<TestWorker>());\n        }\n    }\n}\n"
  },
  {
    "path": "src/Samples/Sample.DotNetFxConsumerHost/App.config",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<configuration>\n    <startup> \n        <supportedRuntime version=\"v4.0\" sku=\".NETFramework,Version=v4.7.1\" />\n    </startup>\n  <runtime>\n    <assemblyBinding xmlns=\"urn:schemas-microsoft-com:asm.v1\">\n      <dependentAssembly>\n        <assemblyIdentity name=\"System.Runtime.InteropServices.RuntimeInformation\" publicKeyToken=\"b03f5f7f11d50a3a\" culture=\"neutral\" />\n        <bindingRedirect oldVersion=\"0.0.0.0-4.0.2.0\" newVersion=\"4.0.2.0\" />\n      </dependentAssembly>\n      <dependentAssembly>\n        <assemblyIdentity name=\"System.ComponentModel.Annotations\" publicKeyToken=\"b03f5f7f11d50a3a\" culture=\"neutral\" />\n        <bindingRedirect oldVersion=\"0.0.0.0-4.2.1.0\" newVersion=\"4.2.1.0\" />\n      </dependentAssembly>\n      <dependentAssembly>\n        <assemblyIdentity name=\"Newtonsoft.Json\" publicKeyToken=\"30ad4fe6b2a6aeed\" culture=\"neutral\" />\n        <bindingRedirect oldVersion=\"0.0.0.0-12.0.0.0\" newVersion=\"12.0.0.0\" />\n      </dependentAssembly>\n      <dependentAssembly>\n        <assemblyIdentity name=\"System.Collections.Immutable\" publicKeyToken=\"b03f5f7f11d50a3a\" culture=\"neutral\" />\n        <bindingRedirect oldVersion=\"0.0.0.0-1.2.3.0\" newVersion=\"1.2.3.0\" />\n      </dependentAssembly>\n    </assemblyBinding>\n  </runtime>\n</configuration>"
  },
  {
    "path": "src/Samples/Sample.DotNetFxConsumerHost/DotNetFxConsumerHostBootstrap.cs",
    "content": "﻿using Abp;\n\nnamespace Sample.DotNetFxConsumerHost\n{\n    public class DotNetFxConsumerHostBootstrap\n    {\n        private static readonly AbpBootstrapper _bs = AbpBootstrapper.Create<DotNetFxConsumerHostModule>();\n\n        public void Start()\n        {\n            _bs.Initialize();\n        }\n\n        public void Stop()\n        {\n            _bs.Dispose();\n        }\n    }\n}\n"
  },
  {
    "path": "src/Samples/Sample.DotNetFxConsumerHost/DotNetFxConsumerHostModule.cs",
    "content": "﻿using Abp.Configuration.Startup;\nusing Abp.Modules;\nusing Abp.MqMessages.Consumers;\nusing Castle.Facilities.Logging;\nusing Castle.Services.Logging.NLogIntegration;\nusing System.Reflection;\n\nnamespace Sample.DotNetFxConsumerHost\n{\n    [DependsOn(typeof(RebusRabbitMqConsumerModule))]\n    public class DotNetFxConsumerHostModule : AbpModule\n    {\n        public override void PreInitialize()\n        {\n            Configuration.Modules.UseAbplusRebusRabbitMqConsumer()\n                .UseLogging(c => c.ColoredConsole())//c.NLog()\n                .ConnectTo(\"amqp://dev:dev@rabbitmq.local.abplus.cn/\")//set your own connection string of rabbitmq\n                .UseQueue(Assembly.GetExecutingAssembly().GetName().Name)\n                .Prefetch(5)//用于控制每次拉取的资源消耗(内存,带宽),消费速度还要看消费端自己的消息处理速度\n                .RegisterHandlerInAssemblys(Assembly.GetExecutingAssembly());\n        }\n\n        public override void Initialize()\n        {\n            base.Initialize();\n        }\n\n        public override void PostInitialize()\n        {\n            Abp.Dependency.IocManager.Instance.IocContainer.AddFacility<LoggingFacility>(f => f.LogUsing<NLogFactory>().WithConfig(\"nlog.config\"));\n        }\n    }\n}\n"
  },
  {
    "path": "src/Samples/Sample.DotNetFxConsumerHost/Handlers/TestHandler.cs",
    "content": "﻿using Abp.MqMessages;\nusing Castle.Core.Logging;\nusing Rebus.Handlers;\nusing System.Threading.Tasks;\n\nnamespace Sample.DotNetFxConsumerHost.Handlers\n{\n    public class TestHandler : IHandleMessages<TestMessage>\n    {\n        public ILogger Logger { get; set; }\n        public IMqMessagePublisher Publisher { get; set; }\n        public TestHandler()\n        {\n            Publisher = NullMqMessagePublisher.Instance;\n            Logger = NullLogger.Instance;\n        }\n\n        public async Task Handle(TestMessage message)\n        {\n            var msg = $\"{Logger.GetType()}:{message.Value},{message.Time}\";\n            Logger.Debug(msg);\n            //await Publisher.PublishAsync(msg);//send it again!\n        }\n    }\n}\n"
  },
  {
    "path": "src/Samples/Sample.DotNetFxConsumerHost/NLog.config",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\" ?>\n<nlog xmlns=\"http://www.nlog-project.org/schemas/NLog.xsd\"\n      xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\"\n      xsi:schemaLocation=\"http://www.nlog-project.org/schemas/NLog.xsd NLog.xsd\"\n      autoReload=\"true\"\n      throwExceptions=\"false\"\n      internalLogLevel=\"Off\" internalLogFile=\"c:\\temp\\nlog-internal.log\">\n\n  <!-- optional, add some variables\n  https://github.com/nlog/NLog/wiki/Configuration-file#variables\n  -->\n  <variable name=\"myvar\" value=\"myvalue\"/>\n\n  <!--\n  See https://github.com/nlog/nlog/wiki/Configuration-file\n  for information on customizing logging rules and outputs.\n   -->\n  <targets>\n\n    <!--\n    add your targets here\n    See https://github.com/nlog/NLog/wiki/Targets for possible targets.\n    See https://github.com/nlog/NLog/wiki/Layout-Renderers for the possible layout renderers.\n    -->\n\n    <!--\n    Write events to a file with the date in the filename.\n    <target xsi:type=\"File\" name=\"f\" fileName=\"${basedir}/logs/${shortdate}.log\"\n            layout=\"${longdate} ${uppercase:${level}} ${message}\" />\n    -->\n  </targets>\n\n  <rules>\n    <!-- add your logging rules here -->\n\n    <!--\n    Write all events with minimal level of Debug (So Debug, Info, Warn, Error and Fatal, but not Trace)  to \"f\"\n    <logger name=\"*\" minlevel=\"Debug\" writeTo=\"f\" />\n    -->\n  </rules>\n</nlog>\n"
  },
  {
    "path": "src/Samples/Sample.DotNetFxConsumerHost/NLog.xsd",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<xs:schema id=\"NLog\" targetNamespace=\"http://www.nlog-project.org/schemas/NLog.xsd\" elementFormDefault=\"qualified\" xmlns:xs=\"http://www.w3.org/2001/XMLSchema\" xmlns=\"http://www.nlog-project.org/schemas/NLog.xsd\">\n  <xs:element name=\"nlog\" type=\"NLogConfiguration\" />\n  <xs:complexType name=\"NLogConfiguration\">\n    <xs:choice minOccurs=\"0\" maxOccurs=\"unbounded\">\n      <xs:element name=\"extensions\" type=\"NLogExtensions\" />\n      <xs:element name=\"include\" type=\"NLogInclude\" />\n      <xs:element name=\"variable\" type=\"NLogVariable\" />\n      <xs:element name=\"targets\" type=\"NLogTargets\" />\n      <xs:element name=\"rules\" type=\"NLogRules\" />\n      <xs:element name=\"time\" type=\"TimeSource\" />\n    </xs:choice>\n    <xs:attribute name=\"autoReload\" type=\"xs:boolean\">\n      <xs:annotation>\n        <xs:documentation>Watch config file for changes and reload automatically.</xs:documentation>\n      </xs:annotation>\n    </xs:attribute>\n    <xs:attribute name=\"internalLogToConsole\" type=\"xs:boolean\">\n      <xs:annotation>\n        <xs:documentation>Print internal NLog messages to the console. Default value is: false</xs:documentation>\n      </xs:annotation>\n    </xs:attribute>\n    <xs:attribute name=\"internalLogToConsoleError\" type=\"xs:boolean\">\n      <xs:annotation>\n        <xs:documentation>Print internal NLog messages to the console error output. Default value is: false</xs:documentation>\n      </xs:annotation>\n    </xs:attribute>\n    <xs:attribute name=\"internalLogFile\" type=\"xs:string\">\n      <xs:annotation>\n        <xs:documentation>Write internal NLog messages to the specified file.</xs:documentation>\n      </xs:annotation>\n    </xs:attribute>\n    <xs:attribute name=\"internalLogLevel\" type=\"NLogLevel\">\n      <xs:annotation>\n        <xs:documentation>Log level threshold for internal log messages. Default value is: Info.</xs:documentation>\n      </xs:annotation>\n    </xs:attribute>\n    <xs:attribute name=\"globalThreshold\" type=\"NLogLevel\">\n      <xs:annotation>\n        <xs:documentation>Global log level threshold for application log messages. Messages below this level won't be logged..</xs:documentation>\n      </xs:annotation>\n    </xs:attribute>\n    <xs:attribute name=\"throwExceptions\" type=\"xs:boolean\">\n      <xs:annotation>\n        <xs:documentation>Throw an exception when there is an internal error. Default value is: false.</xs:documentation>\n      </xs:annotation>\n    </xs:attribute>\n    <xs:attribute name=\"throwConfigExceptions\" type=\"xs:boolean\">\n      <xs:annotation>\n        <xs:documentation>Throw an exception when there is a configuration error. If not set, determined by throwExceptions.</xs:documentation>\n      </xs:annotation>\n    </xs:attribute>\n    <xs:attribute name=\"keepVariablesOnReload\" type=\"xs:boolean\">\n      <xs:annotation>\n        <xs:documentation>Gets or sets a value indicating whether Variables should be kept on configuration reload. Default value is: false.</xs:documentation>\n      </xs:annotation>\n    </xs:attribute>\n    <xs:attribute name=\"internalLogToTrace\" type=\"xs:boolean\">\n      <xs:annotation>\n        <xs:documentation>Write internal NLog messages to the System.Diagnostics.Trace. Default value is: false.</xs:documentation>\n      </xs:annotation>\n    </xs:attribute>\n    <xs:attribute name=\"internalLogIncludeTimestamp\" type=\"xs:boolean\">\n      <xs:annotation>\n        <xs:documentation>Write timestamps for internal NLog messages. Default value is: true.</xs:documentation>\n      </xs:annotation>\n    </xs:attribute>\n    <xs:attribute name=\"useInvariantCulture\" type=\"xs:boolean\">\n      <xs:annotation>\n        <xs:documentation>Use InvariantCulture as default culture instead of CurrentCulture.  Default value is: false.</xs:documentation>\n      </xs:annotation>\n    </xs:attribute>\n    <xs:attribute name=\"parseMessageTemplates\" type=\"xs:boolean\">\n      <xs:annotation>\n        <xs:documentation>Perform mesage template parsing and formatting of LogEvent messages (true = Always, false = Never, empty = Auto Detect). Default value is: empty.</xs:documentation>\n      </xs:annotation>\n    </xs:attribute>\n  </xs:complexType>\n  <xs:complexType name=\"NLogTargets\">\n    <xs:choice minOccurs=\"0\" maxOccurs=\"unbounded\">\n      <xs:element name=\"default-wrapper\" type=\"WrapperTargetBase\" />\n      <xs:element name=\"default-target-parameters\" type=\"Target\" />\n      <xs:element name=\"target\" type=\"Target\" />\n      <xs:element name=\"wrapper-target\" type=\"WrapperTargetBase\" />\n      <xs:element name=\"compound-target\" type=\"CompoundTargetBase\" />\n    </xs:choice>\n    <xs:attribute name=\"async\" type=\"xs:boolean\">\n      <xs:annotation>\n        <xs:documentation>Make all targets within this section asynchronous (creates additional threads but the calling thread isn't blocked by any target writes).</xs:documentation>\n      </xs:annotation>\n    </xs:attribute>\n  </xs:complexType>\n  <xs:complexType name=\"NLogRules\">\n    <xs:sequence minOccurs=\"0\" maxOccurs=\"unbounded\">\n      <xs:element name=\"logger\" type=\"NLogLoggerRule\" />\n    </xs:sequence>\n  </xs:complexType>\n  <xs:complexType name=\"NLogExtensions\">\n    <xs:choice minOccurs=\"0\" maxOccurs=\"unbounded\">\n      <xs:element name=\"add\" type=\"NLogExtensionsAdd\" />\n    </xs:choice>\n  </xs:complexType>\n  <xs:complexType name=\"NLogExtensionsAdd\">\n    <xs:attribute name=\"prefix\" type=\"xs:string\">\n      <xs:annotation>\n        <xs:documentation>Prefix for targets/layout renderers/filters/conditions loaded from this assembly.</xs:documentation>\n      </xs:annotation>\n    </xs:attribute>\n    <xs:attribute name=\"assemblyFile\" type=\"xs:string\">\n      <xs:annotation>\n        <xs:documentation>Load NLog extensions from the specified file (*.dll)</xs:documentation>\n      </xs:annotation>\n    </xs:attribute>\n    <xs:attribute name=\"assembly\" type=\"xs:string\">\n      <xs:annotation>\n        <xs:documentation>Load NLog extensions from the specified assembly. Assembly name should be fully qualified.</xs:documentation>\n      </xs:annotation>\n    </xs:attribute>\n  </xs:complexType>\n  <xs:complexType name=\"NLogLoggerRule\">\n    <xs:choice minOccurs=\"0\" maxOccurs=\"unbounded\">\n      <xs:element name=\"filters\" type=\"NLogFilters\" />\n    </xs:choice>\n    <xs:attribute name=\"name\" use=\"optional\">\n      <xs:annotation>\n        <xs:documentation>Name of the logger. May include '*' character which acts like a wildcard. Allowed forms are: *, Name, *Name, Name* and *Name*</xs:documentation>\n      </xs:annotation>\n    </xs:attribute>\n    <xs:attribute name=\"levels\" type=\"NLogLevelList\">\n      <xs:annotation>\n        <xs:documentation>Comma separated list of levels that this rule matches.</xs:documentation>\n      </xs:annotation>\n    </xs:attribute>\n    <xs:attribute name=\"minlevel\" type=\"NLogLevel\">\n      <xs:annotation>\n        <xs:documentation>Minimum level that this rule matches.</xs:documentation>\n      </xs:annotation>\n    </xs:attribute>\n    <xs:attribute name=\"maxlevel\" type=\"NLogLevel\">\n      <xs:annotation>\n        <xs:documentation>Maximum level that this rule matches.</xs:documentation>\n      </xs:annotation>\n    </xs:attribute>\n    <xs:attribute name=\"level\" type=\"NLogLevel\">\n      <xs:annotation>\n        <xs:documentation>Level that this rule matches.</xs:documentation>\n      </xs:annotation>\n    </xs:attribute>\n    <xs:attribute name=\"writeTo\" type=\"NLogTargetIDList\">\n      <xs:annotation>\n        <xs:documentation>Comma separated list of target names.</xs:documentation>\n      </xs:annotation>\n    </xs:attribute>\n    <xs:attribute name=\"final\" type=\"xs:boolean\" default=\"false\">\n      <xs:annotation>\n        <xs:documentation>Ignore further rules if this one matches.</xs:documentation>\n      </xs:annotation>\n    </xs:attribute>\n    <xs:attribute name=\"enabled\" type=\"xs:boolean\" default=\"true\">\n      <xs:annotation>\n        <xs:documentation>Enable or disable logging rule. Disabled rules are ignored.</xs:documentation>\n      </xs:annotation>\n    </xs:attribute>\n  </xs:complexType>\n  <xs:complexType name=\"NLogFilters\">\n    <xs:choice minOccurs=\"0\" maxOccurs=\"unbounded\">\n      <xs:element name=\"when\" type=\"when\" />\n      <xs:element name=\"whenContains\" type=\"whenContains\" />\n      <xs:element name=\"whenEqual\" type=\"whenEqual\" />\n      <xs:element name=\"whenNotContains\" type=\"whenNotContains\" />\n      <xs:element name=\"whenNotEqual\" type=\"whenNotEqual\" />\n      <xs:element name=\"whenRepeated\" type=\"whenRepeated\" />\n    </xs:choice>\n  </xs:complexType>\n  <xs:simpleType name=\"NLogLevel\">\n    <xs:restriction base=\"xs:string\">\n      <xs:enumeration value=\"Off\" />\n      <xs:enumeration value=\"Trace\" />\n      <xs:enumeration value=\"Debug\" />\n      <xs:enumeration value=\"Info\" />\n      <xs:enumeration value=\"Warn\" />\n      <xs:enumeration value=\"Error\" />\n      <xs:enumeration value=\"Fatal\" />\n    </xs:restriction>\n  </xs:simpleType>\n  <xs:simpleType name=\"LineEndingMode\">\n    <xs:restriction base=\"xs:string\">\n      <xs:enumeration value=\"Default\" />\n      <xs:enumeration value=\"CRLF\" />\n      <xs:enumeration value=\"CR\" />\n      <xs:enumeration value=\"LF\" />\n      <xs:enumeration value=\"None\" />\n    </xs:restriction>\n  </xs:simpleType>\n  <xs:simpleType name=\"NLogLevelList\">\n    <xs:restriction base=\"xs:string\">\n      <xs:pattern value=\"(|Trace|Debug|Info|Warn|Error|Fatal)(,(Trace|Debug|Info|Warn|Error|Fatal))*\" />\n    </xs:restriction>\n  </xs:simpleType>\n  <xs:complexType name=\"NLogInclude\">\n    <xs:attribute name=\"file\" type=\"SimpleLayoutAttribute\" use=\"required\">\n      <xs:annotation>\n        <xs:documentation>Name of the file to be included. You could use * wildcard. The name is relative to the name of the current config file.</xs:documentation>\n      </xs:annotation>\n    </xs:attribute>\n    <xs:attribute name=\"ignoreErrors\" type=\"xs:boolean\" use=\"optional\" default=\"false\">\n      <xs:annotation>\n        <xs:documentation>Ignore any errors in the include file.</xs:documentation>\n      </xs:annotation>\n    </xs:attribute>\n  </xs:complexType>\n  <xs:complexType name=\"NLogVariable\">\n    <xs:attribute name=\"name\" type=\"xs:string\" use=\"required\">\n      <xs:annotation>\n        <xs:documentation>Variable name.</xs:documentation>\n      </xs:annotation>\n    </xs:attribute>\n    <xs:attribute name=\"value\" type=\"SimpleLayoutAttribute\" use=\"required\">\n      <xs:annotation>\n        <xs:documentation>Variable value.</xs:documentation>\n      </xs:annotation>\n    </xs:attribute>\n  </xs:complexType>\n  <xs:simpleType name=\"NLogTargetIDList\">\n    <xs:restriction base=\"xs:string\">\n      <xs:pattern value=\"(|([a-zA-Z][a-zA-Z0-9_\\-]*))(,([a-zA-Z][a-zA-Z0-9_\\-]*))*\" />\n    </xs:restriction>\n  </xs:simpleType>\n  <xs:complexType name=\"Target\" abstract=\"true\"></xs:complexType>\n  <xs:complexType name=\"TargetRef\">\n    <xs:attribute name=\"name\" type=\"xs:string\" use=\"required\" />\n  </xs:complexType>\n  <xs:complexType name=\"WrapperTargetBase\" abstract=\"true\">\n    <xs:complexContent>\n      <xs:extension base=\"Target\">\n        <xs:choice minOccurs=\"0\" maxOccurs=\"unbounded\">\n          <xs:element name=\"target\" type=\"Target\" minOccurs=\"1\" maxOccurs=\"1\" />\n          <xs:element name=\"wrapper-target\" type=\"WrapperTargetBase\" minOccurs=\"1\" maxOccurs=\"1\" />\n          <xs:element name=\"compound-target\" type=\"CompoundTargetBase\" minOccurs=\"1\" maxOccurs=\"1\" />\n          <xs:element name=\"target-ref\" type=\"TargetRef\" minOccurs=\"1\" maxOccurs=\"1\" />\n          <xs:element name=\"wrapper-target-ref\" type=\"TargetRef\" minOccurs=\"1\" maxOccurs=\"1\" />\n          <xs:element name=\"compound-target-ref\" type=\"TargetRef\" minOccurs=\"1\" maxOccurs=\"1\" />\n        </xs:choice>\n      </xs:extension>\n    </xs:complexContent>\n  </xs:complexType>\n  <xs:complexType name=\"CompoundTargetBase\" abstract=\"true\">\n    <xs:complexContent>\n      <xs:extension base=\"Target\">\n        <xs:choice minOccurs=\"0\" maxOccurs=\"unbounded\">\n          <xs:element name=\"target\" type=\"Target\" minOccurs=\"1\" maxOccurs=\"unbounded\" />\n          <xs:element name=\"wrapper-target\" type=\"WrapperTargetBase\" minOccurs=\"1\" maxOccurs=\"1\" />\n          <xs:element name=\"compound-target\" type=\"CompoundTargetBase\" minOccurs=\"1\" maxOccurs=\"1\" />\n          <xs:element name=\"target-ref\" type=\"TargetRef\" minOccurs=\"1\" maxOccurs=\"1\" />\n          <xs:element name=\"wrapper-target-ref\" type=\"TargetRef\" minOccurs=\"1\" maxOccurs=\"1\" />\n          <xs:element name=\"compound-target-ref\" type=\"TargetRef\" minOccurs=\"1\" maxOccurs=\"1\" />\n        </xs:choice>\n      </xs:extension>\n    </xs:complexContent>\n  </xs:complexType>\n  <xs:complexType name=\"Filter\" abstract=\"true\"></xs:complexType>\n  <xs:complexType name=\"TimeSource\" abstract=\"true\"></xs:complexType>\n  <xs:simpleType name=\"SimpleLayoutAttribute\">\n    <xs:restriction base=\"xs:string\">\n      <xs:pattern value=\".*\" />\n    </xs:restriction>\n  </xs:simpleType>\n  <xs:simpleType name=\"Condition\">\n    <xs:restriction base=\"xs:string\">\n      <xs:minLength value=\"1\" />\n    </xs:restriction>\n  </xs:simpleType>\n  <xs:complexType name=\"AsyncWrapper\">\n    <xs:complexContent>\n      <xs:extension base=\"WrapperTargetBase\">\n        <xs:choice minOccurs=\"0\" maxOccurs=\"unbounded\">\n          <xs:element name=\"name\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:string\" />\n          <xs:element name=\"batchSize\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:integer\" />\n          <xs:element name=\"fullBatchSizeWriteLimit\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:integer\" />\n          <xs:element name=\"overflowAction\" minOccurs=\"0\" maxOccurs=\"1\" type=\"NLog.Targets.Wrappers.AsyncTargetWrapperOverflowAction\" />\n          <xs:element name=\"queueLimit\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:integer\" />\n          <xs:element name=\"timeToSleepBetweenBatches\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:integer\" />\n          <xs:element name=\"optimizeBufferReuse\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:boolean\" />\n        </xs:choice>\n        <xs:attribute name=\"name\" type=\"xs:string\">\n          <xs:annotation>\n            <xs:documentation>Name of the target.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"batchSize\" type=\"xs:integer\">\n          <xs:annotation>\n            <xs:documentation>Number of log events that should be processed in a batch by the lazy writer thread.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"fullBatchSizeWriteLimit\" type=\"xs:integer\">\n          <xs:annotation>\n            <xs:documentation>Limit of full s to write before yielding into  Performance is better when writing many small batches, than writing a single large batch</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"overflowAction\" type=\"NLog.Targets.Wrappers.AsyncTargetWrapperOverflowAction\">\n          <xs:annotation>\n            <xs:documentation>Action to be taken when the lazy writer thread request queue count exceeds the set limit.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"queueLimit\" type=\"xs:integer\">\n          <xs:annotation>\n            <xs:documentation>Limit on the number of requests in the lazy writer thread request queue.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"timeToSleepBetweenBatches\" type=\"xs:integer\">\n          <xs:annotation>\n            <xs:documentation>Time in milliseconds to sleep between batches.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"optimizeBufferReuse\" type=\"xs:boolean\">\n          <xs:annotation>\n            <xs:documentation>Target supports reuse of internal buffers, and doesn't have to constantly allocate new buffers Required for legacy NLog-targets, that expects buffers to remain stable after Write-method exit</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n      </xs:extension>\n    </xs:complexContent>\n  </xs:complexType>\n  <xs:simpleType name=\"NLog.Targets.Wrappers.AsyncTargetWrapperOverflowAction\">\n    <xs:restriction base=\"xs:string\">\n      <xs:enumeration value=\"Grow\" />\n      <xs:enumeration value=\"Discard\" />\n      <xs:enumeration value=\"Block\" />\n    </xs:restriction>\n  </xs:simpleType>\n  <xs:complexType name=\"AutoFlushWrapper\">\n    <xs:complexContent>\n      <xs:extension base=\"WrapperTargetBase\">\n        <xs:choice minOccurs=\"0\" maxOccurs=\"unbounded\">\n          <xs:element name=\"asyncFlush\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:boolean\" />\n          <xs:element name=\"condition\" minOccurs=\"0\" maxOccurs=\"1\" type=\"Condition\" />\n          <xs:element name=\"name\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:string\" />\n          <xs:element name=\"optimizeBufferReuse\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:boolean\" />\n        </xs:choice>\n        <xs:attribute name=\"asyncFlush\" type=\"xs:boolean\">\n          <xs:annotation>\n            <xs:documentation>Delay the flush until the LogEvent has been confirmed as written</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"condition\" type=\"Condition\">\n          <xs:annotation>\n            <xs:documentation>Condition expression. Log events who meet this condition will cause a flush on the wrapped target.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"name\" type=\"xs:string\">\n          <xs:annotation>\n            <xs:documentation>Name of the target.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"optimizeBufferReuse\" type=\"xs:boolean\">\n          <xs:annotation>\n            <xs:documentation>Target supports reuse of internal buffers, and doesn't have to constantly allocate new buffers Required for legacy NLog-targets, that expects buffers to remain stable after Write-method exit</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n      </xs:extension>\n    </xs:complexContent>\n  </xs:complexType>\n  <xs:complexType name=\"BufferingWrapper\">\n    <xs:complexContent>\n      <xs:extension base=\"WrapperTargetBase\">\n        <xs:choice minOccurs=\"0\" maxOccurs=\"unbounded\">\n          <xs:element name=\"name\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:string\" />\n          <xs:element name=\"bufferSize\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:integer\" />\n          <xs:element name=\"flushTimeout\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:integer\" />\n          <xs:element name=\"overflowAction\" minOccurs=\"0\" maxOccurs=\"1\" type=\"NLog.Targets.Wrappers.BufferingTargetWrapperOverflowAction\" />\n          <xs:element name=\"slidingTimeout\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:boolean\" />\n          <xs:element name=\"optimizeBufferReuse\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:boolean\" />\n        </xs:choice>\n        <xs:attribute name=\"name\" type=\"xs:string\">\n          <xs:annotation>\n            <xs:documentation>Name of the target.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"bufferSize\" type=\"xs:integer\">\n          <xs:annotation>\n            <xs:documentation>Number of log events to be buffered.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"flushTimeout\" type=\"xs:integer\">\n          <xs:annotation>\n            <xs:documentation>Timeout (in milliseconds) after which the contents of buffer will be flushed if there's no write in the specified period of time. Use -1 to disable timed flushes.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"overflowAction\" type=\"NLog.Targets.Wrappers.BufferingTargetWrapperOverflowAction\">\n          <xs:annotation>\n            <xs:documentation>Action to take if the buffer overflows.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"slidingTimeout\" type=\"xs:boolean\">\n          <xs:annotation>\n            <xs:documentation>Indicates whether to use sliding timeout.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"optimizeBufferReuse\" type=\"xs:boolean\">\n          <xs:annotation>\n            <xs:documentation>Target supports reuse of internal buffers, and doesn't have to constantly allocate new buffers Required for legacy NLog-targets, that expects buffers to remain stable after Write-method exit</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n      </xs:extension>\n    </xs:complexContent>\n  </xs:complexType>\n  <xs:simpleType name=\"NLog.Targets.Wrappers.BufferingTargetWrapperOverflowAction\">\n    <xs:restriction base=\"xs:string\">\n      <xs:enumeration value=\"Flush\" />\n      <xs:enumeration value=\"Discard\" />\n    </xs:restriction>\n  </xs:simpleType>\n  <xs:complexType name=\"Chainsaw\">\n    <xs:complexContent>\n      <xs:extension base=\"Target\">\n        <xs:choice minOccurs=\"0\" maxOccurs=\"unbounded\">\n          <xs:element name=\"name\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:string\" />\n          <xs:element name=\"encoding\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:string\" />\n          <xs:element name=\"layout\" minOccurs=\"0\" maxOccurs=\"1\" type=\"Layout\" />\n          <xs:element name=\"lineEnding\" minOccurs=\"0\" maxOccurs=\"1\" type=\"LineEndingMode\" />\n          <xs:element name=\"maxMessageSize\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:integer\" />\n          <xs:element name=\"newLine\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:boolean\" />\n          <xs:element name=\"onConnectionOverflow\" minOccurs=\"0\" maxOccurs=\"1\" type=\"NLog.Targets.NetworkTargetConnectionsOverflowAction\" />\n          <xs:element name=\"maxQueueSize\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:integer\" />\n          <xs:element name=\"maxConnections\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:integer\" />\n          <xs:element name=\"keepConnection\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:boolean\" />\n          <xs:element name=\"connectionCacheSize\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:integer\" />\n          <xs:element name=\"address\" minOccurs=\"0\" maxOccurs=\"1\" type=\"Layout\" />\n          <xs:element name=\"onOverflow\" minOccurs=\"0\" maxOccurs=\"1\" type=\"NLog.Targets.NetworkTargetOverflowAction\" />\n          <xs:element name=\"parameter\" minOccurs=\"0\" maxOccurs=\"unbounded\" type=\"NLog.Targets.NLogViewerParameterInfo\" />\n          <xs:element name=\"ndlcItemSeparator\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:string\" />\n          <xs:element name=\"ndcItemSeparator\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:string\" />\n          <xs:element name=\"includeNLogData\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:boolean\" />\n          <xs:element name=\"includeSourceInfo\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:boolean\" />\n          <xs:element name=\"includeNdlc\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:boolean\" />\n          <xs:element name=\"includeNdc\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:boolean\" />\n          <xs:element name=\"includeMdlc\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:boolean\" />\n          <xs:element name=\"includeMdc\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:boolean\" />\n          <xs:element name=\"includeCallSite\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:boolean\" />\n          <xs:element name=\"includeAllProperties\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:boolean\" />\n          <xs:element name=\"appInfo\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:string\" />\n          <xs:element name=\"loggerName\" minOccurs=\"0\" maxOccurs=\"1\" type=\"Layout\" />\n          <xs:element name=\"optimizeBufferReuse\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:boolean\" />\n        </xs:choice>\n        <xs:attribute name=\"name\" type=\"xs:string\">\n          <xs:annotation>\n            <xs:documentation>Name of the target.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"encoding\" type=\"xs:string\">\n          <xs:annotation>\n            <xs:documentation>Encoding to be used.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"layout\" type=\"SimpleLayoutAttribute\">\n          <xs:annotation>\n            <xs:documentation>Instance of  that is used to format log messages.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"lineEnding\" type=\"LineEndingMode\">\n          <xs:annotation>\n            <xs:documentation>End of line value if a newline is appended at the end of log message .</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"maxMessageSize\" type=\"xs:integer\">\n          <xs:annotation>\n            <xs:documentation>Maximum message size in bytes.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"newLine\" type=\"xs:boolean\">\n          <xs:annotation>\n            <xs:documentation>Indicates whether to append newline at the end of log message.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"onConnectionOverflow\" type=\"NLog.Targets.NetworkTargetConnectionsOverflowAction\">\n          <xs:annotation>\n            <xs:documentation>Action that should be taken if the will be more connections than .</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"maxQueueSize\" type=\"xs:integer\">\n          <xs:annotation>\n            <xs:documentation>Maximum queue size.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"maxConnections\" type=\"xs:integer\">\n          <xs:annotation>\n            <xs:documentation>Maximum current connections. 0 = no maximum.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"keepConnection\" type=\"xs:boolean\">\n          <xs:annotation>\n            <xs:documentation>Indicates whether to keep connection open whenever possible.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"connectionCacheSize\" type=\"xs:integer\">\n          <xs:annotation>\n            <xs:documentation>Size of the connection cache (number of connections which are kept alive).</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"address\" type=\"SimpleLayoutAttribute\">\n          <xs:annotation>\n            <xs:documentation>Network address.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"onOverflow\" type=\"NLog.Targets.NetworkTargetOverflowAction\">\n          <xs:annotation>\n            <xs:documentation>Action that should be taken if the message is larger than maxMessageSize.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"ndlcItemSeparator\" type=\"xs:string\">\n          <xs:annotation>\n            <xs:documentation>NDLC item separator.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"ndcItemSeparator\" type=\"xs:string\">\n          <xs:annotation>\n            <xs:documentation>NDC item separator.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"includeNLogData\" type=\"xs:boolean\">\n          <xs:annotation>\n            <xs:documentation>Indicates whether to include NLog-specific extensions to log4j schema.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"includeSourceInfo\" type=\"xs:boolean\">\n          <xs:annotation>\n            <xs:documentation>Indicates whether to include source info (file name and line number) in the information sent over the network.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"includeNdlc\" type=\"xs:boolean\">\n          <xs:annotation>\n            <xs:documentation>Indicates whether to include contents of the  stack.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"includeNdc\" type=\"xs:boolean\">\n          <xs:annotation>\n            <xs:documentation>Indicates whether to include  stack contents.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"includeMdlc\" type=\"xs:boolean\">\n          <xs:annotation>\n            <xs:documentation>Indicates whether to include  dictionary contents.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"includeMdc\" type=\"xs:boolean\">\n          <xs:annotation>\n            <xs:documentation>Indicates whether to include  dictionary contents.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"includeCallSite\" type=\"xs:boolean\">\n          <xs:annotation>\n            <xs:documentation>Indicates whether to include call site (class and method name) in the information sent over the network.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"includeAllProperties\" type=\"xs:boolean\">\n          <xs:annotation>\n            <xs:documentation>Option to include all properties from the log events</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"appInfo\" type=\"xs:string\">\n          <xs:annotation>\n            <xs:documentation>AppInfo field. By default it's the friendly name of the current AppDomain.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"loggerName\" type=\"SimpleLayoutAttribute\">\n          <xs:annotation>\n            <xs:documentation>Renderer for log4j:event logger-xml-attribute (Default ${logger})</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"optimizeBufferReuse\" type=\"xs:boolean\">\n          <xs:annotation>\n            <xs:documentation>Target supports reuse of internal buffers, and doesn't have to constantly allocate new buffers Required for legacy NLog-targets, that expects buffers to remain stable after Write-method exit</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n      </xs:extension>\n    </xs:complexContent>\n  </xs:complexType>\n  <xs:simpleType name=\"NLog.Targets.NetworkTargetConnectionsOverflowAction\">\n    <xs:restriction base=\"xs:string\">\n      <xs:enumeration value=\"AllowNewConnnection\" />\n      <xs:enumeration value=\"DiscardMessage\" />\n      <xs:enumeration value=\"Block\" />\n    </xs:restriction>\n  </xs:simpleType>\n  <xs:simpleType name=\"NLog.Targets.NetworkTargetOverflowAction\">\n    <xs:restriction base=\"xs:string\">\n      <xs:enumeration value=\"Error\" />\n      <xs:enumeration value=\"Split\" />\n      <xs:enumeration value=\"Discard\" />\n    </xs:restriction>\n  </xs:simpleType>\n  <xs:complexType name=\"NLog.Targets.NLogViewerParameterInfo\">\n    <xs:choice minOccurs=\"0\" maxOccurs=\"unbounded\">\n      <xs:element name=\"layout\" minOccurs=\"0\" maxOccurs=\"1\" type=\"Layout\" />\n      <xs:element name=\"name\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:string\" />\n    </xs:choice>\n    <xs:attribute name=\"layout\" type=\"SimpleLayoutAttribute\">\n      <xs:annotation>\n        <xs:documentation>Layout that should be use to calcuate the value for the parameter.</xs:documentation>\n      </xs:annotation>\n    </xs:attribute>\n    <xs:attribute name=\"name\" type=\"xs:string\">\n      <xs:annotation>\n        <xs:documentation>Viewer parameter name.</xs:documentation>\n      </xs:annotation>\n    </xs:attribute>\n  </xs:complexType>\n  <xs:complexType name=\"ColoredConsole\">\n    <xs:complexContent>\n      <xs:extension base=\"Target\">\n        <xs:choice minOccurs=\"0\" maxOccurs=\"unbounded\">\n          <xs:element name=\"name\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:string\" />\n          <xs:element name=\"layout\" minOccurs=\"0\" maxOccurs=\"1\" type=\"Layout\" />\n          <xs:element name=\"header\" minOccurs=\"0\" maxOccurs=\"1\" type=\"Layout\" />\n          <xs:element name=\"footer\" minOccurs=\"0\" maxOccurs=\"1\" type=\"Layout\" />\n          <xs:element name=\"detectConsoleAvailable\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:boolean\" />\n          <xs:element name=\"encoding\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:string\" />\n          <xs:element name=\"errorStream\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:boolean\" />\n          <xs:element name=\"useDefaultRowHighlightingRules\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:boolean\" />\n          <xs:element name=\"highlight-row\" minOccurs=\"0\" maxOccurs=\"unbounded\" type=\"NLog.Targets.ConsoleRowHighlightingRule\" />\n          <xs:element name=\"highlight-word\" minOccurs=\"0\" maxOccurs=\"unbounded\" type=\"NLog.Targets.ConsoleWordHighlightingRule\" />\n          <xs:element name=\"optimizeBufferReuse\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:boolean\" />\n        </xs:choice>\n        <xs:attribute name=\"name\" type=\"xs:string\">\n          <xs:annotation>\n            <xs:documentation>Name of the target.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"layout\" type=\"SimpleLayoutAttribute\">\n          <xs:annotation>\n            <xs:documentation>Text to be rendered.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"header\" type=\"SimpleLayoutAttribute\">\n          <xs:annotation>\n            <xs:documentation>Header.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"footer\" type=\"SimpleLayoutAttribute\">\n          <xs:annotation>\n            <xs:documentation>Footer.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"detectConsoleAvailable\" type=\"xs:boolean\">\n          <xs:annotation>\n            <xs:documentation>Indicates whether to auto-check if the console is available. - Disables console writing if Environment.UserInteractive = False (Windows Service) - Disables console writing if Console Standard Input is not available (Non-Console-App)</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"encoding\" type=\"xs:string\">\n          <xs:annotation>\n            <xs:documentation>The encoding for writing messages to the .</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"errorStream\" type=\"xs:boolean\">\n          <xs:annotation>\n            <xs:documentation>Indicates whether the error stream (stderr) should be used instead of the output stream (stdout).</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"useDefaultRowHighlightingRules\" type=\"xs:boolean\">\n          <xs:annotation>\n            <xs:documentation>Indicates whether to use default row highlighting rules.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"optimizeBufferReuse\" type=\"xs:boolean\">\n          <xs:annotation>\n            <xs:documentation>Target supports reuse of internal buffers, and doesn't have to constantly allocate new buffers Required for legacy NLog-targets, that expects buffers to remain stable after Write-method exit</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n      </xs:extension>\n    </xs:complexContent>\n  </xs:complexType>\n  <xs:simpleType name=\"NLog.Targets.ConsoleOutputColor\">\n    <xs:restriction base=\"xs:string\">\n      <xs:enumeration value=\"Black\" />\n      <xs:enumeration value=\"DarkBlue\" />\n      <xs:enumeration value=\"DarkGreen\" />\n      <xs:enumeration value=\"DarkCyan\" />\n      <xs:enumeration value=\"DarkRed\" />\n      <xs:enumeration value=\"DarkMagenta\" />\n      <xs:enumeration value=\"DarkYellow\" />\n      <xs:enumeration value=\"Gray\" />\n      <xs:enumeration value=\"DarkGray\" />\n      <xs:enumeration value=\"Blue\" />\n      <xs:enumeration value=\"Green\" />\n      <xs:enumeration value=\"Cyan\" />\n      <xs:enumeration value=\"Red\" />\n      <xs:enumeration value=\"Magenta\" />\n      <xs:enumeration value=\"Yellow\" />\n      <xs:enumeration value=\"White\" />\n      <xs:enumeration value=\"NoChange\" />\n    </xs:restriction>\n  </xs:simpleType>\n  <xs:complexType name=\"NLog.Targets.ConsoleRowHighlightingRule\">\n    <xs:choice minOccurs=\"0\" maxOccurs=\"unbounded\">\n      <xs:element name=\"condition\" minOccurs=\"0\" maxOccurs=\"1\" type=\"Condition\" />\n      <xs:element name=\"backgroundColor\" minOccurs=\"0\" maxOccurs=\"1\" type=\"NLog.Targets.ConsoleOutputColor\" />\n      <xs:element name=\"foregroundColor\" minOccurs=\"0\" maxOccurs=\"1\" type=\"NLog.Targets.ConsoleOutputColor\" />\n    </xs:choice>\n    <xs:attribute name=\"condition\" type=\"Condition\">\n      <xs:annotation>\n        <xs:documentation>Condition that must be met in order to set the specified foreground and background color.</xs:documentation>\n      </xs:annotation>\n    </xs:attribute>\n    <xs:attribute name=\"backgroundColor\" type=\"NLog.Targets.ConsoleOutputColor\">\n      <xs:annotation>\n        <xs:documentation>Background color.</xs:documentation>\n      </xs:annotation>\n    </xs:attribute>\n    <xs:attribute name=\"foregroundColor\" type=\"NLog.Targets.ConsoleOutputColor\">\n      <xs:annotation>\n        <xs:documentation>Foreground color.</xs:documentation>\n      </xs:annotation>\n    </xs:attribute>\n  </xs:complexType>\n  <xs:complexType name=\"NLog.Targets.ConsoleWordHighlightingRule\">\n    <xs:choice minOccurs=\"0\" maxOccurs=\"unbounded\">\n      <xs:element name=\"compileRegex\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:boolean\" />\n      <xs:element name=\"ignoreCase\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:boolean\" />\n      <xs:element name=\"regex\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:string\" />\n      <xs:element name=\"text\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:string\" />\n      <xs:element name=\"wholeWords\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:boolean\" />\n      <xs:element name=\"backgroundColor\" minOccurs=\"0\" maxOccurs=\"1\" type=\"NLog.Targets.ConsoleOutputColor\" />\n      <xs:element name=\"foregroundColor\" minOccurs=\"0\" maxOccurs=\"1\" type=\"NLog.Targets.ConsoleOutputColor\" />\n    </xs:choice>\n    <xs:attribute name=\"compileRegex\" type=\"xs:boolean\">\n      <xs:annotation>\n        <xs:documentation>Compile the ? This can improve the performance, but at the costs of more memory usage. If false, the Regex Cache is used.</xs:documentation>\n      </xs:annotation>\n    </xs:attribute>\n    <xs:attribute name=\"ignoreCase\" type=\"xs:boolean\">\n      <xs:annotation>\n        <xs:documentation>Indicates whether to ignore case when comparing texts.</xs:documentation>\n      </xs:annotation>\n    </xs:attribute>\n    <xs:attribute name=\"regex\" type=\"xs:string\">\n      <xs:annotation>\n        <xs:documentation>Regular expression to be matched. You must specify either text or regex.</xs:documentation>\n      </xs:annotation>\n    </xs:attribute>\n    <xs:attribute name=\"text\" type=\"xs:string\">\n      <xs:annotation>\n        <xs:documentation>Text to be matched. You must specify either text or regex.</xs:documentation>\n      </xs:annotation>\n    </xs:attribute>\n    <xs:attribute name=\"wholeWords\" type=\"xs:boolean\">\n      <xs:annotation>\n        <xs:documentation>Indicates whether to match whole words only.</xs:documentation>\n      </xs:annotation>\n    </xs:attribute>\n    <xs:attribute name=\"backgroundColor\" type=\"NLog.Targets.ConsoleOutputColor\">\n      <xs:annotation>\n        <xs:documentation>Background color.</xs:documentation>\n      </xs:annotation>\n    </xs:attribute>\n    <xs:attribute name=\"foregroundColor\" type=\"NLog.Targets.ConsoleOutputColor\">\n      <xs:annotation>\n        <xs:documentation>Foreground color.</xs:documentation>\n      </xs:annotation>\n    </xs:attribute>\n  </xs:complexType>\n  <xs:complexType name=\"Console\">\n    <xs:complexContent>\n      <xs:extension base=\"Target\">\n        <xs:choice minOccurs=\"0\" maxOccurs=\"unbounded\">\n          <xs:element name=\"name\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:string\" />\n          <xs:element name=\"layout\" minOccurs=\"0\" maxOccurs=\"1\" type=\"Layout\" />\n          <xs:element name=\"header\" minOccurs=\"0\" maxOccurs=\"1\" type=\"Layout\" />\n          <xs:element name=\"footer\" minOccurs=\"0\" maxOccurs=\"1\" type=\"Layout\" />\n          <xs:element name=\"detectConsoleAvailable\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:boolean\" />\n          <xs:element name=\"encoding\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:string\" />\n          <xs:element name=\"error\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:boolean\" />\n          <xs:element name=\"optimizeBufferReuse\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:boolean\" />\n        </xs:choice>\n        <xs:attribute name=\"name\" type=\"xs:string\">\n          <xs:annotation>\n            <xs:documentation>Name of the target.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"layout\" type=\"SimpleLayoutAttribute\">\n          <xs:annotation>\n            <xs:documentation>Text to be rendered.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"header\" type=\"SimpleLayoutAttribute\">\n          <xs:annotation>\n            <xs:documentation>Header.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"footer\" type=\"SimpleLayoutAttribute\">\n          <xs:annotation>\n            <xs:documentation>Footer.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"detectConsoleAvailable\" type=\"xs:boolean\">\n          <xs:annotation>\n            <xs:documentation>Indicates whether to auto-check if the console is available - Disables console writing if Environment.UserInteractive = False (Windows Service) - Disables console writing if Console Standard Input is not available (Non-Console-App)</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"encoding\" type=\"xs:string\">\n          <xs:annotation>\n            <xs:documentation>The encoding for writing messages to the .</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"error\" type=\"xs:boolean\">\n          <xs:annotation>\n            <xs:documentation>Indicates whether to send the log messages to the standard error instead of the standard output.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"optimizeBufferReuse\" type=\"xs:boolean\">\n          <xs:annotation>\n            <xs:documentation>Target supports reuse of internal buffers, and doesn't have to constantly allocate new buffers Required for legacy NLog-targets, that expects buffers to remain stable after Write-method exit</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n      </xs:extension>\n    </xs:complexContent>\n  </xs:complexType>\n  <xs:complexType name=\"Database\">\n    <xs:complexContent>\n      <xs:extension base=\"Target\">\n        <xs:choice minOccurs=\"0\" maxOccurs=\"unbounded\">\n          <xs:element name=\"name\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:string\" />\n          <xs:element name=\"useTransactions\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:boolean\" />\n          <xs:element name=\"dbUserName\" minOccurs=\"0\" maxOccurs=\"1\" type=\"Layout\" />\n          <xs:element name=\"dbProvider\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:string\" />\n          <xs:element name=\"dbPassword\" minOccurs=\"0\" maxOccurs=\"1\" type=\"Layout\" />\n          <xs:element name=\"keepConnection\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:boolean\" />\n          <xs:element name=\"dbDatabase\" minOccurs=\"0\" maxOccurs=\"1\" type=\"Layout\" />\n          <xs:element name=\"connectionStringName\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:string\" />\n          <xs:element name=\"connectionString\" minOccurs=\"0\" maxOccurs=\"1\" type=\"Layout\" />\n          <xs:element name=\"dbHost\" minOccurs=\"0\" maxOccurs=\"1\" type=\"Layout\" />\n          <xs:element name=\"installConnectionString\" minOccurs=\"0\" maxOccurs=\"1\" type=\"Layout\" />\n          <xs:element name=\"install-command\" minOccurs=\"0\" maxOccurs=\"unbounded\" type=\"NLog.Targets.DatabaseCommandInfo\" />\n          <xs:element name=\"uninstall-command\" minOccurs=\"0\" maxOccurs=\"unbounded\" type=\"NLog.Targets.DatabaseCommandInfo\" />\n          <xs:element name=\"optimizeBufferReuse\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:boolean\" />\n          <xs:element name=\"parameter\" minOccurs=\"0\" maxOccurs=\"unbounded\" type=\"NLog.Targets.DatabaseParameterInfo\" />\n          <xs:element name=\"commandText\" minOccurs=\"0\" maxOccurs=\"1\" type=\"Layout\" />\n          <xs:element name=\"commandType\" minOccurs=\"0\" maxOccurs=\"1\" type=\"System.Data.CommandType\" />\n        </xs:choice>\n        <xs:attribute name=\"name\" type=\"xs:string\">\n          <xs:annotation>\n            <xs:documentation>Name of the target.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"useTransactions\" type=\"xs:boolean\">\n          <xs:annotation>\n            <xs:documentation>Obsolete - value will be ignored! The logging code always runs outside of transaction. Gets or sets a value indicating whether to use database transactions. Some data providers require this.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"dbUserName\" type=\"SimpleLayoutAttribute\">\n          <xs:annotation>\n            <xs:documentation>Database user name. If the ConnectionString is not provided this value will be used to construct the \"User ID=\" part of the connection string.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"dbProvider\" type=\"xs:string\">\n          <xs:annotation>\n            <xs:documentation>Name of the database provider.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"dbPassword\" type=\"SimpleLayoutAttribute\">\n          <xs:annotation>\n            <xs:documentation>Database password. If the ConnectionString is not provided this value will be used to construct the \"Password=\" part of the connection string.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"keepConnection\" type=\"xs:boolean\">\n          <xs:annotation>\n            <xs:documentation>Indicates whether to keep the database connection open between the log events.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"dbDatabase\" type=\"SimpleLayoutAttribute\">\n          <xs:annotation>\n            <xs:documentation>Database name. If the ConnectionString is not provided this value will be used to construct the \"Database=\" part of the connection string.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"connectionStringName\" type=\"xs:string\">\n          <xs:annotation>\n            <xs:documentation>Name of the connection string (as specified in &lt;connectionStrings&gt; configuration section.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"connectionString\" type=\"SimpleLayoutAttribute\">\n          <xs:annotation>\n            <xs:documentation>Connection string. When provided, it overrides the values specified in DBHost, DBUserName, DBPassword, DBDatabase.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"dbHost\" type=\"SimpleLayoutAttribute\">\n          <xs:annotation>\n            <xs:documentation>Database host name. If the ConnectionString is not provided this value will be used to construct the \"Server=\" part of the connection string.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"installConnectionString\" type=\"SimpleLayoutAttribute\">\n          <xs:annotation>\n            <xs:documentation>Connection string using for installation and uninstallation. If not provided, regular ConnectionString is being used.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"optimizeBufferReuse\" type=\"xs:boolean\">\n          <xs:annotation>\n            <xs:documentation>Target supports reuse of internal buffers, and doesn't have to constantly allocate new buffers Required for legacy NLog-targets, that expects buffers to remain stable after Write-method exit</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"commandText\" type=\"SimpleLayoutAttribute\">\n          <xs:annotation>\n            <xs:documentation>Text of the SQL command to be run on each log level.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"commandType\" type=\"System.Data.CommandType\">\n          <xs:annotation>\n            <xs:documentation>Type of the SQL command to be run on each log level.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n      </xs:extension>\n    </xs:complexContent>\n  </xs:complexType>\n  <xs:simpleType name=\"System.Data.CommandType\">\n    <xs:restriction base=\"xs:string\">\n      <xs:enumeration value=\"Text\" />\n      <xs:enumeration value=\"StoredProcedure\" />\n      <xs:enumeration value=\"TableDirect\" />\n    </xs:restriction>\n  </xs:simpleType>\n  <xs:complexType name=\"NLog.Targets.DatabaseCommandInfo\">\n    <xs:choice minOccurs=\"0\" maxOccurs=\"unbounded\">\n      <xs:element name=\"commandType\" minOccurs=\"0\" maxOccurs=\"1\" type=\"System.Data.CommandType\" />\n      <xs:element name=\"connectionString\" minOccurs=\"0\" maxOccurs=\"1\" type=\"Layout\" />\n      <xs:element name=\"ignoreFailures\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:boolean\" />\n      <xs:element name=\"parameter\" minOccurs=\"0\" maxOccurs=\"unbounded\" type=\"NLog.Targets.DatabaseParameterInfo\" />\n      <xs:element name=\"text\" minOccurs=\"0\" maxOccurs=\"1\" type=\"Layout\" />\n    </xs:choice>\n    <xs:attribute name=\"commandType\" type=\"System.Data.CommandType\">\n      <xs:annotation>\n        <xs:documentation>Type of the command.</xs:documentation>\n      </xs:annotation>\n    </xs:attribute>\n    <xs:attribute name=\"connectionString\" type=\"SimpleLayoutAttribute\">\n      <xs:annotation>\n        <xs:documentation>Connection string to run the command against. If not provided, connection string from the target is used.</xs:documentation>\n      </xs:annotation>\n    </xs:attribute>\n    <xs:attribute name=\"ignoreFailures\" type=\"xs:boolean\">\n      <xs:annotation>\n        <xs:documentation>Indicates whether to ignore failures.</xs:documentation>\n      </xs:annotation>\n    </xs:attribute>\n    <xs:attribute name=\"text\" type=\"SimpleLayoutAttribute\">\n      <xs:annotation>\n        <xs:documentation>Command text.</xs:documentation>\n      </xs:annotation>\n    </xs:attribute>\n  </xs:complexType>\n  <xs:complexType name=\"NLog.Targets.DatabaseParameterInfo\">\n    <xs:choice minOccurs=\"0\" maxOccurs=\"unbounded\">\n      <xs:element name=\"layout\" minOccurs=\"0\" maxOccurs=\"1\" type=\"Layout\" />\n      <xs:element name=\"name\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:string\" />\n      <xs:element name=\"precision\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:byte\" />\n      <xs:element name=\"scale\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:byte\" />\n      <xs:element name=\"size\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:integer\" />\n    </xs:choice>\n    <xs:attribute name=\"layout\" type=\"SimpleLayoutAttribute\">\n      <xs:annotation>\n        <xs:documentation>Layout that should be use to calcuate the value for the parameter.</xs:documentation>\n      </xs:annotation>\n    </xs:attribute>\n    <xs:attribute name=\"name\" type=\"xs:string\">\n      <xs:annotation>\n        <xs:documentation>Database parameter name.</xs:documentation>\n      </xs:annotation>\n    </xs:attribute>\n    <xs:attribute name=\"precision\" type=\"xs:byte\">\n      <xs:annotation>\n        <xs:documentation>Database parameter precision.</xs:documentation>\n      </xs:annotation>\n    </xs:attribute>\n    <xs:attribute name=\"scale\" type=\"xs:byte\">\n      <xs:annotation>\n        <xs:documentation>Database parameter scale.</xs:documentation>\n      </xs:annotation>\n    </xs:attribute>\n    <xs:attribute name=\"size\" type=\"xs:integer\">\n      <xs:annotation>\n        <xs:documentation>Database parameter size.</xs:documentation>\n      </xs:annotation>\n    </xs:attribute>\n  </xs:complexType>\n  <xs:complexType name=\"Debugger\">\n    <xs:complexContent>\n      <xs:extension base=\"Target\">\n        <xs:choice minOccurs=\"0\" maxOccurs=\"unbounded\">\n          <xs:element name=\"name\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:string\" />\n          <xs:element name=\"layout\" minOccurs=\"0\" maxOccurs=\"1\" type=\"Layout\" />\n          <xs:element name=\"header\" minOccurs=\"0\" maxOccurs=\"1\" type=\"Layout\" />\n          <xs:element name=\"footer\" minOccurs=\"0\" maxOccurs=\"1\" type=\"Layout\" />\n          <xs:element name=\"optimizeBufferReuse\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:boolean\" />\n        </xs:choice>\n        <xs:attribute name=\"name\" type=\"xs:string\">\n          <xs:annotation>\n            <xs:documentation>Name of the target.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"layout\" type=\"SimpleLayoutAttribute\">\n          <xs:annotation>\n            <xs:documentation>Text to be rendered.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"header\" type=\"SimpleLayoutAttribute\">\n          <xs:annotation>\n            <xs:documentation>Header.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"footer\" type=\"SimpleLayoutAttribute\">\n          <xs:annotation>\n            <xs:documentation>Footer.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"optimizeBufferReuse\" type=\"xs:boolean\">\n          <xs:annotation>\n            <xs:documentation>Target supports reuse of internal buffers, and doesn't have to constantly allocate new buffers Required for legacy NLog-targets, that expects buffers to remain stable after Write-method exit</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n      </xs:extension>\n    </xs:complexContent>\n  </xs:complexType>\n  <xs:complexType name=\"Debug\">\n    <xs:complexContent>\n      <xs:extension base=\"Target\">\n        <xs:choice minOccurs=\"0\" maxOccurs=\"unbounded\">\n          <xs:element name=\"name\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:string\" />\n          <xs:element name=\"layout\" minOccurs=\"0\" maxOccurs=\"1\" type=\"Layout\" />\n          <xs:element name=\"optimizeBufferReuse\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:boolean\" />\n        </xs:choice>\n        <xs:attribute name=\"name\" type=\"xs:string\">\n          <xs:annotation>\n            <xs:documentation>Name of the target.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"layout\" type=\"SimpleLayoutAttribute\">\n          <xs:annotation>\n            <xs:documentation>Layout used to format log messages.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"optimizeBufferReuse\" type=\"xs:boolean\">\n          <xs:annotation>\n            <xs:documentation>Target supports reuse of internal buffers, and doesn't have to constantly allocate new buffers Required for legacy NLog-targets, that expects buffers to remain stable after Write-method exit</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n      </xs:extension>\n    </xs:complexContent>\n  </xs:complexType>\n  <xs:complexType name=\"EventLog\">\n    <xs:complexContent>\n      <xs:extension base=\"Target\">\n        <xs:choice minOccurs=\"0\" maxOccurs=\"unbounded\">\n          <xs:element name=\"name\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:string\" />\n          <xs:element name=\"layout\" minOccurs=\"0\" maxOccurs=\"1\" type=\"Layout\" />\n          <xs:element name=\"category\" minOccurs=\"0\" maxOccurs=\"1\" type=\"Layout\" />\n          <xs:element name=\"entryType\" minOccurs=\"0\" maxOccurs=\"1\" type=\"Layout\" />\n          <xs:element name=\"eventId\" minOccurs=\"0\" maxOccurs=\"1\" type=\"Layout\" />\n          <xs:element name=\"log\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:string\" />\n          <xs:element name=\"machineName\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:string\" />\n          <xs:element name=\"maxKilobytes\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:long\" />\n          <xs:element name=\"maxMessageLength\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:integer\" />\n          <xs:element name=\"source\" minOccurs=\"0\" maxOccurs=\"1\" type=\"Layout\" />\n          <xs:element name=\"onOverflow\" minOccurs=\"0\" maxOccurs=\"1\" type=\"NLog.Targets.EventLogTargetOverflowAction\" />\n          <xs:element name=\"optimizeBufferReuse\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:boolean\" />\n        </xs:choice>\n        <xs:attribute name=\"name\" type=\"xs:string\">\n          <xs:annotation>\n            <xs:documentation>Name of the target.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"layout\" type=\"SimpleLayoutAttribute\">\n          <xs:annotation>\n            <xs:documentation>Layout used to format log messages.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"category\" type=\"SimpleLayoutAttribute\">\n          <xs:annotation>\n            <xs:documentation>Layout that renders event Category.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"entryType\" type=\"SimpleLayoutAttribute\">\n          <xs:annotation>\n            <xs:documentation>Optional entrytype. When not set, or when not convertable to  then determined by </xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"eventId\" type=\"SimpleLayoutAttribute\">\n          <xs:annotation>\n            <xs:documentation>Layout that renders event ID.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"log\" type=\"xs:string\">\n          <xs:annotation>\n            <xs:documentation>Name of the Event Log to write to. This can be System, Application or any user-defined name.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"machineName\" type=\"xs:string\">\n          <xs:annotation>\n            <xs:documentation>Name of the machine on which Event Log service is running.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"maxKilobytes\" type=\"xs:long\">\n          <xs:annotation>\n            <xs:documentation>Maximum Event log size in kilobytes. If null, the value won't be set. Default is 512 Kilobytes as specified by Eventlog API</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"maxMessageLength\" type=\"xs:integer\">\n          <xs:annotation>\n            <xs:documentation>Message length limit to write to the Event Log.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"source\" type=\"SimpleLayoutAttribute\">\n          <xs:annotation>\n            <xs:documentation>Value to be used as the event Source.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"onOverflow\" type=\"NLog.Targets.EventLogTargetOverflowAction\">\n          <xs:annotation>\n            <xs:documentation>Action to take if the message is larger than the  option.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"optimizeBufferReuse\" type=\"xs:boolean\">\n          <xs:annotation>\n            <xs:documentation>Target supports reuse of internal buffers, and doesn't have to constantly allocate new buffers Required for legacy NLog-targets, that expects buffers to remain stable after Write-method exit</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n      </xs:extension>\n    </xs:complexContent>\n  </xs:complexType>\n  <xs:simpleType name=\"NLog.Targets.EventLogTargetOverflowAction\">\n    <xs:restriction base=\"xs:string\">\n      <xs:enumeration value=\"Truncate\" />\n      <xs:enumeration value=\"Split\" />\n      <xs:enumeration value=\"Discard\" />\n    </xs:restriction>\n  </xs:simpleType>\n  <xs:complexType name=\"FallbackGroup\">\n    <xs:complexContent>\n      <xs:extension base=\"CompoundTargetBase\">\n        <xs:choice minOccurs=\"0\" maxOccurs=\"unbounded\">\n          <xs:element name=\"name\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:string\" />\n          <xs:element name=\"returnToFirstOnSuccess\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:boolean\" />\n          <xs:element name=\"optimizeBufferReuse\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:boolean\" />\n        </xs:choice>\n        <xs:attribute name=\"name\" type=\"xs:string\">\n          <xs:annotation>\n            <xs:documentation>Name of the target.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"returnToFirstOnSuccess\" type=\"xs:boolean\">\n          <xs:annotation>\n            <xs:documentation>Indicates whether to return to the first target after any successful write.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"optimizeBufferReuse\" type=\"xs:boolean\">\n          <xs:annotation>\n            <xs:documentation>Target supports reuse of internal buffers, and doesn't have to constantly allocate new buffers Required for legacy NLog-targets, that expects buffers to remain stable after Write-method exit</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n      </xs:extension>\n    </xs:complexContent>\n  </xs:complexType>\n  <xs:complexType name=\"File\">\n    <xs:complexContent>\n      <xs:extension base=\"Target\">\n        <xs:choice minOccurs=\"0\" maxOccurs=\"unbounded\">\n          <xs:element name=\"name\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:string\" />\n          <xs:element name=\"layout\" minOccurs=\"0\" maxOccurs=\"1\" type=\"Layout\" />\n          <xs:element name=\"header\" minOccurs=\"0\" maxOccurs=\"1\" type=\"Layout\" />\n          <xs:element name=\"footer\" minOccurs=\"0\" maxOccurs=\"1\" type=\"Layout\" />\n          <xs:element name=\"encoding\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:string\" />\n          <xs:element name=\"lineEnding\" minOccurs=\"0\" maxOccurs=\"1\" type=\"LineEndingMode\" />\n          <xs:element name=\"enableArchiveFileCompression\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:boolean\" />\n          <xs:element name=\"archiveNumbering\" minOccurs=\"0\" maxOccurs=\"1\" type=\"NLog.Targets.ArchiveNumberingMode\" />\n          <xs:element name=\"archiveFileName\" minOccurs=\"0\" maxOccurs=\"1\" type=\"Layout\" />\n          <xs:element name=\"archiveFileKind\" minOccurs=\"0\" maxOccurs=\"1\" type=\"NLog.Targets.FilePathKind\" />\n          <xs:element name=\"archiveEvery\" minOccurs=\"0\" maxOccurs=\"1\" type=\"NLog.Targets.FileArchivePeriod\" />\n          <xs:element name=\"archiveAboveSize\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:long\" />\n          <xs:element name=\"maxArchiveFiles\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:integer\" />\n          <xs:element name=\"writeFooterOnArchivingOnly\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:boolean\" />\n          <xs:element name=\"maxLogFilenames\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:integer\" />\n          <xs:element name=\"fileNameKind\" minOccurs=\"0\" maxOccurs=\"1\" type=\"NLog.Targets.FilePathKind\" />\n          <xs:element name=\"forceManaged\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:boolean\" />\n          <xs:element name=\"forceMutexConcurrentWrites\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:boolean\" />\n          <xs:element name=\"replaceFileContentsOnEachWrite\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:boolean\" />\n          <xs:element name=\"writeBom\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:boolean\" />\n          <xs:element name=\"enableFileDelete\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:boolean\" />\n          <xs:element name=\"fileName\" minOccurs=\"0\" maxOccurs=\"1\" type=\"Layout\" />\n          <xs:element name=\"archiveDateFormat\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:string\" />\n          <xs:element name=\"archiveOldFileOnStartup\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:boolean\" />\n          <xs:element name=\"cleanupFileName\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:boolean\" />\n          <xs:element name=\"createDirs\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:boolean\" />\n          <xs:element name=\"deleteOldFileOnStartup\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:boolean\" />\n          <xs:element name=\"fileAttributes\" minOccurs=\"0\" maxOccurs=\"1\" type=\"NLog.Targets.Win32FileAttributes\" />\n          <xs:element name=\"optimizeBufferReuse\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:boolean\" />\n          <xs:element name=\"networkWrites\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:boolean\" />\n          <xs:element name=\"openFileCacheTimeout\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:integer\" />\n          <xs:element name=\"openFileCacheSize\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:integer\" />\n          <xs:element name=\"keepFileOpen\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:boolean\" />\n          <xs:element name=\"discardAll\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:boolean\" />\n          <xs:element name=\"concurrentWrites\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:boolean\" />\n          <xs:element name=\"concurrentWriteAttempts\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:integer\" />\n          <xs:element name=\"concurrentWriteAttemptDelay\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:integer\" />\n          <xs:element name=\"bufferSize\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:integer\" />\n          <xs:element name=\"openFileFlushTimeout\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:integer\" />\n          <xs:element name=\"autoFlush\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:boolean\" />\n        </xs:choice>\n        <xs:attribute name=\"name\" type=\"xs:string\">\n          <xs:annotation>\n            <xs:documentation>Name of the target.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"layout\" type=\"SimpleLayoutAttribute\">\n          <xs:annotation>\n            <xs:documentation>Text to be rendered.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"header\" type=\"SimpleLayoutAttribute\">\n          <xs:annotation>\n            <xs:documentation>Header.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"footer\" type=\"SimpleLayoutAttribute\">\n          <xs:annotation>\n            <xs:documentation>Footer.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"encoding\" type=\"xs:string\">\n          <xs:annotation>\n            <xs:documentation>File encoding.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"lineEnding\" type=\"LineEndingMode\">\n          <xs:annotation>\n            <xs:documentation>Line ending mode.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"enableArchiveFileCompression\" type=\"xs:boolean\">\n          <xs:annotation>\n            <xs:documentation>Indicates whether to compress archive files into the zip archive format.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"archiveNumbering\" type=\"NLog.Targets.ArchiveNumberingMode\">\n          <xs:annotation>\n            <xs:documentation>Way file archives are numbered.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"archiveFileName\" type=\"SimpleLayoutAttribute\">\n          <xs:annotation>\n            <xs:documentation>Name of the file to be used for an archive.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"archiveFileKind\" type=\"NLog.Targets.FilePathKind\">\n          <xs:annotation>\n            <xs:documentation>Is the  an absolute or relative path?</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"archiveEvery\" type=\"NLog.Targets.FileArchivePeriod\">\n          <xs:annotation>\n            <xs:documentation>Indicates whether to automatically archive log files every time the specified time passes.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"archiveAboveSize\" type=\"xs:long\">\n          <xs:annotation>\n            <xs:documentation>Size in bytes above which log files will be automatically archived. Warning: combining this with  isn't supported. We cannot create multiple archive files, if they should have the same name. Choose: </xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"maxArchiveFiles\" type=\"xs:integer\">\n          <xs:annotation>\n            <xs:documentation>Maximum number of archive files that should be kept.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"writeFooterOnArchivingOnly\" type=\"xs:boolean\">\n          <xs:annotation>\n            <xs:documentation>Indicates whether the footer should be written only when the file is archived.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"maxLogFilenames\" type=\"xs:integer\">\n          <xs:annotation>\n            <xs:documentation>Maximum number of log filenames that should be stored as existing.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"fileNameKind\" type=\"NLog.Targets.FilePathKind\">\n          <xs:annotation>\n            <xs:documentation>Is the  an absolute or relative path?</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"forceManaged\" type=\"xs:boolean\">\n          <xs:annotation>\n            <xs:documentation>Gets or set a value indicating whether a managed file stream is forced, instead of using the native implementation.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"forceMutexConcurrentWrites\" type=\"xs:boolean\">\n          <xs:annotation>\n            <xs:documentation>Value indicationg whether file creation calls should be synchronized by a system global mutex.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"replaceFileContentsOnEachWrite\" type=\"xs:boolean\">\n          <xs:annotation>\n            <xs:documentation>Indicates whether to replace file contents on each write instead of appending log message at the end.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"writeBom\" type=\"xs:boolean\">\n          <xs:annotation>\n            <xs:documentation>Indicates whether to write BOM (byte order mark) in created files</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"enableFileDelete\" type=\"xs:boolean\">\n          <xs:annotation>\n            <xs:documentation>Indicates whether to enable log file(s) to be deleted.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"fileName\" type=\"SimpleLayoutAttribute\">\n          <xs:annotation>\n            <xs:documentation>Name of the file to write to.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"archiveDateFormat\" type=\"xs:string\">\n          <xs:annotation>\n            <xs:documentation>Value specifying the date format to use when archiving files.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"archiveOldFileOnStartup\" type=\"xs:boolean\">\n          <xs:annotation>\n            <xs:documentation>Indicates whether to archive old log file on startup.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"cleanupFileName\" type=\"xs:boolean\">\n          <xs:annotation>\n            <xs:documentation>Cleanup invalid values in a filename, e.g. slashes in a filename. If set to true, this can impact the performance of massive writes. If set to false, nothing gets written when the filename is wrong.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"createDirs\" type=\"xs:boolean\">\n          <xs:annotation>\n            <xs:documentation>Indicates whether to create directories if they do not exist.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"deleteOldFileOnStartup\" type=\"xs:boolean\">\n          <xs:annotation>\n            <xs:documentation>Indicates whether to delete old log file on startup.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"fileAttributes\" type=\"NLog.Targets.Win32FileAttributes\">\n          <xs:annotation>\n            <xs:documentation>File attributes (Windows only).</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"optimizeBufferReuse\" type=\"xs:boolean\">\n          <xs:annotation>\n            <xs:documentation>Target supports reuse of internal buffers, and doesn't have to constantly allocate new buffers Required for legacy NLog-targets, that expects buffers to remain stable after Write-method exit</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"networkWrites\" type=\"xs:boolean\">\n          <xs:annotation>\n            <xs:documentation>Indicates whether concurrent writes to the log file by multiple processes on different network hosts.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"openFileCacheTimeout\" type=\"xs:integer\">\n          <xs:annotation>\n            <xs:documentation>Maximum number of seconds that files are kept open. If this number is negative the files are not automatically closed after a period of inactivity.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"openFileCacheSize\" type=\"xs:integer\">\n          <xs:annotation>\n            <xs:documentation>Number of files to be kept open. Setting this to a higher value may improve performance in a situation where a single File target is writing to many files (such as splitting by level or by logger).</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"keepFileOpen\" type=\"xs:boolean\">\n          <xs:annotation>\n            <xs:documentation>Indicates whether to keep log file open instead of opening and closing it on each logging event.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"discardAll\" type=\"xs:boolean\">\n          <xs:annotation>\n            <xs:documentation>Whether or not this target should just discard all data that its asked to write. Mostly used for when testing NLog Stack except final write</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"concurrentWrites\" type=\"xs:boolean\">\n          <xs:annotation>\n            <xs:documentation>Indicates whether concurrent writes to the log file by multiple processes on the same host.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"concurrentWriteAttempts\" type=\"xs:integer\">\n          <xs:annotation>\n            <xs:documentation>Number of times the write is appended on the file before NLog discards the log message.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"concurrentWriteAttemptDelay\" type=\"xs:integer\">\n          <xs:annotation>\n            <xs:documentation>Delay in milliseconds to wait before attempting to write to the file again.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"bufferSize\" type=\"xs:integer\">\n          <xs:annotation>\n            <xs:documentation>Log file buffer size in bytes.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"openFileFlushTimeout\" type=\"xs:integer\">\n          <xs:annotation>\n            <xs:documentation>Maximum number of seconds before open files are flushed. If this number is negative or zero the files are not flushed by timer.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"autoFlush\" type=\"xs:boolean\">\n          <xs:annotation>\n            <xs:documentation>Indicates whether to automatically flush the file buffers after each log message.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n      </xs:extension>\n    </xs:complexContent>\n  </xs:complexType>\n  <xs:simpleType name=\"NLog.Targets.ArchiveNumberingMode\">\n    <xs:restriction base=\"xs:string\">\n      <xs:enumeration value=\"Sequence\" />\n      <xs:enumeration value=\"Rolling\" />\n      <xs:enumeration value=\"Date\" />\n      <xs:enumeration value=\"DateAndSequence\" />\n    </xs:restriction>\n  </xs:simpleType>\n  <xs:simpleType name=\"NLog.Targets.FilePathKind\">\n    <xs:restriction base=\"xs:string\">\n      <xs:enumeration value=\"Unknown\" />\n      <xs:enumeration value=\"Relative\" />\n      <xs:enumeration value=\"Absolute\" />\n    </xs:restriction>\n  </xs:simpleType>\n  <xs:simpleType name=\"NLog.Targets.FileArchivePeriod\">\n    <xs:restriction base=\"xs:string\">\n      <xs:enumeration value=\"None\" />\n      <xs:enumeration value=\"Year\" />\n      <xs:enumeration value=\"Month\" />\n      <xs:enumeration value=\"Day\" />\n      <xs:enumeration value=\"Hour\" />\n      <xs:enumeration value=\"Minute\" />\n      <xs:enumeration value=\"Sunday\" />\n      <xs:enumeration value=\"Monday\" />\n      <xs:enumeration value=\"Tuesday\" />\n      <xs:enumeration value=\"Wednesday\" />\n      <xs:enumeration value=\"Thursday\" />\n      <xs:enumeration value=\"Friday\" />\n      <xs:enumeration value=\"Saturday\" />\n    </xs:restriction>\n  </xs:simpleType>\n  <xs:simpleType name=\"NLog.Targets.Win32FileAttributes\">\n    <xs:restriction base=\"xs:string\">\n      <xs:enumeration value=\"ReadOnly\" />\n      <xs:enumeration value=\"Hidden\" />\n      <xs:enumeration value=\"System\" />\n      <xs:enumeration value=\"Archive\" />\n      <xs:enumeration value=\"Device\" />\n      <xs:enumeration value=\"Normal\" />\n      <xs:enumeration value=\"Temporary\" />\n      <xs:enumeration value=\"SparseFile\" />\n      <xs:enumeration value=\"ReparsePoint\" />\n      <xs:enumeration value=\"Compressed\" />\n      <xs:enumeration value=\"NotContentIndexed\" />\n      <xs:enumeration value=\"Encrypted\" />\n      <xs:enumeration value=\"WriteThrough\" />\n      <xs:enumeration value=\"NoBuffering\" />\n      <xs:enumeration value=\"DeleteOnClose\" />\n      <xs:enumeration value=\"PosixSemantics\" />\n    </xs:restriction>\n  </xs:simpleType>\n  <xs:complexType name=\"FilteringWrapper\">\n    <xs:complexContent>\n      <xs:extension base=\"WrapperTargetBase\">\n        <xs:choice minOccurs=\"0\" maxOccurs=\"unbounded\">\n          <xs:element name=\"name\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:string\" />\n          <xs:element name=\"condition\" minOccurs=\"0\" maxOccurs=\"1\" type=\"Condition\" />\n          <xs:element name=\"optimizeBufferReuse\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:boolean\" />\n        </xs:choice>\n        <xs:attribute name=\"name\" type=\"xs:string\">\n          <xs:annotation>\n            <xs:documentation>Name of the target.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"condition\" type=\"Condition\">\n          <xs:annotation>\n            <xs:documentation>Condition expression. Log events who meet this condition will be forwarded to the wrapped target.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"optimizeBufferReuse\" type=\"xs:boolean\">\n          <xs:annotation>\n            <xs:documentation>Target supports reuse of internal buffers, and doesn't have to constantly allocate new buffers Required for legacy NLog-targets, that expects buffers to remain stable after Write-method exit</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n      </xs:extension>\n    </xs:complexContent>\n  </xs:complexType>\n  <xs:complexType name=\"ImpersonatingWrapper\">\n    <xs:complexContent>\n      <xs:extension base=\"WrapperTargetBase\">\n        <xs:choice minOccurs=\"0\" maxOccurs=\"unbounded\">\n          <xs:element name=\"name\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:string\" />\n          <xs:element name=\"domain\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:string\" />\n          <xs:element name=\"impersonationLevel\" minOccurs=\"0\" maxOccurs=\"1\" type=\"NLog.Targets.Wrappers.SecurityImpersonationLevel\" />\n          <xs:element name=\"logOnProvider\" minOccurs=\"0\" maxOccurs=\"1\" type=\"NLog.Targets.Wrappers.LogOnProviderType\" />\n          <xs:element name=\"logOnType\" minOccurs=\"0\" maxOccurs=\"1\" type=\"NLog.Targets.Wrappers.SecurityLogOnType\" />\n          <xs:element name=\"password\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:string\" />\n          <xs:element name=\"revertToSelf\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:boolean\" />\n          <xs:element name=\"userName\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:string\" />\n          <xs:element name=\"optimizeBufferReuse\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:boolean\" />\n        </xs:choice>\n        <xs:attribute name=\"name\" type=\"xs:string\">\n          <xs:annotation>\n            <xs:documentation>Name of the target.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"domain\" type=\"xs:string\">\n          <xs:annotation>\n            <xs:documentation>Windows domain name to change context to.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"impersonationLevel\" type=\"NLog.Targets.Wrappers.SecurityImpersonationLevel\">\n          <xs:annotation>\n            <xs:documentation>Required impersonation level.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"logOnProvider\" type=\"NLog.Targets.Wrappers.LogOnProviderType\">\n          <xs:annotation>\n            <xs:documentation>Type of the logon provider.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"logOnType\" type=\"NLog.Targets.Wrappers.SecurityLogOnType\">\n          <xs:annotation>\n            <xs:documentation>Logon Type.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"password\" type=\"xs:string\">\n          <xs:annotation>\n            <xs:documentation>User account password.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"revertToSelf\" type=\"xs:boolean\">\n          <xs:annotation>\n            <xs:documentation>Indicates whether to revert to the credentials of the process instead of impersonating another user.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"userName\" type=\"xs:string\">\n          <xs:annotation>\n            <xs:documentation>Username to change context to.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"optimizeBufferReuse\" type=\"xs:boolean\">\n          <xs:annotation>\n            <xs:documentation>Target supports reuse of internal buffers, and doesn't have to constantly allocate new buffers Required for legacy NLog-targets, that expects buffers to remain stable after Write-method exit</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n      </xs:extension>\n    </xs:complexContent>\n  </xs:complexType>\n  <xs:simpleType name=\"NLog.Targets.Wrappers.SecurityImpersonationLevel\">\n    <xs:restriction base=\"xs:string\">\n      <xs:enumeration value=\"Anonymous\" />\n      <xs:enumeration value=\"Identification\" />\n      <xs:enumeration value=\"Impersonation\" />\n      <xs:enumeration value=\"Delegation\" />\n    </xs:restriction>\n  </xs:simpleType>\n  <xs:simpleType name=\"NLog.Targets.Wrappers.LogOnProviderType\">\n    <xs:restriction base=\"xs:string\">\n      <xs:enumeration value=\"Default\" />\n    </xs:restriction>\n  </xs:simpleType>\n  <xs:simpleType name=\"NLog.Targets.Wrappers.SecurityLogOnType\">\n    <xs:restriction base=\"xs:string\">\n      <xs:enumeration value=\"Interactive\" />\n      <xs:enumeration value=\"Network\" />\n      <xs:enumeration value=\"Batch\" />\n      <xs:enumeration value=\"Service\" />\n      <xs:enumeration value=\"NetworkClearText\" />\n      <xs:enumeration value=\"NewCredentials\" />\n    </xs:restriction>\n  </xs:simpleType>\n  <xs:complexType name=\"LimitingWrapper\">\n    <xs:complexContent>\n      <xs:extension base=\"WrapperTargetBase\">\n        <xs:choice minOccurs=\"0\" maxOccurs=\"unbounded\">\n          <xs:element name=\"interval\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:string\" />\n          <xs:element name=\"messageLimit\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:integer\" />\n          <xs:element name=\"name\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:string\" />\n          <xs:element name=\"optimizeBufferReuse\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:boolean\" />\n        </xs:choice>\n        <xs:attribute name=\"interval\" type=\"xs:string\">\n          <xs:annotation>\n            <xs:documentation>Interval in which messages will be written up to the  number of messages.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"messageLimit\" type=\"xs:integer\">\n          <xs:annotation>\n            <xs:documentation>Maximum allowed number of messages written per .</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"name\" type=\"xs:string\">\n          <xs:annotation>\n            <xs:documentation>Name of the target.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"optimizeBufferReuse\" type=\"xs:boolean\">\n          <xs:annotation>\n            <xs:documentation>Target supports reuse of internal buffers, and doesn't have to constantly allocate new buffers Required for legacy NLog-targets, that expects buffers to remain stable after Write-method exit</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n      </xs:extension>\n    </xs:complexContent>\n  </xs:complexType>\n  <xs:complexType name=\"LogReceiverService\">\n    <xs:complexContent>\n      <xs:extension base=\"Target\">\n        <xs:choice minOccurs=\"0\" maxOccurs=\"unbounded\">\n          <xs:element name=\"name\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:string\" />\n          <xs:element name=\"endpointAddress\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:string\" />\n          <xs:element name=\"endpointConfigurationName\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:string\" />\n          <xs:element name=\"useOneWayContract\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:boolean\" />\n          <xs:element name=\"clientId\" minOccurs=\"0\" maxOccurs=\"1\" type=\"Layout\" />\n          <xs:element name=\"includeEventProperties\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:boolean\" />\n          <xs:element name=\"parameter\" minOccurs=\"0\" maxOccurs=\"unbounded\" type=\"NLog.Targets.MethodCallParameter\" />\n          <xs:element name=\"useBinaryEncoding\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:boolean\" />\n          <xs:element name=\"optimizeBufferReuse\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:boolean\" />\n        </xs:choice>\n        <xs:attribute name=\"name\" type=\"xs:string\">\n          <xs:annotation>\n            <xs:documentation>Name of the target.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"endpointAddress\" type=\"xs:string\">\n          <xs:annotation>\n            <xs:documentation>Endpoint address.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"endpointConfigurationName\" type=\"xs:string\">\n          <xs:annotation>\n            <xs:documentation>Name of the endpoint configuration in WCF configuration file.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"useOneWayContract\" type=\"xs:boolean\">\n          <xs:annotation>\n            <xs:documentation>Indicates whether to use a WCF service contract that is one way (fire and forget) or two way (request-reply)</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"clientId\" type=\"SimpleLayoutAttribute\">\n          <xs:annotation>\n            <xs:documentation>Client ID.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"includeEventProperties\" type=\"xs:boolean\">\n          <xs:annotation>\n            <xs:documentation>Indicates whether to include per-event properties in the payload sent to the server.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"useBinaryEncoding\" type=\"xs:boolean\">\n          <xs:annotation>\n            <xs:documentation>Indicates whether to use binary message encoding.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"optimizeBufferReuse\" type=\"xs:boolean\">\n          <xs:annotation>\n            <xs:documentation>Target supports reuse of internal buffers, and doesn't have to constantly allocate new buffers Required for legacy NLog-targets, that expects buffers to remain stable after Write-method exit</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n      </xs:extension>\n    </xs:complexContent>\n  </xs:complexType>\n  <xs:complexType name=\"NLog.Targets.MethodCallParameter\">\n    <xs:choice minOccurs=\"0\" maxOccurs=\"unbounded\">\n      <xs:element name=\"layout\" minOccurs=\"0\" maxOccurs=\"1\" type=\"Layout\" />\n      <xs:element name=\"name\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:string\" />\n      <xs:element name=\"parameterType\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:string\" />\n      <xs:element name=\"type\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:string\" />\n    </xs:choice>\n    <xs:attribute name=\"layout\" type=\"SimpleLayoutAttribute\">\n      <xs:annotation>\n        <xs:documentation>Layout that should be use to calculate the value for the parameter.</xs:documentation>\n      </xs:annotation>\n    </xs:attribute>\n    <xs:attribute name=\"name\" type=\"xs:string\">\n      <xs:annotation>\n        <xs:documentation>Name of the parameter.</xs:documentation>\n      </xs:annotation>\n    </xs:attribute>\n    <xs:attribute name=\"parameterType\" type=\"xs:string\">\n      <xs:annotation>\n        <xs:documentation>Type of the parameter.</xs:documentation>\n      </xs:annotation>\n    </xs:attribute>\n    <xs:attribute name=\"type\" type=\"xs:string\">\n      <xs:annotation>\n        <xs:documentation>Type of the parameter. Obsolete alias for </xs:documentation>\n      </xs:annotation>\n    </xs:attribute>\n  </xs:complexType>\n  <xs:complexType name=\"Mail\">\n    <xs:complexContent>\n      <xs:extension base=\"Target\">\n        <xs:choice minOccurs=\"0\" maxOccurs=\"unbounded\">\n          <xs:element name=\"name\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:string\" />\n          <xs:element name=\"layout\" minOccurs=\"0\" maxOccurs=\"1\" type=\"Layout\" />\n          <xs:element name=\"header\" minOccurs=\"0\" maxOccurs=\"1\" type=\"Layout\" />\n          <xs:element name=\"footer\" minOccurs=\"0\" maxOccurs=\"1\" type=\"Layout\" />\n          <xs:element name=\"replaceNewlineWithBrTagInHtml\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:boolean\" />\n          <xs:element name=\"priority\" minOccurs=\"0\" maxOccurs=\"1\" type=\"Layout\" />\n          <xs:element name=\"encoding\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:string\" />\n          <xs:element name=\"bcc\" minOccurs=\"0\" maxOccurs=\"1\" type=\"Layout\" />\n          <xs:element name=\"cc\" minOccurs=\"0\" maxOccurs=\"1\" type=\"Layout\" />\n          <xs:element name=\"addNewLines\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:boolean\" />\n          <xs:element name=\"html\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:boolean\" />\n          <xs:element name=\"from\" minOccurs=\"0\" maxOccurs=\"1\" type=\"Layout\" />\n          <xs:element name=\"body\" minOccurs=\"0\" maxOccurs=\"1\" type=\"Layout\" />\n          <xs:element name=\"subject\" minOccurs=\"0\" maxOccurs=\"1\" type=\"Layout\" />\n          <xs:element name=\"to\" minOccurs=\"0\" maxOccurs=\"1\" type=\"Layout\" />\n          <xs:element name=\"optimizeBufferReuse\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:boolean\" />\n          <xs:element name=\"timeout\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:integer\" />\n          <xs:element name=\"smtpServer\" minOccurs=\"0\" maxOccurs=\"1\" type=\"Layout\" />\n          <xs:element name=\"smtpAuthentication\" minOccurs=\"0\" maxOccurs=\"1\" type=\"NLog.Targets.SmtpAuthenticationMode\" />\n          <xs:element name=\"smtpUserName\" minOccurs=\"0\" maxOccurs=\"1\" type=\"Layout\" />\n          <xs:element name=\"smtpPassword\" minOccurs=\"0\" maxOccurs=\"1\" type=\"Layout\" />\n          <xs:element name=\"enableSsl\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:boolean\" />\n          <xs:element name=\"smtpPort\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:integer\" />\n          <xs:element name=\"useSystemNetMailSettings\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:boolean\" />\n          <xs:element name=\"pickupDirectoryLocation\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:string\" />\n          <xs:element name=\"deliveryMethod\" minOccurs=\"0\" maxOccurs=\"1\" type=\"System.Net.Mail.SmtpDeliveryMethod\" />\n        </xs:choice>\n        <xs:attribute name=\"name\" type=\"xs:string\">\n          <xs:annotation>\n            <xs:documentation>Name of the target.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"layout\" type=\"SimpleLayoutAttribute\">\n          <xs:annotation>\n            <xs:documentation>Text to be rendered.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"header\" type=\"SimpleLayoutAttribute\">\n          <xs:annotation>\n            <xs:documentation>Header.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"footer\" type=\"SimpleLayoutAttribute\">\n          <xs:annotation>\n            <xs:documentation>Footer.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"replaceNewlineWithBrTagInHtml\" type=\"xs:boolean\">\n          <xs:annotation>\n            <xs:documentation>Indicates whether NewLine characters in the body should be replaced with  tags.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"priority\" type=\"SimpleLayoutAttribute\">\n          <xs:annotation>\n            <xs:documentation>Priority used for sending mails.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"encoding\" type=\"xs:string\">\n          <xs:annotation>\n            <xs:documentation>Encoding to be used for sending e-mail.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"bcc\" type=\"SimpleLayoutAttribute\">\n          <xs:annotation>\n            <xs:documentation>BCC email addresses separated by semicolons (e.g. john@domain.com;jane@domain.com).</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"cc\" type=\"SimpleLayoutAttribute\">\n          <xs:annotation>\n            <xs:documentation>CC email addresses separated by semicolons (e.g. john@domain.com;jane@domain.com).</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"addNewLines\" type=\"xs:boolean\">\n          <xs:annotation>\n            <xs:documentation>Indicates whether to add new lines between log entries.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"html\" type=\"xs:boolean\">\n          <xs:annotation>\n            <xs:documentation>Indicates whether to send message as HTML instead of plain text.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"from\" type=\"SimpleLayoutAttribute\">\n          <xs:annotation>\n            <xs:documentation>Sender's email address (e.g. joe@domain.com).</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"body\" type=\"SimpleLayoutAttribute\">\n          <xs:annotation>\n            <xs:documentation>Mail message body (repeated for each log message send in one mail).</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"subject\" type=\"SimpleLayoutAttribute\">\n          <xs:annotation>\n            <xs:documentation>Mail subject.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"to\" type=\"SimpleLayoutAttribute\">\n          <xs:annotation>\n            <xs:documentation>Recipients' email addresses separated by semicolons (e.g. john@domain.com;jane@domain.com).</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"optimizeBufferReuse\" type=\"xs:boolean\">\n          <xs:annotation>\n            <xs:documentation>Target supports reuse of internal buffers, and doesn't have to constantly allocate new buffers Required for legacy NLog-targets, that expects buffers to remain stable after Write-method exit</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"timeout\" type=\"xs:integer\">\n          <xs:annotation>\n            <xs:documentation>Indicates the SMTP client timeout.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"smtpServer\" type=\"SimpleLayoutAttribute\">\n          <xs:annotation>\n            <xs:documentation>SMTP Server to be used for sending.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"smtpAuthentication\" type=\"NLog.Targets.SmtpAuthenticationMode\">\n          <xs:annotation>\n            <xs:documentation>SMTP Authentication mode.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"smtpUserName\" type=\"SimpleLayoutAttribute\">\n          <xs:annotation>\n            <xs:documentation>Username used to connect to SMTP server (used when SmtpAuthentication is set to \"basic\").</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"smtpPassword\" type=\"SimpleLayoutAttribute\">\n          <xs:annotation>\n            <xs:documentation>Password used to authenticate against SMTP server (used when SmtpAuthentication is set to \"basic\").</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"enableSsl\" type=\"xs:boolean\">\n          <xs:annotation>\n            <xs:documentation>Indicates whether SSL (secure sockets layer) should be used when communicating with SMTP server.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"smtpPort\" type=\"xs:integer\">\n          <xs:annotation>\n            <xs:documentation>Port number that SMTP Server is listening on.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"useSystemNetMailSettings\" type=\"xs:boolean\">\n          <xs:annotation>\n            <xs:documentation>Indicates whether the default Settings from System.Net.MailSettings should be used.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"pickupDirectoryLocation\" type=\"xs:string\">\n          <xs:annotation>\n            <xs:documentation>Folder where applications save mail messages to be processed by the local SMTP server.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"deliveryMethod\" type=\"System.Net.Mail.SmtpDeliveryMethod\">\n          <xs:annotation>\n            <xs:documentation>Specifies how outgoing email messages will be handled.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n      </xs:extension>\n    </xs:complexContent>\n  </xs:complexType>\n  <xs:simpleType name=\"NLog.Targets.SmtpAuthenticationMode\">\n    <xs:restriction base=\"xs:string\">\n      <xs:enumeration value=\"None\" />\n      <xs:enumeration value=\"Basic\" />\n      <xs:enumeration value=\"Ntlm\" />\n    </xs:restriction>\n  </xs:simpleType>\n  <xs:simpleType name=\"System.Net.Mail.SmtpDeliveryMethod\">\n    <xs:restriction base=\"xs:string\">\n      <xs:enumeration value=\"Network\" />\n      <xs:enumeration value=\"SpecifiedPickupDirectory\" />\n      <xs:enumeration value=\"PickupDirectoryFromIis\" />\n    </xs:restriction>\n  </xs:simpleType>\n  <xs:complexType name=\"Memory\">\n    <xs:complexContent>\n      <xs:extension base=\"Target\">\n        <xs:choice minOccurs=\"0\" maxOccurs=\"unbounded\">\n          <xs:element name=\"name\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:string\" />\n          <xs:element name=\"layout\" minOccurs=\"0\" maxOccurs=\"1\" type=\"Layout\" />\n          <xs:element name=\"optimizeBufferReuse\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:boolean\" />\n        </xs:choice>\n        <xs:attribute name=\"name\" type=\"xs:string\">\n          <xs:annotation>\n            <xs:documentation>Name of the target.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"layout\" type=\"SimpleLayoutAttribute\">\n          <xs:annotation>\n            <xs:documentation>Layout used to format log messages.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"optimizeBufferReuse\" type=\"xs:boolean\">\n          <xs:annotation>\n            <xs:documentation>Target supports reuse of internal buffers, and doesn't have to constantly allocate new buffers Required for legacy NLog-targets, that expects buffers to remain stable after Write-method exit</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n      </xs:extension>\n    </xs:complexContent>\n  </xs:complexType>\n  <xs:complexType name=\"MethodCall\">\n    <xs:complexContent>\n      <xs:extension base=\"Target\">\n        <xs:choice minOccurs=\"0\" maxOccurs=\"unbounded\">\n          <xs:element name=\"name\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:string\" />\n          <xs:element name=\"className\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:string\" />\n          <xs:element name=\"methodName\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:string\" />\n          <xs:element name=\"parameter\" minOccurs=\"0\" maxOccurs=\"unbounded\" type=\"NLog.Targets.MethodCallParameter\" />\n          <xs:element name=\"optimizeBufferReuse\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:boolean\" />\n        </xs:choice>\n        <xs:attribute name=\"name\" type=\"xs:string\">\n          <xs:annotation>\n            <xs:documentation>Name of the target.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"className\" type=\"xs:string\">\n          <xs:annotation>\n            <xs:documentation>Class name.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"methodName\" type=\"xs:string\">\n          <xs:annotation>\n            <xs:documentation>Method name. The method must be public and static. Use the AssemblyQualifiedName , https://msdn.microsoft.com/en-us/library/system.type.assemblyqualifiedname(v=vs.110).aspx e.g.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"optimizeBufferReuse\" type=\"xs:boolean\">\n          <xs:annotation>\n            <xs:documentation>Target supports reuse of internal buffers, and doesn't have to constantly allocate new buffers Required for legacy NLog-targets, that expects buffers to remain stable after Write-method exit</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n      </xs:extension>\n    </xs:complexContent>\n  </xs:complexType>\n  <xs:complexType name=\"Network\">\n    <xs:complexContent>\n      <xs:extension base=\"Target\">\n        <xs:choice minOccurs=\"0\" maxOccurs=\"unbounded\">\n          <xs:element name=\"name\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:string\" />\n          <xs:element name=\"layout\" minOccurs=\"0\" maxOccurs=\"1\" type=\"Layout\" />\n          <xs:element name=\"encoding\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:string\" />\n          <xs:element name=\"lineEnding\" minOccurs=\"0\" maxOccurs=\"1\" type=\"LineEndingMode\" />\n          <xs:element name=\"maxMessageSize\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:integer\" />\n          <xs:element name=\"newLine\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:boolean\" />\n          <xs:element name=\"address\" minOccurs=\"0\" maxOccurs=\"1\" type=\"Layout\" />\n          <xs:element name=\"connectionCacheSize\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:integer\" />\n          <xs:element name=\"keepConnection\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:boolean\" />\n          <xs:element name=\"maxConnections\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:integer\" />\n          <xs:element name=\"maxQueueSize\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:integer\" />\n          <xs:element name=\"onConnectionOverflow\" minOccurs=\"0\" maxOccurs=\"1\" type=\"NLog.Targets.NetworkTargetConnectionsOverflowAction\" />\n          <xs:element name=\"onOverflow\" minOccurs=\"0\" maxOccurs=\"1\" type=\"NLog.Targets.NetworkTargetOverflowAction\" />\n          <xs:element name=\"optimizeBufferReuse\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:boolean\" />\n        </xs:choice>\n        <xs:attribute name=\"name\" type=\"xs:string\">\n          <xs:annotation>\n            <xs:documentation>Name of the target.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"layout\" type=\"SimpleLayoutAttribute\">\n          <xs:annotation>\n            <xs:documentation>Layout used to format log messages.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"encoding\" type=\"xs:string\">\n          <xs:annotation>\n            <xs:documentation>Encoding to be used.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"lineEnding\" type=\"LineEndingMode\">\n          <xs:annotation>\n            <xs:documentation>End of line value if a newline is appended at the end of log message .</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"maxMessageSize\" type=\"xs:integer\">\n          <xs:annotation>\n            <xs:documentation>Maximum message size in bytes.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"newLine\" type=\"xs:boolean\">\n          <xs:annotation>\n            <xs:documentation>Indicates whether to append newline at the end of log message.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"address\" type=\"SimpleLayoutAttribute\">\n          <xs:annotation>\n            <xs:documentation>Network address.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"connectionCacheSize\" type=\"xs:integer\">\n          <xs:annotation>\n            <xs:documentation>Size of the connection cache (number of connections which are kept alive).</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"keepConnection\" type=\"xs:boolean\">\n          <xs:annotation>\n            <xs:documentation>Indicates whether to keep connection open whenever possible.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"maxConnections\" type=\"xs:integer\">\n          <xs:annotation>\n            <xs:documentation>Maximum current connections. 0 = no maximum.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"maxQueueSize\" type=\"xs:integer\">\n          <xs:annotation>\n            <xs:documentation>Maximum queue size.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"onConnectionOverflow\" type=\"NLog.Targets.NetworkTargetConnectionsOverflowAction\">\n          <xs:annotation>\n            <xs:documentation>Action that should be taken if the will be more connections than .</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"onOverflow\" type=\"NLog.Targets.NetworkTargetOverflowAction\">\n          <xs:annotation>\n            <xs:documentation>Action that should be taken if the message is larger than maxMessageSize.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"optimizeBufferReuse\" type=\"xs:boolean\">\n          <xs:annotation>\n            <xs:documentation>Target supports reuse of internal buffers, and doesn't have to constantly allocate new buffers Required for legacy NLog-targets, that expects buffers to remain stable after Write-method exit</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n      </xs:extension>\n    </xs:complexContent>\n  </xs:complexType>\n  <xs:complexType name=\"NLogViewer\">\n    <xs:complexContent>\n      <xs:extension base=\"Target\">\n        <xs:choice minOccurs=\"0\" maxOccurs=\"unbounded\">\n          <xs:element name=\"name\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:string\" />\n          <xs:element name=\"encoding\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:string\" />\n          <xs:element name=\"layout\" minOccurs=\"0\" maxOccurs=\"1\" type=\"Layout\" />\n          <xs:element name=\"lineEnding\" minOccurs=\"0\" maxOccurs=\"1\" type=\"LineEndingMode\" />\n          <xs:element name=\"maxMessageSize\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:integer\" />\n          <xs:element name=\"newLine\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:boolean\" />\n          <xs:element name=\"onConnectionOverflow\" minOccurs=\"0\" maxOccurs=\"1\" type=\"NLog.Targets.NetworkTargetConnectionsOverflowAction\" />\n          <xs:element name=\"maxQueueSize\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:integer\" />\n          <xs:element name=\"maxConnections\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:integer\" />\n          <xs:element name=\"keepConnection\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:boolean\" />\n          <xs:element name=\"connectionCacheSize\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:integer\" />\n          <xs:element name=\"address\" minOccurs=\"0\" maxOccurs=\"1\" type=\"Layout\" />\n          <xs:element name=\"onOverflow\" minOccurs=\"0\" maxOccurs=\"1\" type=\"NLog.Targets.NetworkTargetOverflowAction\" />\n          <xs:element name=\"parameter\" minOccurs=\"0\" maxOccurs=\"unbounded\" type=\"NLog.Targets.NLogViewerParameterInfo\" />\n          <xs:element name=\"ndlcItemSeparator\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:string\" />\n          <xs:element name=\"ndcItemSeparator\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:string\" />\n          <xs:element name=\"includeNLogData\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:boolean\" />\n          <xs:element name=\"includeSourceInfo\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:boolean\" />\n          <xs:element name=\"includeNdlc\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:boolean\" />\n          <xs:element name=\"includeNdc\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:boolean\" />\n          <xs:element name=\"includeMdlc\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:boolean\" />\n          <xs:element name=\"includeMdc\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:boolean\" />\n          <xs:element name=\"includeCallSite\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:boolean\" />\n          <xs:element name=\"includeAllProperties\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:boolean\" />\n          <xs:element name=\"appInfo\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:string\" />\n          <xs:element name=\"loggerName\" minOccurs=\"0\" maxOccurs=\"1\" type=\"Layout\" />\n          <xs:element name=\"optimizeBufferReuse\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:boolean\" />\n        </xs:choice>\n        <xs:attribute name=\"name\" type=\"xs:string\">\n          <xs:annotation>\n            <xs:documentation>Name of the target.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"encoding\" type=\"xs:string\">\n          <xs:annotation>\n            <xs:documentation>Encoding to be used.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"layout\" type=\"SimpleLayoutAttribute\">\n          <xs:annotation>\n            <xs:documentation>Instance of  that is used to format log messages.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"lineEnding\" type=\"LineEndingMode\">\n          <xs:annotation>\n            <xs:documentation>End of line value if a newline is appended at the end of log message .</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"maxMessageSize\" type=\"xs:integer\">\n          <xs:annotation>\n            <xs:documentation>Maximum message size in bytes.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"newLine\" type=\"xs:boolean\">\n          <xs:annotation>\n            <xs:documentation>Indicates whether to append newline at the end of log message.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"onConnectionOverflow\" type=\"NLog.Targets.NetworkTargetConnectionsOverflowAction\">\n          <xs:annotation>\n            <xs:documentation>Action that should be taken if the will be more connections than .</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"maxQueueSize\" type=\"xs:integer\">\n          <xs:annotation>\n            <xs:documentation>Maximum queue size.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"maxConnections\" type=\"xs:integer\">\n          <xs:annotation>\n            <xs:documentation>Maximum current connections. 0 = no maximum.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"keepConnection\" type=\"xs:boolean\">\n          <xs:annotation>\n            <xs:documentation>Indicates whether to keep connection open whenever possible.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"connectionCacheSize\" type=\"xs:integer\">\n          <xs:annotation>\n            <xs:documentation>Size of the connection cache (number of connections which are kept alive).</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"address\" type=\"SimpleLayoutAttribute\">\n          <xs:annotation>\n            <xs:documentation>Network address.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"onOverflow\" type=\"NLog.Targets.NetworkTargetOverflowAction\">\n          <xs:annotation>\n            <xs:documentation>Action that should be taken if the message is larger than maxMessageSize.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"ndlcItemSeparator\" type=\"xs:string\">\n          <xs:annotation>\n            <xs:documentation>NDLC item separator.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"ndcItemSeparator\" type=\"xs:string\">\n          <xs:annotation>\n            <xs:documentation>NDC item separator.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"includeNLogData\" type=\"xs:boolean\">\n          <xs:annotation>\n            <xs:documentation>Indicates whether to include NLog-specific extensions to log4j schema.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"includeSourceInfo\" type=\"xs:boolean\">\n          <xs:annotation>\n            <xs:documentation>Indicates whether to include source info (file name and line number) in the information sent over the network.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"includeNdlc\" type=\"xs:boolean\">\n          <xs:annotation>\n            <xs:documentation>Indicates whether to include contents of the  stack.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"includeNdc\" type=\"xs:boolean\">\n          <xs:annotation>\n            <xs:documentation>Indicates whether to include  stack contents.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"includeMdlc\" type=\"xs:boolean\">\n          <xs:annotation>\n            <xs:documentation>Indicates whether to include  dictionary contents.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"includeMdc\" type=\"xs:boolean\">\n          <xs:annotation>\n            <xs:documentation>Indicates whether to include  dictionary contents.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"includeCallSite\" type=\"xs:boolean\">\n          <xs:annotation>\n            <xs:documentation>Indicates whether to include call site (class and method name) in the information sent over the network.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"includeAllProperties\" type=\"xs:boolean\">\n          <xs:annotation>\n            <xs:documentation>Option to include all properties from the log events</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"appInfo\" type=\"xs:string\">\n          <xs:annotation>\n            <xs:documentation>AppInfo field. By default it's the friendly name of the current AppDomain.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"loggerName\" type=\"SimpleLayoutAttribute\">\n          <xs:annotation>\n            <xs:documentation>Renderer for log4j:event logger-xml-attribute (Default ${logger})</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"optimizeBufferReuse\" type=\"xs:boolean\">\n          <xs:annotation>\n            <xs:documentation>Target supports reuse of internal buffers, and doesn't have to constantly allocate new buffers Required for legacy NLog-targets, that expects buffers to remain stable after Write-method exit</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n      </xs:extension>\n    </xs:complexContent>\n  </xs:complexType>\n  <xs:complexType name=\"Null\">\n    <xs:complexContent>\n      <xs:extension base=\"Target\">\n        <xs:choice minOccurs=\"0\" maxOccurs=\"unbounded\">\n          <xs:element name=\"name\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:string\" />\n          <xs:element name=\"layout\" minOccurs=\"0\" maxOccurs=\"1\" type=\"Layout\" />\n          <xs:element name=\"formatMessage\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:boolean\" />\n          <xs:element name=\"optimizeBufferReuse\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:boolean\" />\n        </xs:choice>\n        <xs:attribute name=\"name\" type=\"xs:string\">\n          <xs:annotation>\n            <xs:documentation>Name of the target.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"layout\" type=\"SimpleLayoutAttribute\">\n          <xs:annotation>\n            <xs:documentation>Layout used to format log messages.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"formatMessage\" type=\"xs:boolean\">\n          <xs:annotation>\n            <xs:documentation>Indicates whether to perform layout calculation.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"optimizeBufferReuse\" type=\"xs:boolean\">\n          <xs:annotation>\n            <xs:documentation>Target supports reuse of internal buffers, and doesn't have to constantly allocate new buffers Required for legacy NLog-targets, that expects buffers to remain stable after Write-method exit</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n      </xs:extension>\n    </xs:complexContent>\n  </xs:complexType>\n  <xs:complexType name=\"OutputDebugString\">\n    <xs:complexContent>\n      <xs:extension base=\"Target\">\n        <xs:choice minOccurs=\"0\" maxOccurs=\"unbounded\">\n          <xs:element name=\"name\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:string\" />\n          <xs:element name=\"layout\" minOccurs=\"0\" maxOccurs=\"1\" type=\"Layout\" />\n          <xs:element name=\"optimizeBufferReuse\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:boolean\" />\n        </xs:choice>\n        <xs:attribute name=\"name\" type=\"xs:string\">\n          <xs:annotation>\n            <xs:documentation>Name of the target.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"layout\" type=\"SimpleLayoutAttribute\">\n          <xs:annotation>\n            <xs:documentation>Layout used to format log messages.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"optimizeBufferReuse\" type=\"xs:boolean\">\n          <xs:annotation>\n            <xs:documentation>Target supports reuse of internal buffers, and doesn't have to constantly allocate new buffers Required for legacy NLog-targets, that expects buffers to remain stable after Write-method exit</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n      </xs:extension>\n    </xs:complexContent>\n  </xs:complexType>\n  <xs:complexType name=\"PerfCounter\">\n    <xs:complexContent>\n      <xs:extension base=\"Target\">\n        <xs:choice minOccurs=\"0\" maxOccurs=\"unbounded\">\n          <xs:element name=\"name\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:string\" />\n          <xs:element name=\"autoCreate\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:boolean\" />\n          <xs:element name=\"categoryName\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:string\" />\n          <xs:element name=\"counterHelp\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:string\" />\n          <xs:element name=\"counterName\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:string\" />\n          <xs:element name=\"counterType\" minOccurs=\"0\" maxOccurs=\"1\" type=\"System.Diagnostics.PerformanceCounterType\" />\n          <xs:element name=\"incrementValue\" minOccurs=\"0\" maxOccurs=\"1\" type=\"Layout\" />\n          <xs:element name=\"instanceName\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:string\" />\n          <xs:element name=\"optimizeBufferReuse\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:boolean\" />\n        </xs:choice>\n        <xs:attribute name=\"name\" type=\"xs:string\">\n          <xs:annotation>\n            <xs:documentation>Name of the target.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"autoCreate\" type=\"xs:boolean\">\n          <xs:annotation>\n            <xs:documentation>Indicates whether performance counter should be automatically created.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"categoryName\" type=\"xs:string\">\n          <xs:annotation>\n            <xs:documentation>Name of the performance counter category.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"counterHelp\" type=\"xs:string\">\n          <xs:annotation>\n            <xs:documentation>Counter help text.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"counterName\" type=\"xs:string\">\n          <xs:annotation>\n            <xs:documentation>Name of the performance counter.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"counterType\" type=\"System.Diagnostics.PerformanceCounterType\">\n          <xs:annotation>\n            <xs:documentation>Performance counter type.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"incrementValue\" type=\"SimpleLayoutAttribute\">\n          <xs:annotation>\n            <xs:documentation>The value by which to increment the counter.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"instanceName\" type=\"xs:string\">\n          <xs:annotation>\n            <xs:documentation>Performance counter instance name.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"optimizeBufferReuse\" type=\"xs:boolean\">\n          <xs:annotation>\n            <xs:documentation>Target supports reuse of internal buffers, and doesn't have to constantly allocate new buffers Required for legacy NLog-targets, that expects buffers to remain stable after Write-method exit</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n      </xs:extension>\n    </xs:complexContent>\n  </xs:complexType>\n  <xs:simpleType name=\"System.Diagnostics.PerformanceCounterType\">\n    <xs:restriction base=\"xs:string\">\n      <xs:enumeration value=\"NumberOfItems32\" />\n      <xs:enumeration value=\"NumberOfItems64\" />\n      <xs:enumeration value=\"NumberOfItemsHEX32\" />\n      <xs:enumeration value=\"NumberOfItemsHEX64\" />\n      <xs:enumeration value=\"RateOfCountsPerSecond32\" />\n      <xs:enumeration value=\"RateOfCountsPerSecond64\" />\n      <xs:enumeration value=\"CountPerTimeInterval32\" />\n      <xs:enumeration value=\"CountPerTimeInterval64\" />\n      <xs:enumeration value=\"RawFraction\" />\n      <xs:enumeration value=\"RawBase\" />\n      <xs:enumeration value=\"AverageTimer32\" />\n      <xs:enumeration value=\"AverageBase\" />\n      <xs:enumeration value=\"AverageCount64\" />\n      <xs:enumeration value=\"SampleFraction\" />\n      <xs:enumeration value=\"SampleCounter\" />\n      <xs:enumeration value=\"SampleBase\" />\n      <xs:enumeration value=\"CounterTimer\" />\n      <xs:enumeration value=\"CounterTimerInverse\" />\n      <xs:enumeration value=\"Timer100Ns\" />\n      <xs:enumeration value=\"Timer100NsInverse\" />\n      <xs:enumeration value=\"ElapsedTime\" />\n      <xs:enumeration value=\"CounterMultiTimer\" />\n      <xs:enumeration value=\"CounterMultiTimerInverse\" />\n      <xs:enumeration value=\"CounterMultiTimer100Ns\" />\n      <xs:enumeration value=\"CounterMultiTimer100NsInverse\" />\n      <xs:enumeration value=\"CounterMultiBase\" />\n      <xs:enumeration value=\"CounterDelta32\" />\n      <xs:enumeration value=\"CounterDelta64\" />\n    </xs:restriction>\n  </xs:simpleType>\n  <xs:complexType name=\"PostFilteringWrapper\">\n    <xs:complexContent>\n      <xs:extension base=\"WrapperTargetBase\">\n        <xs:choice minOccurs=\"0\" maxOccurs=\"unbounded\">\n          <xs:element name=\"name\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:string\" />\n          <xs:element name=\"defaultFilter\" minOccurs=\"0\" maxOccurs=\"1\" type=\"Condition\" />\n          <xs:element name=\"when\" minOccurs=\"0\" maxOccurs=\"unbounded\" type=\"NLog.Targets.Wrappers.FilteringRule\" />\n          <xs:element name=\"optimizeBufferReuse\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:boolean\" />\n        </xs:choice>\n        <xs:attribute name=\"name\" type=\"xs:string\">\n          <xs:annotation>\n            <xs:documentation>Name of the target.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"defaultFilter\" type=\"Condition\">\n          <xs:annotation>\n            <xs:documentation>Default filter to be applied when no specific rule matches.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"optimizeBufferReuse\" type=\"xs:boolean\">\n          <xs:annotation>\n            <xs:documentation>Target supports reuse of internal buffers, and doesn't have to constantly allocate new buffers Required for legacy NLog-targets, that expects buffers to remain stable after Write-method exit</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n      </xs:extension>\n    </xs:complexContent>\n  </xs:complexType>\n  <xs:complexType name=\"NLog.Targets.Wrappers.FilteringRule\">\n    <xs:choice minOccurs=\"0\" maxOccurs=\"unbounded\">\n      <xs:element name=\"exists\" minOccurs=\"0\" maxOccurs=\"1\" type=\"Condition\" />\n      <xs:element name=\"filter\" minOccurs=\"0\" maxOccurs=\"1\" type=\"Condition\" />\n    </xs:choice>\n    <xs:attribute name=\"exists\" type=\"Condition\">\n      <xs:annotation>\n        <xs:documentation>Condition to be tested.</xs:documentation>\n      </xs:annotation>\n    </xs:attribute>\n    <xs:attribute name=\"filter\" type=\"Condition\">\n      <xs:annotation>\n        <xs:documentation>Resulting filter to be applied when the condition matches.</xs:documentation>\n      </xs:annotation>\n    </xs:attribute>\n  </xs:complexType>\n  <xs:complexType name=\"RandomizeGroup\">\n    <xs:complexContent>\n      <xs:extension base=\"CompoundTargetBase\">\n        <xs:choice minOccurs=\"0\" maxOccurs=\"unbounded\">\n          <xs:element name=\"name\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:string\" />\n          <xs:element name=\"optimizeBufferReuse\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:boolean\" />\n        </xs:choice>\n        <xs:attribute name=\"name\" type=\"xs:string\">\n          <xs:annotation>\n            <xs:documentation>Name of the target.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"optimizeBufferReuse\" type=\"xs:boolean\">\n          <xs:annotation>\n            <xs:documentation>Target supports reuse of internal buffers, and doesn't have to constantly allocate new buffers Required for legacy NLog-targets, that expects buffers to remain stable after Write-method exit</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n      </xs:extension>\n    </xs:complexContent>\n  </xs:complexType>\n  <xs:complexType name=\"RepeatingWrapper\">\n    <xs:complexContent>\n      <xs:extension base=\"WrapperTargetBase\">\n        <xs:choice minOccurs=\"0\" maxOccurs=\"unbounded\">\n          <xs:element name=\"name\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:string\" />\n          <xs:element name=\"optimizeBufferReuse\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:boolean\" />\n          <xs:element name=\"repeatCount\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:integer\" />\n        </xs:choice>\n        <xs:attribute name=\"name\" type=\"xs:string\">\n          <xs:annotation>\n            <xs:documentation>Name of the target.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"optimizeBufferReuse\" type=\"xs:boolean\">\n          <xs:annotation>\n            <xs:documentation>Target supports reuse of internal buffers, and doesn't have to constantly allocate new buffers Required for legacy NLog-targets, that expects buffers to remain stable after Write-method exit</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"repeatCount\" type=\"xs:integer\">\n          <xs:annotation>\n            <xs:documentation>Number of times to repeat each log message.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n      </xs:extension>\n    </xs:complexContent>\n  </xs:complexType>\n  <xs:complexType name=\"RetryingWrapper\">\n    <xs:complexContent>\n      <xs:extension base=\"WrapperTargetBase\">\n        <xs:choice minOccurs=\"0\" maxOccurs=\"unbounded\">\n          <xs:element name=\"name\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:string\" />\n          <xs:element name=\"optimizeBufferReuse\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:boolean\" />\n          <xs:element name=\"retryCount\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:integer\" />\n          <xs:element name=\"retryDelayMilliseconds\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:integer\" />\n        </xs:choice>\n        <xs:attribute name=\"name\" type=\"xs:string\">\n          <xs:annotation>\n            <xs:documentation>Name of the target.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"optimizeBufferReuse\" type=\"xs:boolean\">\n          <xs:annotation>\n            <xs:documentation>Target supports reuse of internal buffers, and doesn't have to constantly allocate new buffers Required for legacy NLog-targets, that expects buffers to remain stable after Write-method exit</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"retryCount\" type=\"xs:integer\">\n          <xs:annotation>\n            <xs:documentation>Number of retries that should be attempted on the wrapped target in case of a failure.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"retryDelayMilliseconds\" type=\"xs:integer\">\n          <xs:annotation>\n            <xs:documentation>Time to wait between retries in milliseconds.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n      </xs:extension>\n    </xs:complexContent>\n  </xs:complexType>\n  <xs:complexType name=\"RoundRobinGroup\">\n    <xs:complexContent>\n      <xs:extension base=\"CompoundTargetBase\">\n        <xs:choice minOccurs=\"0\" maxOccurs=\"unbounded\">\n          <xs:element name=\"name\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:string\" />\n          <xs:element name=\"optimizeBufferReuse\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:boolean\" />\n        </xs:choice>\n        <xs:attribute name=\"name\" type=\"xs:string\">\n          <xs:annotation>\n            <xs:documentation>Name of the target.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"optimizeBufferReuse\" type=\"xs:boolean\">\n          <xs:annotation>\n            <xs:documentation>Target supports reuse of internal buffers, and doesn't have to constantly allocate new buffers Required for legacy NLog-targets, that expects buffers to remain stable after Write-method exit</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n      </xs:extension>\n    </xs:complexContent>\n  </xs:complexType>\n  <xs:complexType name=\"SplitGroup\">\n    <xs:complexContent>\n      <xs:extension base=\"CompoundTargetBase\">\n        <xs:choice minOccurs=\"0\" maxOccurs=\"unbounded\">\n          <xs:element name=\"name\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:string\" />\n          <xs:element name=\"optimizeBufferReuse\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:boolean\" />\n        </xs:choice>\n        <xs:attribute name=\"name\" type=\"xs:string\">\n          <xs:annotation>\n            <xs:documentation>Name of the target.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"optimizeBufferReuse\" type=\"xs:boolean\">\n          <xs:annotation>\n            <xs:documentation>Target supports reuse of internal buffers, and doesn't have to constantly allocate new buffers Required for legacy NLog-targets, that expects buffers to remain stable after Write-method exit</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n      </xs:extension>\n    </xs:complexContent>\n  </xs:complexType>\n  <xs:complexType name=\"Trace\">\n    <xs:complexContent>\n      <xs:extension base=\"Target\">\n        <xs:choice minOccurs=\"0\" maxOccurs=\"unbounded\">\n          <xs:element name=\"name\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:string\" />\n          <xs:element name=\"layout\" minOccurs=\"0\" maxOccurs=\"1\" type=\"Layout\" />\n          <xs:element name=\"rawWrite\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:boolean\" />\n          <xs:element name=\"optimizeBufferReuse\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:boolean\" />\n        </xs:choice>\n        <xs:attribute name=\"name\" type=\"xs:string\">\n          <xs:annotation>\n            <xs:documentation>Name of the target.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"layout\" type=\"SimpleLayoutAttribute\">\n          <xs:annotation>\n            <xs:documentation>Layout used to format log messages.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"rawWrite\" type=\"xs:boolean\">\n          <xs:annotation>\n            <xs:documentation>Always use  independent of </xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"optimizeBufferReuse\" type=\"xs:boolean\">\n          <xs:annotation>\n            <xs:documentation>Target supports reuse of internal buffers, and doesn't have to constantly allocate new buffers Required for legacy NLog-targets, that expects buffers to remain stable after Write-method exit</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n      </xs:extension>\n    </xs:complexContent>\n  </xs:complexType>\n  <xs:complexType name=\"WebService\">\n    <xs:complexContent>\n      <xs:extension base=\"Target\">\n        <xs:choice minOccurs=\"0\" maxOccurs=\"unbounded\">\n          <xs:element name=\"name\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:string\" />\n          <xs:element name=\"parameter\" minOccurs=\"0\" maxOccurs=\"unbounded\" type=\"NLog.Targets.MethodCallParameter\" />\n          <xs:element name=\"optimizeBufferReuse\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:boolean\" />\n          <xs:element name=\"includeBOM\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:boolean\" />\n          <xs:element name=\"methodName\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:string\" />\n          <xs:element name=\"namespace\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:string\" />\n          <xs:element name=\"protocol\" minOccurs=\"0\" maxOccurs=\"1\" type=\"NLog.Targets.WebServiceProtocol\" />\n          <xs:element name=\"proxyAddress\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:string\" />\n          <xs:element name=\"encoding\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:string\" />\n          <xs:element name=\"url\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:anyURI\" />\n          <xs:element name=\"escapeDataNLogLegacy\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:boolean\" />\n          <xs:element name=\"escapeDataRfc3986\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:boolean\" />\n          <xs:element name=\"preAuthenticate\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:boolean\" />\n          <xs:element name=\"xmlRoot\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:string\" />\n          <xs:element name=\"xmlRootNamespace\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:string\" />\n          <xs:element name=\"header\" minOccurs=\"0\" maxOccurs=\"unbounded\" type=\"NLog.Targets.MethodCallParameter\" />\n          <xs:element name=\"proxyType\" minOccurs=\"0\" maxOccurs=\"1\" type=\"NLog.Targets.WebServiceProxyType\" />\n        </xs:choice>\n        <xs:attribute name=\"name\" type=\"xs:string\">\n          <xs:annotation>\n            <xs:documentation>Name of the target.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"optimizeBufferReuse\" type=\"xs:boolean\">\n          <xs:annotation>\n            <xs:documentation>Target supports reuse of internal buffers, and doesn't have to constantly allocate new buffers Required for legacy NLog-targets, that expects buffers to remain stable after Write-method exit</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"includeBOM\" type=\"xs:boolean\">\n          <xs:annotation>\n            <xs:documentation>Should we include the BOM (Byte-order-mark) for UTF? Influences the  property. This will only work for UTF-8.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"methodName\" type=\"xs:string\">\n          <xs:annotation>\n            <xs:documentation>Web service method name. Only used with Soap.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"namespace\" type=\"xs:string\">\n          <xs:annotation>\n            <xs:documentation>Web service namespace. Only used with Soap.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"protocol\" type=\"NLog.Targets.WebServiceProtocol\">\n          <xs:annotation>\n            <xs:documentation>Protocol to be used when calling web service.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"proxyAddress\" type=\"xs:string\">\n          <xs:annotation>\n            <xs:documentation>Custom proxy address, include port separated by a colon</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"encoding\" type=\"xs:string\">\n          <xs:annotation>\n            <xs:documentation>Encoding.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"url\" type=\"xs:anyURI\">\n          <xs:annotation>\n            <xs:documentation>Web service URL.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"escapeDataNLogLegacy\" type=\"xs:boolean\">\n          <xs:annotation>\n            <xs:documentation>Value whether escaping be done according to the old NLog style (Very non-standard)</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"escapeDataRfc3986\" type=\"xs:boolean\">\n          <xs:annotation>\n            <xs:documentation>Value whether escaping be done according to Rfc3986 (Supports Internationalized Resource Identifiers - IRIs)</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"preAuthenticate\" type=\"xs:boolean\">\n          <xs:annotation>\n            <xs:documentation>Indicates whether to pre-authenticate the HttpWebRequest (Requires 'Authorization' in  parameters)</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"xmlRoot\" type=\"xs:string\">\n          <xs:annotation>\n            <xs:documentation>Name of the root XML element, if POST of XML document chosen. If so, this property must not be null. (see  and ).</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"xmlRootNamespace\" type=\"xs:string\">\n          <xs:annotation>\n            <xs:documentation>(optional) root namespace of the XML document, if POST of XML document chosen. (see  and ).</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"proxyType\" type=\"NLog.Targets.WebServiceProxyType\">\n          <xs:annotation>\n            <xs:documentation>Proxy configuration when calling web service</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n      </xs:extension>\n    </xs:complexContent>\n  </xs:complexType>\n  <xs:simpleType name=\"NLog.Targets.WebServiceProtocol\">\n    <xs:restriction base=\"xs:string\">\n      <xs:enumeration value=\"Soap11\" />\n      <xs:enumeration value=\"Soap12\" />\n      <xs:enumeration value=\"HttpPost\" />\n      <xs:enumeration value=\"HttpGet\" />\n      <xs:enumeration value=\"JsonPost\" />\n      <xs:enumeration value=\"XmlPost\" />\n    </xs:restriction>\n  </xs:simpleType>\n  <xs:simpleType name=\"NLog.Targets.WebServiceProxyType\">\n    <xs:restriction base=\"xs:string\">\n      <xs:enumeration value=\"DefaultWebProxy\" />\n      <xs:enumeration value=\"AutoProxy\" />\n      <xs:enumeration value=\"NoProxy\" />\n      <xs:enumeration value=\"ProxyAddress\" />\n    </xs:restriction>\n  </xs:simpleType>\n  <xs:complexType name=\"CompoundLayout\">\n    <xs:complexContent>\n      <xs:extension base=\"Layout\">\n        <xs:choice minOccurs=\"0\" maxOccurs=\"unbounded\">\n          <xs:element name=\"layout\" minOccurs=\"0\" maxOccurs=\"unbounded\" type=\"Layout\" />\n        </xs:choice>\n      </xs:extension>\n    </xs:complexContent>\n  </xs:complexType>\n  <xs:complexType name=\"Layout\">\n    <xs:choice minOccurs=\"0\" maxOccurs=\"unbounded\" />\n  </xs:complexType>\n  <xs:complexType name=\"CsvLayout\">\n    <xs:complexContent>\n      <xs:extension base=\"Layout\">\n        <xs:choice minOccurs=\"0\" maxOccurs=\"unbounded\">\n          <xs:element name=\"footer\" minOccurs=\"0\" maxOccurs=\"1\" type=\"Layout\" />\n          <xs:element name=\"header\" minOccurs=\"0\" maxOccurs=\"1\" type=\"Layout\" />\n          <xs:element name=\"layout\" minOccurs=\"0\" maxOccurs=\"1\" type=\"Layout\" />\n          <xs:element name=\"column\" minOccurs=\"0\" maxOccurs=\"unbounded\" type=\"NLog.Layouts.CsvColumn\" />\n          <xs:element name=\"customColumnDelimiter\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:string\" />\n          <xs:element name=\"delimiter\" minOccurs=\"0\" maxOccurs=\"1\" type=\"NLog.Layouts.CsvColumnDelimiterMode\" />\n          <xs:element name=\"quoteChar\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:string\" />\n          <xs:element name=\"quoting\" minOccurs=\"0\" maxOccurs=\"1\" type=\"NLog.Layouts.CsvQuotingMode\" />\n          <xs:element name=\"withHeader\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:boolean\" />\n        </xs:choice>\n        <xs:attribute name=\"footer\" type=\"SimpleLayoutAttribute\">\n          <xs:annotation>\n            <xs:documentation>Footer layout.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"header\" type=\"SimpleLayoutAttribute\">\n          <xs:annotation>\n            <xs:documentation>Header layout.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"layout\" type=\"SimpleLayoutAttribute\">\n          <xs:annotation>\n            <xs:documentation>Body layout (can be repeated multiple times).</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"customColumnDelimiter\" type=\"xs:string\">\n          <xs:annotation>\n            <xs:documentation>Custom column delimiter value (valid when ColumnDelimiter is set to 'Custom').</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"delimiter\" type=\"NLog.Layouts.CsvColumnDelimiterMode\">\n          <xs:annotation>\n            <xs:documentation>Column delimiter.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"quoteChar\" type=\"xs:string\">\n          <xs:annotation>\n            <xs:documentation>Quote Character.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"quoting\" type=\"NLog.Layouts.CsvQuotingMode\">\n          <xs:annotation>\n            <xs:documentation>Quoting mode.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"withHeader\" type=\"xs:boolean\">\n          <xs:annotation>\n            <xs:documentation>Indicates whether CVS should include header.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n      </xs:extension>\n    </xs:complexContent>\n  </xs:complexType>\n  <xs:simpleType name=\"NLog.Layouts.CsvColumnDelimiterMode\">\n    <xs:restriction base=\"xs:string\">\n      <xs:enumeration value=\"Auto\" />\n      <xs:enumeration value=\"Comma\" />\n      <xs:enumeration value=\"Semicolon\" />\n      <xs:enumeration value=\"Tab\" />\n      <xs:enumeration value=\"Pipe\" />\n      <xs:enumeration value=\"Space\" />\n      <xs:enumeration value=\"Custom\" />\n    </xs:restriction>\n  </xs:simpleType>\n  <xs:simpleType name=\"NLog.Layouts.CsvQuotingMode\">\n    <xs:restriction base=\"xs:string\">\n      <xs:enumeration value=\"All\" />\n      <xs:enumeration value=\"Nothing\" />\n      <xs:enumeration value=\"Auto\" />\n    </xs:restriction>\n  </xs:simpleType>\n  <xs:complexType name=\"NLog.Layouts.CsvColumn\">\n    <xs:choice minOccurs=\"0\" maxOccurs=\"unbounded\">\n      <xs:element name=\"layout\" minOccurs=\"0\" maxOccurs=\"1\" type=\"Layout\" />\n      <xs:element name=\"name\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:string\" />\n    </xs:choice>\n    <xs:attribute name=\"layout\" type=\"SimpleLayoutAttribute\">\n      <xs:annotation>\n        <xs:documentation>Layout of the column.</xs:documentation>\n      </xs:annotation>\n    </xs:attribute>\n    <xs:attribute name=\"name\" type=\"xs:string\">\n      <xs:annotation>\n        <xs:documentation>Name of the column.</xs:documentation>\n      </xs:annotation>\n    </xs:attribute>\n  </xs:complexType>\n  <xs:complexType name=\"JsonLayout\">\n    <xs:complexContent>\n      <xs:extension base=\"Layout\">\n        <xs:choice minOccurs=\"0\" maxOccurs=\"unbounded\">\n          <xs:element name=\"attribute\" minOccurs=\"0\" maxOccurs=\"unbounded\" type=\"NLog.Layouts.JsonAttribute\" />\n          <xs:element name=\"excludeProperties\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:string\" />\n          <xs:element name=\"includeAllProperties\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:boolean\" />\n          <xs:element name=\"includeMdc\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:boolean\" />\n          <xs:element name=\"includeMdlc\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:boolean\" />\n          <xs:element name=\"renderEmptyObject\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:boolean\" />\n          <xs:element name=\"suppressSpaces\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:boolean\" />\n          <xs:element name=\"maxRecursionLimit\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:integer\" />\n        </xs:choice>\n        <xs:attribute name=\"excludeProperties\" type=\"xs:string\">\n          <xs:annotation>\n            <xs:documentation>List of property names to exclude when  is true</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"includeAllProperties\" type=\"xs:boolean\">\n          <xs:annotation>\n            <xs:documentation>Option to include all properties from the log event (as JSON)</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"includeMdc\" type=\"xs:boolean\">\n          <xs:annotation>\n            <xs:documentation>Indicates whether to include contents of the  dictionary.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"includeMdlc\" type=\"xs:boolean\">\n          <xs:annotation>\n            <xs:documentation>Indicates whether to include contents of the  dictionary.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"renderEmptyObject\" type=\"xs:boolean\">\n          <xs:annotation>\n            <xs:documentation>Option to render the empty object value {}</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"suppressSpaces\" type=\"xs:boolean\">\n          <xs:annotation>\n            <xs:documentation>Option to suppress the extra spaces in the output json</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"maxRecursionLimit\" type=\"xs:integer\">\n          <xs:annotation>\n            <xs:documentation>How far should the JSON serializer follow object references before backing off</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n      </xs:extension>\n    </xs:complexContent>\n  </xs:complexType>\n  <xs:complexType name=\"NLog.Layouts.JsonAttribute\">\n    <xs:choice minOccurs=\"0\" maxOccurs=\"unbounded\">\n      <xs:element name=\"layout\" minOccurs=\"0\" maxOccurs=\"1\" type=\"Layout\" />\n      <xs:element name=\"name\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:string\" />\n      <xs:element name=\"encode\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:boolean\" />\n      <xs:element name=\"escapeUnicode\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:boolean\" />\n      <xs:element name=\"includeEmptyValue\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:boolean\" />\n    </xs:choice>\n    <xs:attribute name=\"layout\" type=\"SimpleLayoutAttribute\">\n      <xs:annotation>\n        <xs:documentation>Layout that will be rendered as the attribute's value.</xs:documentation>\n      </xs:annotation>\n    </xs:attribute>\n    <xs:attribute name=\"name\" type=\"xs:string\">\n      <xs:annotation>\n        <xs:documentation>Name of the attribute.</xs:documentation>\n      </xs:annotation>\n    </xs:attribute>\n    <xs:attribute name=\"encode\" type=\"xs:boolean\">\n      <xs:annotation>\n        <xs:documentation>Determines wether or not this attribute will be Json encoded.</xs:documentation>\n      </xs:annotation>\n    </xs:attribute>\n    <xs:attribute name=\"escapeUnicode\" type=\"xs:boolean\">\n      <xs:annotation>\n        <xs:documentation>Indicates whether to escape non-ascii characters</xs:documentation>\n      </xs:annotation>\n    </xs:attribute>\n    <xs:attribute name=\"includeEmptyValue\" type=\"xs:boolean\">\n      <xs:annotation>\n        <xs:documentation>Whether an attribute with empty value should be included in the output</xs:documentation>\n      </xs:annotation>\n    </xs:attribute>\n  </xs:complexType>\n  <xs:complexType name=\"LayoutWithHeaderAndFooter\">\n    <xs:complexContent>\n      <xs:extension base=\"Layout\">\n        <xs:choice minOccurs=\"0\" maxOccurs=\"unbounded\">\n          <xs:element name=\"footer\" minOccurs=\"0\" maxOccurs=\"1\" type=\"Layout\" />\n          <xs:element name=\"header\" minOccurs=\"0\" maxOccurs=\"1\" type=\"Layout\" />\n          <xs:element name=\"layout\" minOccurs=\"0\" maxOccurs=\"1\" type=\"Layout\" />\n        </xs:choice>\n        <xs:attribute name=\"footer\" type=\"SimpleLayoutAttribute\">\n          <xs:annotation>\n            <xs:documentation>Footer layout.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"header\" type=\"SimpleLayoutAttribute\">\n          <xs:annotation>\n            <xs:documentation>Header layout.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"layout\" type=\"SimpleLayoutAttribute\">\n          <xs:annotation>\n            <xs:documentation>Body layout (can be repeated multiple times).</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n      </xs:extension>\n    </xs:complexContent>\n  </xs:complexType>\n  <xs:complexType name=\"Log4JXmlEventLayout\">\n    <xs:complexContent>\n      <xs:extension base=\"Layout\">\n        <xs:choice minOccurs=\"0\" maxOccurs=\"unbounded\">\n          <xs:element name=\"includeAllProperties\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:boolean\" />\n          <xs:element name=\"includeMdc\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:boolean\" />\n          <xs:element name=\"includeMdlc\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:boolean\" />\n          <xs:element name=\"includeNdc\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:boolean\" />\n          <xs:element name=\"includeNdlc\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:boolean\" />\n        </xs:choice>\n        <xs:attribute name=\"includeAllProperties\" type=\"xs:boolean\">\n          <xs:annotation>\n            <xs:documentation>Option to include all properties from the log events</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"includeMdc\" type=\"xs:boolean\">\n          <xs:annotation>\n            <xs:documentation>Indicates whether to include contents of the  dictionary.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"includeMdlc\" type=\"xs:boolean\">\n          <xs:annotation>\n            <xs:documentation>Indicates whether to include contents of the  dictionary.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"includeNdc\" type=\"xs:boolean\">\n          <xs:annotation>\n            <xs:documentation>Indicates whether to include contents of the  stack.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"includeNdlc\" type=\"xs:boolean\">\n          <xs:annotation>\n            <xs:documentation>Indicates whether to include contents of the  stack.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n      </xs:extension>\n    </xs:complexContent>\n  </xs:complexType>\n  <xs:complexType name=\"SimpleLayout\">\n    <xs:complexContent>\n      <xs:extension base=\"Layout\">\n        <xs:choice minOccurs=\"0\" maxOccurs=\"unbounded\">\n          <xs:element name=\"text\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:string\" />\n        </xs:choice>\n        <xs:attribute name=\"text\" type=\"xs:string\">\n          <xs:annotation>\n            <xs:documentation>Layout text.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n      </xs:extension>\n    </xs:complexContent>\n  </xs:complexType>\n  <xs:complexType name=\"when\">\n    <xs:complexContent>\n      <xs:extension base=\"Filter\">\n        <xs:choice minOccurs=\"0\" maxOccurs=\"unbounded\">\n          <xs:element name=\"action\" minOccurs=\"0\" maxOccurs=\"1\" type=\"FilterResult\" />\n          <xs:element name=\"condition\" minOccurs=\"0\" maxOccurs=\"1\" type=\"Condition\" />\n        </xs:choice>\n        <xs:attribute name=\"action\" type=\"FilterResult\">\n          <xs:annotation>\n            <xs:documentation>Action to be taken when filter matches.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"condition\" type=\"Condition\">\n          <xs:annotation>\n            <xs:documentation>Condition expression.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n      </xs:extension>\n    </xs:complexContent>\n  </xs:complexType>\n  <xs:simpleType name=\"FilterResult\">\n    <xs:restriction base=\"xs:string\">\n      <xs:enumeration value=\"Neutral\" />\n      <xs:enumeration value=\"Log\" />\n      <xs:enumeration value=\"Ignore\" />\n      <xs:enumeration value=\"LogFinal\" />\n      <xs:enumeration value=\"IgnoreFinal\" />\n    </xs:restriction>\n  </xs:simpleType>\n  <xs:complexType name=\"whenContains\">\n    <xs:complexContent>\n      <xs:extension base=\"Filter\">\n        <xs:choice minOccurs=\"0\" maxOccurs=\"unbounded\">\n          <xs:element name=\"action\" minOccurs=\"0\" maxOccurs=\"1\" type=\"FilterResult\" />\n          <xs:element name=\"ignoreCase\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:boolean\" />\n          <xs:element name=\"layout\" minOccurs=\"0\" maxOccurs=\"1\" type=\"Layout\" />\n          <xs:element name=\"substring\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:string\" />\n        </xs:choice>\n        <xs:attribute name=\"action\" type=\"FilterResult\">\n          <xs:annotation>\n            <xs:documentation>Action to be taken when filter matches.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"ignoreCase\" type=\"xs:boolean\">\n          <xs:annotation>\n            <xs:documentation>Indicates whether to ignore case when comparing strings.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"layout\" type=\"SimpleLayoutAttribute\">\n          <xs:annotation>\n            <xs:documentation>Layout to be used to filter log messages.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"substring\" type=\"xs:string\">\n          <xs:annotation>\n            <xs:documentation>Substring to be matched.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n      </xs:extension>\n    </xs:complexContent>\n  </xs:complexType>\n  <xs:complexType name=\"whenEqual\">\n    <xs:complexContent>\n      <xs:extension base=\"Filter\">\n        <xs:choice minOccurs=\"0\" maxOccurs=\"unbounded\">\n          <xs:element name=\"action\" minOccurs=\"0\" maxOccurs=\"1\" type=\"FilterResult\" />\n          <xs:element name=\"compareTo\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:string\" />\n          <xs:element name=\"ignoreCase\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:boolean\" />\n          <xs:element name=\"layout\" minOccurs=\"0\" maxOccurs=\"1\" type=\"Layout\" />\n        </xs:choice>\n        <xs:attribute name=\"action\" type=\"FilterResult\">\n          <xs:annotation>\n            <xs:documentation>Action to be taken when filter matches.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"compareTo\" type=\"xs:string\">\n          <xs:annotation>\n            <xs:documentation>String to compare the layout to.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"ignoreCase\" type=\"xs:boolean\">\n          <xs:annotation>\n            <xs:documentation>Indicates whether to ignore case when comparing strings.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"layout\" type=\"SimpleLayoutAttribute\">\n          <xs:annotation>\n            <xs:documentation>Layout to be used to filter log messages.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n      </xs:extension>\n    </xs:complexContent>\n  </xs:complexType>\n  <xs:complexType name=\"whenNotContains\">\n    <xs:complexContent>\n      <xs:extension base=\"Filter\">\n        <xs:choice minOccurs=\"0\" maxOccurs=\"unbounded\">\n          <xs:element name=\"action\" minOccurs=\"0\" maxOccurs=\"1\" type=\"FilterResult\" />\n          <xs:element name=\"ignoreCase\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:boolean\" />\n          <xs:element name=\"layout\" minOccurs=\"0\" maxOccurs=\"1\" type=\"Layout\" />\n          <xs:element name=\"substring\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:string\" />\n        </xs:choice>\n        <xs:attribute name=\"action\" type=\"FilterResult\">\n          <xs:annotation>\n            <xs:documentation>Action to be taken when filter matches.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"ignoreCase\" type=\"xs:boolean\">\n          <xs:annotation>\n            <xs:documentation>Indicates whether to ignore case when comparing strings.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"layout\" type=\"SimpleLayoutAttribute\">\n          <xs:annotation>\n            <xs:documentation>Layout to be used to filter log messages.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"substring\" type=\"xs:string\">\n          <xs:annotation>\n            <xs:documentation>Substring to be matched.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n      </xs:extension>\n    </xs:complexContent>\n  </xs:complexType>\n  <xs:complexType name=\"whenNotEqual\">\n    <xs:complexContent>\n      <xs:extension base=\"Filter\">\n        <xs:choice minOccurs=\"0\" maxOccurs=\"unbounded\">\n          <xs:element name=\"action\" minOccurs=\"0\" maxOccurs=\"1\" type=\"FilterResult\" />\n          <xs:element name=\"compareTo\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:string\" />\n          <xs:element name=\"ignoreCase\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:boolean\" />\n          <xs:element name=\"layout\" minOccurs=\"0\" maxOccurs=\"1\" type=\"Layout\" />\n        </xs:choice>\n        <xs:attribute name=\"action\" type=\"FilterResult\">\n          <xs:annotation>\n            <xs:documentation>Action to be taken when filter matches.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"compareTo\" type=\"xs:string\">\n          <xs:annotation>\n            <xs:documentation>String to compare the layout to.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"ignoreCase\" type=\"xs:boolean\">\n          <xs:annotation>\n            <xs:documentation>Indicates whether to ignore case when comparing strings.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"layout\" type=\"SimpleLayoutAttribute\">\n          <xs:annotation>\n            <xs:documentation>Layout to be used to filter log messages.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n      </xs:extension>\n    </xs:complexContent>\n  </xs:complexType>\n  <xs:complexType name=\"whenRepeated\">\n    <xs:complexContent>\n      <xs:extension base=\"Filter\">\n        <xs:choice minOccurs=\"0\" maxOccurs=\"unbounded\">\n          <xs:element name=\"action\" minOccurs=\"0\" maxOccurs=\"1\" type=\"FilterResult\" />\n          <xs:element name=\"defaultFilterCacheSize\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:integer\" />\n          <xs:element name=\"includeFirst\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:boolean\" />\n          <xs:element name=\"layout\" minOccurs=\"0\" maxOccurs=\"1\" type=\"Layout\" />\n          <xs:element name=\"maxFilterCacheSize\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:integer\" />\n          <xs:element name=\"maxLength\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:integer\" />\n          <xs:element name=\"timeoutSeconds\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:integer\" />\n          <xs:element name=\"optimizeBufferDefaultLength\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:integer\" />\n          <xs:element name=\"optimizeBufferReuse\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:boolean\" />\n          <xs:element name=\"filterCountMessageAppendFormat\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:string\" />\n          <xs:element name=\"filterCountPropertyName\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:string\" />\n        </xs:choice>\n        <xs:attribute name=\"action\" type=\"FilterResult\">\n          <xs:annotation>\n            <xs:documentation>Action to be taken when filter matches.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"defaultFilterCacheSize\" type=\"xs:integer\">\n          <xs:annotation>\n            <xs:documentation>Default number of unique filter values to expect, will automatically increase if needed</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"includeFirst\" type=\"xs:boolean\">\n          <xs:annotation>\n            <xs:documentation>Applies the configured action to the initial logevent that starts the timeout period. Used to configure that it should ignore all events until timeout.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"layout\" type=\"SimpleLayoutAttribute\">\n          <xs:annotation>\n            <xs:documentation>Layout to be used to filter log messages.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"maxFilterCacheSize\" type=\"xs:integer\">\n          <xs:annotation>\n            <xs:documentation>Max number of unique filter values to expect simultaneously</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"maxLength\" type=\"xs:integer\">\n          <xs:annotation>\n            <xs:documentation>Max length of filter values, will truncate if above limit</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"timeoutSeconds\" type=\"xs:integer\">\n          <xs:annotation>\n            <xs:documentation>How long before a filter expires, and logging is accepted again</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"optimizeBufferDefaultLength\" type=\"xs:integer\">\n          <xs:annotation>\n            <xs:documentation>Default buffer size for the internal buffers</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"optimizeBufferReuse\" type=\"xs:boolean\">\n          <xs:annotation>\n            <xs:documentation>Reuse internal buffers, and doesn't have to constantly allocate new buffers</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"filterCountMessageAppendFormat\" type=\"xs:string\">\n          <xs:annotation>\n            <xs:documentation>Append FilterCount to the  when an event is no longer filtered</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"filterCountPropertyName\" type=\"xs:string\">\n          <xs:annotation>\n            <xs:documentation>Insert FilterCount value into  when an event is no longer filtered</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n      </xs:extension>\n    </xs:complexContent>\n  </xs:complexType>\n  <xs:complexType name=\"AccurateLocal\">\n    <xs:complexContent>\n      <xs:extension base=\"TimeSource\">\n        <xs:choice minOccurs=\"0\" maxOccurs=\"unbounded\" />\n      </xs:extension>\n    </xs:complexContent>\n  </xs:complexType>\n  <xs:complexType name=\"AccurateUTC\">\n    <xs:complexContent>\n      <xs:extension base=\"TimeSource\">\n        <xs:choice minOccurs=\"0\" maxOccurs=\"unbounded\" />\n      </xs:extension>\n    </xs:complexContent>\n  </xs:complexType>\n  <xs:complexType name=\"FastLocal\">\n    <xs:complexContent>\n      <xs:extension base=\"TimeSource\">\n        <xs:choice minOccurs=\"0\" maxOccurs=\"unbounded\" />\n      </xs:extension>\n    </xs:complexContent>\n  </xs:complexType>\n  <xs:complexType name=\"FastUTC\">\n    <xs:complexContent>\n      <xs:extension base=\"TimeSource\">\n        <xs:choice minOccurs=\"0\" maxOccurs=\"unbounded\" />\n      </xs:extension>\n    </xs:complexContent>\n  </xs:complexType>\n</xs:schema>"
  },
  {
    "path": "src/Samples/Sample.DotNetFxConsumerHost/Program.cs",
    "content": "﻿using System;\nusing Topshelf;\n\nnamespace Sample.DotNetFxConsumerHost\n{\n    class Program\n    {\n        static int Main()\n        {\n\n            return (int)HostFactory.Run(x =>\n            {\n                x.UseAssemblyInfoForServiceInfo();\n\n                x.Service<DotNetFxConsumerHostBootstrap>(s =>\n                {\n                    s.ConstructUsing(() => new DotNetFxConsumerHostBootstrap());\n                    s.WhenStarted(v => v.Start());\n                    s.WhenStopped(v => v.Stop());\n                    s.BeforeStartingService(_ => { Console.WriteLine(\"Processor is starting\"); });\n                    s.BeforeStoppingService(_ => { Console.WriteLine(\"Processor is stopping\"); });\n                });\n\n                // x.StartAutomatically();\n\n                x.SetStartTimeout(TimeSpan.FromSeconds(10));\n                x.SetStopTimeout(TimeSpan.FromSeconds(10));\n\n                x.EnableServiceRecovery(r =>\n                {\n                    r.RestartService(1);\n                    //r.RunProgram(7, \"ping google.com\");\n                    r.RestartComputer(5, \"message\");\n\n                    r.OnCrashOnly();\n                    r.SetResetPeriod(2);\n                });\n\n                //x.AddCommandLineSwitch(\"throwonstart\", v => throwOnStart = v);\n                //x.AddCommandLineSwitch(\"throwonstop\", v => throwOnStop = v);\n                //x.AddCommandLineSwitch(\"throwunhandled\", v => throwUnhandled = v);\n\n                x.OnException((exception) =>\n                {\n                });\n            });\n        }\n    }\n}\n"
  },
  {
    "path": "src/Samples/Sample.DotNetFxConsumerHost/Properties/AssemblyInfo.cs",
    "content": "﻿using System.Reflection;\nusing System.Runtime.CompilerServices;\nusing System.Runtime.InteropServices;\n\n// 有关程序集的一般信息由以下\n// 控制。更改这些特性值可修改\n// 与程序集关联的信息。\n[assembly: AssemblyTitle(\"Sample.DotNetFxConsumerHost\")]\n[assembly: AssemblyDescription(\"\")]\n[assembly: AssemblyConfiguration(\"\")]\n[assembly: AssemblyCompany(\"\")]\n[assembly: AssemblyProduct(\"Sample.DotNetFxConsumerHost\")]\n[assembly: AssemblyCopyright(\"Copyright ©  2018\")]\n[assembly: AssemblyTrademark(\"\")]\n[assembly: AssemblyCulture(\"\")]\n\n// 将 ComVisible 设置为 false 会使此程序集中的类型\n//对 COM 组件不可见。如果需要从 COM 访问此程序集中的类型\n//请将此类型的 ComVisible 特性设置为 true。\n[assembly: ComVisible(false)]\n\n// 如果此项目向 COM 公开，则下列 GUID 用于类型库的 ID\n[assembly: Guid(\"dd5f675f-9bc4-49a9-8ddc-ea536ff0c0f7\")]\n\n// 程序集的版本信息由下列四个值组成: \n//\n//      主版本\n//      次版本\n//      生成号\n//      修订号\n//\n// 可以指定所有值，也可以使用以下所示的 \"*\" 预置版本号和修订号\n// 方法是按如下所示使用“*”: :\n// [assembly: AssemblyVersion(\"1.0.*\")]\n[assembly: AssemblyVersion(\"1.0.0.0\")]\n[assembly: AssemblyFileVersion(\"1.0.0.0\")]\n"
  },
  {
    "path": "src/Samples/Sample.DotNetFxConsumerHost/Sample.DotNetFxConsumerHost.csproj",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<Project ToolsVersion=\"15.0\" xmlns=\"http://schemas.microsoft.com/developer/msbuild/2003\">\n  <Import Project=\"$(MSBuildExtensionsPath)\\$(MSBuildToolsVersion)\\Microsoft.Common.props\" Condition=\"Exists('$(MSBuildExtensionsPath)\\$(MSBuildToolsVersion)\\Microsoft.Common.props')\" />\n  <PropertyGroup>\n    <Configuration Condition=\" '$(Configuration)' == '' \">Debug</Configuration>\n    <Platform Condition=\" '$(Platform)' == '' \">AnyCPU</Platform>\n    <ProjectGuid>{DD5F675F-9BC4-49A9-8DDC-EA536FF0C0F7}</ProjectGuid>\n    <OutputType>Exe</OutputType>\n    <RootNamespace>Sample.DotNetFxConsumerHost</RootNamespace>\n    <AssemblyName>Sample.DotNetFxConsumerHost</AssemblyName>\n    <TargetFrameworkVersion>v4.7.1</TargetFrameworkVersion>\n    <FileAlignment>512</FileAlignment>\n    <AutoGenerateBindingRedirects>true</AutoGenerateBindingRedirects>\n    <Deterministic>true</Deterministic>\n  </PropertyGroup>\n  <PropertyGroup Condition=\" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' \">\n    <PlatformTarget>AnyCPU</PlatformTarget>\n    <DebugSymbols>true</DebugSymbols>\n    <DebugType>full</DebugType>\n    <Optimize>false</Optimize>\n    <OutputPath>bin\\Debug\\</OutputPath>\n    <DefineConstants>DEBUG;TRACE</DefineConstants>\n    <ErrorReport>prompt</ErrorReport>\n    <WarningLevel>4</WarningLevel>\n  </PropertyGroup>\n  <PropertyGroup Condition=\" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' \">\n    <PlatformTarget>AnyCPU</PlatformTarget>\n    <DebugType>pdbonly</DebugType>\n    <Optimize>true</Optimize>\n    <OutputPath>bin\\Release\\</OutputPath>\n    <DefineConstants>TRACE</DefineConstants>\n    <ErrorReport>prompt</ErrorReport>\n    <WarningLevel>4</WarningLevel>\n  </PropertyGroup>\n  <ItemGroup>\n    <Reference Include=\"Abp, Version=4.6.0.0, Culture=neutral, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\..\\packages\\Abp.4.6.0\\lib\\netstandard2.0\\Abp.dll</HintPath>\n    </Reference>\n    <Reference Include=\"Castle.Core, Version=4.0.0.0, Culture=neutral, PublicKeyToken=407dd0808d44fbdc, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\..\\packages\\Castle.Core.4.3.1\\lib\\net45\\Castle.Core.dll</HintPath>\n    </Reference>\n    <Reference Include=\"Castle.Facilities.Logging, Version=4.0.0.0, Culture=neutral, PublicKeyToken=407dd0808d44fbdc, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\..\\packages\\Castle.LoggingFacility.4.1.1\\lib\\net45\\Castle.Facilities.Logging.dll</HintPath>\n    </Reference>\n    <Reference Include=\"Castle.Services.Logging.NLogIntegration, Version=4.0.0.0, Culture=neutral, PublicKeyToken=407dd0808d44fbdc, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\..\\packages\\Castle.Core-NLog.4.3.1\\lib\\net45\\Castle.Services.Logging.NLogIntegration.dll</HintPath>\n    </Reference>\n    <Reference Include=\"Castle.Windsor, Version=4.0.0.0, Culture=neutral, PublicKeyToken=407dd0808d44fbdc, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\..\\packages\\Castle.Windsor.4.1.1\\lib\\net45\\Castle.Windsor.dll</HintPath>\n    </Reference>\n    <Reference Include=\"JetBrains.Annotations, Version=2018.3.0.0, Culture=neutral, PublicKeyToken=1010a0d8d6380325, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\..\\packages\\JetBrains.Annotations.2018.3.0\\lib\\net20\\JetBrains.Annotations.dll</HintPath>\n    </Reference>\n    <Reference Include=\"Microsoft.Diagnostics.Tracing.EventSource, Version=1.1.28.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\..\\packages\\Microsoft.Diagnostics.Tracing.EventSource.Redist.1.1.28\\lib\\net46\\Microsoft.Diagnostics.Tracing.EventSource.dll</HintPath>\n    </Reference>\n    <Reference Include=\"Microsoft.Extensions.Caching.Abstractions, Version=2.2.0.0, Culture=neutral, PublicKeyToken=adb9793829ddae60, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\..\\packages\\Microsoft.Extensions.Caching.Abstractions.2.2.0\\lib\\netstandard2.0\\Microsoft.Extensions.Caching.Abstractions.dll</HintPath>\n    </Reference>\n    <Reference Include=\"Microsoft.Extensions.Caching.Memory, Version=2.2.0.0, Culture=neutral, PublicKeyToken=adb9793829ddae60, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\..\\packages\\Microsoft.Extensions.Caching.Memory.2.2.0\\lib\\netstandard2.0\\Microsoft.Extensions.Caching.Memory.dll</HintPath>\n    </Reference>\n    <Reference Include=\"Microsoft.Extensions.DependencyInjection.Abstractions, Version=2.2.0.0, Culture=neutral, PublicKeyToken=adb9793829ddae60, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\..\\packages\\Microsoft.Extensions.DependencyInjection.Abstractions.2.2.0\\lib\\netstandard2.0\\Microsoft.Extensions.DependencyInjection.Abstractions.dll</HintPath>\n    </Reference>\n    <Reference Include=\"Microsoft.Extensions.Options, Version=2.2.0.0, Culture=neutral, PublicKeyToken=adb9793829ddae60, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\..\\packages\\Microsoft.Extensions.Options.2.2.0\\lib\\netstandard2.0\\Microsoft.Extensions.Options.dll</HintPath>\n    </Reference>\n    <Reference Include=\"Microsoft.Extensions.Primitives, Version=2.2.0.0, Culture=neutral, PublicKeyToken=adb9793829ddae60, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\..\\packages\\Microsoft.Extensions.Primitives.2.2.0\\lib\\netstandard2.0\\Microsoft.Extensions.Primitives.dll</HintPath>\n    </Reference>\n    <Reference Include=\"Newtonsoft.Json, Version=12.0.0.0, Culture=neutral, PublicKeyToken=30ad4fe6b2a6aeed, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\..\\packages\\Newtonsoft.Json.12.0.1\\lib\\net45\\Newtonsoft.Json.dll</HintPath>\n    </Reference>\n    <Reference Include=\"Nito.AsyncEx.Context, Version=5.0.0.0, Culture=neutral, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\..\\packages\\Nito.AsyncEx.Context.5.0.0\\lib\\netstandard2.0\\Nito.AsyncEx.Context.dll</HintPath>\n    </Reference>\n    <Reference Include=\"Nito.AsyncEx.Coordination, Version=5.0.0.0, Culture=neutral, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\..\\packages\\Nito.AsyncEx.Coordination.5.0.0\\lib\\netstandard2.0\\Nito.AsyncEx.Coordination.dll</HintPath>\n    </Reference>\n    <Reference Include=\"Nito.AsyncEx.Tasks, Version=5.0.0.0, Culture=neutral, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\..\\packages\\Nito.AsyncEx.Tasks.5.0.0\\lib\\netstandard2.0\\Nito.AsyncEx.Tasks.dll</HintPath>\n    </Reference>\n    <Reference Include=\"Nito.Collections.Deque, Version=1.0.4.0, Culture=neutral, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\..\\packages\\Nito.Collections.Deque.1.0.4\\lib\\netstandard2.0\\Nito.Collections.Deque.dll</HintPath>\n    </Reference>\n    <Reference Include=\"Nito.Disposables, Version=2.0.0.0, Culture=neutral, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\..\\packages\\Nito.Disposables.2.0.0\\lib\\netstandard2.0\\Nito.Disposables.dll</HintPath>\n    </Reference>\n    <Reference Include=\"NLog, Version=4.0.0.0, Culture=neutral, PublicKeyToken=5120e14c03d0593c, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\..\\packages\\NLog.4.5.10\\lib\\net45\\NLog.dll</HintPath>\n    </Reference>\n    <Reference Include=\"RabbitMQ.Client, Version=5.0.0.0, Culture=neutral, PublicKeyToken=89e7d7c5feba84ce, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\..\\packages\\RabbitMQ.Client.5.0.1\\lib\\net451\\RabbitMQ.Client.dll</HintPath>\n    </Reference>\n    <Reference Include=\"Rebus, Version=4.2.1.0, Culture=neutral, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\..\\packages\\Rebus.4.2.1\\lib\\net45\\Rebus.dll</HintPath>\n    </Reference>\n    <Reference Include=\"Rebus.CastleWindsor, Version=4.1.0.0, Culture=neutral, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\..\\packages\\Rebus.Castle.Windsor.4.1.0\\lib\\net45\\Rebus.CastleWindsor.dll</HintPath>\n    </Reference>\n    <Reference Include=\"Rebus.NLog, Version=5.0.0.0, Culture=neutral, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\..\\packages\\Rebus.NLog.5.0.0\\lib\\net45\\Rebus.NLog.dll</HintPath>\n    </Reference>\n    <Reference Include=\"Rebus.RabbitMq, Version=4.4.2.0, Culture=neutral, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\..\\packages\\Rebus.RabbitMq.4.4.2\\lib\\net452\\Rebus.RabbitMq.dll</HintPath>\n    </Reference>\n    <Reference Include=\"System\" />\n    <Reference Include=\"System.Buffers, Version=4.0.2.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\..\\packages\\System.Buffers.4.4.0\\lib\\netstandard2.0\\System.Buffers.dll</HintPath>\n    </Reference>\n    <Reference Include=\"System.Collections.Immutable, Version=1.2.3.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\..\\packages\\System.Collections.Immutable.1.5.0\\lib\\netstandard2.0\\System.Collections.Immutable.dll</HintPath>\n    </Reference>\n    <Reference Include=\"System.ComponentModel.Annotations, Version=4.2.1.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\..\\packages\\System.ComponentModel.Annotations.4.5.0\\lib\\net461\\System.ComponentModel.Annotations.dll</HintPath>\n    </Reference>\n    <Reference Include=\"System.ComponentModel.DataAnnotations\" />\n    <Reference Include=\"System.Configuration\" />\n    <Reference Include=\"System.Configuration.ConfigurationManager, Version=4.0.1.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\..\\packages\\System.Configuration.ConfigurationManager.4.5.0\\lib\\net461\\System.Configuration.ConfigurationManager.dll</HintPath>\n    </Reference>\n    <Reference Include=\"System.Configuration.Install\" />\n    <Reference Include=\"System.Core\" />\n    <Reference Include=\"System.Data.Common, Version=4.1.1.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\..\\packages\\System.Data.Common.4.3.0\\lib\\net451\\System.Data.Common.dll</HintPath>\n      <Private>True</Private>\n      <Private>True</Private>\n    </Reference>\n    <Reference Include=\"System.Data.OracleClient\" />\n    <Reference Include=\"System.Drawing\" />\n    <Reference Include=\"System.IO.Compression, Version=4.2.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089, processorArchitecture=MSIL\" />\n    <Reference Include=\"System.Linq.Dynamic.Core, Version=1.0.10.0, Culture=neutral, PublicKeyToken=0f07ec44de6ac832, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\..\\packages\\System.Linq.Dynamic.Core.1.0.10\\lib\\net46\\System.Linq.Dynamic.Core.dll</HintPath>\n    </Reference>\n    <Reference Include=\"System.Memory, Version=4.0.1.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\..\\packages\\System.Memory.4.5.1\\lib\\netstandard2.0\\System.Memory.dll</HintPath>\n    </Reference>\n    <Reference Include=\"System.Net\" />\n    <Reference Include=\"System.Numerics\" />\n    <Reference Include=\"System.Numerics.Vectors, Version=4.1.3.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\..\\packages\\System.Numerics.Vectors.4.4.0\\lib\\net46\\System.Numerics.Vectors.dll</HintPath>\n    </Reference>\n    <Reference Include=\"System.Runtime.CompilerServices.Unsafe, Version=4.0.4.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\..\\packages\\System.Runtime.CompilerServices.Unsafe.4.5.1\\lib\\netstandard2.0\\System.Runtime.CompilerServices.Unsafe.dll</HintPath>\n    </Reference>\n    <Reference Include=\"System.Runtime.InteropServices.RuntimeInformation, Version=4.0.1.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\..\\packages\\System.Runtime.InteropServices.RuntimeInformation.4.3.0\\lib\\net45\\System.Runtime.InteropServices.RuntimeInformation.dll</HintPath>\n      <Private>True</Private>\n      <Private>True</Private>\n    </Reference>\n    <Reference Include=\"System.Runtime.Remoting\" />\n    <Reference Include=\"System.Runtime.Serialization\" />\n    <Reference Include=\"System.Runtime.Serialization.Formatters, Version=4.0.1.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\..\\packages\\System.Runtime.Serialization.Formatters.4.3.0\\lib\\net46\\System.Runtime.Serialization.Formatters.dll</HintPath>\n      <Private>True</Private>\n      <Private>True</Private>\n    </Reference>\n    <Reference Include=\"System.Runtime.Serialization.Primitives, Version=4.1.2.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\..\\packages\\System.Runtime.Serialization.Primitives.4.3.0\\lib\\net46\\System.Runtime.Serialization.Primitives.dll</HintPath>\n      <Private>True</Private>\n      <Private>True</Private>\n    </Reference>\n    <Reference Include=\"System.Security.AccessControl, Version=4.1.1.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\..\\packages\\System.Security.AccessControl.4.5.0\\lib\\net461\\System.Security.AccessControl.dll</HintPath>\n    </Reference>\n    <Reference Include=\"System.Security.Claims, Version=4.0.2.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\..\\packages\\System.Security.Claims.4.3.0\\lib\\net46\\System.Security.Claims.dll</HintPath>\n      <Private>True</Private>\n      <Private>True</Private>\n    </Reference>\n    <Reference Include=\"System.Security.Permissions, Version=4.0.1.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\..\\packages\\System.Security.Permissions.4.5.0\\lib\\net461\\System.Security.Permissions.dll</HintPath>\n    </Reference>\n    <Reference Include=\"System.Security.Principal.Windows, Version=4.1.1.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\..\\packages\\System.Security.Principal.Windows.4.5.0\\lib\\net461\\System.Security.Principal.Windows.dll</HintPath>\n    </Reference>\n    <Reference Include=\"System.ServiceModel\" />\n    <Reference Include=\"System.ServiceProcess\" />\n    <Reference Include=\"System.Transactions\" />\n    <Reference Include=\"System.Web\" />\n    <Reference Include=\"System.Xml.Linq\" />\n    <Reference Include=\"System.Data.DataSetExtensions\" />\n    <Reference Include=\"Microsoft.CSharp\" />\n    <Reference Include=\"System.Data\" />\n    <Reference Include=\"System.Net.Http\" />\n    <Reference Include=\"System.Xml\" />\n    <Reference Include=\"System.Xml.XmlDocument, Version=4.0.2.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\..\\packages\\System.Xml.XmlDocument.4.3.0\\lib\\net46\\System.Xml.XmlDocument.dll</HintPath>\n      <Private>True</Private>\n      <Private>True</Private>\n    </Reference>\n    <Reference Include=\"System.Xml.XPath, Version=4.0.2.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\..\\packages\\System.Xml.XPath.4.3.0\\lib\\net46\\System.Xml.XPath.dll</HintPath>\n      <Private>True</Private>\n      <Private>True</Private>\n    </Reference>\n    <Reference Include=\"System.Xml.XPath.XmlDocument, Version=4.0.2.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\..\\packages\\System.Xml.XPath.XmlDocument.4.3.0\\lib\\net46\\System.Xml.XPath.XmlDocument.dll</HintPath>\n    </Reference>\n    <Reference Include=\"TimeZoneConverter, Version=3.1.0.0, Culture=neutral, PublicKeyToken=e20ab7d0d9479841, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\..\\packages\\TimeZoneConverter.3.1.0\\lib\\net471\\TimeZoneConverter.dll</HintPath>\n    </Reference>\n    <Reference Include=\"Topshelf, Version=4.1.0.172, Culture=neutral, PublicKeyToken=b800c4cfcdeea87b, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\..\\packages\\Topshelf.4.1.0\\lib\\net452\\Topshelf.dll</HintPath>\n    </Reference>\n  </ItemGroup>\n  <ItemGroup>\n    <Compile Include=\"DotNetFxConsumerHostBootstrap.cs\" />\n    <Compile Include=\"DotNetFxConsumerHostModule.cs\" />\n    <Compile Include=\"Handlers\\TestHandler.cs\" />\n    <Compile Include=\"Program.cs\" />\n    <Compile Include=\"Properties\\AssemblyInfo.cs\" />\n  </ItemGroup>\n  <ItemGroup>\n    <None Include=\"App.config\" />\n    <None Include=\"NLog.config\">\n      <CopyToOutputDirectory>Always</CopyToOutputDirectory>\n    </None>\n    <None Include=\"NLog.xsd\">\n      <SubType>Designer</SubType>\n    </None>\n    <None Include=\"packages.config\" />\n  </ItemGroup>\n  <ItemGroup>\n    <ProjectReference Include=\"..\\..\\Abplus.MqMessages.RebusCore\\Abplus.MqMessages.RebusCore.csproj\">\n      <Project>{d27e21c1-96c8-4eff-aa4d-43a8ed7cc40b}</Project>\n      <Name>Abplus.MqMessages.RebusCore</Name>\n    </ProjectReference>\n    <ProjectReference Include=\"..\\..\\Abplus.MqMessages.RebusRabbitMqConsumer\\Abplus.MqMessages.RebusRabbitMqConsumer.csproj\">\n      <Project>{e0e26a07-b7a6-41fd-ab74-1cfcb5191f94}</Project>\n      <Name>Abplus.MqMessages.RebusRabbitMqConsumer</Name>\n    </ProjectReference>\n    <ProjectReference Include=\"..\\..\\Abplus\\Abplus.csproj\">\n      <Project>{10c03a51-881c-4779-9b24-5bfce234c175}</Project>\n      <Name>Abplus</Name>\n    </ProjectReference>\n    <ProjectReference Include=\"..\\Sample.MqMessages\\Sample.MqMessages.csproj\">\n      <Project>{d71b7fba-e998-4141-81e6-e319c3941659}</Project>\n      <Name>Sample.MqMessages</Name>\n    </ProjectReference>\n  </ItemGroup>\n  <ItemGroup />\n  <Import Project=\"$(MSBuildToolsPath)\\Microsoft.CSharp.targets\" />\n</Project>"
  },
  {
    "path": "src/Samples/Sample.DotNetFxConsumerHost/packages.config",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<packages>\n  <package id=\"Abp\" version=\"4.6.0\" targetFramework=\"net471\" />\n  <package id=\"Castle.Core\" version=\"4.3.1\" targetFramework=\"net471\" />\n  <package id=\"Castle.Core-NLog\" version=\"4.3.1\" targetFramework=\"net471\" />\n  <package id=\"Castle.LoggingFacility\" version=\"4.1.1\" targetFramework=\"net471\" />\n  <package id=\"Castle.Windsor\" version=\"4.1.1\" targetFramework=\"net471\" />\n  <package id=\"JetBrains.Annotations\" version=\"2018.3.0\" targetFramework=\"net471\" />\n  <package id=\"Microsoft.Diagnostics.Tracing.EventSource.Redist\" version=\"1.1.28\" targetFramework=\"net471\" />\n  <package id=\"Microsoft.Extensions.Caching.Abstractions\" version=\"2.2.0\" targetFramework=\"net471\" />\n  <package id=\"Microsoft.Extensions.Caching.Memory\" version=\"2.2.0\" targetFramework=\"net471\" />\n  <package id=\"Microsoft.Extensions.DependencyInjection.Abstractions\" version=\"2.2.0\" targetFramework=\"net471\" />\n  <package id=\"Microsoft.Extensions.Options\" version=\"2.2.0\" targetFramework=\"net471\" />\n  <package id=\"Microsoft.Extensions.Primitives\" version=\"2.2.0\" targetFramework=\"net471\" />\n  <package id=\"Newtonsoft.Json\" version=\"12.0.1\" targetFramework=\"net471\" />\n  <package id=\"Nito.AsyncEx.Context\" version=\"5.0.0\" targetFramework=\"net471\" />\n  <package id=\"Nito.AsyncEx.Coordination\" version=\"5.0.0\" targetFramework=\"net471\" />\n  <package id=\"Nito.AsyncEx.Tasks\" version=\"5.0.0\" targetFramework=\"net471\" />\n  <package id=\"Nito.Collections.Deque\" version=\"1.0.4\" targetFramework=\"net471\" />\n  <package id=\"Nito.Disposables\" version=\"2.0.0\" targetFramework=\"net471\" />\n  <package id=\"NLog\" version=\"4.5.10\" targetFramework=\"net471\" />\n  <package id=\"NLog.Config\" version=\"4.5.10\" targetFramework=\"net471\" />\n  <package id=\"NLog.Schema\" version=\"4.5.10\" targetFramework=\"net471\" />\n  <package id=\"RabbitMQ.Client\" version=\"5.0.1\" targetFramework=\"net471\" />\n  <package id=\"Rebus\" version=\"4.2.1\" targetFramework=\"net471\" />\n  <package id=\"Rebus.Castle.Windsor\" version=\"4.1.0\" targetFramework=\"net471\" />\n  <package id=\"Rebus.NLog\" version=\"5.0.0\" targetFramework=\"net471\" />\n  <package id=\"Rebus.RabbitMq\" version=\"4.4.2\" targetFramework=\"net471\" />\n  <package id=\"System.Buffers\" version=\"4.4.0\" targetFramework=\"net471\" />\n  <package id=\"System.Collections.Immutable\" version=\"1.5.0\" targetFramework=\"net471\" />\n  <package id=\"System.ComponentModel.Annotations\" version=\"4.5.0\" targetFramework=\"net471\" />\n  <package id=\"System.Configuration.ConfigurationManager\" version=\"4.5.0\" targetFramework=\"net471\" />\n  <package id=\"System.Data.Common\" version=\"4.3.0\" targetFramework=\"net471\" />\n  <package id=\"System.Linq.Dynamic.Core\" version=\"1.0.10\" targetFramework=\"net471\" />\n  <package id=\"System.Linq.Queryable\" version=\"4.3.0\" targetFramework=\"net471\" />\n  <package id=\"System.Memory\" version=\"4.5.1\" targetFramework=\"net471\" />\n  <package id=\"System.Numerics.Vectors\" version=\"4.4.0\" targetFramework=\"net471\" />\n  <package id=\"System.Runtime.CompilerServices.Unsafe\" version=\"4.5.1\" targetFramework=\"net471\" />\n  <package id=\"System.Runtime.InteropServices.RuntimeInformation\" version=\"4.3.0\" targetFramework=\"net471\" />\n  <package id=\"System.Runtime.Serialization.Formatters\" version=\"4.3.0\" targetFramework=\"net471\" />\n  <package id=\"System.Runtime.Serialization.Primitives\" version=\"4.3.0\" targetFramework=\"net471\" />\n  <package id=\"System.Security.AccessControl\" version=\"4.5.0\" targetFramework=\"net471\" />\n  <package id=\"System.Security.Claims\" version=\"4.3.0\" targetFramework=\"net471\" />\n  <package id=\"System.Security.Permissions\" version=\"4.5.0\" targetFramework=\"net471\" />\n  <package id=\"System.Security.Principal.Windows\" version=\"4.5.0\" targetFramework=\"net471\" />\n  <package id=\"System.Threading\" version=\"4.3.0\" targetFramework=\"net471\" />\n  <package id=\"System.Xml.XmlDocument\" version=\"4.3.0\" targetFramework=\"net471\" />\n  <package id=\"System.Xml.XPath\" version=\"4.3.0\" targetFramework=\"net471\" />\n  <package id=\"System.Xml.XPath.XmlDocument\" version=\"4.3.0\" targetFramework=\"net471\" />\n  <package id=\"TimeZoneConverter\" version=\"3.1.0\" targetFramework=\"net471\" />\n  <package id=\"Topshelf\" version=\"4.1.0\" targetFramework=\"net471\" />\n</packages>"
  },
  {
    "path": "src/Samples/Sample.DotNetFxPublisherHost/App.config",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<configuration>\n    <startup> \n        <supportedRuntime version=\"v4.0\" sku=\".NETFramework,Version=v4.7.1\" />\n    </startup>\n  <runtime>\n    <assemblyBinding xmlns=\"urn:schemas-microsoft-com:asm.v1\">\n      <dependentAssembly>\n        <assemblyIdentity name=\"System.Runtime.InteropServices.RuntimeInformation\" publicKeyToken=\"b03f5f7f11d50a3a\" culture=\"neutral\" />\n        <bindingRedirect oldVersion=\"0.0.0.0-4.0.2.0\" newVersion=\"4.0.2.0\" />\n      </dependentAssembly>\n      <dependentAssembly>\n        <assemblyIdentity name=\"System.ComponentModel.Annotations\" publicKeyToken=\"b03f5f7f11d50a3a\" culture=\"neutral\" />\n        <bindingRedirect oldVersion=\"0.0.0.0-4.2.1.0\" newVersion=\"4.2.1.0\" />\n      </dependentAssembly>\n      <dependentAssembly>\n        <assemblyIdentity name=\"Newtonsoft.Json\" publicKeyToken=\"30ad4fe6b2a6aeed\" culture=\"neutral\" />\n        <bindingRedirect oldVersion=\"0.0.0.0-12.0.0.0\" newVersion=\"12.0.0.0\" />\n      </dependentAssembly>\n      <dependentAssembly>\n        <assemblyIdentity name=\"System.Collections.Immutable\" publicKeyToken=\"b03f5f7f11d50a3a\" culture=\"neutral\" />\n        <bindingRedirect oldVersion=\"0.0.0.0-1.2.3.0\" newVersion=\"1.2.3.0\" />\n      </dependentAssembly>\n    </assemblyBinding>\n  </runtime>\n</configuration>"
  },
  {
    "path": "src/Samples/Sample.DotNetFxPublisherHost/BackgroundWorker/TestWorker.cs",
    "content": "﻿using Abp.Dependency;\nusing Abp.MqMessages;\nusing Abp.Threading.BackgroundWorkers;\nusing Abp.Threading.Timers;\nusing System;\n\nnamespace Sample.DotNetFxPublisherHost.BackgroundWorker\n{\n    public class TestWorker : PeriodicBackgroundWorkerBase, ISingletonDependency\n    {\n        private readonly IMqMessagePublisher _publisher;\n\n        public TestWorker(AbpTimer timer, IMqMessagePublisher publisher)\n            : base(timer)\n        {\n            _publisher = publisher;\n            Timer.Period = 1 * 1000;//3 seconds\n            Timer.RunOnStart = true;\n        }\n\n        protected override void DoWork()\n        {\n            Logger.Info($\"TestWork Done! Time:{DateTime.Now}\");\n            _publisher.Publish(new TestMessage\n            {\n                Value = \"TestWork from DotNetFxHost:BlaBlaBlaBlaBlaBla\",\n                Time = DateTime.Now\n            });\n        }\n    }\n}\n"
  },
  {
    "path": "src/Samples/Sample.DotNetFxPublisherHost/DotNetFxPublisherHostBootstrap.cs",
    "content": "﻿using Abp;\n\nnamespace Sample.DotNetFxPublisherHost\n{\n    public class DotNetFxPublisherHostBootstrap\n    {\n        private static readonly AbpBootstrapper _bs = AbpBootstrapper.Create<DotNetFxPublisherHostModule>();\n\n        public void Start()\n        {\n            _bs.Initialize();\n        }\n\n        public void Stop()\n        {\n            _bs.Dispose();\n        }\n    }\n}\n"
  },
  {
    "path": "src/Samples/Sample.DotNetFxPublisherHost/DotNetFxPublisherHostModule.cs",
    "content": "﻿using Abp.Configuration.Startup;\nusing Abp.Modules;\nusing Abp.MqMessages.Publishers;\nusing Abp.Threading.BackgroundWorkers;\nusing Castle.Facilities.Logging;\nusing Castle.Services.Logging.NLogIntegration;\nusing Rebus.NLog.Config;\nusing Sample.DotNetFxPublisherHost.BackgroundWorker;\nusing System.Reflection;\n\nnamespace Sample.DotNetFxPublisherHost\n{\n    [DependsOn(typeof(RebusRabbitMqPublisherModule))]\n    public class DotNetFxPublisherHostModule : AbpModule\n    {\n        public override void PreInitialize()\n        {\n            Configuration.Modules.UseAbplusRebusRabbitMqPublisher()\n                .UseLogging(c => c.ColoredConsole())//c.NLog()\n                .ConnectTo(\"amqp://dev:dev@rabbitmq.local.abplus.cn/\");//set your own connection string of rabbitmq\n\n            Configuration.BackgroundJobs.IsJobExecutionEnabled = true;\n        }\n\n        public override void Initialize()\n        {\n            IocManager.RegisterAssemblyByConvention(Assembly.GetExecutingAssembly());\n        }\n\n        public override void PostInitialize()\n        {\n            Abp.Dependency.IocManager.Instance.IocContainer.AddFacility<LoggingFacility>(f => f.LogUsing<NLogFactory>().WithConfig(\"nlog.config\"));\n\n            var workManager = IocManager.Resolve<IBackgroundWorkerManager>();\n            workManager.Add(IocManager.Resolve<TestWorker>());\n        }\n    }\n}\n"
  },
  {
    "path": "src/Samples/Sample.DotNetFxPublisherHost/NLog.config",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\" ?>\n<nlog xmlns=\"http://www.nlog-project.org/schemas/NLog.xsd\"\n      xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\"\n      xsi:schemaLocation=\"http://www.nlog-project.org/schemas/NLog.xsd NLog.xsd\"\n      autoReload=\"true\"\n      throwExceptions=\"false\"\n      internalLogLevel=\"Off\" internalLogFile=\"c:\\temp\\nlog-internal.log\">\n\n  <!-- optional, add some variables\n  https://github.com/nlog/NLog/wiki/Configuration-file#variables\n  -->\n  <variable name=\"myvar\" value=\"myvalue\"/>\n\n  <!--\n  See https://github.com/nlog/nlog/wiki/Configuration-file\n  for information on customizing logging rules and outputs.\n   -->\n  <targets>\n\n    <!--\n    add your targets here\n    See https://github.com/nlog/NLog/wiki/Targets for possible targets.\n    See https://github.com/nlog/NLog/wiki/Layout-Renderers for the possible layout renderers.\n    -->\n\n    <!--\n    Write events to a file with the date in the filename.\n    <target xsi:type=\"File\" name=\"f\" fileName=\"${basedir}/logs/${shortdate}.log\"\n            layout=\"${longdate} ${uppercase:${level}} ${message}\" />\n    -->\n  </targets>\n\n  <rules>\n    <!-- add your logging rules here -->\n\n    <!--\n    Write all events with minimal level of Debug (So Debug, Info, Warn, Error and Fatal, but not Trace)  to \"f\"\n    <logger name=\"*\" minlevel=\"Debug\" writeTo=\"f\" />\n    -->\n  </rules>\n</nlog>\n"
  },
  {
    "path": "src/Samples/Sample.DotNetFxPublisherHost/NLog.xsd",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<xs:schema id=\"NLog\" targetNamespace=\"http://www.nlog-project.org/schemas/NLog.xsd\" elementFormDefault=\"qualified\" xmlns:xs=\"http://www.w3.org/2001/XMLSchema\" xmlns=\"http://www.nlog-project.org/schemas/NLog.xsd\">\n  <xs:element name=\"nlog\" type=\"NLogConfiguration\" />\n  <xs:complexType name=\"NLogConfiguration\">\n    <xs:choice minOccurs=\"0\" maxOccurs=\"unbounded\">\n      <xs:element name=\"extensions\" type=\"NLogExtensions\" />\n      <xs:element name=\"include\" type=\"NLogInclude\" />\n      <xs:element name=\"variable\" type=\"NLogVariable\" />\n      <xs:element name=\"targets\" type=\"NLogTargets\" />\n      <xs:element name=\"rules\" type=\"NLogRules\" />\n      <xs:element name=\"time\" type=\"TimeSource\" />\n    </xs:choice>\n    <xs:attribute name=\"autoReload\" type=\"xs:boolean\">\n      <xs:annotation>\n        <xs:documentation>Watch config file for changes and reload automatically.</xs:documentation>\n      </xs:annotation>\n    </xs:attribute>\n    <xs:attribute name=\"internalLogToConsole\" type=\"xs:boolean\">\n      <xs:annotation>\n        <xs:documentation>Print internal NLog messages to the console. Default value is: false</xs:documentation>\n      </xs:annotation>\n    </xs:attribute>\n    <xs:attribute name=\"internalLogToConsoleError\" type=\"xs:boolean\">\n      <xs:annotation>\n        <xs:documentation>Print internal NLog messages to the console error output. Default value is: false</xs:documentation>\n      </xs:annotation>\n    </xs:attribute>\n    <xs:attribute name=\"internalLogFile\" type=\"xs:string\">\n      <xs:annotation>\n        <xs:documentation>Write internal NLog messages to the specified file.</xs:documentation>\n      </xs:annotation>\n    </xs:attribute>\n    <xs:attribute name=\"internalLogLevel\" type=\"NLogLevel\">\n      <xs:annotation>\n        <xs:documentation>Log level threshold for internal log messages. Default value is: Info.</xs:documentation>\n      </xs:annotation>\n    </xs:attribute>\n    <xs:attribute name=\"globalThreshold\" type=\"NLogLevel\">\n      <xs:annotation>\n        <xs:documentation>Global log level threshold for application log messages. Messages below this level won't be logged..</xs:documentation>\n      </xs:annotation>\n    </xs:attribute>\n    <xs:attribute name=\"throwExceptions\" type=\"xs:boolean\">\n      <xs:annotation>\n        <xs:documentation>Throw an exception when there is an internal error. Default value is: false.</xs:documentation>\n      </xs:annotation>\n    </xs:attribute>\n    <xs:attribute name=\"throwConfigExceptions\" type=\"xs:boolean\">\n      <xs:annotation>\n        <xs:documentation>Throw an exception when there is a configuration error. If not set, determined by throwExceptions.</xs:documentation>\n      </xs:annotation>\n    </xs:attribute>\n    <xs:attribute name=\"keepVariablesOnReload\" type=\"xs:boolean\">\n      <xs:annotation>\n        <xs:documentation>Gets or sets a value indicating whether Variables should be kept on configuration reload. Default value is: false.</xs:documentation>\n      </xs:annotation>\n    </xs:attribute>\n    <xs:attribute name=\"internalLogToTrace\" type=\"xs:boolean\">\n      <xs:annotation>\n        <xs:documentation>Write internal NLog messages to the System.Diagnostics.Trace. Default value is: false.</xs:documentation>\n      </xs:annotation>\n    </xs:attribute>\n    <xs:attribute name=\"internalLogIncludeTimestamp\" type=\"xs:boolean\">\n      <xs:annotation>\n        <xs:documentation>Write timestamps for internal NLog messages. Default value is: true.</xs:documentation>\n      </xs:annotation>\n    </xs:attribute>\n    <xs:attribute name=\"useInvariantCulture\" type=\"xs:boolean\">\n      <xs:annotation>\n        <xs:documentation>Use InvariantCulture as default culture instead of CurrentCulture.  Default value is: false.</xs:documentation>\n      </xs:annotation>\n    </xs:attribute>\n    <xs:attribute name=\"parseMessageTemplates\" type=\"xs:boolean\">\n      <xs:annotation>\n        <xs:documentation>Perform mesage template parsing and formatting of LogEvent messages (true = Always, false = Never, empty = Auto Detect). Default value is: empty.</xs:documentation>\n      </xs:annotation>\n    </xs:attribute>\n  </xs:complexType>\n  <xs:complexType name=\"NLogTargets\">\n    <xs:choice minOccurs=\"0\" maxOccurs=\"unbounded\">\n      <xs:element name=\"default-wrapper\" type=\"WrapperTargetBase\" />\n      <xs:element name=\"default-target-parameters\" type=\"Target\" />\n      <xs:element name=\"target\" type=\"Target\" />\n      <xs:element name=\"wrapper-target\" type=\"WrapperTargetBase\" />\n      <xs:element name=\"compound-target\" type=\"CompoundTargetBase\" />\n    </xs:choice>\n    <xs:attribute name=\"async\" type=\"xs:boolean\">\n      <xs:annotation>\n        <xs:documentation>Make all targets within this section asynchronous (creates additional threads but the calling thread isn't blocked by any target writes).</xs:documentation>\n      </xs:annotation>\n    </xs:attribute>\n  </xs:complexType>\n  <xs:complexType name=\"NLogRules\">\n    <xs:sequence minOccurs=\"0\" maxOccurs=\"unbounded\">\n      <xs:element name=\"logger\" type=\"NLogLoggerRule\" />\n    </xs:sequence>\n  </xs:complexType>\n  <xs:complexType name=\"NLogExtensions\">\n    <xs:choice minOccurs=\"0\" maxOccurs=\"unbounded\">\n      <xs:element name=\"add\" type=\"NLogExtensionsAdd\" />\n    </xs:choice>\n  </xs:complexType>\n  <xs:complexType name=\"NLogExtensionsAdd\">\n    <xs:attribute name=\"prefix\" type=\"xs:string\">\n      <xs:annotation>\n        <xs:documentation>Prefix for targets/layout renderers/filters/conditions loaded from this assembly.</xs:documentation>\n      </xs:annotation>\n    </xs:attribute>\n    <xs:attribute name=\"assemblyFile\" type=\"xs:string\">\n      <xs:annotation>\n        <xs:documentation>Load NLog extensions from the specified file (*.dll)</xs:documentation>\n      </xs:annotation>\n    </xs:attribute>\n    <xs:attribute name=\"assembly\" type=\"xs:string\">\n      <xs:annotation>\n        <xs:documentation>Load NLog extensions from the specified assembly. Assembly name should be fully qualified.</xs:documentation>\n      </xs:annotation>\n    </xs:attribute>\n  </xs:complexType>\n  <xs:complexType name=\"NLogLoggerRule\">\n    <xs:choice minOccurs=\"0\" maxOccurs=\"unbounded\">\n      <xs:element name=\"filters\" type=\"NLogFilters\" />\n    </xs:choice>\n    <xs:attribute name=\"name\" use=\"optional\">\n      <xs:annotation>\n        <xs:documentation>Name of the logger. May include '*' character which acts like a wildcard. Allowed forms are: *, Name, *Name, Name* and *Name*</xs:documentation>\n      </xs:annotation>\n    </xs:attribute>\n    <xs:attribute name=\"levels\" type=\"NLogLevelList\">\n      <xs:annotation>\n        <xs:documentation>Comma separated list of levels that this rule matches.</xs:documentation>\n      </xs:annotation>\n    </xs:attribute>\n    <xs:attribute name=\"minlevel\" type=\"NLogLevel\">\n      <xs:annotation>\n        <xs:documentation>Minimum level that this rule matches.</xs:documentation>\n      </xs:annotation>\n    </xs:attribute>\n    <xs:attribute name=\"maxlevel\" type=\"NLogLevel\">\n      <xs:annotation>\n        <xs:documentation>Maximum level that this rule matches.</xs:documentation>\n      </xs:annotation>\n    </xs:attribute>\n    <xs:attribute name=\"level\" type=\"NLogLevel\">\n      <xs:annotation>\n        <xs:documentation>Level that this rule matches.</xs:documentation>\n      </xs:annotation>\n    </xs:attribute>\n    <xs:attribute name=\"writeTo\" type=\"NLogTargetIDList\">\n      <xs:annotation>\n        <xs:documentation>Comma separated list of target names.</xs:documentation>\n      </xs:annotation>\n    </xs:attribute>\n    <xs:attribute name=\"final\" type=\"xs:boolean\" default=\"false\">\n      <xs:annotation>\n        <xs:documentation>Ignore further rules if this one matches.</xs:documentation>\n      </xs:annotation>\n    </xs:attribute>\n    <xs:attribute name=\"enabled\" type=\"xs:boolean\" default=\"true\">\n      <xs:annotation>\n        <xs:documentation>Enable or disable logging rule. Disabled rules are ignored.</xs:documentation>\n      </xs:annotation>\n    </xs:attribute>\n  </xs:complexType>\n  <xs:complexType name=\"NLogFilters\">\n    <xs:choice minOccurs=\"0\" maxOccurs=\"unbounded\">\n      <xs:element name=\"when\" type=\"when\" />\n      <xs:element name=\"whenContains\" type=\"whenContains\" />\n      <xs:element name=\"whenEqual\" type=\"whenEqual\" />\n      <xs:element name=\"whenNotContains\" type=\"whenNotContains\" />\n      <xs:element name=\"whenNotEqual\" type=\"whenNotEqual\" />\n      <xs:element name=\"whenRepeated\" type=\"whenRepeated\" />\n    </xs:choice>\n  </xs:complexType>\n  <xs:simpleType name=\"NLogLevel\">\n    <xs:restriction base=\"xs:string\">\n      <xs:enumeration value=\"Off\" />\n      <xs:enumeration value=\"Trace\" />\n      <xs:enumeration value=\"Debug\" />\n      <xs:enumeration value=\"Info\" />\n      <xs:enumeration value=\"Warn\" />\n      <xs:enumeration value=\"Error\" />\n      <xs:enumeration value=\"Fatal\" />\n    </xs:restriction>\n  </xs:simpleType>\n  <xs:simpleType name=\"LineEndingMode\">\n    <xs:restriction base=\"xs:string\">\n      <xs:enumeration value=\"Default\" />\n      <xs:enumeration value=\"CRLF\" />\n      <xs:enumeration value=\"CR\" />\n      <xs:enumeration value=\"LF\" />\n      <xs:enumeration value=\"None\" />\n    </xs:restriction>\n  </xs:simpleType>\n  <xs:simpleType name=\"NLogLevelList\">\n    <xs:restriction base=\"xs:string\">\n      <xs:pattern value=\"(|Trace|Debug|Info|Warn|Error|Fatal)(,(Trace|Debug|Info|Warn|Error|Fatal))*\" />\n    </xs:restriction>\n  </xs:simpleType>\n  <xs:complexType name=\"NLogInclude\">\n    <xs:attribute name=\"file\" type=\"SimpleLayoutAttribute\" use=\"required\">\n      <xs:annotation>\n        <xs:documentation>Name of the file to be included. You could use * wildcard. The name is relative to the name of the current config file.</xs:documentation>\n      </xs:annotation>\n    </xs:attribute>\n    <xs:attribute name=\"ignoreErrors\" type=\"xs:boolean\" use=\"optional\" default=\"false\">\n      <xs:annotation>\n        <xs:documentation>Ignore any errors in the include file.</xs:documentation>\n      </xs:annotation>\n    </xs:attribute>\n  </xs:complexType>\n  <xs:complexType name=\"NLogVariable\">\n    <xs:attribute name=\"name\" type=\"xs:string\" use=\"required\">\n      <xs:annotation>\n        <xs:documentation>Variable name.</xs:documentation>\n      </xs:annotation>\n    </xs:attribute>\n    <xs:attribute name=\"value\" type=\"SimpleLayoutAttribute\" use=\"required\">\n      <xs:annotation>\n        <xs:documentation>Variable value.</xs:documentation>\n      </xs:annotation>\n    </xs:attribute>\n  </xs:complexType>\n  <xs:simpleType name=\"NLogTargetIDList\">\n    <xs:restriction base=\"xs:string\">\n      <xs:pattern value=\"(|([a-zA-Z][a-zA-Z0-9_\\-]*))(,([a-zA-Z][a-zA-Z0-9_\\-]*))*\" />\n    </xs:restriction>\n  </xs:simpleType>\n  <xs:complexType name=\"Target\" abstract=\"true\"></xs:complexType>\n  <xs:complexType name=\"TargetRef\">\n    <xs:attribute name=\"name\" type=\"xs:string\" use=\"required\" />\n  </xs:complexType>\n  <xs:complexType name=\"WrapperTargetBase\" abstract=\"true\">\n    <xs:complexContent>\n      <xs:extension base=\"Target\">\n        <xs:choice minOccurs=\"0\" maxOccurs=\"unbounded\">\n          <xs:element name=\"target\" type=\"Target\" minOccurs=\"1\" maxOccurs=\"1\" />\n          <xs:element name=\"wrapper-target\" type=\"WrapperTargetBase\" minOccurs=\"1\" maxOccurs=\"1\" />\n          <xs:element name=\"compound-target\" type=\"CompoundTargetBase\" minOccurs=\"1\" maxOccurs=\"1\" />\n          <xs:element name=\"target-ref\" type=\"TargetRef\" minOccurs=\"1\" maxOccurs=\"1\" />\n          <xs:element name=\"wrapper-target-ref\" type=\"TargetRef\" minOccurs=\"1\" maxOccurs=\"1\" />\n          <xs:element name=\"compound-target-ref\" type=\"TargetRef\" minOccurs=\"1\" maxOccurs=\"1\" />\n        </xs:choice>\n      </xs:extension>\n    </xs:complexContent>\n  </xs:complexType>\n  <xs:complexType name=\"CompoundTargetBase\" abstract=\"true\">\n    <xs:complexContent>\n      <xs:extension base=\"Target\">\n        <xs:choice minOccurs=\"0\" maxOccurs=\"unbounded\">\n          <xs:element name=\"target\" type=\"Target\" minOccurs=\"1\" maxOccurs=\"unbounded\" />\n          <xs:element name=\"wrapper-target\" type=\"WrapperTargetBase\" minOccurs=\"1\" maxOccurs=\"1\" />\n          <xs:element name=\"compound-target\" type=\"CompoundTargetBase\" minOccurs=\"1\" maxOccurs=\"1\" />\n          <xs:element name=\"target-ref\" type=\"TargetRef\" minOccurs=\"1\" maxOccurs=\"1\" />\n          <xs:element name=\"wrapper-target-ref\" type=\"TargetRef\" minOccurs=\"1\" maxOccurs=\"1\" />\n          <xs:element name=\"compound-target-ref\" type=\"TargetRef\" minOccurs=\"1\" maxOccurs=\"1\" />\n        </xs:choice>\n      </xs:extension>\n    </xs:complexContent>\n  </xs:complexType>\n  <xs:complexType name=\"Filter\" abstract=\"true\"></xs:complexType>\n  <xs:complexType name=\"TimeSource\" abstract=\"true\"></xs:complexType>\n  <xs:simpleType name=\"SimpleLayoutAttribute\">\n    <xs:restriction base=\"xs:string\">\n      <xs:pattern value=\".*\" />\n    </xs:restriction>\n  </xs:simpleType>\n  <xs:simpleType name=\"Condition\">\n    <xs:restriction base=\"xs:string\">\n      <xs:minLength value=\"1\" />\n    </xs:restriction>\n  </xs:simpleType>\n  <xs:complexType name=\"AsyncWrapper\">\n    <xs:complexContent>\n      <xs:extension base=\"WrapperTargetBase\">\n        <xs:choice minOccurs=\"0\" maxOccurs=\"unbounded\">\n          <xs:element name=\"name\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:string\" />\n          <xs:element name=\"batchSize\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:integer\" />\n          <xs:element name=\"fullBatchSizeWriteLimit\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:integer\" />\n          <xs:element name=\"overflowAction\" minOccurs=\"0\" maxOccurs=\"1\" type=\"NLog.Targets.Wrappers.AsyncTargetWrapperOverflowAction\" />\n          <xs:element name=\"queueLimit\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:integer\" />\n          <xs:element name=\"timeToSleepBetweenBatches\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:integer\" />\n          <xs:element name=\"optimizeBufferReuse\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:boolean\" />\n        </xs:choice>\n        <xs:attribute name=\"name\" type=\"xs:string\">\n          <xs:annotation>\n            <xs:documentation>Name of the target.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"batchSize\" type=\"xs:integer\">\n          <xs:annotation>\n            <xs:documentation>Number of log events that should be processed in a batch by the lazy writer thread.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"fullBatchSizeWriteLimit\" type=\"xs:integer\">\n          <xs:annotation>\n            <xs:documentation>Limit of full s to write before yielding into  Performance is better when writing many small batches, than writing a single large batch</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"overflowAction\" type=\"NLog.Targets.Wrappers.AsyncTargetWrapperOverflowAction\">\n          <xs:annotation>\n            <xs:documentation>Action to be taken when the lazy writer thread request queue count exceeds the set limit.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"queueLimit\" type=\"xs:integer\">\n          <xs:annotation>\n            <xs:documentation>Limit on the number of requests in the lazy writer thread request queue.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"timeToSleepBetweenBatches\" type=\"xs:integer\">\n          <xs:annotation>\n            <xs:documentation>Time in milliseconds to sleep between batches.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"optimizeBufferReuse\" type=\"xs:boolean\">\n          <xs:annotation>\n            <xs:documentation>Target supports reuse of internal buffers, and doesn't have to constantly allocate new buffers Required for legacy NLog-targets, that expects buffers to remain stable after Write-method exit</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n      </xs:extension>\n    </xs:complexContent>\n  </xs:complexType>\n  <xs:simpleType name=\"NLog.Targets.Wrappers.AsyncTargetWrapperOverflowAction\">\n    <xs:restriction base=\"xs:string\">\n      <xs:enumeration value=\"Grow\" />\n      <xs:enumeration value=\"Discard\" />\n      <xs:enumeration value=\"Block\" />\n    </xs:restriction>\n  </xs:simpleType>\n  <xs:complexType name=\"AutoFlushWrapper\">\n    <xs:complexContent>\n      <xs:extension base=\"WrapperTargetBase\">\n        <xs:choice minOccurs=\"0\" maxOccurs=\"unbounded\">\n          <xs:element name=\"asyncFlush\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:boolean\" />\n          <xs:element name=\"condition\" minOccurs=\"0\" maxOccurs=\"1\" type=\"Condition\" />\n          <xs:element name=\"name\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:string\" />\n          <xs:element name=\"optimizeBufferReuse\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:boolean\" />\n        </xs:choice>\n        <xs:attribute name=\"asyncFlush\" type=\"xs:boolean\">\n          <xs:annotation>\n            <xs:documentation>Delay the flush until the LogEvent has been confirmed as written</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"condition\" type=\"Condition\">\n          <xs:annotation>\n            <xs:documentation>Condition expression. Log events who meet this condition will cause a flush on the wrapped target.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"name\" type=\"xs:string\">\n          <xs:annotation>\n            <xs:documentation>Name of the target.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"optimizeBufferReuse\" type=\"xs:boolean\">\n          <xs:annotation>\n            <xs:documentation>Target supports reuse of internal buffers, and doesn't have to constantly allocate new buffers Required for legacy NLog-targets, that expects buffers to remain stable after Write-method exit</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n      </xs:extension>\n    </xs:complexContent>\n  </xs:complexType>\n  <xs:complexType name=\"BufferingWrapper\">\n    <xs:complexContent>\n      <xs:extension base=\"WrapperTargetBase\">\n        <xs:choice minOccurs=\"0\" maxOccurs=\"unbounded\">\n          <xs:element name=\"name\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:string\" />\n          <xs:element name=\"bufferSize\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:integer\" />\n          <xs:element name=\"flushTimeout\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:integer\" />\n          <xs:element name=\"overflowAction\" minOccurs=\"0\" maxOccurs=\"1\" type=\"NLog.Targets.Wrappers.BufferingTargetWrapperOverflowAction\" />\n          <xs:element name=\"slidingTimeout\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:boolean\" />\n          <xs:element name=\"optimizeBufferReuse\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:boolean\" />\n        </xs:choice>\n        <xs:attribute name=\"name\" type=\"xs:string\">\n          <xs:annotation>\n            <xs:documentation>Name of the target.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"bufferSize\" type=\"xs:integer\">\n          <xs:annotation>\n            <xs:documentation>Number of log events to be buffered.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"flushTimeout\" type=\"xs:integer\">\n          <xs:annotation>\n            <xs:documentation>Timeout (in milliseconds) after which the contents of buffer will be flushed if there's no write in the specified period of time. Use -1 to disable timed flushes.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"overflowAction\" type=\"NLog.Targets.Wrappers.BufferingTargetWrapperOverflowAction\">\n          <xs:annotation>\n            <xs:documentation>Action to take if the buffer overflows.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"slidingTimeout\" type=\"xs:boolean\">\n          <xs:annotation>\n            <xs:documentation>Indicates whether to use sliding timeout.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"optimizeBufferReuse\" type=\"xs:boolean\">\n          <xs:annotation>\n            <xs:documentation>Target supports reuse of internal buffers, and doesn't have to constantly allocate new buffers Required for legacy NLog-targets, that expects buffers to remain stable after Write-method exit</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n      </xs:extension>\n    </xs:complexContent>\n  </xs:complexType>\n  <xs:simpleType name=\"NLog.Targets.Wrappers.BufferingTargetWrapperOverflowAction\">\n    <xs:restriction base=\"xs:string\">\n      <xs:enumeration value=\"Flush\" />\n      <xs:enumeration value=\"Discard\" />\n    </xs:restriction>\n  </xs:simpleType>\n  <xs:complexType name=\"Chainsaw\">\n    <xs:complexContent>\n      <xs:extension base=\"Target\">\n        <xs:choice minOccurs=\"0\" maxOccurs=\"unbounded\">\n          <xs:element name=\"name\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:string\" />\n          <xs:element name=\"encoding\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:string\" />\n          <xs:element name=\"layout\" minOccurs=\"0\" maxOccurs=\"1\" type=\"Layout\" />\n          <xs:element name=\"lineEnding\" minOccurs=\"0\" maxOccurs=\"1\" type=\"LineEndingMode\" />\n          <xs:element name=\"maxMessageSize\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:integer\" />\n          <xs:element name=\"newLine\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:boolean\" />\n          <xs:element name=\"onConnectionOverflow\" minOccurs=\"0\" maxOccurs=\"1\" type=\"NLog.Targets.NetworkTargetConnectionsOverflowAction\" />\n          <xs:element name=\"maxQueueSize\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:integer\" />\n          <xs:element name=\"maxConnections\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:integer\" />\n          <xs:element name=\"keepConnection\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:boolean\" />\n          <xs:element name=\"connectionCacheSize\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:integer\" />\n          <xs:element name=\"address\" minOccurs=\"0\" maxOccurs=\"1\" type=\"Layout\" />\n          <xs:element name=\"onOverflow\" minOccurs=\"0\" maxOccurs=\"1\" type=\"NLog.Targets.NetworkTargetOverflowAction\" />\n          <xs:element name=\"parameter\" minOccurs=\"0\" maxOccurs=\"unbounded\" type=\"NLog.Targets.NLogViewerParameterInfo\" />\n          <xs:element name=\"ndlcItemSeparator\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:string\" />\n          <xs:element name=\"ndcItemSeparator\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:string\" />\n          <xs:element name=\"includeNLogData\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:boolean\" />\n          <xs:element name=\"includeSourceInfo\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:boolean\" />\n          <xs:element name=\"includeNdlc\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:boolean\" />\n          <xs:element name=\"includeNdc\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:boolean\" />\n          <xs:element name=\"includeMdlc\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:boolean\" />\n          <xs:element name=\"includeMdc\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:boolean\" />\n          <xs:element name=\"includeCallSite\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:boolean\" />\n          <xs:element name=\"includeAllProperties\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:boolean\" />\n          <xs:element name=\"appInfo\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:string\" />\n          <xs:element name=\"loggerName\" minOccurs=\"0\" maxOccurs=\"1\" type=\"Layout\" />\n          <xs:element name=\"optimizeBufferReuse\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:boolean\" />\n        </xs:choice>\n        <xs:attribute name=\"name\" type=\"xs:string\">\n          <xs:annotation>\n            <xs:documentation>Name of the target.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"encoding\" type=\"xs:string\">\n          <xs:annotation>\n            <xs:documentation>Encoding to be used.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"layout\" type=\"SimpleLayoutAttribute\">\n          <xs:annotation>\n            <xs:documentation>Instance of  that is used to format log messages.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"lineEnding\" type=\"LineEndingMode\">\n          <xs:annotation>\n            <xs:documentation>End of line value if a newline is appended at the end of log message .</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"maxMessageSize\" type=\"xs:integer\">\n          <xs:annotation>\n            <xs:documentation>Maximum message size in bytes.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"newLine\" type=\"xs:boolean\">\n          <xs:annotation>\n            <xs:documentation>Indicates whether to append newline at the end of log message.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"onConnectionOverflow\" type=\"NLog.Targets.NetworkTargetConnectionsOverflowAction\">\n          <xs:annotation>\n            <xs:documentation>Action that should be taken if the will be more connections than .</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"maxQueueSize\" type=\"xs:integer\">\n          <xs:annotation>\n            <xs:documentation>Maximum queue size.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"maxConnections\" type=\"xs:integer\">\n          <xs:annotation>\n            <xs:documentation>Maximum current connections. 0 = no maximum.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"keepConnection\" type=\"xs:boolean\">\n          <xs:annotation>\n            <xs:documentation>Indicates whether to keep connection open whenever possible.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"connectionCacheSize\" type=\"xs:integer\">\n          <xs:annotation>\n            <xs:documentation>Size of the connection cache (number of connections which are kept alive).</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"address\" type=\"SimpleLayoutAttribute\">\n          <xs:annotation>\n            <xs:documentation>Network address.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"onOverflow\" type=\"NLog.Targets.NetworkTargetOverflowAction\">\n          <xs:annotation>\n            <xs:documentation>Action that should be taken if the message is larger than maxMessageSize.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"ndlcItemSeparator\" type=\"xs:string\">\n          <xs:annotation>\n            <xs:documentation>NDLC item separator.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"ndcItemSeparator\" type=\"xs:string\">\n          <xs:annotation>\n            <xs:documentation>NDC item separator.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"includeNLogData\" type=\"xs:boolean\">\n          <xs:annotation>\n            <xs:documentation>Indicates whether to include NLog-specific extensions to log4j schema.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"includeSourceInfo\" type=\"xs:boolean\">\n          <xs:annotation>\n            <xs:documentation>Indicates whether to include source info (file name and line number) in the information sent over the network.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"includeNdlc\" type=\"xs:boolean\">\n          <xs:annotation>\n            <xs:documentation>Indicates whether to include contents of the  stack.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"includeNdc\" type=\"xs:boolean\">\n          <xs:annotation>\n            <xs:documentation>Indicates whether to include  stack contents.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"includeMdlc\" type=\"xs:boolean\">\n          <xs:annotation>\n            <xs:documentation>Indicates whether to include  dictionary contents.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"includeMdc\" type=\"xs:boolean\">\n          <xs:annotation>\n            <xs:documentation>Indicates whether to include  dictionary contents.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"includeCallSite\" type=\"xs:boolean\">\n          <xs:annotation>\n            <xs:documentation>Indicates whether to include call site (class and method name) in the information sent over the network.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"includeAllProperties\" type=\"xs:boolean\">\n          <xs:annotation>\n            <xs:documentation>Option to include all properties from the log events</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"appInfo\" type=\"xs:string\">\n          <xs:annotation>\n            <xs:documentation>AppInfo field. By default it's the friendly name of the current AppDomain.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"loggerName\" type=\"SimpleLayoutAttribute\">\n          <xs:annotation>\n            <xs:documentation>Renderer for log4j:event logger-xml-attribute (Default ${logger})</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"optimizeBufferReuse\" type=\"xs:boolean\">\n          <xs:annotation>\n            <xs:documentation>Target supports reuse of internal buffers, and doesn't have to constantly allocate new buffers Required for legacy NLog-targets, that expects buffers to remain stable after Write-method exit</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n      </xs:extension>\n    </xs:complexContent>\n  </xs:complexType>\n  <xs:simpleType name=\"NLog.Targets.NetworkTargetConnectionsOverflowAction\">\n    <xs:restriction base=\"xs:string\">\n      <xs:enumeration value=\"AllowNewConnnection\" />\n      <xs:enumeration value=\"DiscardMessage\" />\n      <xs:enumeration value=\"Block\" />\n    </xs:restriction>\n  </xs:simpleType>\n  <xs:simpleType name=\"NLog.Targets.NetworkTargetOverflowAction\">\n    <xs:restriction base=\"xs:string\">\n      <xs:enumeration value=\"Error\" />\n      <xs:enumeration value=\"Split\" />\n      <xs:enumeration value=\"Discard\" />\n    </xs:restriction>\n  </xs:simpleType>\n  <xs:complexType name=\"NLog.Targets.NLogViewerParameterInfo\">\n    <xs:choice minOccurs=\"0\" maxOccurs=\"unbounded\">\n      <xs:element name=\"layout\" minOccurs=\"0\" maxOccurs=\"1\" type=\"Layout\" />\n      <xs:element name=\"name\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:string\" />\n    </xs:choice>\n    <xs:attribute name=\"layout\" type=\"SimpleLayoutAttribute\">\n      <xs:annotation>\n        <xs:documentation>Layout that should be use to calcuate the value for the parameter.</xs:documentation>\n      </xs:annotation>\n    </xs:attribute>\n    <xs:attribute name=\"name\" type=\"xs:string\">\n      <xs:annotation>\n        <xs:documentation>Viewer parameter name.</xs:documentation>\n      </xs:annotation>\n    </xs:attribute>\n  </xs:complexType>\n  <xs:complexType name=\"ColoredConsole\">\n    <xs:complexContent>\n      <xs:extension base=\"Target\">\n        <xs:choice minOccurs=\"0\" maxOccurs=\"unbounded\">\n          <xs:element name=\"name\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:string\" />\n          <xs:element name=\"layout\" minOccurs=\"0\" maxOccurs=\"1\" type=\"Layout\" />\n          <xs:element name=\"header\" minOccurs=\"0\" maxOccurs=\"1\" type=\"Layout\" />\n          <xs:element name=\"footer\" minOccurs=\"0\" maxOccurs=\"1\" type=\"Layout\" />\n          <xs:element name=\"detectConsoleAvailable\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:boolean\" />\n          <xs:element name=\"encoding\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:string\" />\n          <xs:element name=\"errorStream\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:boolean\" />\n          <xs:element name=\"useDefaultRowHighlightingRules\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:boolean\" />\n          <xs:element name=\"highlight-row\" minOccurs=\"0\" maxOccurs=\"unbounded\" type=\"NLog.Targets.ConsoleRowHighlightingRule\" />\n          <xs:element name=\"highlight-word\" minOccurs=\"0\" maxOccurs=\"unbounded\" type=\"NLog.Targets.ConsoleWordHighlightingRule\" />\n          <xs:element name=\"optimizeBufferReuse\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:boolean\" />\n        </xs:choice>\n        <xs:attribute name=\"name\" type=\"xs:string\">\n          <xs:annotation>\n            <xs:documentation>Name of the target.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"layout\" type=\"SimpleLayoutAttribute\">\n          <xs:annotation>\n            <xs:documentation>Text to be rendered.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"header\" type=\"SimpleLayoutAttribute\">\n          <xs:annotation>\n            <xs:documentation>Header.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"footer\" type=\"SimpleLayoutAttribute\">\n          <xs:annotation>\n            <xs:documentation>Footer.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"detectConsoleAvailable\" type=\"xs:boolean\">\n          <xs:annotation>\n            <xs:documentation>Indicates whether to auto-check if the console is available. - Disables console writing if Environment.UserInteractive = False (Windows Service) - Disables console writing if Console Standard Input is not available (Non-Console-App)</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"encoding\" type=\"xs:string\">\n          <xs:annotation>\n            <xs:documentation>The encoding for writing messages to the .</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"errorStream\" type=\"xs:boolean\">\n          <xs:annotation>\n            <xs:documentation>Indicates whether the error stream (stderr) should be used instead of the output stream (stdout).</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"useDefaultRowHighlightingRules\" type=\"xs:boolean\">\n          <xs:annotation>\n            <xs:documentation>Indicates whether to use default row highlighting rules.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"optimizeBufferReuse\" type=\"xs:boolean\">\n          <xs:annotation>\n            <xs:documentation>Target supports reuse of internal buffers, and doesn't have to constantly allocate new buffers Required for legacy NLog-targets, that expects buffers to remain stable after Write-method exit</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n      </xs:extension>\n    </xs:complexContent>\n  </xs:complexType>\n  <xs:simpleType name=\"NLog.Targets.ConsoleOutputColor\">\n    <xs:restriction base=\"xs:string\">\n      <xs:enumeration value=\"Black\" />\n      <xs:enumeration value=\"DarkBlue\" />\n      <xs:enumeration value=\"DarkGreen\" />\n      <xs:enumeration value=\"DarkCyan\" />\n      <xs:enumeration value=\"DarkRed\" />\n      <xs:enumeration value=\"DarkMagenta\" />\n      <xs:enumeration value=\"DarkYellow\" />\n      <xs:enumeration value=\"Gray\" />\n      <xs:enumeration value=\"DarkGray\" />\n      <xs:enumeration value=\"Blue\" />\n      <xs:enumeration value=\"Green\" />\n      <xs:enumeration value=\"Cyan\" />\n      <xs:enumeration value=\"Red\" />\n      <xs:enumeration value=\"Magenta\" />\n      <xs:enumeration value=\"Yellow\" />\n      <xs:enumeration value=\"White\" />\n      <xs:enumeration value=\"NoChange\" />\n    </xs:restriction>\n  </xs:simpleType>\n  <xs:complexType name=\"NLog.Targets.ConsoleRowHighlightingRule\">\n    <xs:choice minOccurs=\"0\" maxOccurs=\"unbounded\">\n      <xs:element name=\"condition\" minOccurs=\"0\" maxOccurs=\"1\" type=\"Condition\" />\n      <xs:element name=\"backgroundColor\" minOccurs=\"0\" maxOccurs=\"1\" type=\"NLog.Targets.ConsoleOutputColor\" />\n      <xs:element name=\"foregroundColor\" minOccurs=\"0\" maxOccurs=\"1\" type=\"NLog.Targets.ConsoleOutputColor\" />\n    </xs:choice>\n    <xs:attribute name=\"condition\" type=\"Condition\">\n      <xs:annotation>\n        <xs:documentation>Condition that must be met in order to set the specified foreground and background color.</xs:documentation>\n      </xs:annotation>\n    </xs:attribute>\n    <xs:attribute name=\"backgroundColor\" type=\"NLog.Targets.ConsoleOutputColor\">\n      <xs:annotation>\n        <xs:documentation>Background color.</xs:documentation>\n      </xs:annotation>\n    </xs:attribute>\n    <xs:attribute name=\"foregroundColor\" type=\"NLog.Targets.ConsoleOutputColor\">\n      <xs:annotation>\n        <xs:documentation>Foreground color.</xs:documentation>\n      </xs:annotation>\n    </xs:attribute>\n  </xs:complexType>\n  <xs:complexType name=\"NLog.Targets.ConsoleWordHighlightingRule\">\n    <xs:choice minOccurs=\"0\" maxOccurs=\"unbounded\">\n      <xs:element name=\"compileRegex\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:boolean\" />\n      <xs:element name=\"ignoreCase\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:boolean\" />\n      <xs:element name=\"regex\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:string\" />\n      <xs:element name=\"text\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:string\" />\n      <xs:element name=\"wholeWords\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:boolean\" />\n      <xs:element name=\"backgroundColor\" minOccurs=\"0\" maxOccurs=\"1\" type=\"NLog.Targets.ConsoleOutputColor\" />\n      <xs:element name=\"foregroundColor\" minOccurs=\"0\" maxOccurs=\"1\" type=\"NLog.Targets.ConsoleOutputColor\" />\n    </xs:choice>\n    <xs:attribute name=\"compileRegex\" type=\"xs:boolean\">\n      <xs:annotation>\n        <xs:documentation>Compile the ? This can improve the performance, but at the costs of more memory usage. If false, the Regex Cache is used.</xs:documentation>\n      </xs:annotation>\n    </xs:attribute>\n    <xs:attribute name=\"ignoreCase\" type=\"xs:boolean\">\n      <xs:annotation>\n        <xs:documentation>Indicates whether to ignore case when comparing texts.</xs:documentation>\n      </xs:annotation>\n    </xs:attribute>\n    <xs:attribute name=\"regex\" type=\"xs:string\">\n      <xs:annotation>\n        <xs:documentation>Regular expression to be matched. You must specify either text or regex.</xs:documentation>\n      </xs:annotation>\n    </xs:attribute>\n    <xs:attribute name=\"text\" type=\"xs:string\">\n      <xs:annotation>\n        <xs:documentation>Text to be matched. You must specify either text or regex.</xs:documentation>\n      </xs:annotation>\n    </xs:attribute>\n    <xs:attribute name=\"wholeWords\" type=\"xs:boolean\">\n      <xs:annotation>\n        <xs:documentation>Indicates whether to match whole words only.</xs:documentation>\n      </xs:annotation>\n    </xs:attribute>\n    <xs:attribute name=\"backgroundColor\" type=\"NLog.Targets.ConsoleOutputColor\">\n      <xs:annotation>\n        <xs:documentation>Background color.</xs:documentation>\n      </xs:annotation>\n    </xs:attribute>\n    <xs:attribute name=\"foregroundColor\" type=\"NLog.Targets.ConsoleOutputColor\">\n      <xs:annotation>\n        <xs:documentation>Foreground color.</xs:documentation>\n      </xs:annotation>\n    </xs:attribute>\n  </xs:complexType>\n  <xs:complexType name=\"Console\">\n    <xs:complexContent>\n      <xs:extension base=\"Target\">\n        <xs:choice minOccurs=\"0\" maxOccurs=\"unbounded\">\n          <xs:element name=\"name\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:string\" />\n          <xs:element name=\"layout\" minOccurs=\"0\" maxOccurs=\"1\" type=\"Layout\" />\n          <xs:element name=\"header\" minOccurs=\"0\" maxOccurs=\"1\" type=\"Layout\" />\n          <xs:element name=\"footer\" minOccurs=\"0\" maxOccurs=\"1\" type=\"Layout\" />\n          <xs:element name=\"detectConsoleAvailable\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:boolean\" />\n          <xs:element name=\"encoding\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:string\" />\n          <xs:element name=\"error\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:boolean\" />\n          <xs:element name=\"optimizeBufferReuse\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:boolean\" />\n        </xs:choice>\n        <xs:attribute name=\"name\" type=\"xs:string\">\n          <xs:annotation>\n            <xs:documentation>Name of the target.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"layout\" type=\"SimpleLayoutAttribute\">\n          <xs:annotation>\n            <xs:documentation>Text to be rendered.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"header\" type=\"SimpleLayoutAttribute\">\n          <xs:annotation>\n            <xs:documentation>Header.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"footer\" type=\"SimpleLayoutAttribute\">\n          <xs:annotation>\n            <xs:documentation>Footer.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"detectConsoleAvailable\" type=\"xs:boolean\">\n          <xs:annotation>\n            <xs:documentation>Indicates whether to auto-check if the console is available - Disables console writing if Environment.UserInteractive = False (Windows Service) - Disables console writing if Console Standard Input is not available (Non-Console-App)</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"encoding\" type=\"xs:string\">\n          <xs:annotation>\n            <xs:documentation>The encoding for writing messages to the .</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"error\" type=\"xs:boolean\">\n          <xs:annotation>\n            <xs:documentation>Indicates whether to send the log messages to the standard error instead of the standard output.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"optimizeBufferReuse\" type=\"xs:boolean\">\n          <xs:annotation>\n            <xs:documentation>Target supports reuse of internal buffers, and doesn't have to constantly allocate new buffers Required for legacy NLog-targets, that expects buffers to remain stable after Write-method exit</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n      </xs:extension>\n    </xs:complexContent>\n  </xs:complexType>\n  <xs:complexType name=\"Database\">\n    <xs:complexContent>\n      <xs:extension base=\"Target\">\n        <xs:choice minOccurs=\"0\" maxOccurs=\"unbounded\">\n          <xs:element name=\"name\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:string\" />\n          <xs:element name=\"useTransactions\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:boolean\" />\n          <xs:element name=\"dbUserName\" minOccurs=\"0\" maxOccurs=\"1\" type=\"Layout\" />\n          <xs:element name=\"dbProvider\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:string\" />\n          <xs:element name=\"dbPassword\" minOccurs=\"0\" maxOccurs=\"1\" type=\"Layout\" />\n          <xs:element name=\"keepConnection\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:boolean\" />\n          <xs:element name=\"dbDatabase\" minOccurs=\"0\" maxOccurs=\"1\" type=\"Layout\" />\n          <xs:element name=\"connectionStringName\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:string\" />\n          <xs:element name=\"connectionString\" minOccurs=\"0\" maxOccurs=\"1\" type=\"Layout\" />\n          <xs:element name=\"dbHost\" minOccurs=\"0\" maxOccurs=\"1\" type=\"Layout\" />\n          <xs:element name=\"installConnectionString\" minOccurs=\"0\" maxOccurs=\"1\" type=\"Layout\" />\n          <xs:element name=\"install-command\" minOccurs=\"0\" maxOccurs=\"unbounded\" type=\"NLog.Targets.DatabaseCommandInfo\" />\n          <xs:element name=\"uninstall-command\" minOccurs=\"0\" maxOccurs=\"unbounded\" type=\"NLog.Targets.DatabaseCommandInfo\" />\n          <xs:element name=\"optimizeBufferReuse\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:boolean\" />\n          <xs:element name=\"parameter\" minOccurs=\"0\" maxOccurs=\"unbounded\" type=\"NLog.Targets.DatabaseParameterInfo\" />\n          <xs:element name=\"commandText\" minOccurs=\"0\" maxOccurs=\"1\" type=\"Layout\" />\n          <xs:element name=\"commandType\" minOccurs=\"0\" maxOccurs=\"1\" type=\"System.Data.CommandType\" />\n        </xs:choice>\n        <xs:attribute name=\"name\" type=\"xs:string\">\n          <xs:annotation>\n            <xs:documentation>Name of the target.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"useTransactions\" type=\"xs:boolean\">\n          <xs:annotation>\n            <xs:documentation>Obsolete - value will be ignored! The logging code always runs outside of transaction. Gets or sets a value indicating whether to use database transactions. Some data providers require this.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"dbUserName\" type=\"SimpleLayoutAttribute\">\n          <xs:annotation>\n            <xs:documentation>Database user name. If the ConnectionString is not provided this value will be used to construct the \"User ID=\" part of the connection string.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"dbProvider\" type=\"xs:string\">\n          <xs:annotation>\n            <xs:documentation>Name of the database provider.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"dbPassword\" type=\"SimpleLayoutAttribute\">\n          <xs:annotation>\n            <xs:documentation>Database password. If the ConnectionString is not provided this value will be used to construct the \"Password=\" part of the connection string.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"keepConnection\" type=\"xs:boolean\">\n          <xs:annotation>\n            <xs:documentation>Indicates whether to keep the database connection open between the log events.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"dbDatabase\" type=\"SimpleLayoutAttribute\">\n          <xs:annotation>\n            <xs:documentation>Database name. If the ConnectionString is not provided this value will be used to construct the \"Database=\" part of the connection string.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"connectionStringName\" type=\"xs:string\">\n          <xs:annotation>\n            <xs:documentation>Name of the connection string (as specified in &lt;connectionStrings&gt; configuration section.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"connectionString\" type=\"SimpleLayoutAttribute\">\n          <xs:annotation>\n            <xs:documentation>Connection string. When provided, it overrides the values specified in DBHost, DBUserName, DBPassword, DBDatabase.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"dbHost\" type=\"SimpleLayoutAttribute\">\n          <xs:annotation>\n            <xs:documentation>Database host name. If the ConnectionString is not provided this value will be used to construct the \"Server=\" part of the connection string.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"installConnectionString\" type=\"SimpleLayoutAttribute\">\n          <xs:annotation>\n            <xs:documentation>Connection string using for installation and uninstallation. If not provided, regular ConnectionString is being used.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"optimizeBufferReuse\" type=\"xs:boolean\">\n          <xs:annotation>\n            <xs:documentation>Target supports reuse of internal buffers, and doesn't have to constantly allocate new buffers Required for legacy NLog-targets, that expects buffers to remain stable after Write-method exit</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"commandText\" type=\"SimpleLayoutAttribute\">\n          <xs:annotation>\n            <xs:documentation>Text of the SQL command to be run on each log level.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"commandType\" type=\"System.Data.CommandType\">\n          <xs:annotation>\n            <xs:documentation>Type of the SQL command to be run on each log level.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n      </xs:extension>\n    </xs:complexContent>\n  </xs:complexType>\n  <xs:simpleType name=\"System.Data.CommandType\">\n    <xs:restriction base=\"xs:string\">\n      <xs:enumeration value=\"Text\" />\n      <xs:enumeration value=\"StoredProcedure\" />\n      <xs:enumeration value=\"TableDirect\" />\n    </xs:restriction>\n  </xs:simpleType>\n  <xs:complexType name=\"NLog.Targets.DatabaseCommandInfo\">\n    <xs:choice minOccurs=\"0\" maxOccurs=\"unbounded\">\n      <xs:element name=\"commandType\" minOccurs=\"0\" maxOccurs=\"1\" type=\"System.Data.CommandType\" />\n      <xs:element name=\"connectionString\" minOccurs=\"0\" maxOccurs=\"1\" type=\"Layout\" />\n      <xs:element name=\"ignoreFailures\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:boolean\" />\n      <xs:element name=\"parameter\" minOccurs=\"0\" maxOccurs=\"unbounded\" type=\"NLog.Targets.DatabaseParameterInfo\" />\n      <xs:element name=\"text\" minOccurs=\"0\" maxOccurs=\"1\" type=\"Layout\" />\n    </xs:choice>\n    <xs:attribute name=\"commandType\" type=\"System.Data.CommandType\">\n      <xs:annotation>\n        <xs:documentation>Type of the command.</xs:documentation>\n      </xs:annotation>\n    </xs:attribute>\n    <xs:attribute name=\"connectionString\" type=\"SimpleLayoutAttribute\">\n      <xs:annotation>\n        <xs:documentation>Connection string to run the command against. If not provided, connection string from the target is used.</xs:documentation>\n      </xs:annotation>\n    </xs:attribute>\n    <xs:attribute name=\"ignoreFailures\" type=\"xs:boolean\">\n      <xs:annotation>\n        <xs:documentation>Indicates whether to ignore failures.</xs:documentation>\n      </xs:annotation>\n    </xs:attribute>\n    <xs:attribute name=\"text\" type=\"SimpleLayoutAttribute\">\n      <xs:annotation>\n        <xs:documentation>Command text.</xs:documentation>\n      </xs:annotation>\n    </xs:attribute>\n  </xs:complexType>\n  <xs:complexType name=\"NLog.Targets.DatabaseParameterInfo\">\n    <xs:choice minOccurs=\"0\" maxOccurs=\"unbounded\">\n      <xs:element name=\"layout\" minOccurs=\"0\" maxOccurs=\"1\" type=\"Layout\" />\n      <xs:element name=\"name\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:string\" />\n      <xs:element name=\"precision\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:byte\" />\n      <xs:element name=\"scale\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:byte\" />\n      <xs:element name=\"size\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:integer\" />\n    </xs:choice>\n    <xs:attribute name=\"layout\" type=\"SimpleLayoutAttribute\">\n      <xs:annotation>\n        <xs:documentation>Layout that should be use to calcuate the value for the parameter.</xs:documentation>\n      </xs:annotation>\n    </xs:attribute>\n    <xs:attribute name=\"name\" type=\"xs:string\">\n      <xs:annotation>\n        <xs:documentation>Database parameter name.</xs:documentation>\n      </xs:annotation>\n    </xs:attribute>\n    <xs:attribute name=\"precision\" type=\"xs:byte\">\n      <xs:annotation>\n        <xs:documentation>Database parameter precision.</xs:documentation>\n      </xs:annotation>\n    </xs:attribute>\n    <xs:attribute name=\"scale\" type=\"xs:byte\">\n      <xs:annotation>\n        <xs:documentation>Database parameter scale.</xs:documentation>\n      </xs:annotation>\n    </xs:attribute>\n    <xs:attribute name=\"size\" type=\"xs:integer\">\n      <xs:annotation>\n        <xs:documentation>Database parameter size.</xs:documentation>\n      </xs:annotation>\n    </xs:attribute>\n  </xs:complexType>\n  <xs:complexType name=\"Debugger\">\n    <xs:complexContent>\n      <xs:extension base=\"Target\">\n        <xs:choice minOccurs=\"0\" maxOccurs=\"unbounded\">\n          <xs:element name=\"name\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:string\" />\n          <xs:element name=\"layout\" minOccurs=\"0\" maxOccurs=\"1\" type=\"Layout\" />\n          <xs:element name=\"header\" minOccurs=\"0\" maxOccurs=\"1\" type=\"Layout\" />\n          <xs:element name=\"footer\" minOccurs=\"0\" maxOccurs=\"1\" type=\"Layout\" />\n          <xs:element name=\"optimizeBufferReuse\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:boolean\" />\n        </xs:choice>\n        <xs:attribute name=\"name\" type=\"xs:string\">\n          <xs:annotation>\n            <xs:documentation>Name of the target.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"layout\" type=\"SimpleLayoutAttribute\">\n          <xs:annotation>\n            <xs:documentation>Text to be rendered.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"header\" type=\"SimpleLayoutAttribute\">\n          <xs:annotation>\n            <xs:documentation>Header.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"footer\" type=\"SimpleLayoutAttribute\">\n          <xs:annotation>\n            <xs:documentation>Footer.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"optimizeBufferReuse\" type=\"xs:boolean\">\n          <xs:annotation>\n            <xs:documentation>Target supports reuse of internal buffers, and doesn't have to constantly allocate new buffers Required for legacy NLog-targets, that expects buffers to remain stable after Write-method exit</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n      </xs:extension>\n    </xs:complexContent>\n  </xs:complexType>\n  <xs:complexType name=\"Debug\">\n    <xs:complexContent>\n      <xs:extension base=\"Target\">\n        <xs:choice minOccurs=\"0\" maxOccurs=\"unbounded\">\n          <xs:element name=\"name\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:string\" />\n          <xs:element name=\"layout\" minOccurs=\"0\" maxOccurs=\"1\" type=\"Layout\" />\n          <xs:element name=\"optimizeBufferReuse\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:boolean\" />\n        </xs:choice>\n        <xs:attribute name=\"name\" type=\"xs:string\">\n          <xs:annotation>\n            <xs:documentation>Name of the target.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"layout\" type=\"SimpleLayoutAttribute\">\n          <xs:annotation>\n            <xs:documentation>Layout used to format log messages.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"optimizeBufferReuse\" type=\"xs:boolean\">\n          <xs:annotation>\n            <xs:documentation>Target supports reuse of internal buffers, and doesn't have to constantly allocate new buffers Required for legacy NLog-targets, that expects buffers to remain stable after Write-method exit</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n      </xs:extension>\n    </xs:complexContent>\n  </xs:complexType>\n  <xs:complexType name=\"EventLog\">\n    <xs:complexContent>\n      <xs:extension base=\"Target\">\n        <xs:choice minOccurs=\"0\" maxOccurs=\"unbounded\">\n          <xs:element name=\"name\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:string\" />\n          <xs:element name=\"layout\" minOccurs=\"0\" maxOccurs=\"1\" type=\"Layout\" />\n          <xs:element name=\"category\" minOccurs=\"0\" maxOccurs=\"1\" type=\"Layout\" />\n          <xs:element name=\"entryType\" minOccurs=\"0\" maxOccurs=\"1\" type=\"Layout\" />\n          <xs:element name=\"eventId\" minOccurs=\"0\" maxOccurs=\"1\" type=\"Layout\" />\n          <xs:element name=\"log\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:string\" />\n          <xs:element name=\"machineName\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:string\" />\n          <xs:element name=\"maxKilobytes\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:long\" />\n          <xs:element name=\"maxMessageLength\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:integer\" />\n          <xs:element name=\"source\" minOccurs=\"0\" maxOccurs=\"1\" type=\"Layout\" />\n          <xs:element name=\"onOverflow\" minOccurs=\"0\" maxOccurs=\"1\" type=\"NLog.Targets.EventLogTargetOverflowAction\" />\n          <xs:element name=\"optimizeBufferReuse\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:boolean\" />\n        </xs:choice>\n        <xs:attribute name=\"name\" type=\"xs:string\">\n          <xs:annotation>\n            <xs:documentation>Name of the target.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"layout\" type=\"SimpleLayoutAttribute\">\n          <xs:annotation>\n            <xs:documentation>Layout used to format log messages.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"category\" type=\"SimpleLayoutAttribute\">\n          <xs:annotation>\n            <xs:documentation>Layout that renders event Category.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"entryType\" type=\"SimpleLayoutAttribute\">\n          <xs:annotation>\n            <xs:documentation>Optional entrytype. When not set, or when not convertable to  then determined by </xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"eventId\" type=\"SimpleLayoutAttribute\">\n          <xs:annotation>\n            <xs:documentation>Layout that renders event ID.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"log\" type=\"xs:string\">\n          <xs:annotation>\n            <xs:documentation>Name of the Event Log to write to. This can be System, Application or any user-defined name.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"machineName\" type=\"xs:string\">\n          <xs:annotation>\n            <xs:documentation>Name of the machine on which Event Log service is running.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"maxKilobytes\" type=\"xs:long\">\n          <xs:annotation>\n            <xs:documentation>Maximum Event log size in kilobytes. If null, the value won't be set. Default is 512 Kilobytes as specified by Eventlog API</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"maxMessageLength\" type=\"xs:integer\">\n          <xs:annotation>\n            <xs:documentation>Message length limit to write to the Event Log.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"source\" type=\"SimpleLayoutAttribute\">\n          <xs:annotation>\n            <xs:documentation>Value to be used as the event Source.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"onOverflow\" type=\"NLog.Targets.EventLogTargetOverflowAction\">\n          <xs:annotation>\n            <xs:documentation>Action to take if the message is larger than the  option.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"optimizeBufferReuse\" type=\"xs:boolean\">\n          <xs:annotation>\n            <xs:documentation>Target supports reuse of internal buffers, and doesn't have to constantly allocate new buffers Required for legacy NLog-targets, that expects buffers to remain stable after Write-method exit</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n      </xs:extension>\n    </xs:complexContent>\n  </xs:complexType>\n  <xs:simpleType name=\"NLog.Targets.EventLogTargetOverflowAction\">\n    <xs:restriction base=\"xs:string\">\n      <xs:enumeration value=\"Truncate\" />\n      <xs:enumeration value=\"Split\" />\n      <xs:enumeration value=\"Discard\" />\n    </xs:restriction>\n  </xs:simpleType>\n  <xs:complexType name=\"FallbackGroup\">\n    <xs:complexContent>\n      <xs:extension base=\"CompoundTargetBase\">\n        <xs:choice minOccurs=\"0\" maxOccurs=\"unbounded\">\n          <xs:element name=\"name\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:string\" />\n          <xs:element name=\"returnToFirstOnSuccess\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:boolean\" />\n          <xs:element name=\"optimizeBufferReuse\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:boolean\" />\n        </xs:choice>\n        <xs:attribute name=\"name\" type=\"xs:string\">\n          <xs:annotation>\n            <xs:documentation>Name of the target.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"returnToFirstOnSuccess\" type=\"xs:boolean\">\n          <xs:annotation>\n            <xs:documentation>Indicates whether to return to the first target after any successful write.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"optimizeBufferReuse\" type=\"xs:boolean\">\n          <xs:annotation>\n            <xs:documentation>Target supports reuse of internal buffers, and doesn't have to constantly allocate new buffers Required for legacy NLog-targets, that expects buffers to remain stable after Write-method exit</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n      </xs:extension>\n    </xs:complexContent>\n  </xs:complexType>\n  <xs:complexType name=\"File\">\n    <xs:complexContent>\n      <xs:extension base=\"Target\">\n        <xs:choice minOccurs=\"0\" maxOccurs=\"unbounded\">\n          <xs:element name=\"name\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:string\" />\n          <xs:element name=\"layout\" minOccurs=\"0\" maxOccurs=\"1\" type=\"Layout\" />\n          <xs:element name=\"header\" minOccurs=\"0\" maxOccurs=\"1\" type=\"Layout\" />\n          <xs:element name=\"footer\" minOccurs=\"0\" maxOccurs=\"1\" type=\"Layout\" />\n          <xs:element name=\"encoding\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:string\" />\n          <xs:element name=\"lineEnding\" minOccurs=\"0\" maxOccurs=\"1\" type=\"LineEndingMode\" />\n          <xs:element name=\"enableArchiveFileCompression\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:boolean\" />\n          <xs:element name=\"archiveNumbering\" minOccurs=\"0\" maxOccurs=\"1\" type=\"NLog.Targets.ArchiveNumberingMode\" />\n          <xs:element name=\"archiveFileName\" minOccurs=\"0\" maxOccurs=\"1\" type=\"Layout\" />\n          <xs:element name=\"archiveFileKind\" minOccurs=\"0\" maxOccurs=\"1\" type=\"NLog.Targets.FilePathKind\" />\n          <xs:element name=\"archiveEvery\" minOccurs=\"0\" maxOccurs=\"1\" type=\"NLog.Targets.FileArchivePeriod\" />\n          <xs:element name=\"archiveAboveSize\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:long\" />\n          <xs:element name=\"maxArchiveFiles\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:integer\" />\n          <xs:element name=\"writeFooterOnArchivingOnly\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:boolean\" />\n          <xs:element name=\"maxLogFilenames\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:integer\" />\n          <xs:element name=\"fileNameKind\" minOccurs=\"0\" maxOccurs=\"1\" type=\"NLog.Targets.FilePathKind\" />\n          <xs:element name=\"forceManaged\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:boolean\" />\n          <xs:element name=\"forceMutexConcurrentWrites\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:boolean\" />\n          <xs:element name=\"replaceFileContentsOnEachWrite\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:boolean\" />\n          <xs:element name=\"writeBom\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:boolean\" />\n          <xs:element name=\"enableFileDelete\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:boolean\" />\n          <xs:element name=\"fileName\" minOccurs=\"0\" maxOccurs=\"1\" type=\"Layout\" />\n          <xs:element name=\"archiveDateFormat\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:string\" />\n          <xs:element name=\"archiveOldFileOnStartup\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:boolean\" />\n          <xs:element name=\"cleanupFileName\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:boolean\" />\n          <xs:element name=\"createDirs\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:boolean\" />\n          <xs:element name=\"deleteOldFileOnStartup\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:boolean\" />\n          <xs:element name=\"fileAttributes\" minOccurs=\"0\" maxOccurs=\"1\" type=\"NLog.Targets.Win32FileAttributes\" />\n          <xs:element name=\"optimizeBufferReuse\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:boolean\" />\n          <xs:element name=\"networkWrites\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:boolean\" />\n          <xs:element name=\"openFileCacheTimeout\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:integer\" />\n          <xs:element name=\"openFileCacheSize\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:integer\" />\n          <xs:element name=\"keepFileOpen\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:boolean\" />\n          <xs:element name=\"discardAll\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:boolean\" />\n          <xs:element name=\"concurrentWrites\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:boolean\" />\n          <xs:element name=\"concurrentWriteAttempts\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:integer\" />\n          <xs:element name=\"concurrentWriteAttemptDelay\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:integer\" />\n          <xs:element name=\"bufferSize\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:integer\" />\n          <xs:element name=\"openFileFlushTimeout\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:integer\" />\n          <xs:element name=\"autoFlush\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:boolean\" />\n        </xs:choice>\n        <xs:attribute name=\"name\" type=\"xs:string\">\n          <xs:annotation>\n            <xs:documentation>Name of the target.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"layout\" type=\"SimpleLayoutAttribute\">\n          <xs:annotation>\n            <xs:documentation>Text to be rendered.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"header\" type=\"SimpleLayoutAttribute\">\n          <xs:annotation>\n            <xs:documentation>Header.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"footer\" type=\"SimpleLayoutAttribute\">\n          <xs:annotation>\n            <xs:documentation>Footer.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"encoding\" type=\"xs:string\">\n          <xs:annotation>\n            <xs:documentation>File encoding.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"lineEnding\" type=\"LineEndingMode\">\n          <xs:annotation>\n            <xs:documentation>Line ending mode.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"enableArchiveFileCompression\" type=\"xs:boolean\">\n          <xs:annotation>\n            <xs:documentation>Indicates whether to compress archive files into the zip archive format.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"archiveNumbering\" type=\"NLog.Targets.ArchiveNumberingMode\">\n          <xs:annotation>\n            <xs:documentation>Way file archives are numbered.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"archiveFileName\" type=\"SimpleLayoutAttribute\">\n          <xs:annotation>\n            <xs:documentation>Name of the file to be used for an archive.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"archiveFileKind\" type=\"NLog.Targets.FilePathKind\">\n          <xs:annotation>\n            <xs:documentation>Is the  an absolute or relative path?</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"archiveEvery\" type=\"NLog.Targets.FileArchivePeriod\">\n          <xs:annotation>\n            <xs:documentation>Indicates whether to automatically archive log files every time the specified time passes.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"archiveAboveSize\" type=\"xs:long\">\n          <xs:annotation>\n            <xs:documentation>Size in bytes above which log files will be automatically archived. Warning: combining this with  isn't supported. We cannot create multiple archive files, if they should have the same name. Choose: </xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"maxArchiveFiles\" type=\"xs:integer\">\n          <xs:annotation>\n            <xs:documentation>Maximum number of archive files that should be kept.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"writeFooterOnArchivingOnly\" type=\"xs:boolean\">\n          <xs:annotation>\n            <xs:documentation>Indicates whether the footer should be written only when the file is archived.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"maxLogFilenames\" type=\"xs:integer\">\n          <xs:annotation>\n            <xs:documentation>Maximum number of log filenames that should be stored as existing.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"fileNameKind\" type=\"NLog.Targets.FilePathKind\">\n          <xs:annotation>\n            <xs:documentation>Is the  an absolute or relative path?</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"forceManaged\" type=\"xs:boolean\">\n          <xs:annotation>\n            <xs:documentation>Gets or set a value indicating whether a managed file stream is forced, instead of using the native implementation.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"forceMutexConcurrentWrites\" type=\"xs:boolean\">\n          <xs:annotation>\n            <xs:documentation>Value indicationg whether file creation calls should be synchronized by a system global mutex.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"replaceFileContentsOnEachWrite\" type=\"xs:boolean\">\n          <xs:annotation>\n            <xs:documentation>Indicates whether to replace file contents on each write instead of appending log message at the end.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"writeBom\" type=\"xs:boolean\">\n          <xs:annotation>\n            <xs:documentation>Indicates whether to write BOM (byte order mark) in created files</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"enableFileDelete\" type=\"xs:boolean\">\n          <xs:annotation>\n            <xs:documentation>Indicates whether to enable log file(s) to be deleted.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"fileName\" type=\"SimpleLayoutAttribute\">\n          <xs:annotation>\n            <xs:documentation>Name of the file to write to.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"archiveDateFormat\" type=\"xs:string\">\n          <xs:annotation>\n            <xs:documentation>Value specifying the date format to use when archiving files.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"archiveOldFileOnStartup\" type=\"xs:boolean\">\n          <xs:annotation>\n            <xs:documentation>Indicates whether to archive old log file on startup.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"cleanupFileName\" type=\"xs:boolean\">\n          <xs:annotation>\n            <xs:documentation>Cleanup invalid values in a filename, e.g. slashes in a filename. If set to true, this can impact the performance of massive writes. If set to false, nothing gets written when the filename is wrong.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"createDirs\" type=\"xs:boolean\">\n          <xs:annotation>\n            <xs:documentation>Indicates whether to create directories if they do not exist.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"deleteOldFileOnStartup\" type=\"xs:boolean\">\n          <xs:annotation>\n            <xs:documentation>Indicates whether to delete old log file on startup.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"fileAttributes\" type=\"NLog.Targets.Win32FileAttributes\">\n          <xs:annotation>\n            <xs:documentation>File attributes (Windows only).</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"optimizeBufferReuse\" type=\"xs:boolean\">\n          <xs:annotation>\n            <xs:documentation>Target supports reuse of internal buffers, and doesn't have to constantly allocate new buffers Required for legacy NLog-targets, that expects buffers to remain stable after Write-method exit</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"networkWrites\" type=\"xs:boolean\">\n          <xs:annotation>\n            <xs:documentation>Indicates whether concurrent writes to the log file by multiple processes on different network hosts.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"openFileCacheTimeout\" type=\"xs:integer\">\n          <xs:annotation>\n            <xs:documentation>Maximum number of seconds that files are kept open. If this number is negative the files are not automatically closed after a period of inactivity.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"openFileCacheSize\" type=\"xs:integer\">\n          <xs:annotation>\n            <xs:documentation>Number of files to be kept open. Setting this to a higher value may improve performance in a situation where a single File target is writing to many files (such as splitting by level or by logger).</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"keepFileOpen\" type=\"xs:boolean\">\n          <xs:annotation>\n            <xs:documentation>Indicates whether to keep log file open instead of opening and closing it on each logging event.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"discardAll\" type=\"xs:boolean\">\n          <xs:annotation>\n            <xs:documentation>Whether or not this target should just discard all data that its asked to write. Mostly used for when testing NLog Stack except final write</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"concurrentWrites\" type=\"xs:boolean\">\n          <xs:annotation>\n            <xs:documentation>Indicates whether concurrent writes to the log file by multiple processes on the same host.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"concurrentWriteAttempts\" type=\"xs:integer\">\n          <xs:annotation>\n            <xs:documentation>Number of times the write is appended on the file before NLog discards the log message.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"concurrentWriteAttemptDelay\" type=\"xs:integer\">\n          <xs:annotation>\n            <xs:documentation>Delay in milliseconds to wait before attempting to write to the file again.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"bufferSize\" type=\"xs:integer\">\n          <xs:annotation>\n            <xs:documentation>Log file buffer size in bytes.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"openFileFlushTimeout\" type=\"xs:integer\">\n          <xs:annotation>\n            <xs:documentation>Maximum number of seconds before open files are flushed. If this number is negative or zero the files are not flushed by timer.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"autoFlush\" type=\"xs:boolean\">\n          <xs:annotation>\n            <xs:documentation>Indicates whether to automatically flush the file buffers after each log message.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n      </xs:extension>\n    </xs:complexContent>\n  </xs:complexType>\n  <xs:simpleType name=\"NLog.Targets.ArchiveNumberingMode\">\n    <xs:restriction base=\"xs:string\">\n      <xs:enumeration value=\"Sequence\" />\n      <xs:enumeration value=\"Rolling\" />\n      <xs:enumeration value=\"Date\" />\n      <xs:enumeration value=\"DateAndSequence\" />\n    </xs:restriction>\n  </xs:simpleType>\n  <xs:simpleType name=\"NLog.Targets.FilePathKind\">\n    <xs:restriction base=\"xs:string\">\n      <xs:enumeration value=\"Unknown\" />\n      <xs:enumeration value=\"Relative\" />\n      <xs:enumeration value=\"Absolute\" />\n    </xs:restriction>\n  </xs:simpleType>\n  <xs:simpleType name=\"NLog.Targets.FileArchivePeriod\">\n    <xs:restriction base=\"xs:string\">\n      <xs:enumeration value=\"None\" />\n      <xs:enumeration value=\"Year\" />\n      <xs:enumeration value=\"Month\" />\n      <xs:enumeration value=\"Day\" />\n      <xs:enumeration value=\"Hour\" />\n      <xs:enumeration value=\"Minute\" />\n      <xs:enumeration value=\"Sunday\" />\n      <xs:enumeration value=\"Monday\" />\n      <xs:enumeration value=\"Tuesday\" />\n      <xs:enumeration value=\"Wednesday\" />\n      <xs:enumeration value=\"Thursday\" />\n      <xs:enumeration value=\"Friday\" />\n      <xs:enumeration value=\"Saturday\" />\n    </xs:restriction>\n  </xs:simpleType>\n  <xs:simpleType name=\"NLog.Targets.Win32FileAttributes\">\n    <xs:restriction base=\"xs:string\">\n      <xs:enumeration value=\"ReadOnly\" />\n      <xs:enumeration value=\"Hidden\" />\n      <xs:enumeration value=\"System\" />\n      <xs:enumeration value=\"Archive\" />\n      <xs:enumeration value=\"Device\" />\n      <xs:enumeration value=\"Normal\" />\n      <xs:enumeration value=\"Temporary\" />\n      <xs:enumeration value=\"SparseFile\" />\n      <xs:enumeration value=\"ReparsePoint\" />\n      <xs:enumeration value=\"Compressed\" />\n      <xs:enumeration value=\"NotContentIndexed\" />\n      <xs:enumeration value=\"Encrypted\" />\n      <xs:enumeration value=\"WriteThrough\" />\n      <xs:enumeration value=\"NoBuffering\" />\n      <xs:enumeration value=\"DeleteOnClose\" />\n      <xs:enumeration value=\"PosixSemantics\" />\n    </xs:restriction>\n  </xs:simpleType>\n  <xs:complexType name=\"FilteringWrapper\">\n    <xs:complexContent>\n      <xs:extension base=\"WrapperTargetBase\">\n        <xs:choice minOccurs=\"0\" maxOccurs=\"unbounded\">\n          <xs:element name=\"name\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:string\" />\n          <xs:element name=\"condition\" minOccurs=\"0\" maxOccurs=\"1\" type=\"Condition\" />\n          <xs:element name=\"optimizeBufferReuse\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:boolean\" />\n        </xs:choice>\n        <xs:attribute name=\"name\" type=\"xs:string\">\n          <xs:annotation>\n            <xs:documentation>Name of the target.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"condition\" type=\"Condition\">\n          <xs:annotation>\n            <xs:documentation>Condition expression. Log events who meet this condition will be forwarded to the wrapped target.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"optimizeBufferReuse\" type=\"xs:boolean\">\n          <xs:annotation>\n            <xs:documentation>Target supports reuse of internal buffers, and doesn't have to constantly allocate new buffers Required for legacy NLog-targets, that expects buffers to remain stable after Write-method exit</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n      </xs:extension>\n    </xs:complexContent>\n  </xs:complexType>\n  <xs:complexType name=\"ImpersonatingWrapper\">\n    <xs:complexContent>\n      <xs:extension base=\"WrapperTargetBase\">\n        <xs:choice minOccurs=\"0\" maxOccurs=\"unbounded\">\n          <xs:element name=\"name\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:string\" />\n          <xs:element name=\"domain\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:string\" />\n          <xs:element name=\"impersonationLevel\" minOccurs=\"0\" maxOccurs=\"1\" type=\"NLog.Targets.Wrappers.SecurityImpersonationLevel\" />\n          <xs:element name=\"logOnProvider\" minOccurs=\"0\" maxOccurs=\"1\" type=\"NLog.Targets.Wrappers.LogOnProviderType\" />\n          <xs:element name=\"logOnType\" minOccurs=\"0\" maxOccurs=\"1\" type=\"NLog.Targets.Wrappers.SecurityLogOnType\" />\n          <xs:element name=\"password\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:string\" />\n          <xs:element name=\"revertToSelf\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:boolean\" />\n          <xs:element name=\"userName\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:string\" />\n          <xs:element name=\"optimizeBufferReuse\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:boolean\" />\n        </xs:choice>\n        <xs:attribute name=\"name\" type=\"xs:string\">\n          <xs:annotation>\n            <xs:documentation>Name of the target.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"domain\" type=\"xs:string\">\n          <xs:annotation>\n            <xs:documentation>Windows domain name to change context to.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"impersonationLevel\" type=\"NLog.Targets.Wrappers.SecurityImpersonationLevel\">\n          <xs:annotation>\n            <xs:documentation>Required impersonation level.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"logOnProvider\" type=\"NLog.Targets.Wrappers.LogOnProviderType\">\n          <xs:annotation>\n            <xs:documentation>Type of the logon provider.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"logOnType\" type=\"NLog.Targets.Wrappers.SecurityLogOnType\">\n          <xs:annotation>\n            <xs:documentation>Logon Type.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"password\" type=\"xs:string\">\n          <xs:annotation>\n            <xs:documentation>User account password.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"revertToSelf\" type=\"xs:boolean\">\n          <xs:annotation>\n            <xs:documentation>Indicates whether to revert to the credentials of the process instead of impersonating another user.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"userName\" type=\"xs:string\">\n          <xs:annotation>\n            <xs:documentation>Username to change context to.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"optimizeBufferReuse\" type=\"xs:boolean\">\n          <xs:annotation>\n            <xs:documentation>Target supports reuse of internal buffers, and doesn't have to constantly allocate new buffers Required for legacy NLog-targets, that expects buffers to remain stable after Write-method exit</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n      </xs:extension>\n    </xs:complexContent>\n  </xs:complexType>\n  <xs:simpleType name=\"NLog.Targets.Wrappers.SecurityImpersonationLevel\">\n    <xs:restriction base=\"xs:string\">\n      <xs:enumeration value=\"Anonymous\" />\n      <xs:enumeration value=\"Identification\" />\n      <xs:enumeration value=\"Impersonation\" />\n      <xs:enumeration value=\"Delegation\" />\n    </xs:restriction>\n  </xs:simpleType>\n  <xs:simpleType name=\"NLog.Targets.Wrappers.LogOnProviderType\">\n    <xs:restriction base=\"xs:string\">\n      <xs:enumeration value=\"Default\" />\n    </xs:restriction>\n  </xs:simpleType>\n  <xs:simpleType name=\"NLog.Targets.Wrappers.SecurityLogOnType\">\n    <xs:restriction base=\"xs:string\">\n      <xs:enumeration value=\"Interactive\" />\n      <xs:enumeration value=\"Network\" />\n      <xs:enumeration value=\"Batch\" />\n      <xs:enumeration value=\"Service\" />\n      <xs:enumeration value=\"NetworkClearText\" />\n      <xs:enumeration value=\"NewCredentials\" />\n    </xs:restriction>\n  </xs:simpleType>\n  <xs:complexType name=\"LimitingWrapper\">\n    <xs:complexContent>\n      <xs:extension base=\"WrapperTargetBase\">\n        <xs:choice minOccurs=\"0\" maxOccurs=\"unbounded\">\n          <xs:element name=\"interval\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:string\" />\n          <xs:element name=\"messageLimit\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:integer\" />\n          <xs:element name=\"name\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:string\" />\n          <xs:element name=\"optimizeBufferReuse\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:boolean\" />\n        </xs:choice>\n        <xs:attribute name=\"interval\" type=\"xs:string\">\n          <xs:annotation>\n            <xs:documentation>Interval in which messages will be written up to the  number of messages.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"messageLimit\" type=\"xs:integer\">\n          <xs:annotation>\n            <xs:documentation>Maximum allowed number of messages written per .</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"name\" type=\"xs:string\">\n          <xs:annotation>\n            <xs:documentation>Name of the target.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"optimizeBufferReuse\" type=\"xs:boolean\">\n          <xs:annotation>\n            <xs:documentation>Target supports reuse of internal buffers, and doesn't have to constantly allocate new buffers Required for legacy NLog-targets, that expects buffers to remain stable after Write-method exit</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n      </xs:extension>\n    </xs:complexContent>\n  </xs:complexType>\n  <xs:complexType name=\"LogReceiverService\">\n    <xs:complexContent>\n      <xs:extension base=\"Target\">\n        <xs:choice minOccurs=\"0\" maxOccurs=\"unbounded\">\n          <xs:element name=\"name\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:string\" />\n          <xs:element name=\"endpointAddress\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:string\" />\n          <xs:element name=\"endpointConfigurationName\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:string\" />\n          <xs:element name=\"useOneWayContract\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:boolean\" />\n          <xs:element name=\"clientId\" minOccurs=\"0\" maxOccurs=\"1\" type=\"Layout\" />\n          <xs:element name=\"includeEventProperties\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:boolean\" />\n          <xs:element name=\"parameter\" minOccurs=\"0\" maxOccurs=\"unbounded\" type=\"NLog.Targets.MethodCallParameter\" />\n          <xs:element name=\"useBinaryEncoding\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:boolean\" />\n          <xs:element name=\"optimizeBufferReuse\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:boolean\" />\n        </xs:choice>\n        <xs:attribute name=\"name\" type=\"xs:string\">\n          <xs:annotation>\n            <xs:documentation>Name of the target.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"endpointAddress\" type=\"xs:string\">\n          <xs:annotation>\n            <xs:documentation>Endpoint address.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"endpointConfigurationName\" type=\"xs:string\">\n          <xs:annotation>\n            <xs:documentation>Name of the endpoint configuration in WCF configuration file.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"useOneWayContract\" type=\"xs:boolean\">\n          <xs:annotation>\n            <xs:documentation>Indicates whether to use a WCF service contract that is one way (fire and forget) or two way (request-reply)</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"clientId\" type=\"SimpleLayoutAttribute\">\n          <xs:annotation>\n            <xs:documentation>Client ID.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"includeEventProperties\" type=\"xs:boolean\">\n          <xs:annotation>\n            <xs:documentation>Indicates whether to include per-event properties in the payload sent to the server.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"useBinaryEncoding\" type=\"xs:boolean\">\n          <xs:annotation>\n            <xs:documentation>Indicates whether to use binary message encoding.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"optimizeBufferReuse\" type=\"xs:boolean\">\n          <xs:annotation>\n            <xs:documentation>Target supports reuse of internal buffers, and doesn't have to constantly allocate new buffers Required for legacy NLog-targets, that expects buffers to remain stable after Write-method exit</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n      </xs:extension>\n    </xs:complexContent>\n  </xs:complexType>\n  <xs:complexType name=\"NLog.Targets.MethodCallParameter\">\n    <xs:choice minOccurs=\"0\" maxOccurs=\"unbounded\">\n      <xs:element name=\"layout\" minOccurs=\"0\" maxOccurs=\"1\" type=\"Layout\" />\n      <xs:element name=\"name\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:string\" />\n      <xs:element name=\"parameterType\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:string\" />\n      <xs:element name=\"type\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:string\" />\n    </xs:choice>\n    <xs:attribute name=\"layout\" type=\"SimpleLayoutAttribute\">\n      <xs:annotation>\n        <xs:documentation>Layout that should be use to calculate the value for the parameter.</xs:documentation>\n      </xs:annotation>\n    </xs:attribute>\n    <xs:attribute name=\"name\" type=\"xs:string\">\n      <xs:annotation>\n        <xs:documentation>Name of the parameter.</xs:documentation>\n      </xs:annotation>\n    </xs:attribute>\n    <xs:attribute name=\"parameterType\" type=\"xs:string\">\n      <xs:annotation>\n        <xs:documentation>Type of the parameter.</xs:documentation>\n      </xs:annotation>\n    </xs:attribute>\n    <xs:attribute name=\"type\" type=\"xs:string\">\n      <xs:annotation>\n        <xs:documentation>Type of the parameter. Obsolete alias for </xs:documentation>\n      </xs:annotation>\n    </xs:attribute>\n  </xs:complexType>\n  <xs:complexType name=\"Mail\">\n    <xs:complexContent>\n      <xs:extension base=\"Target\">\n        <xs:choice minOccurs=\"0\" maxOccurs=\"unbounded\">\n          <xs:element name=\"name\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:string\" />\n          <xs:element name=\"layout\" minOccurs=\"0\" maxOccurs=\"1\" type=\"Layout\" />\n          <xs:element name=\"header\" minOccurs=\"0\" maxOccurs=\"1\" type=\"Layout\" />\n          <xs:element name=\"footer\" minOccurs=\"0\" maxOccurs=\"1\" type=\"Layout\" />\n          <xs:element name=\"replaceNewlineWithBrTagInHtml\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:boolean\" />\n          <xs:element name=\"priority\" minOccurs=\"0\" maxOccurs=\"1\" type=\"Layout\" />\n          <xs:element name=\"encoding\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:string\" />\n          <xs:element name=\"bcc\" minOccurs=\"0\" maxOccurs=\"1\" type=\"Layout\" />\n          <xs:element name=\"cc\" minOccurs=\"0\" maxOccurs=\"1\" type=\"Layout\" />\n          <xs:element name=\"addNewLines\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:boolean\" />\n          <xs:element name=\"html\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:boolean\" />\n          <xs:element name=\"from\" minOccurs=\"0\" maxOccurs=\"1\" type=\"Layout\" />\n          <xs:element name=\"body\" minOccurs=\"0\" maxOccurs=\"1\" type=\"Layout\" />\n          <xs:element name=\"subject\" minOccurs=\"0\" maxOccurs=\"1\" type=\"Layout\" />\n          <xs:element name=\"to\" minOccurs=\"0\" maxOccurs=\"1\" type=\"Layout\" />\n          <xs:element name=\"optimizeBufferReuse\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:boolean\" />\n          <xs:element name=\"timeout\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:integer\" />\n          <xs:element name=\"smtpServer\" minOccurs=\"0\" maxOccurs=\"1\" type=\"Layout\" />\n          <xs:element name=\"smtpAuthentication\" minOccurs=\"0\" maxOccurs=\"1\" type=\"NLog.Targets.SmtpAuthenticationMode\" />\n          <xs:element name=\"smtpUserName\" minOccurs=\"0\" maxOccurs=\"1\" type=\"Layout\" />\n          <xs:element name=\"smtpPassword\" minOccurs=\"0\" maxOccurs=\"1\" type=\"Layout\" />\n          <xs:element name=\"enableSsl\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:boolean\" />\n          <xs:element name=\"smtpPort\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:integer\" />\n          <xs:element name=\"useSystemNetMailSettings\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:boolean\" />\n          <xs:element name=\"pickupDirectoryLocation\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:string\" />\n          <xs:element name=\"deliveryMethod\" minOccurs=\"0\" maxOccurs=\"1\" type=\"System.Net.Mail.SmtpDeliveryMethod\" />\n        </xs:choice>\n        <xs:attribute name=\"name\" type=\"xs:string\">\n          <xs:annotation>\n            <xs:documentation>Name of the target.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"layout\" type=\"SimpleLayoutAttribute\">\n          <xs:annotation>\n            <xs:documentation>Text to be rendered.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"header\" type=\"SimpleLayoutAttribute\">\n          <xs:annotation>\n            <xs:documentation>Header.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"footer\" type=\"SimpleLayoutAttribute\">\n          <xs:annotation>\n            <xs:documentation>Footer.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"replaceNewlineWithBrTagInHtml\" type=\"xs:boolean\">\n          <xs:annotation>\n            <xs:documentation>Indicates whether NewLine characters in the body should be replaced with  tags.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"priority\" type=\"SimpleLayoutAttribute\">\n          <xs:annotation>\n            <xs:documentation>Priority used for sending mails.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"encoding\" type=\"xs:string\">\n          <xs:annotation>\n            <xs:documentation>Encoding to be used for sending e-mail.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"bcc\" type=\"SimpleLayoutAttribute\">\n          <xs:annotation>\n            <xs:documentation>BCC email addresses separated by semicolons (e.g. john@domain.com;jane@domain.com).</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"cc\" type=\"SimpleLayoutAttribute\">\n          <xs:annotation>\n            <xs:documentation>CC email addresses separated by semicolons (e.g. john@domain.com;jane@domain.com).</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"addNewLines\" type=\"xs:boolean\">\n          <xs:annotation>\n            <xs:documentation>Indicates whether to add new lines between log entries.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"html\" type=\"xs:boolean\">\n          <xs:annotation>\n            <xs:documentation>Indicates whether to send message as HTML instead of plain text.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"from\" type=\"SimpleLayoutAttribute\">\n          <xs:annotation>\n            <xs:documentation>Sender's email address (e.g. joe@domain.com).</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"body\" type=\"SimpleLayoutAttribute\">\n          <xs:annotation>\n            <xs:documentation>Mail message body (repeated for each log message send in one mail).</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"subject\" type=\"SimpleLayoutAttribute\">\n          <xs:annotation>\n            <xs:documentation>Mail subject.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"to\" type=\"SimpleLayoutAttribute\">\n          <xs:annotation>\n            <xs:documentation>Recipients' email addresses separated by semicolons (e.g. john@domain.com;jane@domain.com).</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"optimizeBufferReuse\" type=\"xs:boolean\">\n          <xs:annotation>\n            <xs:documentation>Target supports reuse of internal buffers, and doesn't have to constantly allocate new buffers Required for legacy NLog-targets, that expects buffers to remain stable after Write-method exit</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"timeout\" type=\"xs:integer\">\n          <xs:annotation>\n            <xs:documentation>Indicates the SMTP client timeout.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"smtpServer\" type=\"SimpleLayoutAttribute\">\n          <xs:annotation>\n            <xs:documentation>SMTP Server to be used for sending.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"smtpAuthentication\" type=\"NLog.Targets.SmtpAuthenticationMode\">\n          <xs:annotation>\n            <xs:documentation>SMTP Authentication mode.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"smtpUserName\" type=\"SimpleLayoutAttribute\">\n          <xs:annotation>\n            <xs:documentation>Username used to connect to SMTP server (used when SmtpAuthentication is set to \"basic\").</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"smtpPassword\" type=\"SimpleLayoutAttribute\">\n          <xs:annotation>\n            <xs:documentation>Password used to authenticate against SMTP server (used when SmtpAuthentication is set to \"basic\").</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"enableSsl\" type=\"xs:boolean\">\n          <xs:annotation>\n            <xs:documentation>Indicates whether SSL (secure sockets layer) should be used when communicating with SMTP server.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"smtpPort\" type=\"xs:integer\">\n          <xs:annotation>\n            <xs:documentation>Port number that SMTP Server is listening on.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"useSystemNetMailSettings\" type=\"xs:boolean\">\n          <xs:annotation>\n            <xs:documentation>Indicates whether the default Settings from System.Net.MailSettings should be used.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"pickupDirectoryLocation\" type=\"xs:string\">\n          <xs:annotation>\n            <xs:documentation>Folder where applications save mail messages to be processed by the local SMTP server.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"deliveryMethod\" type=\"System.Net.Mail.SmtpDeliveryMethod\">\n          <xs:annotation>\n            <xs:documentation>Specifies how outgoing email messages will be handled.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n      </xs:extension>\n    </xs:complexContent>\n  </xs:complexType>\n  <xs:simpleType name=\"NLog.Targets.SmtpAuthenticationMode\">\n    <xs:restriction base=\"xs:string\">\n      <xs:enumeration value=\"None\" />\n      <xs:enumeration value=\"Basic\" />\n      <xs:enumeration value=\"Ntlm\" />\n    </xs:restriction>\n  </xs:simpleType>\n  <xs:simpleType name=\"System.Net.Mail.SmtpDeliveryMethod\">\n    <xs:restriction base=\"xs:string\">\n      <xs:enumeration value=\"Network\" />\n      <xs:enumeration value=\"SpecifiedPickupDirectory\" />\n      <xs:enumeration value=\"PickupDirectoryFromIis\" />\n    </xs:restriction>\n  </xs:simpleType>\n  <xs:complexType name=\"Memory\">\n    <xs:complexContent>\n      <xs:extension base=\"Target\">\n        <xs:choice minOccurs=\"0\" maxOccurs=\"unbounded\">\n          <xs:element name=\"name\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:string\" />\n          <xs:element name=\"layout\" minOccurs=\"0\" maxOccurs=\"1\" type=\"Layout\" />\n          <xs:element name=\"optimizeBufferReuse\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:boolean\" />\n        </xs:choice>\n        <xs:attribute name=\"name\" type=\"xs:string\">\n          <xs:annotation>\n            <xs:documentation>Name of the target.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"layout\" type=\"SimpleLayoutAttribute\">\n          <xs:annotation>\n            <xs:documentation>Layout used to format log messages.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"optimizeBufferReuse\" type=\"xs:boolean\">\n          <xs:annotation>\n            <xs:documentation>Target supports reuse of internal buffers, and doesn't have to constantly allocate new buffers Required for legacy NLog-targets, that expects buffers to remain stable after Write-method exit</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n      </xs:extension>\n    </xs:complexContent>\n  </xs:complexType>\n  <xs:complexType name=\"MethodCall\">\n    <xs:complexContent>\n      <xs:extension base=\"Target\">\n        <xs:choice minOccurs=\"0\" maxOccurs=\"unbounded\">\n          <xs:element name=\"name\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:string\" />\n          <xs:element name=\"className\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:string\" />\n          <xs:element name=\"methodName\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:string\" />\n          <xs:element name=\"parameter\" minOccurs=\"0\" maxOccurs=\"unbounded\" type=\"NLog.Targets.MethodCallParameter\" />\n          <xs:element name=\"optimizeBufferReuse\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:boolean\" />\n        </xs:choice>\n        <xs:attribute name=\"name\" type=\"xs:string\">\n          <xs:annotation>\n            <xs:documentation>Name of the target.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"className\" type=\"xs:string\">\n          <xs:annotation>\n            <xs:documentation>Class name.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"methodName\" type=\"xs:string\">\n          <xs:annotation>\n            <xs:documentation>Method name. The method must be public and static. Use the AssemblyQualifiedName , https://msdn.microsoft.com/en-us/library/system.type.assemblyqualifiedname(v=vs.110).aspx e.g.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"optimizeBufferReuse\" type=\"xs:boolean\">\n          <xs:annotation>\n            <xs:documentation>Target supports reuse of internal buffers, and doesn't have to constantly allocate new buffers Required for legacy NLog-targets, that expects buffers to remain stable after Write-method exit</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n      </xs:extension>\n    </xs:complexContent>\n  </xs:complexType>\n  <xs:complexType name=\"Network\">\n    <xs:complexContent>\n      <xs:extension base=\"Target\">\n        <xs:choice minOccurs=\"0\" maxOccurs=\"unbounded\">\n          <xs:element name=\"name\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:string\" />\n          <xs:element name=\"layout\" minOccurs=\"0\" maxOccurs=\"1\" type=\"Layout\" />\n          <xs:element name=\"encoding\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:string\" />\n          <xs:element name=\"lineEnding\" minOccurs=\"0\" maxOccurs=\"1\" type=\"LineEndingMode\" />\n          <xs:element name=\"maxMessageSize\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:integer\" />\n          <xs:element name=\"newLine\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:boolean\" />\n          <xs:element name=\"address\" minOccurs=\"0\" maxOccurs=\"1\" type=\"Layout\" />\n          <xs:element name=\"connectionCacheSize\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:integer\" />\n          <xs:element name=\"keepConnection\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:boolean\" />\n          <xs:element name=\"maxConnections\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:integer\" />\n          <xs:element name=\"maxQueueSize\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:integer\" />\n          <xs:element name=\"onConnectionOverflow\" minOccurs=\"0\" maxOccurs=\"1\" type=\"NLog.Targets.NetworkTargetConnectionsOverflowAction\" />\n          <xs:element name=\"onOverflow\" minOccurs=\"0\" maxOccurs=\"1\" type=\"NLog.Targets.NetworkTargetOverflowAction\" />\n          <xs:element name=\"optimizeBufferReuse\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:boolean\" />\n        </xs:choice>\n        <xs:attribute name=\"name\" type=\"xs:string\">\n          <xs:annotation>\n            <xs:documentation>Name of the target.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"layout\" type=\"SimpleLayoutAttribute\">\n          <xs:annotation>\n            <xs:documentation>Layout used to format log messages.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"encoding\" type=\"xs:string\">\n          <xs:annotation>\n            <xs:documentation>Encoding to be used.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"lineEnding\" type=\"LineEndingMode\">\n          <xs:annotation>\n            <xs:documentation>End of line value if a newline is appended at the end of log message .</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"maxMessageSize\" type=\"xs:integer\">\n          <xs:annotation>\n            <xs:documentation>Maximum message size in bytes.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"newLine\" type=\"xs:boolean\">\n          <xs:annotation>\n            <xs:documentation>Indicates whether to append newline at the end of log message.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"address\" type=\"SimpleLayoutAttribute\">\n          <xs:annotation>\n            <xs:documentation>Network address.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"connectionCacheSize\" type=\"xs:integer\">\n          <xs:annotation>\n            <xs:documentation>Size of the connection cache (number of connections which are kept alive).</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"keepConnection\" type=\"xs:boolean\">\n          <xs:annotation>\n            <xs:documentation>Indicates whether to keep connection open whenever possible.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"maxConnections\" type=\"xs:integer\">\n          <xs:annotation>\n            <xs:documentation>Maximum current connections. 0 = no maximum.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"maxQueueSize\" type=\"xs:integer\">\n          <xs:annotation>\n            <xs:documentation>Maximum queue size.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"onConnectionOverflow\" type=\"NLog.Targets.NetworkTargetConnectionsOverflowAction\">\n          <xs:annotation>\n            <xs:documentation>Action that should be taken if the will be more connections than .</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"onOverflow\" type=\"NLog.Targets.NetworkTargetOverflowAction\">\n          <xs:annotation>\n            <xs:documentation>Action that should be taken if the message is larger than maxMessageSize.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"optimizeBufferReuse\" type=\"xs:boolean\">\n          <xs:annotation>\n            <xs:documentation>Target supports reuse of internal buffers, and doesn't have to constantly allocate new buffers Required for legacy NLog-targets, that expects buffers to remain stable after Write-method exit</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n      </xs:extension>\n    </xs:complexContent>\n  </xs:complexType>\n  <xs:complexType name=\"NLogViewer\">\n    <xs:complexContent>\n      <xs:extension base=\"Target\">\n        <xs:choice minOccurs=\"0\" maxOccurs=\"unbounded\">\n          <xs:element name=\"name\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:string\" />\n          <xs:element name=\"encoding\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:string\" />\n          <xs:element name=\"layout\" minOccurs=\"0\" maxOccurs=\"1\" type=\"Layout\" />\n          <xs:element name=\"lineEnding\" minOccurs=\"0\" maxOccurs=\"1\" type=\"LineEndingMode\" />\n          <xs:element name=\"maxMessageSize\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:integer\" />\n          <xs:element name=\"newLine\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:boolean\" />\n          <xs:element name=\"onConnectionOverflow\" minOccurs=\"0\" maxOccurs=\"1\" type=\"NLog.Targets.NetworkTargetConnectionsOverflowAction\" />\n          <xs:element name=\"maxQueueSize\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:integer\" />\n          <xs:element name=\"maxConnections\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:integer\" />\n          <xs:element name=\"keepConnection\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:boolean\" />\n          <xs:element name=\"connectionCacheSize\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:integer\" />\n          <xs:element name=\"address\" minOccurs=\"0\" maxOccurs=\"1\" type=\"Layout\" />\n          <xs:element name=\"onOverflow\" minOccurs=\"0\" maxOccurs=\"1\" type=\"NLog.Targets.NetworkTargetOverflowAction\" />\n          <xs:element name=\"parameter\" minOccurs=\"0\" maxOccurs=\"unbounded\" type=\"NLog.Targets.NLogViewerParameterInfo\" />\n          <xs:element name=\"ndlcItemSeparator\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:string\" />\n          <xs:element name=\"ndcItemSeparator\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:string\" />\n          <xs:element name=\"includeNLogData\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:boolean\" />\n          <xs:element name=\"includeSourceInfo\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:boolean\" />\n          <xs:element name=\"includeNdlc\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:boolean\" />\n          <xs:element name=\"includeNdc\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:boolean\" />\n          <xs:element name=\"includeMdlc\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:boolean\" />\n          <xs:element name=\"includeMdc\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:boolean\" />\n          <xs:element name=\"includeCallSite\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:boolean\" />\n          <xs:element name=\"includeAllProperties\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:boolean\" />\n          <xs:element name=\"appInfo\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:string\" />\n          <xs:element name=\"loggerName\" minOccurs=\"0\" maxOccurs=\"1\" type=\"Layout\" />\n          <xs:element name=\"optimizeBufferReuse\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:boolean\" />\n        </xs:choice>\n        <xs:attribute name=\"name\" type=\"xs:string\">\n          <xs:annotation>\n            <xs:documentation>Name of the target.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"encoding\" type=\"xs:string\">\n          <xs:annotation>\n            <xs:documentation>Encoding to be used.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"layout\" type=\"SimpleLayoutAttribute\">\n          <xs:annotation>\n            <xs:documentation>Instance of  that is used to format log messages.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"lineEnding\" type=\"LineEndingMode\">\n          <xs:annotation>\n            <xs:documentation>End of line value if a newline is appended at the end of log message .</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"maxMessageSize\" type=\"xs:integer\">\n          <xs:annotation>\n            <xs:documentation>Maximum message size in bytes.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"newLine\" type=\"xs:boolean\">\n          <xs:annotation>\n            <xs:documentation>Indicates whether to append newline at the end of log message.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"onConnectionOverflow\" type=\"NLog.Targets.NetworkTargetConnectionsOverflowAction\">\n          <xs:annotation>\n            <xs:documentation>Action that should be taken if the will be more connections than .</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"maxQueueSize\" type=\"xs:integer\">\n          <xs:annotation>\n            <xs:documentation>Maximum queue size.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"maxConnections\" type=\"xs:integer\">\n          <xs:annotation>\n            <xs:documentation>Maximum current connections. 0 = no maximum.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"keepConnection\" type=\"xs:boolean\">\n          <xs:annotation>\n            <xs:documentation>Indicates whether to keep connection open whenever possible.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"connectionCacheSize\" type=\"xs:integer\">\n          <xs:annotation>\n            <xs:documentation>Size of the connection cache (number of connections which are kept alive).</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"address\" type=\"SimpleLayoutAttribute\">\n          <xs:annotation>\n            <xs:documentation>Network address.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"onOverflow\" type=\"NLog.Targets.NetworkTargetOverflowAction\">\n          <xs:annotation>\n            <xs:documentation>Action that should be taken if the message is larger than maxMessageSize.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"ndlcItemSeparator\" type=\"xs:string\">\n          <xs:annotation>\n            <xs:documentation>NDLC item separator.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"ndcItemSeparator\" type=\"xs:string\">\n          <xs:annotation>\n            <xs:documentation>NDC item separator.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"includeNLogData\" type=\"xs:boolean\">\n          <xs:annotation>\n            <xs:documentation>Indicates whether to include NLog-specific extensions to log4j schema.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"includeSourceInfo\" type=\"xs:boolean\">\n          <xs:annotation>\n            <xs:documentation>Indicates whether to include source info (file name and line number) in the information sent over the network.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"includeNdlc\" type=\"xs:boolean\">\n          <xs:annotation>\n            <xs:documentation>Indicates whether to include contents of the  stack.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"includeNdc\" type=\"xs:boolean\">\n          <xs:annotation>\n            <xs:documentation>Indicates whether to include  stack contents.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"includeMdlc\" type=\"xs:boolean\">\n          <xs:annotation>\n            <xs:documentation>Indicates whether to include  dictionary contents.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"includeMdc\" type=\"xs:boolean\">\n          <xs:annotation>\n            <xs:documentation>Indicates whether to include  dictionary contents.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"includeCallSite\" type=\"xs:boolean\">\n          <xs:annotation>\n            <xs:documentation>Indicates whether to include call site (class and method name) in the information sent over the network.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"includeAllProperties\" type=\"xs:boolean\">\n          <xs:annotation>\n            <xs:documentation>Option to include all properties from the log events</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"appInfo\" type=\"xs:string\">\n          <xs:annotation>\n            <xs:documentation>AppInfo field. By default it's the friendly name of the current AppDomain.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"loggerName\" type=\"SimpleLayoutAttribute\">\n          <xs:annotation>\n            <xs:documentation>Renderer for log4j:event logger-xml-attribute (Default ${logger})</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"optimizeBufferReuse\" type=\"xs:boolean\">\n          <xs:annotation>\n            <xs:documentation>Target supports reuse of internal buffers, and doesn't have to constantly allocate new buffers Required for legacy NLog-targets, that expects buffers to remain stable after Write-method exit</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n      </xs:extension>\n    </xs:complexContent>\n  </xs:complexType>\n  <xs:complexType name=\"Null\">\n    <xs:complexContent>\n      <xs:extension base=\"Target\">\n        <xs:choice minOccurs=\"0\" maxOccurs=\"unbounded\">\n          <xs:element name=\"name\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:string\" />\n          <xs:element name=\"layout\" minOccurs=\"0\" maxOccurs=\"1\" type=\"Layout\" />\n          <xs:element name=\"formatMessage\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:boolean\" />\n          <xs:element name=\"optimizeBufferReuse\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:boolean\" />\n        </xs:choice>\n        <xs:attribute name=\"name\" type=\"xs:string\">\n          <xs:annotation>\n            <xs:documentation>Name of the target.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"layout\" type=\"SimpleLayoutAttribute\">\n          <xs:annotation>\n            <xs:documentation>Layout used to format log messages.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"formatMessage\" type=\"xs:boolean\">\n          <xs:annotation>\n            <xs:documentation>Indicates whether to perform layout calculation.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"optimizeBufferReuse\" type=\"xs:boolean\">\n          <xs:annotation>\n            <xs:documentation>Target supports reuse of internal buffers, and doesn't have to constantly allocate new buffers Required for legacy NLog-targets, that expects buffers to remain stable after Write-method exit</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n      </xs:extension>\n    </xs:complexContent>\n  </xs:complexType>\n  <xs:complexType name=\"OutputDebugString\">\n    <xs:complexContent>\n      <xs:extension base=\"Target\">\n        <xs:choice minOccurs=\"0\" maxOccurs=\"unbounded\">\n          <xs:element name=\"name\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:string\" />\n          <xs:element name=\"layout\" minOccurs=\"0\" maxOccurs=\"1\" type=\"Layout\" />\n          <xs:element name=\"optimizeBufferReuse\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:boolean\" />\n        </xs:choice>\n        <xs:attribute name=\"name\" type=\"xs:string\">\n          <xs:annotation>\n            <xs:documentation>Name of the target.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"layout\" type=\"SimpleLayoutAttribute\">\n          <xs:annotation>\n            <xs:documentation>Layout used to format log messages.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"optimizeBufferReuse\" type=\"xs:boolean\">\n          <xs:annotation>\n            <xs:documentation>Target supports reuse of internal buffers, and doesn't have to constantly allocate new buffers Required for legacy NLog-targets, that expects buffers to remain stable after Write-method exit</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n      </xs:extension>\n    </xs:complexContent>\n  </xs:complexType>\n  <xs:complexType name=\"PerfCounter\">\n    <xs:complexContent>\n      <xs:extension base=\"Target\">\n        <xs:choice minOccurs=\"0\" maxOccurs=\"unbounded\">\n          <xs:element name=\"name\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:string\" />\n          <xs:element name=\"autoCreate\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:boolean\" />\n          <xs:element name=\"categoryName\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:string\" />\n          <xs:element name=\"counterHelp\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:string\" />\n          <xs:element name=\"counterName\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:string\" />\n          <xs:element name=\"counterType\" minOccurs=\"0\" maxOccurs=\"1\" type=\"System.Diagnostics.PerformanceCounterType\" />\n          <xs:element name=\"incrementValue\" minOccurs=\"0\" maxOccurs=\"1\" type=\"Layout\" />\n          <xs:element name=\"instanceName\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:string\" />\n          <xs:element name=\"optimizeBufferReuse\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:boolean\" />\n        </xs:choice>\n        <xs:attribute name=\"name\" type=\"xs:string\">\n          <xs:annotation>\n            <xs:documentation>Name of the target.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"autoCreate\" type=\"xs:boolean\">\n          <xs:annotation>\n            <xs:documentation>Indicates whether performance counter should be automatically created.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"categoryName\" type=\"xs:string\">\n          <xs:annotation>\n            <xs:documentation>Name of the performance counter category.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"counterHelp\" type=\"xs:string\">\n          <xs:annotation>\n            <xs:documentation>Counter help text.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"counterName\" type=\"xs:string\">\n          <xs:annotation>\n            <xs:documentation>Name of the performance counter.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"counterType\" type=\"System.Diagnostics.PerformanceCounterType\">\n          <xs:annotation>\n            <xs:documentation>Performance counter type.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"incrementValue\" type=\"SimpleLayoutAttribute\">\n          <xs:annotation>\n            <xs:documentation>The value by which to increment the counter.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"instanceName\" type=\"xs:string\">\n          <xs:annotation>\n            <xs:documentation>Performance counter instance name.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"optimizeBufferReuse\" type=\"xs:boolean\">\n          <xs:annotation>\n            <xs:documentation>Target supports reuse of internal buffers, and doesn't have to constantly allocate new buffers Required for legacy NLog-targets, that expects buffers to remain stable after Write-method exit</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n      </xs:extension>\n    </xs:complexContent>\n  </xs:complexType>\n  <xs:simpleType name=\"System.Diagnostics.PerformanceCounterType\">\n    <xs:restriction base=\"xs:string\">\n      <xs:enumeration value=\"NumberOfItems32\" />\n      <xs:enumeration value=\"NumberOfItems64\" />\n      <xs:enumeration value=\"NumberOfItemsHEX32\" />\n      <xs:enumeration value=\"NumberOfItemsHEX64\" />\n      <xs:enumeration value=\"RateOfCountsPerSecond32\" />\n      <xs:enumeration value=\"RateOfCountsPerSecond64\" />\n      <xs:enumeration value=\"CountPerTimeInterval32\" />\n      <xs:enumeration value=\"CountPerTimeInterval64\" />\n      <xs:enumeration value=\"RawFraction\" />\n      <xs:enumeration value=\"RawBase\" />\n      <xs:enumeration value=\"AverageTimer32\" />\n      <xs:enumeration value=\"AverageBase\" />\n      <xs:enumeration value=\"AverageCount64\" />\n      <xs:enumeration value=\"SampleFraction\" />\n      <xs:enumeration value=\"SampleCounter\" />\n      <xs:enumeration value=\"SampleBase\" />\n      <xs:enumeration value=\"CounterTimer\" />\n      <xs:enumeration value=\"CounterTimerInverse\" />\n      <xs:enumeration value=\"Timer100Ns\" />\n      <xs:enumeration value=\"Timer100NsInverse\" />\n      <xs:enumeration value=\"ElapsedTime\" />\n      <xs:enumeration value=\"CounterMultiTimer\" />\n      <xs:enumeration value=\"CounterMultiTimerInverse\" />\n      <xs:enumeration value=\"CounterMultiTimer100Ns\" />\n      <xs:enumeration value=\"CounterMultiTimer100NsInverse\" />\n      <xs:enumeration value=\"CounterMultiBase\" />\n      <xs:enumeration value=\"CounterDelta32\" />\n      <xs:enumeration value=\"CounterDelta64\" />\n    </xs:restriction>\n  </xs:simpleType>\n  <xs:complexType name=\"PostFilteringWrapper\">\n    <xs:complexContent>\n      <xs:extension base=\"WrapperTargetBase\">\n        <xs:choice minOccurs=\"0\" maxOccurs=\"unbounded\">\n          <xs:element name=\"name\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:string\" />\n          <xs:element name=\"defaultFilter\" minOccurs=\"0\" maxOccurs=\"1\" type=\"Condition\" />\n          <xs:element name=\"when\" minOccurs=\"0\" maxOccurs=\"unbounded\" type=\"NLog.Targets.Wrappers.FilteringRule\" />\n          <xs:element name=\"optimizeBufferReuse\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:boolean\" />\n        </xs:choice>\n        <xs:attribute name=\"name\" type=\"xs:string\">\n          <xs:annotation>\n            <xs:documentation>Name of the target.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"defaultFilter\" type=\"Condition\">\n          <xs:annotation>\n            <xs:documentation>Default filter to be applied when no specific rule matches.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"optimizeBufferReuse\" type=\"xs:boolean\">\n          <xs:annotation>\n            <xs:documentation>Target supports reuse of internal buffers, and doesn't have to constantly allocate new buffers Required for legacy NLog-targets, that expects buffers to remain stable after Write-method exit</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n      </xs:extension>\n    </xs:complexContent>\n  </xs:complexType>\n  <xs:complexType name=\"NLog.Targets.Wrappers.FilteringRule\">\n    <xs:choice minOccurs=\"0\" maxOccurs=\"unbounded\">\n      <xs:element name=\"exists\" minOccurs=\"0\" maxOccurs=\"1\" type=\"Condition\" />\n      <xs:element name=\"filter\" minOccurs=\"0\" maxOccurs=\"1\" type=\"Condition\" />\n    </xs:choice>\n    <xs:attribute name=\"exists\" type=\"Condition\">\n      <xs:annotation>\n        <xs:documentation>Condition to be tested.</xs:documentation>\n      </xs:annotation>\n    </xs:attribute>\n    <xs:attribute name=\"filter\" type=\"Condition\">\n      <xs:annotation>\n        <xs:documentation>Resulting filter to be applied when the condition matches.</xs:documentation>\n      </xs:annotation>\n    </xs:attribute>\n  </xs:complexType>\n  <xs:complexType name=\"RandomizeGroup\">\n    <xs:complexContent>\n      <xs:extension base=\"CompoundTargetBase\">\n        <xs:choice minOccurs=\"0\" maxOccurs=\"unbounded\">\n          <xs:element name=\"name\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:string\" />\n          <xs:element name=\"optimizeBufferReuse\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:boolean\" />\n        </xs:choice>\n        <xs:attribute name=\"name\" type=\"xs:string\">\n          <xs:annotation>\n            <xs:documentation>Name of the target.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"optimizeBufferReuse\" type=\"xs:boolean\">\n          <xs:annotation>\n            <xs:documentation>Target supports reuse of internal buffers, and doesn't have to constantly allocate new buffers Required for legacy NLog-targets, that expects buffers to remain stable after Write-method exit</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n      </xs:extension>\n    </xs:complexContent>\n  </xs:complexType>\n  <xs:complexType name=\"RepeatingWrapper\">\n    <xs:complexContent>\n      <xs:extension base=\"WrapperTargetBase\">\n        <xs:choice minOccurs=\"0\" maxOccurs=\"unbounded\">\n          <xs:element name=\"name\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:string\" />\n          <xs:element name=\"optimizeBufferReuse\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:boolean\" />\n          <xs:element name=\"repeatCount\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:integer\" />\n        </xs:choice>\n        <xs:attribute name=\"name\" type=\"xs:string\">\n          <xs:annotation>\n            <xs:documentation>Name of the target.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"optimizeBufferReuse\" type=\"xs:boolean\">\n          <xs:annotation>\n            <xs:documentation>Target supports reuse of internal buffers, and doesn't have to constantly allocate new buffers Required for legacy NLog-targets, that expects buffers to remain stable after Write-method exit</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"repeatCount\" type=\"xs:integer\">\n          <xs:annotation>\n            <xs:documentation>Number of times to repeat each log message.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n      </xs:extension>\n    </xs:complexContent>\n  </xs:complexType>\n  <xs:complexType name=\"RetryingWrapper\">\n    <xs:complexContent>\n      <xs:extension base=\"WrapperTargetBase\">\n        <xs:choice minOccurs=\"0\" maxOccurs=\"unbounded\">\n          <xs:element name=\"name\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:string\" />\n          <xs:element name=\"optimizeBufferReuse\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:boolean\" />\n          <xs:element name=\"retryCount\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:integer\" />\n          <xs:element name=\"retryDelayMilliseconds\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:integer\" />\n        </xs:choice>\n        <xs:attribute name=\"name\" type=\"xs:string\">\n          <xs:annotation>\n            <xs:documentation>Name of the target.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"optimizeBufferReuse\" type=\"xs:boolean\">\n          <xs:annotation>\n            <xs:documentation>Target supports reuse of internal buffers, and doesn't have to constantly allocate new buffers Required for legacy NLog-targets, that expects buffers to remain stable after Write-method exit</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"retryCount\" type=\"xs:integer\">\n          <xs:annotation>\n            <xs:documentation>Number of retries that should be attempted on the wrapped target in case of a failure.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"retryDelayMilliseconds\" type=\"xs:integer\">\n          <xs:annotation>\n            <xs:documentation>Time to wait between retries in milliseconds.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n      </xs:extension>\n    </xs:complexContent>\n  </xs:complexType>\n  <xs:complexType name=\"RoundRobinGroup\">\n    <xs:complexContent>\n      <xs:extension base=\"CompoundTargetBase\">\n        <xs:choice minOccurs=\"0\" maxOccurs=\"unbounded\">\n          <xs:element name=\"name\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:string\" />\n          <xs:element name=\"optimizeBufferReuse\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:boolean\" />\n        </xs:choice>\n        <xs:attribute name=\"name\" type=\"xs:string\">\n          <xs:annotation>\n            <xs:documentation>Name of the target.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"optimizeBufferReuse\" type=\"xs:boolean\">\n          <xs:annotation>\n            <xs:documentation>Target supports reuse of internal buffers, and doesn't have to constantly allocate new buffers Required for legacy NLog-targets, that expects buffers to remain stable after Write-method exit</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n      </xs:extension>\n    </xs:complexContent>\n  </xs:complexType>\n  <xs:complexType name=\"SplitGroup\">\n    <xs:complexContent>\n      <xs:extension base=\"CompoundTargetBase\">\n        <xs:choice minOccurs=\"0\" maxOccurs=\"unbounded\">\n          <xs:element name=\"name\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:string\" />\n          <xs:element name=\"optimizeBufferReuse\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:boolean\" />\n        </xs:choice>\n        <xs:attribute name=\"name\" type=\"xs:string\">\n          <xs:annotation>\n            <xs:documentation>Name of the target.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"optimizeBufferReuse\" type=\"xs:boolean\">\n          <xs:annotation>\n            <xs:documentation>Target supports reuse of internal buffers, and doesn't have to constantly allocate new buffers Required for legacy NLog-targets, that expects buffers to remain stable after Write-method exit</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n      </xs:extension>\n    </xs:complexContent>\n  </xs:complexType>\n  <xs:complexType name=\"Trace\">\n    <xs:complexContent>\n      <xs:extension base=\"Target\">\n        <xs:choice minOccurs=\"0\" maxOccurs=\"unbounded\">\n          <xs:element name=\"name\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:string\" />\n          <xs:element name=\"layout\" minOccurs=\"0\" maxOccurs=\"1\" type=\"Layout\" />\n          <xs:element name=\"rawWrite\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:boolean\" />\n          <xs:element name=\"optimizeBufferReuse\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:boolean\" />\n        </xs:choice>\n        <xs:attribute name=\"name\" type=\"xs:string\">\n          <xs:annotation>\n            <xs:documentation>Name of the target.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"layout\" type=\"SimpleLayoutAttribute\">\n          <xs:annotation>\n            <xs:documentation>Layout used to format log messages.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"rawWrite\" type=\"xs:boolean\">\n          <xs:annotation>\n            <xs:documentation>Always use  independent of </xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"optimizeBufferReuse\" type=\"xs:boolean\">\n          <xs:annotation>\n            <xs:documentation>Target supports reuse of internal buffers, and doesn't have to constantly allocate new buffers Required for legacy NLog-targets, that expects buffers to remain stable after Write-method exit</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n      </xs:extension>\n    </xs:complexContent>\n  </xs:complexType>\n  <xs:complexType name=\"WebService\">\n    <xs:complexContent>\n      <xs:extension base=\"Target\">\n        <xs:choice minOccurs=\"0\" maxOccurs=\"unbounded\">\n          <xs:element name=\"name\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:string\" />\n          <xs:element name=\"parameter\" minOccurs=\"0\" maxOccurs=\"unbounded\" type=\"NLog.Targets.MethodCallParameter\" />\n          <xs:element name=\"optimizeBufferReuse\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:boolean\" />\n          <xs:element name=\"includeBOM\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:boolean\" />\n          <xs:element name=\"methodName\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:string\" />\n          <xs:element name=\"namespace\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:string\" />\n          <xs:element name=\"protocol\" minOccurs=\"0\" maxOccurs=\"1\" type=\"NLog.Targets.WebServiceProtocol\" />\n          <xs:element name=\"proxyAddress\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:string\" />\n          <xs:element name=\"encoding\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:string\" />\n          <xs:element name=\"url\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:anyURI\" />\n          <xs:element name=\"escapeDataNLogLegacy\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:boolean\" />\n          <xs:element name=\"escapeDataRfc3986\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:boolean\" />\n          <xs:element name=\"preAuthenticate\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:boolean\" />\n          <xs:element name=\"xmlRoot\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:string\" />\n          <xs:element name=\"xmlRootNamespace\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:string\" />\n          <xs:element name=\"header\" minOccurs=\"0\" maxOccurs=\"unbounded\" type=\"NLog.Targets.MethodCallParameter\" />\n          <xs:element name=\"proxyType\" minOccurs=\"0\" maxOccurs=\"1\" type=\"NLog.Targets.WebServiceProxyType\" />\n        </xs:choice>\n        <xs:attribute name=\"name\" type=\"xs:string\">\n          <xs:annotation>\n            <xs:documentation>Name of the target.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"optimizeBufferReuse\" type=\"xs:boolean\">\n          <xs:annotation>\n            <xs:documentation>Target supports reuse of internal buffers, and doesn't have to constantly allocate new buffers Required for legacy NLog-targets, that expects buffers to remain stable after Write-method exit</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"includeBOM\" type=\"xs:boolean\">\n          <xs:annotation>\n            <xs:documentation>Should we include the BOM (Byte-order-mark) for UTF? Influences the  property. This will only work for UTF-8.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"methodName\" type=\"xs:string\">\n          <xs:annotation>\n            <xs:documentation>Web service method name. Only used with Soap.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"namespace\" type=\"xs:string\">\n          <xs:annotation>\n            <xs:documentation>Web service namespace. Only used with Soap.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"protocol\" type=\"NLog.Targets.WebServiceProtocol\">\n          <xs:annotation>\n            <xs:documentation>Protocol to be used when calling web service.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"proxyAddress\" type=\"xs:string\">\n          <xs:annotation>\n            <xs:documentation>Custom proxy address, include port separated by a colon</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"encoding\" type=\"xs:string\">\n          <xs:annotation>\n            <xs:documentation>Encoding.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"url\" type=\"xs:anyURI\">\n          <xs:annotation>\n            <xs:documentation>Web service URL.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"escapeDataNLogLegacy\" type=\"xs:boolean\">\n          <xs:annotation>\n            <xs:documentation>Value whether escaping be done according to the old NLog style (Very non-standard)</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"escapeDataRfc3986\" type=\"xs:boolean\">\n          <xs:annotation>\n            <xs:documentation>Value whether escaping be done according to Rfc3986 (Supports Internationalized Resource Identifiers - IRIs)</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"preAuthenticate\" type=\"xs:boolean\">\n          <xs:annotation>\n            <xs:documentation>Indicates whether to pre-authenticate the HttpWebRequest (Requires 'Authorization' in  parameters)</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"xmlRoot\" type=\"xs:string\">\n          <xs:annotation>\n            <xs:documentation>Name of the root XML element, if POST of XML document chosen. If so, this property must not be null. (see  and ).</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"xmlRootNamespace\" type=\"xs:string\">\n          <xs:annotation>\n            <xs:documentation>(optional) root namespace of the XML document, if POST of XML document chosen. (see  and ).</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"proxyType\" type=\"NLog.Targets.WebServiceProxyType\">\n          <xs:annotation>\n            <xs:documentation>Proxy configuration when calling web service</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n      </xs:extension>\n    </xs:complexContent>\n  </xs:complexType>\n  <xs:simpleType name=\"NLog.Targets.WebServiceProtocol\">\n    <xs:restriction base=\"xs:string\">\n      <xs:enumeration value=\"Soap11\" />\n      <xs:enumeration value=\"Soap12\" />\n      <xs:enumeration value=\"HttpPost\" />\n      <xs:enumeration value=\"HttpGet\" />\n      <xs:enumeration value=\"JsonPost\" />\n      <xs:enumeration value=\"XmlPost\" />\n    </xs:restriction>\n  </xs:simpleType>\n  <xs:simpleType name=\"NLog.Targets.WebServiceProxyType\">\n    <xs:restriction base=\"xs:string\">\n      <xs:enumeration value=\"DefaultWebProxy\" />\n      <xs:enumeration value=\"AutoProxy\" />\n      <xs:enumeration value=\"NoProxy\" />\n      <xs:enumeration value=\"ProxyAddress\" />\n    </xs:restriction>\n  </xs:simpleType>\n  <xs:complexType name=\"CompoundLayout\">\n    <xs:complexContent>\n      <xs:extension base=\"Layout\">\n        <xs:choice minOccurs=\"0\" maxOccurs=\"unbounded\">\n          <xs:element name=\"layout\" minOccurs=\"0\" maxOccurs=\"unbounded\" type=\"Layout\" />\n        </xs:choice>\n      </xs:extension>\n    </xs:complexContent>\n  </xs:complexType>\n  <xs:complexType name=\"Layout\">\n    <xs:choice minOccurs=\"0\" maxOccurs=\"unbounded\" />\n  </xs:complexType>\n  <xs:complexType name=\"CsvLayout\">\n    <xs:complexContent>\n      <xs:extension base=\"Layout\">\n        <xs:choice minOccurs=\"0\" maxOccurs=\"unbounded\">\n          <xs:element name=\"footer\" minOccurs=\"0\" maxOccurs=\"1\" type=\"Layout\" />\n          <xs:element name=\"header\" minOccurs=\"0\" maxOccurs=\"1\" type=\"Layout\" />\n          <xs:element name=\"layout\" minOccurs=\"0\" maxOccurs=\"1\" type=\"Layout\" />\n          <xs:element name=\"column\" minOccurs=\"0\" maxOccurs=\"unbounded\" type=\"NLog.Layouts.CsvColumn\" />\n          <xs:element name=\"customColumnDelimiter\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:string\" />\n          <xs:element name=\"delimiter\" minOccurs=\"0\" maxOccurs=\"1\" type=\"NLog.Layouts.CsvColumnDelimiterMode\" />\n          <xs:element name=\"quoteChar\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:string\" />\n          <xs:element name=\"quoting\" minOccurs=\"0\" maxOccurs=\"1\" type=\"NLog.Layouts.CsvQuotingMode\" />\n          <xs:element name=\"withHeader\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:boolean\" />\n        </xs:choice>\n        <xs:attribute name=\"footer\" type=\"SimpleLayoutAttribute\">\n          <xs:annotation>\n            <xs:documentation>Footer layout.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"header\" type=\"SimpleLayoutAttribute\">\n          <xs:annotation>\n            <xs:documentation>Header layout.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"layout\" type=\"SimpleLayoutAttribute\">\n          <xs:annotation>\n            <xs:documentation>Body layout (can be repeated multiple times).</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"customColumnDelimiter\" type=\"xs:string\">\n          <xs:annotation>\n            <xs:documentation>Custom column delimiter value (valid when ColumnDelimiter is set to 'Custom').</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"delimiter\" type=\"NLog.Layouts.CsvColumnDelimiterMode\">\n          <xs:annotation>\n            <xs:documentation>Column delimiter.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"quoteChar\" type=\"xs:string\">\n          <xs:annotation>\n            <xs:documentation>Quote Character.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"quoting\" type=\"NLog.Layouts.CsvQuotingMode\">\n          <xs:annotation>\n            <xs:documentation>Quoting mode.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"withHeader\" type=\"xs:boolean\">\n          <xs:annotation>\n            <xs:documentation>Indicates whether CVS should include header.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n      </xs:extension>\n    </xs:complexContent>\n  </xs:complexType>\n  <xs:simpleType name=\"NLog.Layouts.CsvColumnDelimiterMode\">\n    <xs:restriction base=\"xs:string\">\n      <xs:enumeration value=\"Auto\" />\n      <xs:enumeration value=\"Comma\" />\n      <xs:enumeration value=\"Semicolon\" />\n      <xs:enumeration value=\"Tab\" />\n      <xs:enumeration value=\"Pipe\" />\n      <xs:enumeration value=\"Space\" />\n      <xs:enumeration value=\"Custom\" />\n    </xs:restriction>\n  </xs:simpleType>\n  <xs:simpleType name=\"NLog.Layouts.CsvQuotingMode\">\n    <xs:restriction base=\"xs:string\">\n      <xs:enumeration value=\"All\" />\n      <xs:enumeration value=\"Nothing\" />\n      <xs:enumeration value=\"Auto\" />\n    </xs:restriction>\n  </xs:simpleType>\n  <xs:complexType name=\"NLog.Layouts.CsvColumn\">\n    <xs:choice minOccurs=\"0\" maxOccurs=\"unbounded\">\n      <xs:element name=\"layout\" minOccurs=\"0\" maxOccurs=\"1\" type=\"Layout\" />\n      <xs:element name=\"name\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:string\" />\n    </xs:choice>\n    <xs:attribute name=\"layout\" type=\"SimpleLayoutAttribute\">\n      <xs:annotation>\n        <xs:documentation>Layout of the column.</xs:documentation>\n      </xs:annotation>\n    </xs:attribute>\n    <xs:attribute name=\"name\" type=\"xs:string\">\n      <xs:annotation>\n        <xs:documentation>Name of the column.</xs:documentation>\n      </xs:annotation>\n    </xs:attribute>\n  </xs:complexType>\n  <xs:complexType name=\"JsonLayout\">\n    <xs:complexContent>\n      <xs:extension base=\"Layout\">\n        <xs:choice minOccurs=\"0\" maxOccurs=\"unbounded\">\n          <xs:element name=\"attribute\" minOccurs=\"0\" maxOccurs=\"unbounded\" type=\"NLog.Layouts.JsonAttribute\" />\n          <xs:element name=\"excludeProperties\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:string\" />\n          <xs:element name=\"includeAllProperties\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:boolean\" />\n          <xs:element name=\"includeMdc\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:boolean\" />\n          <xs:element name=\"includeMdlc\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:boolean\" />\n          <xs:element name=\"renderEmptyObject\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:boolean\" />\n          <xs:element name=\"suppressSpaces\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:boolean\" />\n          <xs:element name=\"maxRecursionLimit\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:integer\" />\n        </xs:choice>\n        <xs:attribute name=\"excludeProperties\" type=\"xs:string\">\n          <xs:annotation>\n            <xs:documentation>List of property names to exclude when  is true</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"includeAllProperties\" type=\"xs:boolean\">\n          <xs:annotation>\n            <xs:documentation>Option to include all properties from the log event (as JSON)</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"includeMdc\" type=\"xs:boolean\">\n          <xs:annotation>\n            <xs:documentation>Indicates whether to include contents of the  dictionary.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"includeMdlc\" type=\"xs:boolean\">\n          <xs:annotation>\n            <xs:documentation>Indicates whether to include contents of the  dictionary.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"renderEmptyObject\" type=\"xs:boolean\">\n          <xs:annotation>\n            <xs:documentation>Option to render the empty object value {}</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"suppressSpaces\" type=\"xs:boolean\">\n          <xs:annotation>\n            <xs:documentation>Option to suppress the extra spaces in the output json</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"maxRecursionLimit\" type=\"xs:integer\">\n          <xs:annotation>\n            <xs:documentation>How far should the JSON serializer follow object references before backing off</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n      </xs:extension>\n    </xs:complexContent>\n  </xs:complexType>\n  <xs:complexType name=\"NLog.Layouts.JsonAttribute\">\n    <xs:choice minOccurs=\"0\" maxOccurs=\"unbounded\">\n      <xs:element name=\"layout\" minOccurs=\"0\" maxOccurs=\"1\" type=\"Layout\" />\n      <xs:element name=\"name\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:string\" />\n      <xs:element name=\"encode\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:boolean\" />\n      <xs:element name=\"escapeUnicode\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:boolean\" />\n      <xs:element name=\"includeEmptyValue\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:boolean\" />\n    </xs:choice>\n    <xs:attribute name=\"layout\" type=\"SimpleLayoutAttribute\">\n      <xs:annotation>\n        <xs:documentation>Layout that will be rendered as the attribute's value.</xs:documentation>\n      </xs:annotation>\n    </xs:attribute>\n    <xs:attribute name=\"name\" type=\"xs:string\">\n      <xs:annotation>\n        <xs:documentation>Name of the attribute.</xs:documentation>\n      </xs:annotation>\n    </xs:attribute>\n    <xs:attribute name=\"encode\" type=\"xs:boolean\">\n      <xs:annotation>\n        <xs:documentation>Determines wether or not this attribute will be Json encoded.</xs:documentation>\n      </xs:annotation>\n    </xs:attribute>\n    <xs:attribute name=\"escapeUnicode\" type=\"xs:boolean\">\n      <xs:annotation>\n        <xs:documentation>Indicates whether to escape non-ascii characters</xs:documentation>\n      </xs:annotation>\n    </xs:attribute>\n    <xs:attribute name=\"includeEmptyValue\" type=\"xs:boolean\">\n      <xs:annotation>\n        <xs:documentation>Whether an attribute with empty value should be included in the output</xs:documentation>\n      </xs:annotation>\n    </xs:attribute>\n  </xs:complexType>\n  <xs:complexType name=\"LayoutWithHeaderAndFooter\">\n    <xs:complexContent>\n      <xs:extension base=\"Layout\">\n        <xs:choice minOccurs=\"0\" maxOccurs=\"unbounded\">\n          <xs:element name=\"footer\" minOccurs=\"0\" maxOccurs=\"1\" type=\"Layout\" />\n          <xs:element name=\"header\" minOccurs=\"0\" maxOccurs=\"1\" type=\"Layout\" />\n          <xs:element name=\"layout\" minOccurs=\"0\" maxOccurs=\"1\" type=\"Layout\" />\n        </xs:choice>\n        <xs:attribute name=\"footer\" type=\"SimpleLayoutAttribute\">\n          <xs:annotation>\n            <xs:documentation>Footer layout.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"header\" type=\"SimpleLayoutAttribute\">\n          <xs:annotation>\n            <xs:documentation>Header layout.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"layout\" type=\"SimpleLayoutAttribute\">\n          <xs:annotation>\n            <xs:documentation>Body layout (can be repeated multiple times).</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n      </xs:extension>\n    </xs:complexContent>\n  </xs:complexType>\n  <xs:complexType name=\"Log4JXmlEventLayout\">\n    <xs:complexContent>\n      <xs:extension base=\"Layout\">\n        <xs:choice minOccurs=\"0\" maxOccurs=\"unbounded\">\n          <xs:element name=\"includeAllProperties\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:boolean\" />\n          <xs:element name=\"includeMdc\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:boolean\" />\n          <xs:element name=\"includeMdlc\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:boolean\" />\n          <xs:element name=\"includeNdc\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:boolean\" />\n          <xs:element name=\"includeNdlc\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:boolean\" />\n        </xs:choice>\n        <xs:attribute name=\"includeAllProperties\" type=\"xs:boolean\">\n          <xs:annotation>\n            <xs:documentation>Option to include all properties from the log events</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"includeMdc\" type=\"xs:boolean\">\n          <xs:annotation>\n            <xs:documentation>Indicates whether to include contents of the  dictionary.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"includeMdlc\" type=\"xs:boolean\">\n          <xs:annotation>\n            <xs:documentation>Indicates whether to include contents of the  dictionary.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"includeNdc\" type=\"xs:boolean\">\n          <xs:annotation>\n            <xs:documentation>Indicates whether to include contents of the  stack.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"includeNdlc\" type=\"xs:boolean\">\n          <xs:annotation>\n            <xs:documentation>Indicates whether to include contents of the  stack.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n      </xs:extension>\n    </xs:complexContent>\n  </xs:complexType>\n  <xs:complexType name=\"SimpleLayout\">\n    <xs:complexContent>\n      <xs:extension base=\"Layout\">\n        <xs:choice minOccurs=\"0\" maxOccurs=\"unbounded\">\n          <xs:element name=\"text\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:string\" />\n        </xs:choice>\n        <xs:attribute name=\"text\" type=\"xs:string\">\n          <xs:annotation>\n            <xs:documentation>Layout text.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n      </xs:extension>\n    </xs:complexContent>\n  </xs:complexType>\n  <xs:complexType name=\"when\">\n    <xs:complexContent>\n      <xs:extension base=\"Filter\">\n        <xs:choice minOccurs=\"0\" maxOccurs=\"unbounded\">\n          <xs:element name=\"action\" minOccurs=\"0\" maxOccurs=\"1\" type=\"FilterResult\" />\n          <xs:element name=\"condition\" minOccurs=\"0\" maxOccurs=\"1\" type=\"Condition\" />\n        </xs:choice>\n        <xs:attribute name=\"action\" type=\"FilterResult\">\n          <xs:annotation>\n            <xs:documentation>Action to be taken when filter matches.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"condition\" type=\"Condition\">\n          <xs:annotation>\n            <xs:documentation>Condition expression.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n      </xs:extension>\n    </xs:complexContent>\n  </xs:complexType>\n  <xs:simpleType name=\"FilterResult\">\n    <xs:restriction base=\"xs:string\">\n      <xs:enumeration value=\"Neutral\" />\n      <xs:enumeration value=\"Log\" />\n      <xs:enumeration value=\"Ignore\" />\n      <xs:enumeration value=\"LogFinal\" />\n      <xs:enumeration value=\"IgnoreFinal\" />\n    </xs:restriction>\n  </xs:simpleType>\n  <xs:complexType name=\"whenContains\">\n    <xs:complexContent>\n      <xs:extension base=\"Filter\">\n        <xs:choice minOccurs=\"0\" maxOccurs=\"unbounded\">\n          <xs:element name=\"action\" minOccurs=\"0\" maxOccurs=\"1\" type=\"FilterResult\" />\n          <xs:element name=\"ignoreCase\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:boolean\" />\n          <xs:element name=\"layout\" minOccurs=\"0\" maxOccurs=\"1\" type=\"Layout\" />\n          <xs:element name=\"substring\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:string\" />\n        </xs:choice>\n        <xs:attribute name=\"action\" type=\"FilterResult\">\n          <xs:annotation>\n            <xs:documentation>Action to be taken when filter matches.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"ignoreCase\" type=\"xs:boolean\">\n          <xs:annotation>\n            <xs:documentation>Indicates whether to ignore case when comparing strings.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"layout\" type=\"SimpleLayoutAttribute\">\n          <xs:annotation>\n            <xs:documentation>Layout to be used to filter log messages.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"substring\" type=\"xs:string\">\n          <xs:annotation>\n            <xs:documentation>Substring to be matched.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n      </xs:extension>\n    </xs:complexContent>\n  </xs:complexType>\n  <xs:complexType name=\"whenEqual\">\n    <xs:complexContent>\n      <xs:extension base=\"Filter\">\n        <xs:choice minOccurs=\"0\" maxOccurs=\"unbounded\">\n          <xs:element name=\"action\" minOccurs=\"0\" maxOccurs=\"1\" type=\"FilterResult\" />\n          <xs:element name=\"compareTo\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:string\" />\n          <xs:element name=\"ignoreCase\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:boolean\" />\n          <xs:element name=\"layout\" minOccurs=\"0\" maxOccurs=\"1\" type=\"Layout\" />\n        </xs:choice>\n        <xs:attribute name=\"action\" type=\"FilterResult\">\n          <xs:annotation>\n            <xs:documentation>Action to be taken when filter matches.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"compareTo\" type=\"xs:string\">\n          <xs:annotation>\n            <xs:documentation>String to compare the layout to.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"ignoreCase\" type=\"xs:boolean\">\n          <xs:annotation>\n            <xs:documentation>Indicates whether to ignore case when comparing strings.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"layout\" type=\"SimpleLayoutAttribute\">\n          <xs:annotation>\n            <xs:documentation>Layout to be used to filter log messages.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n      </xs:extension>\n    </xs:complexContent>\n  </xs:complexType>\n  <xs:complexType name=\"whenNotContains\">\n    <xs:complexContent>\n      <xs:extension base=\"Filter\">\n        <xs:choice minOccurs=\"0\" maxOccurs=\"unbounded\">\n          <xs:element name=\"action\" minOccurs=\"0\" maxOccurs=\"1\" type=\"FilterResult\" />\n          <xs:element name=\"ignoreCase\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:boolean\" />\n          <xs:element name=\"layout\" minOccurs=\"0\" maxOccurs=\"1\" type=\"Layout\" />\n          <xs:element name=\"substring\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:string\" />\n        </xs:choice>\n        <xs:attribute name=\"action\" type=\"FilterResult\">\n          <xs:annotation>\n            <xs:documentation>Action to be taken when filter matches.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"ignoreCase\" type=\"xs:boolean\">\n          <xs:annotation>\n            <xs:documentation>Indicates whether to ignore case when comparing strings.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"layout\" type=\"SimpleLayoutAttribute\">\n          <xs:annotation>\n            <xs:documentation>Layout to be used to filter log messages.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"substring\" type=\"xs:string\">\n          <xs:annotation>\n            <xs:documentation>Substring to be matched.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n      </xs:extension>\n    </xs:complexContent>\n  </xs:complexType>\n  <xs:complexType name=\"whenNotEqual\">\n    <xs:complexContent>\n      <xs:extension base=\"Filter\">\n        <xs:choice minOccurs=\"0\" maxOccurs=\"unbounded\">\n          <xs:element name=\"action\" minOccurs=\"0\" maxOccurs=\"1\" type=\"FilterResult\" />\n          <xs:element name=\"compareTo\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:string\" />\n          <xs:element name=\"ignoreCase\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:boolean\" />\n          <xs:element name=\"layout\" minOccurs=\"0\" maxOccurs=\"1\" type=\"Layout\" />\n        </xs:choice>\n        <xs:attribute name=\"action\" type=\"FilterResult\">\n          <xs:annotation>\n            <xs:documentation>Action to be taken when filter matches.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"compareTo\" type=\"xs:string\">\n          <xs:annotation>\n            <xs:documentation>String to compare the layout to.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"ignoreCase\" type=\"xs:boolean\">\n          <xs:annotation>\n            <xs:documentation>Indicates whether to ignore case when comparing strings.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"layout\" type=\"SimpleLayoutAttribute\">\n          <xs:annotation>\n            <xs:documentation>Layout to be used to filter log messages.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n      </xs:extension>\n    </xs:complexContent>\n  </xs:complexType>\n  <xs:complexType name=\"whenRepeated\">\n    <xs:complexContent>\n      <xs:extension base=\"Filter\">\n        <xs:choice minOccurs=\"0\" maxOccurs=\"unbounded\">\n          <xs:element name=\"action\" minOccurs=\"0\" maxOccurs=\"1\" type=\"FilterResult\" />\n          <xs:element name=\"defaultFilterCacheSize\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:integer\" />\n          <xs:element name=\"includeFirst\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:boolean\" />\n          <xs:element name=\"layout\" minOccurs=\"0\" maxOccurs=\"1\" type=\"Layout\" />\n          <xs:element name=\"maxFilterCacheSize\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:integer\" />\n          <xs:element name=\"maxLength\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:integer\" />\n          <xs:element name=\"timeoutSeconds\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:integer\" />\n          <xs:element name=\"optimizeBufferDefaultLength\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:integer\" />\n          <xs:element name=\"optimizeBufferReuse\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:boolean\" />\n          <xs:element name=\"filterCountMessageAppendFormat\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:string\" />\n          <xs:element name=\"filterCountPropertyName\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:string\" />\n        </xs:choice>\n        <xs:attribute name=\"action\" type=\"FilterResult\">\n          <xs:annotation>\n            <xs:documentation>Action to be taken when filter matches.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"defaultFilterCacheSize\" type=\"xs:integer\">\n          <xs:annotation>\n            <xs:documentation>Default number of unique filter values to expect, will automatically increase if needed</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"includeFirst\" type=\"xs:boolean\">\n          <xs:annotation>\n            <xs:documentation>Applies the configured action to the initial logevent that starts the timeout period. Used to configure that it should ignore all events until timeout.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"layout\" type=\"SimpleLayoutAttribute\">\n          <xs:annotation>\n            <xs:documentation>Layout to be used to filter log messages.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"maxFilterCacheSize\" type=\"xs:integer\">\n          <xs:annotation>\n            <xs:documentation>Max number of unique filter values to expect simultaneously</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"maxLength\" type=\"xs:integer\">\n          <xs:annotation>\n            <xs:documentation>Max length of filter values, will truncate if above limit</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"timeoutSeconds\" type=\"xs:integer\">\n          <xs:annotation>\n            <xs:documentation>How long before a filter expires, and logging is accepted again</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"optimizeBufferDefaultLength\" type=\"xs:integer\">\n          <xs:annotation>\n            <xs:documentation>Default buffer size for the internal buffers</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"optimizeBufferReuse\" type=\"xs:boolean\">\n          <xs:annotation>\n            <xs:documentation>Reuse internal buffers, and doesn't have to constantly allocate new buffers</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"filterCountMessageAppendFormat\" type=\"xs:string\">\n          <xs:annotation>\n            <xs:documentation>Append FilterCount to the  when an event is no longer filtered</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"filterCountPropertyName\" type=\"xs:string\">\n          <xs:annotation>\n            <xs:documentation>Insert FilterCount value into  when an event is no longer filtered</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n      </xs:extension>\n    </xs:complexContent>\n  </xs:complexType>\n  <xs:complexType name=\"AccurateLocal\">\n    <xs:complexContent>\n      <xs:extension base=\"TimeSource\">\n        <xs:choice minOccurs=\"0\" maxOccurs=\"unbounded\" />\n      </xs:extension>\n    </xs:complexContent>\n  </xs:complexType>\n  <xs:complexType name=\"AccurateUTC\">\n    <xs:complexContent>\n      <xs:extension base=\"TimeSource\">\n        <xs:choice minOccurs=\"0\" maxOccurs=\"unbounded\" />\n      </xs:extension>\n    </xs:complexContent>\n  </xs:complexType>\n  <xs:complexType name=\"FastLocal\">\n    <xs:complexContent>\n      <xs:extension base=\"TimeSource\">\n        <xs:choice minOccurs=\"0\" maxOccurs=\"unbounded\" />\n      </xs:extension>\n    </xs:complexContent>\n  </xs:complexType>\n  <xs:complexType name=\"FastUTC\">\n    <xs:complexContent>\n      <xs:extension base=\"TimeSource\">\n        <xs:choice minOccurs=\"0\" maxOccurs=\"unbounded\" />\n      </xs:extension>\n    </xs:complexContent>\n  </xs:complexType>\n</xs:schema>"
  },
  {
    "path": "src/Samples/Sample.DotNetFxPublisherHost/Program.cs",
    "content": "﻿using System;\nusing Topshelf;\n\nnamespace Sample.DotNetFxPublisherHost\n{\n    class Program\n    {\n        static int Main()\n        {\n\n            return (int)HostFactory.Run(x =>\n            {\n                x.UseAssemblyInfoForServiceInfo();\n\n                x.Service<DotNetFxPublisherHostBootstrap>(s =>\n                {\n                    s.ConstructUsing(() => new DotNetFxPublisherHostBootstrap());\n                    s.WhenStarted(v => v.Start());\n                    s.WhenStopped(v => v.Stop());\n                    s.BeforeStartingService(_ => { Console.WriteLine(\"Processor is starting\"); });\n                    s.BeforeStoppingService(_ => { Console.WriteLine(\"Processor is stopping\"); });\n                });\n\n                // x.StartAutomatically();\n\n                x.SetStartTimeout(TimeSpan.FromSeconds(10));\n                x.SetStopTimeout(TimeSpan.FromSeconds(10));\n\n                x.EnableServiceRecovery(r =>\n                {\n                    r.RestartService(1);\n                    //r.RunProgram(7, \"ping google.com\");\n                    r.RestartComputer(5, \"message\");\n\n                    r.OnCrashOnly();\n                    r.SetResetPeriod(2);\n                });\n\n                //x.AddCommandLineSwitch(\"throwonstart\", v => throwOnStart = v);\n                //x.AddCommandLineSwitch(\"throwonstop\", v => throwOnStop = v);\n                //x.AddCommandLineSwitch(\"throwunhandled\", v => throwUnhandled = v);\n\n                x.OnException((exception) =>\n                {\n                });\n            });\n        }\n    }\n}\n"
  },
  {
    "path": "src/Samples/Sample.DotNetFxPublisherHost/Properties/AssemblyInfo.cs",
    "content": "﻿using System.Reflection;\nusing System.Runtime.CompilerServices;\nusing System.Runtime.InteropServices;\n\n// 有关程序集的一般信息由以下\n// 控制。更改这些特性值可修改\n// 与程序集关联的信息。\n[assembly: AssemblyTitle(\"Sample.DotNetFxPublisherHost\")]\n[assembly: AssemblyDescription(\"\")]\n[assembly: AssemblyConfiguration(\"\")]\n[assembly: AssemblyCompany(\"\")]\n[assembly: AssemblyProduct(\"Sample.DotNetFxPublisherHost\")]\n[assembly: AssemblyCopyright(\"Copyright ©  2018\")]\n[assembly: AssemblyTrademark(\"\")]\n[assembly: AssemblyCulture(\"\")]\n\n// 将 ComVisible 设置为 false 会使此程序集中的类型\n//对 COM 组件不可见。如果需要从 COM 访问此程序集中的类型\n//请将此类型的 ComVisible 特性设置为 true。\n[assembly: ComVisible(false)]\n\n// 如果此项目向 COM 公开，则下列 GUID 用于类型库的 ID\n[assembly: Guid(\"53ab6f1d-333e-462b-bd21-b806e6a899a5\")]\n\n// 程序集的版本信息由下列四个值组成: \n//\n//      主版本\n//      次版本\n//      生成号\n//      修订号\n//\n// 可以指定所有值，也可以使用以下所示的 \"*\" 预置版本号和修订号\n// 方法是按如下所示使用“*”: :\n// [assembly: AssemblyVersion(\"1.0.*\")]\n[assembly: AssemblyVersion(\"1.0.0.0\")]\n[assembly: AssemblyFileVersion(\"1.0.0.0\")]\n"
  },
  {
    "path": "src/Samples/Sample.DotNetFxPublisherHost/Sample.DotNetFxPublisherHost.csproj",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<Project ToolsVersion=\"15.0\" xmlns=\"http://schemas.microsoft.com/developer/msbuild/2003\">\n  <Import Project=\"$(MSBuildExtensionsPath)\\$(MSBuildToolsVersion)\\Microsoft.Common.props\" Condition=\"Exists('$(MSBuildExtensionsPath)\\$(MSBuildToolsVersion)\\Microsoft.Common.props')\" />\n  <PropertyGroup>\n    <Configuration Condition=\" '$(Configuration)' == '' \">Debug</Configuration>\n    <Platform Condition=\" '$(Platform)' == '' \">AnyCPU</Platform>\n    <ProjectGuid>{53AB6F1D-333E-462B-BD21-B806E6A899A5}</ProjectGuid>\n    <OutputType>Exe</OutputType>\n    <RootNamespace>Sample.DotNetFxPublisherHost</RootNamespace>\n    <AssemblyName>Sample.DotNetFxPublisherHost</AssemblyName>\n    <TargetFrameworkVersion>v4.7.1</TargetFrameworkVersion>\n    <FileAlignment>512</FileAlignment>\n    <AutoGenerateBindingRedirects>true</AutoGenerateBindingRedirects>\n    <Deterministic>true</Deterministic>\n  </PropertyGroup>\n  <PropertyGroup Condition=\" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' \">\n    <PlatformTarget>AnyCPU</PlatformTarget>\n    <DebugSymbols>true</DebugSymbols>\n    <DebugType>full</DebugType>\n    <Optimize>false</Optimize>\n    <OutputPath>bin\\Debug\\</OutputPath>\n    <DefineConstants>DEBUG;TRACE</DefineConstants>\n    <ErrorReport>prompt</ErrorReport>\n    <WarningLevel>4</WarningLevel>\n  </PropertyGroup>\n  <PropertyGroup Condition=\" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' \">\n    <PlatformTarget>AnyCPU</PlatformTarget>\n    <DebugType>pdbonly</DebugType>\n    <Optimize>true</Optimize>\n    <OutputPath>bin\\Release\\</OutputPath>\n    <DefineConstants>TRACE</DefineConstants>\n    <ErrorReport>prompt</ErrorReport>\n    <WarningLevel>4</WarningLevel>\n  </PropertyGroup>\n  <ItemGroup>\n    <Reference Include=\"Abp, Version=4.6.0.0, Culture=neutral, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\..\\packages\\Abp.4.6.0\\lib\\netstandard2.0\\Abp.dll</HintPath>\n    </Reference>\n    <Reference Include=\"Castle.Core, Version=4.0.0.0, Culture=neutral, PublicKeyToken=407dd0808d44fbdc, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\..\\packages\\Castle.Core.4.3.1\\lib\\net45\\Castle.Core.dll</HintPath>\n    </Reference>\n    <Reference Include=\"Castle.Facilities.Logging, Version=4.0.0.0, Culture=neutral, PublicKeyToken=407dd0808d44fbdc, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\..\\packages\\Castle.LoggingFacility.4.1.1\\lib\\net45\\Castle.Facilities.Logging.dll</HintPath>\n    </Reference>\n    <Reference Include=\"Castle.Services.Logging.NLogIntegration, Version=4.0.0.0, Culture=neutral, PublicKeyToken=407dd0808d44fbdc, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\..\\packages\\Castle.Core-NLog.4.3.1\\lib\\net45\\Castle.Services.Logging.NLogIntegration.dll</HintPath>\n    </Reference>\n    <Reference Include=\"Castle.Windsor, Version=4.0.0.0, Culture=neutral, PublicKeyToken=407dd0808d44fbdc, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\..\\packages\\Castle.Windsor.4.1.1\\lib\\net45\\Castle.Windsor.dll</HintPath>\n    </Reference>\n    <Reference Include=\"JetBrains.Annotations, Version=2018.3.0.0, Culture=neutral, PublicKeyToken=1010a0d8d6380325, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\..\\packages\\JetBrains.Annotations.2018.3.0\\lib\\net20\\JetBrains.Annotations.dll</HintPath>\n    </Reference>\n    <Reference Include=\"Microsoft.Diagnostics.Tracing.EventSource, Version=1.1.28.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\..\\packages\\Microsoft.Diagnostics.Tracing.EventSource.Redist.1.1.28\\lib\\net46\\Microsoft.Diagnostics.Tracing.EventSource.dll</HintPath>\n    </Reference>\n    <Reference Include=\"Microsoft.Extensions.Caching.Abstractions, Version=2.2.0.0, Culture=neutral, PublicKeyToken=adb9793829ddae60, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\..\\packages\\Microsoft.Extensions.Caching.Abstractions.2.2.0\\lib\\netstandard2.0\\Microsoft.Extensions.Caching.Abstractions.dll</HintPath>\n    </Reference>\n    <Reference Include=\"Microsoft.Extensions.Caching.Memory, Version=2.2.0.0, Culture=neutral, PublicKeyToken=adb9793829ddae60, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\..\\packages\\Microsoft.Extensions.Caching.Memory.2.2.0\\lib\\netstandard2.0\\Microsoft.Extensions.Caching.Memory.dll</HintPath>\n    </Reference>\n    <Reference Include=\"Microsoft.Extensions.DependencyInjection.Abstractions, Version=2.2.0.0, Culture=neutral, PublicKeyToken=adb9793829ddae60, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\..\\packages\\Microsoft.Extensions.DependencyInjection.Abstractions.2.2.0\\lib\\netstandard2.0\\Microsoft.Extensions.DependencyInjection.Abstractions.dll</HintPath>\n    </Reference>\n    <Reference Include=\"Microsoft.Extensions.Options, Version=2.2.0.0, Culture=neutral, PublicKeyToken=adb9793829ddae60, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\..\\packages\\Microsoft.Extensions.Options.2.2.0\\lib\\netstandard2.0\\Microsoft.Extensions.Options.dll</HintPath>\n    </Reference>\n    <Reference Include=\"Microsoft.Extensions.Primitives, Version=2.2.0.0, Culture=neutral, PublicKeyToken=adb9793829ddae60, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\..\\packages\\Microsoft.Extensions.Primitives.2.2.0\\lib\\netstandard2.0\\Microsoft.Extensions.Primitives.dll</HintPath>\n    </Reference>\n    <Reference Include=\"Newtonsoft.Json, Version=12.0.0.0, Culture=neutral, PublicKeyToken=30ad4fe6b2a6aeed, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\..\\packages\\Newtonsoft.Json.12.0.1\\lib\\net45\\Newtonsoft.Json.dll</HintPath>\n    </Reference>\n    <Reference Include=\"Nito.AsyncEx.Context, Version=5.0.0.0, Culture=neutral, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\..\\packages\\Nito.AsyncEx.Context.5.0.0\\lib\\netstandard2.0\\Nito.AsyncEx.Context.dll</HintPath>\n    </Reference>\n    <Reference Include=\"Nito.AsyncEx.Coordination, Version=5.0.0.0, Culture=neutral, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\..\\packages\\Nito.AsyncEx.Coordination.5.0.0\\lib\\netstandard2.0\\Nito.AsyncEx.Coordination.dll</HintPath>\n    </Reference>\n    <Reference Include=\"Nito.AsyncEx.Tasks, Version=5.0.0.0, Culture=neutral, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\..\\packages\\Nito.AsyncEx.Tasks.5.0.0\\lib\\netstandard2.0\\Nito.AsyncEx.Tasks.dll</HintPath>\n    </Reference>\n    <Reference Include=\"Nito.Collections.Deque, Version=1.0.4.0, Culture=neutral, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\..\\packages\\Nito.Collections.Deque.1.0.4\\lib\\netstandard2.0\\Nito.Collections.Deque.dll</HintPath>\n    </Reference>\n    <Reference Include=\"Nito.Disposables, Version=2.0.0.0, Culture=neutral, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\..\\packages\\Nito.Disposables.2.0.0\\lib\\netstandard2.0\\Nito.Disposables.dll</HintPath>\n    </Reference>\n    <Reference Include=\"NLog, Version=4.0.0.0, Culture=neutral, PublicKeyToken=5120e14c03d0593c, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\..\\packages\\NLog.4.5.10\\lib\\net45\\NLog.dll</HintPath>\n    </Reference>\n    <Reference Include=\"RabbitMQ.Client, Version=5.0.0.0, Culture=neutral, PublicKeyToken=89e7d7c5feba84ce, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\..\\packages\\RabbitMQ.Client.5.0.1\\lib\\net451\\RabbitMQ.Client.dll</HintPath>\n    </Reference>\n    <Reference Include=\"Rebus, Version=4.2.1.0, Culture=neutral, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\..\\packages\\Rebus.4.2.1\\lib\\net45\\Rebus.dll</HintPath>\n    </Reference>\n    <Reference Include=\"Rebus.CastleWindsor, Version=4.1.0.0, Culture=neutral, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\..\\packages\\Rebus.Castle.Windsor.4.1.0\\lib\\net45\\Rebus.CastleWindsor.dll</HintPath>\n    </Reference>\n    <Reference Include=\"Rebus.NLog, Version=5.0.0.0, Culture=neutral, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\..\\packages\\Rebus.NLog.5.0.0\\lib\\net45\\Rebus.NLog.dll</HintPath>\n    </Reference>\n    <Reference Include=\"Rebus.RabbitMq, Version=4.4.2.0, Culture=neutral, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\..\\packages\\Rebus.RabbitMq.4.4.2\\lib\\net452\\Rebus.RabbitMq.dll</HintPath>\n    </Reference>\n    <Reference Include=\"System\" />\n    <Reference Include=\"System.Buffers, Version=4.0.2.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\..\\packages\\System.Buffers.4.4.0\\lib\\netstandard2.0\\System.Buffers.dll</HintPath>\n    </Reference>\n    <Reference Include=\"System.Collections.Immutable, Version=1.2.3.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\..\\packages\\System.Collections.Immutable.1.5.0\\lib\\netstandard2.0\\System.Collections.Immutable.dll</HintPath>\n    </Reference>\n    <Reference Include=\"System.ComponentModel.Annotations, Version=4.2.1.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\..\\packages\\System.ComponentModel.Annotations.4.5.0\\lib\\net461\\System.ComponentModel.Annotations.dll</HintPath>\n    </Reference>\n    <Reference Include=\"System.ComponentModel.DataAnnotations\" />\n    <Reference Include=\"System.Configuration\" />\n    <Reference Include=\"System.Configuration.ConfigurationManager, Version=4.0.1.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\..\\packages\\System.Configuration.ConfigurationManager.4.5.0\\lib\\net461\\System.Configuration.ConfigurationManager.dll</HintPath>\n    </Reference>\n    <Reference Include=\"System.Configuration.Install\" />\n    <Reference Include=\"System.Core\" />\n    <Reference Include=\"System.Data.Common, Version=4.1.1.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\..\\packages\\System.Data.Common.4.3.0\\lib\\net451\\System.Data.Common.dll</HintPath>\n      <Private>True</Private>\n      <Private>True</Private>\n    </Reference>\n    <Reference Include=\"System.Data.OracleClient\" />\n    <Reference Include=\"System.Drawing\" />\n    <Reference Include=\"System.IO.Compression, Version=4.2.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089, processorArchitecture=MSIL\" />\n    <Reference Include=\"System.Linq.Dynamic.Core, Version=1.0.10.0, Culture=neutral, PublicKeyToken=0f07ec44de6ac832, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\..\\packages\\System.Linq.Dynamic.Core.1.0.10\\lib\\net46\\System.Linq.Dynamic.Core.dll</HintPath>\n    </Reference>\n    <Reference Include=\"System.Memory, Version=4.0.1.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\..\\packages\\System.Memory.4.5.1\\lib\\netstandard2.0\\System.Memory.dll</HintPath>\n    </Reference>\n    <Reference Include=\"System.Net\" />\n    <Reference Include=\"System.Numerics\" />\n    <Reference Include=\"System.Numerics.Vectors, Version=4.1.3.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\..\\packages\\System.Numerics.Vectors.4.4.0\\lib\\net46\\System.Numerics.Vectors.dll</HintPath>\n    </Reference>\n    <Reference Include=\"System.Runtime.CompilerServices.Unsafe, Version=4.0.4.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\..\\packages\\System.Runtime.CompilerServices.Unsafe.4.5.1\\lib\\netstandard2.0\\System.Runtime.CompilerServices.Unsafe.dll</HintPath>\n    </Reference>\n    <Reference Include=\"System.Runtime.InteropServices.RuntimeInformation, Version=4.0.1.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\..\\packages\\System.Runtime.InteropServices.RuntimeInformation.4.3.0\\lib\\net45\\System.Runtime.InteropServices.RuntimeInformation.dll</HintPath>\n      <Private>True</Private>\n      <Private>True</Private>\n    </Reference>\n    <Reference Include=\"System.Runtime.Remoting\" />\n    <Reference Include=\"System.Runtime.Serialization\" />\n    <Reference Include=\"System.Runtime.Serialization.Formatters, Version=4.0.1.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\..\\packages\\System.Runtime.Serialization.Formatters.4.3.0\\lib\\net46\\System.Runtime.Serialization.Formatters.dll</HintPath>\n      <Private>True</Private>\n      <Private>True</Private>\n    </Reference>\n    <Reference Include=\"System.Runtime.Serialization.Primitives, Version=4.1.2.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\..\\packages\\System.Runtime.Serialization.Primitives.4.3.0\\lib\\net46\\System.Runtime.Serialization.Primitives.dll</HintPath>\n      <Private>True</Private>\n      <Private>True</Private>\n    </Reference>\n    <Reference Include=\"System.Security.AccessControl, Version=4.1.1.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\..\\packages\\System.Security.AccessControl.4.5.0\\lib\\net461\\System.Security.AccessControl.dll</HintPath>\n    </Reference>\n    <Reference Include=\"System.Security.Claims, Version=4.0.2.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\..\\packages\\System.Security.Claims.4.3.0\\lib\\net46\\System.Security.Claims.dll</HintPath>\n      <Private>True</Private>\n      <Private>True</Private>\n    </Reference>\n    <Reference Include=\"System.Security.Permissions, Version=4.0.1.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\..\\packages\\System.Security.Permissions.4.5.0\\lib\\net461\\System.Security.Permissions.dll</HintPath>\n    </Reference>\n    <Reference Include=\"System.Security.Principal.Windows, Version=4.1.1.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\..\\packages\\System.Security.Principal.Windows.4.5.0\\lib\\net461\\System.Security.Principal.Windows.dll</HintPath>\n    </Reference>\n    <Reference Include=\"System.ServiceModel\" />\n    <Reference Include=\"System.ServiceProcess\" />\n    <Reference Include=\"System.Transactions\" />\n    <Reference Include=\"System.Web\" />\n    <Reference Include=\"System.Xml.Linq\" />\n    <Reference Include=\"System.Data.DataSetExtensions\" />\n    <Reference Include=\"Microsoft.CSharp\" />\n    <Reference Include=\"System.Data\" />\n    <Reference Include=\"System.Net.Http\" />\n    <Reference Include=\"System.Xml\" />\n    <Reference Include=\"System.Xml.XmlDocument, Version=4.0.2.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\..\\packages\\System.Xml.XmlDocument.4.3.0\\lib\\net46\\System.Xml.XmlDocument.dll</HintPath>\n      <Private>True</Private>\n      <Private>True</Private>\n    </Reference>\n    <Reference Include=\"System.Xml.XPath, Version=4.0.2.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\..\\packages\\System.Xml.XPath.4.3.0\\lib\\net46\\System.Xml.XPath.dll</HintPath>\n      <Private>True</Private>\n      <Private>True</Private>\n    </Reference>\n    <Reference Include=\"System.Xml.XPath.XmlDocument, Version=4.0.2.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\..\\packages\\System.Xml.XPath.XmlDocument.4.3.0\\lib\\net46\\System.Xml.XPath.XmlDocument.dll</HintPath>\n    </Reference>\n    <Reference Include=\"TimeZoneConverter, Version=3.1.0.0, Culture=neutral, PublicKeyToken=e20ab7d0d9479841, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\..\\packages\\TimeZoneConverter.3.1.0\\lib\\net471\\TimeZoneConverter.dll</HintPath>\n    </Reference>\n    <Reference Include=\"Topshelf, Version=4.1.0.172, Culture=neutral, PublicKeyToken=b800c4cfcdeea87b, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\..\\packages\\Topshelf.4.1.0\\lib\\net452\\Topshelf.dll</HintPath>\n    </Reference>\n  </ItemGroup>\n  <ItemGroup>\n    <Compile Include=\"BackgroundWorker\\TestWorker.cs\" />\n    <Compile Include=\"DotNetFxPublisherHostBootstrap.cs\" />\n    <Compile Include=\"DotNetFxPublisherHostModule.cs\" />\n    <Compile Include=\"Program.cs\" />\n    <Compile Include=\"Properties\\AssemblyInfo.cs\" />\n  </ItemGroup>\n  <ItemGroup>\n    <None Include=\"App.config\" />\n    <None Include=\"NLog.config\">\n      <CopyToOutputDirectory>Always</CopyToOutputDirectory>\n    </None>\n    <None Include=\"NLog.xsd\">\n      <SubType>Designer</SubType>\n    </None>\n    <None Include=\"packages.config\" />\n  </ItemGroup>\n  <ItemGroup>\n    <ProjectReference Include=\"..\\..\\Abplus.MqMessages.RebusCore\\Abplus.MqMessages.RebusCore.csproj\">\n      <Project>{d27e21c1-96c8-4eff-aa4d-43a8ed7cc40b}</Project>\n      <Name>Abplus.MqMessages.RebusCore</Name>\n    </ProjectReference>\n    <ProjectReference Include=\"..\\..\\Abplus.MqMessages.RebusRabbitMqPublisher\\Abplus.MqMessages.RebusRabbitMqPublisher.csproj\">\n      <Project>{1c7e75d5-f462-43c7-a230-4e31faf8cc00}</Project>\n      <Name>Abplus.MqMessages.RebusRabbitMqPublisher</Name>\n    </ProjectReference>\n    <ProjectReference Include=\"..\\..\\Abplus\\Abplus.csproj\">\n      <Project>{10c03a51-881c-4779-9b24-5bfce234c175}</Project>\n      <Name>Abplus</Name>\n    </ProjectReference>\n    <ProjectReference Include=\"..\\Sample.MqMessages\\Sample.MqMessages.csproj\">\n      <Project>{d71b7fba-e998-4141-81e6-e319c3941659}</Project>\n      <Name>Sample.MqMessages</Name>\n    </ProjectReference>\n  </ItemGroup>\n  <ItemGroup />\n  <Import Project=\"$(MSBuildToolsPath)\\Microsoft.CSharp.targets\" />\n</Project>"
  },
  {
    "path": "src/Samples/Sample.DotNetFxPublisherHost/packages.config",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<packages>\n  <package id=\"Abp\" version=\"4.6.0\" targetFramework=\"net471\" />\n  <package id=\"Castle.Core\" version=\"4.3.1\" targetFramework=\"net471\" />\n  <package id=\"Castle.Core-NLog\" version=\"4.3.1\" targetFramework=\"net471\" />\n  <package id=\"Castle.LoggingFacility\" version=\"4.1.1\" targetFramework=\"net471\" />\n  <package id=\"Castle.Windsor\" version=\"4.1.1\" targetFramework=\"net471\" />\n  <package id=\"JetBrains.Annotations\" version=\"2018.3.0\" targetFramework=\"net471\" />\n  <package id=\"Microsoft.Diagnostics.Tracing.EventSource.Redist\" version=\"1.1.28\" targetFramework=\"net471\" />\n  <package id=\"Microsoft.Extensions.Caching.Abstractions\" version=\"2.2.0\" targetFramework=\"net471\" />\n  <package id=\"Microsoft.Extensions.Caching.Memory\" version=\"2.2.0\" targetFramework=\"net471\" />\n  <package id=\"Microsoft.Extensions.DependencyInjection.Abstractions\" version=\"2.2.0\" targetFramework=\"net471\" />\n  <package id=\"Microsoft.Extensions.Options\" version=\"2.2.0\" targetFramework=\"net471\" />\n  <package id=\"Microsoft.Extensions.Primitives\" version=\"2.2.0\" targetFramework=\"net471\" />\n  <package id=\"Newtonsoft.Json\" version=\"12.0.1\" targetFramework=\"net471\" />\n  <package id=\"Nito.AsyncEx.Context\" version=\"5.0.0\" targetFramework=\"net471\" />\n  <package id=\"Nito.AsyncEx.Coordination\" version=\"5.0.0\" targetFramework=\"net471\" />\n  <package id=\"Nito.AsyncEx.Tasks\" version=\"5.0.0\" targetFramework=\"net471\" />\n  <package id=\"Nito.Collections.Deque\" version=\"1.0.4\" targetFramework=\"net471\" />\n  <package id=\"Nito.Disposables\" version=\"2.0.0\" targetFramework=\"net471\" />\n  <package id=\"NLog\" version=\"4.5.10\" targetFramework=\"net471\" />\n  <package id=\"NLog.Config\" version=\"4.5.10\" targetFramework=\"net471\" />\n  <package id=\"NLog.Schema\" version=\"4.5.10\" targetFramework=\"net471\" />\n  <package id=\"RabbitMQ.Client\" version=\"5.0.1\" targetFramework=\"net471\" />\n  <package id=\"Rebus\" version=\"4.2.1\" targetFramework=\"net471\" />\n  <package id=\"Rebus.Castle.Windsor\" version=\"4.1.0\" targetFramework=\"net471\" />\n  <package id=\"Rebus.NLog\" version=\"5.0.0\" targetFramework=\"net471\" />\n  <package id=\"Rebus.RabbitMq\" version=\"4.4.2\" targetFramework=\"net471\" />\n  <package id=\"System.Buffers\" version=\"4.4.0\" targetFramework=\"net471\" />\n  <package id=\"System.Collections.Immutable\" version=\"1.5.0\" targetFramework=\"net471\" />\n  <package id=\"System.ComponentModel.Annotations\" version=\"4.5.0\" targetFramework=\"net471\" />\n  <package id=\"System.Configuration.ConfigurationManager\" version=\"4.5.0\" targetFramework=\"net471\" />\n  <package id=\"System.Data.Common\" version=\"4.3.0\" targetFramework=\"net471\" />\n  <package id=\"System.Linq.Dynamic.Core\" version=\"1.0.10\" targetFramework=\"net471\" />\n  <package id=\"System.Linq.Queryable\" version=\"4.3.0\" targetFramework=\"net471\" />\n  <package id=\"System.Memory\" version=\"4.5.1\" targetFramework=\"net471\" />\n  <package id=\"System.Numerics.Vectors\" version=\"4.4.0\" targetFramework=\"net471\" />\n  <package id=\"System.Runtime.CompilerServices.Unsafe\" version=\"4.5.1\" targetFramework=\"net471\" />\n  <package id=\"System.Runtime.InteropServices.RuntimeInformation\" version=\"4.3.0\" targetFramework=\"net471\" />\n  <package id=\"System.Runtime.Serialization.Formatters\" version=\"4.3.0\" targetFramework=\"net471\" />\n  <package id=\"System.Runtime.Serialization.Primitives\" version=\"4.3.0\" targetFramework=\"net471\" />\n  <package id=\"System.Security.AccessControl\" version=\"4.5.0\" targetFramework=\"net471\" />\n  <package id=\"System.Security.Claims\" version=\"4.3.0\" targetFramework=\"net471\" />\n  <package id=\"System.Security.Permissions\" version=\"4.5.0\" targetFramework=\"net471\" />\n  <package id=\"System.Security.Principal.Windows\" version=\"4.5.0\" targetFramework=\"net471\" />\n  <package id=\"System.Threading\" version=\"4.3.0\" targetFramework=\"net471\" />\n  <package id=\"System.Xml.XmlDocument\" version=\"4.3.0\" targetFramework=\"net471\" />\n  <package id=\"System.Xml.XPath\" version=\"4.3.0\" targetFramework=\"net471\" />\n  <package id=\"System.Xml.XPath.XmlDocument\" version=\"4.3.0\" targetFramework=\"net471\" />\n  <package id=\"TimeZoneConverter\" version=\"3.1.0\" targetFramework=\"net471\" />\n  <package id=\"Topshelf\" version=\"4.1.0\" targetFramework=\"net471\" />\n</packages>"
  },
  {
    "path": "src/Samples/Sample.MqMessages/Sample.MqMessages.csproj",
    "content": "<Project Sdk=\"Microsoft.NET.Sdk\">\n\n  <PropertyGroup>\n    <TargetFramework>net5.0</TargetFramework>\n    <RootNamespace>Sample</RootNamespace>\n  </PropertyGroup>\n\n</Project>\n"
  },
  {
    "path": "src/Samples/Sample.MqMessages/TestMessage.cs",
    "content": "﻿using System;\n\nnamespace Sample\n{\n    public class TestMessage\n    {\n        public string Value { get; set; }\n        public DateTime Time { get; set; }\n    }\n}\n"
  },
  {
    "path": "src2/Abplus/Abplus.csproj",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<Project ToolsVersion=\"14.0\" DefaultTargets=\"Build\" xmlns=\"http://schemas.microsoft.com/developer/msbuild/2003\">\n  <Import Project=\"$(MSBuildExtensionsPath)\\$(MSBuildToolsVersion)\\Microsoft.Common.props\" Condition=\"Exists('$(MSBuildExtensionsPath)\\$(MSBuildToolsVersion)\\Microsoft.Common.props')\" />\n  <PropertyGroup>\n    <Configuration Condition=\" '$(Configuration)' == '' \">Debug</Configuration>\n    <Platform Condition=\" '$(Platform)' == '' \">AnyCPU</Platform>\n    <ProjectGuid>{1DE8D8D1-987D-4A9C-AEC5-FF0A9914BBD4}</ProjectGuid>\n    <OutputType>Library</OutputType>\n    <AppDesignerFolder>Properties</AppDesignerFolder>\n    <RootNamespace>Abp</RootNamespace>\n    <AssemblyName>Abplus</AssemblyName>\n    <TargetFrameworkVersion>v4.6.1</TargetFrameworkVersion>\n    <FileAlignment>512</FileAlignment>\n    <NuGetPackageImportStamp>\n    </NuGetPackageImportStamp>\n  </PropertyGroup>\n  <PropertyGroup Condition=\" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' \">\n    <DebugSymbols>true</DebugSymbols>\n    <DebugType>full</DebugType>\n    <Optimize>false</Optimize>\n    <OutputPath>bin\\Debug\\</OutputPath>\n    <DefineConstants>DEBUG;TRACE</DefineConstants>\n    <ErrorReport>prompt</ErrorReport>\n    <WarningLevel>4</WarningLevel>\n  </PropertyGroup>\n  <PropertyGroup Condition=\" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' \">\n    <DebugType>pdbonly</DebugType>\n    <Optimize>true</Optimize>\n    <OutputPath>bin\\Release\\</OutputPath>\n    <DefineConstants>TRACE</DefineConstants>\n    <ErrorReport>prompt</ErrorReport>\n    <WarningLevel>4</WarningLevel>\n    <DocumentationFile>bin\\Release\\Abplus.XML</DocumentationFile>\n  </PropertyGroup>\n  <ItemGroup>\n    <Reference Include=\"Abp, Version=3.7.2.0, Culture=neutral, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\packages\\Abp.3.7.2\\lib\\netstandard2.0\\Abp.dll</HintPath>\n    </Reference>\n    <Reference Include=\"Castle.Core, Version=4.0.0.0, Culture=neutral, PublicKeyToken=407dd0808d44fbdc, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\packages\\Castle.Core.4.3.1\\lib\\net45\\Castle.Core.dll</HintPath>\n    </Reference>\n    <Reference Include=\"Castle.Facilities.Logging, Version=4.0.0.0, Culture=neutral, PublicKeyToken=407dd0808d44fbdc, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\packages\\Castle.LoggingFacility.4.1.0\\lib\\net45\\Castle.Facilities.Logging.dll</HintPath>\n    </Reference>\n    <Reference Include=\"Castle.Windsor, Version=4.0.0.0, Culture=neutral, PublicKeyToken=407dd0808d44fbdc, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\packages\\Castle.Windsor.4.1.0\\lib\\net45\\Castle.Windsor.dll</HintPath>\n    </Reference>\n    <Reference Include=\"JetBrains.Annotations, Version=11.1.0.0, Culture=neutral, PublicKeyToken=1010a0d8d6380325, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\packages\\JetBrains.Annotations.11.1.0\\lib\\net20\\JetBrains.Annotations.dll</HintPath>\n    </Reference>\n    <Reference Include=\"Microsoft.Extensions.Caching.Abstractions, Version=2.1.0.0, Culture=neutral, PublicKeyToken=adb9793829ddae60, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\packages\\Microsoft.Extensions.Caching.Abstractions.2.1.0\\lib\\netstandard2.0\\Microsoft.Extensions.Caching.Abstractions.dll</HintPath>\n    </Reference>\n    <Reference Include=\"Microsoft.Extensions.Caching.Memory, Version=2.1.0.0, Culture=neutral, PublicKeyToken=adb9793829ddae60, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\packages\\Microsoft.Extensions.Caching.Memory.2.1.0\\lib\\netstandard2.0\\Microsoft.Extensions.Caching.Memory.dll</HintPath>\n    </Reference>\n    <Reference Include=\"Microsoft.Extensions.DependencyInjection.Abstractions, Version=2.1.0.0, Culture=neutral, PublicKeyToken=adb9793829ddae60, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\packages\\Microsoft.Extensions.DependencyInjection.Abstractions.2.1.0\\lib\\netstandard2.0\\Microsoft.Extensions.DependencyInjection.Abstractions.dll</HintPath>\n    </Reference>\n    <Reference Include=\"Microsoft.Extensions.Options, Version=2.1.0.0, Culture=neutral, PublicKeyToken=adb9793829ddae60, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\packages\\Microsoft.Extensions.Options.2.1.0\\lib\\netstandard2.0\\Microsoft.Extensions.Options.dll</HintPath>\n    </Reference>\n    <Reference Include=\"Microsoft.Extensions.Primitives, Version=2.1.0.0, Culture=neutral, PublicKeyToken=adb9793829ddae60, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\packages\\Microsoft.Extensions.Primitives.2.1.0\\lib\\netstandard2.0\\Microsoft.Extensions.Primitives.dll</HintPath>\n    </Reference>\n    <Reference Include=\"Microsoft.Threading.Tasks, Version=1.0.12.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\packages\\Microsoft.Bcl.Async.1.0.168\\lib\\net40\\Microsoft.Threading.Tasks.dll</HintPath>\n      <Private>True</Private>\n    </Reference>\n    <Reference Include=\"Microsoft.Threading.Tasks.Extensions, Version=1.0.12.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\packages\\Microsoft.Bcl.Async.1.0.168\\lib\\net40\\Microsoft.Threading.Tasks.Extensions.dll</HintPath>\n      <Private>True</Private>\n    </Reference>\n    <Reference Include=\"Microsoft.Threading.Tasks.Extensions.Desktop, Version=1.0.168.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\packages\\Microsoft.Bcl.Async.1.0.168\\lib\\net40\\Microsoft.Threading.Tasks.Extensions.Desktop.dll</HintPath>\n      <Private>True</Private>\n    </Reference>\n    <Reference Include=\"Newtonsoft.Json, Version=11.0.0.0, Culture=neutral, PublicKeyToken=30ad4fe6b2a6aeed, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\packages\\Newtonsoft.Json.11.0.2\\lib\\net45\\Newtonsoft.Json.dll</HintPath>\n    </Reference>\n    <Reference Include=\"Nito.AsyncEx, Version=4.0.1.0, Culture=neutral, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\packages\\Nito.AsyncEx.4.0.1\\lib\\net45\\Nito.AsyncEx.dll</HintPath>\n      <Private>True</Private>\n    </Reference>\n    <Reference Include=\"Nito.AsyncEx.Concurrent, Version=4.0.1.0, Culture=neutral, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\packages\\Nito.AsyncEx.4.0.1\\lib\\net45\\Nito.AsyncEx.Concurrent.dll</HintPath>\n      <Private>True</Private>\n    </Reference>\n    <Reference Include=\"Nito.AsyncEx.Context, Version=1.1.0.0, Culture=neutral, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\packages\\Nito.AsyncEx.Context.1.1.0\\lib\\net46\\Nito.AsyncEx.Context.dll</HintPath>\n    </Reference>\n    <Reference Include=\"Nito.AsyncEx.Coordination, Version=1.0.2.0, Culture=neutral, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\packages\\Nito.AsyncEx.Coordination.1.0.2\\lib\\net46\\Nito.AsyncEx.Coordination.dll</HintPath>\n    </Reference>\n    <Reference Include=\"Nito.AsyncEx.Enlightenment, Version=4.0.1.0, Culture=neutral, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\packages\\Nito.AsyncEx.4.0.1\\lib\\net45\\Nito.AsyncEx.Enlightenment.dll</HintPath>\n      <Private>True</Private>\n    </Reference>\n    <Reference Include=\"Nito.AsyncEx.Tasks, Version=1.1.0.0, Culture=neutral, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\packages\\Nito.AsyncEx.Tasks.1.1.0\\lib\\net46\\Nito.AsyncEx.Tasks.dll</HintPath>\n    </Reference>\n    <Reference Include=\"Nito.Collections.Deque, Version=1.0.4.0, Culture=neutral, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\packages\\Nito.Collections.Deque.1.0.4\\lib\\netstandard2.0\\Nito.Collections.Deque.dll</HintPath>\n    </Reference>\n    <Reference Include=\"Nito.Disposables, Version=1.2.3.0, Culture=neutral, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\packages\\Nito.Disposables.1.2.3\\lib\\netstandard2.0\\Nito.Disposables.dll</HintPath>\n    </Reference>\n    <Reference Include=\"System\" />\n    <Reference Include=\"System.Buffers, Version=4.0.2.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\packages\\System.Buffers.4.4.0\\lib\\netstandard2.0\\System.Buffers.dll</HintPath>\n    </Reference>\n    <Reference Include=\"System.Collections.Immutable, Version=1.2.3.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\packages\\System.Collections.Immutable.1.5.0\\lib\\netstandard2.0\\System.Collections.Immutable.dll</HintPath>\n    </Reference>\n    <Reference Include=\"System.ComponentModel.Annotations, Version=4.2.1.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\packages\\System.ComponentModel.Annotations.4.5.0\\lib\\net461\\System.ComponentModel.Annotations.dll</HintPath>\n    </Reference>\n    <Reference Include=\"System.ComponentModel.DataAnnotations\" />\n    <Reference Include=\"System.Configuration\" />\n    <Reference Include=\"System.Configuration.ConfigurationManager, Version=4.0.1.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\packages\\System.Configuration.ConfigurationManager.4.5.0\\lib\\net461\\System.Configuration.ConfigurationManager.dll</HintPath>\n    </Reference>\n    <Reference Include=\"System.Core\" />\n    <Reference Include=\"System.Data.Common, Version=4.1.1.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\packages\\System.Data.Common.4.3.0\\lib\\net451\\System.Data.Common.dll</HintPath>\n      <Private>True</Private>\n    </Reference>\n    <Reference Include=\"System.Data.OracleClient\" />\n    <Reference Include=\"System.Drawing\" />\n    <Reference Include=\"System.Linq.Dynamic, Version=1.0.6132.35681, Culture=neutral, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\packages\\System.Linq.Dynamic.1.0.7\\lib\\net40\\System.Linq.Dynamic.dll</HintPath>\n      <Private>True</Private>\n    </Reference>\n    <Reference Include=\"System.Linq.Dynamic.Core, Version=0.0.0.0, Culture=neutral, PublicKeyToken=0f07ec44de6ac832, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\packages\\System.Linq.Dynamic.Core.1.0.8.9\\lib\\net46\\System.Linq.Dynamic.Core.dll</HintPath>\n    </Reference>\n    <Reference Include=\"System.Memory, Version=4.0.1.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\packages\\System.Memory.4.5.0\\lib\\netstandard2.0\\System.Memory.dll</HintPath>\n    </Reference>\n    <Reference Include=\"System.Net\" />\n    <Reference Include=\"System.Numerics\" />\n    <Reference Include=\"System.Numerics.Vectors, Version=4.1.3.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\packages\\System.Numerics.Vectors.4.4.0\\lib\\net46\\System.Numerics.Vectors.dll</HintPath>\n    </Reference>\n    <Reference Include=\"System.Runtime.Caching\" />\n    <Reference Include=\"System.Runtime.CompilerServices.Unsafe, Version=4.0.4.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\packages\\System.Runtime.CompilerServices.Unsafe.4.5.0\\lib\\netstandard2.0\\System.Runtime.CompilerServices.Unsafe.dll</HintPath>\n    </Reference>\n    <Reference Include=\"System.Runtime.InteropServices.RuntimeInformation, Version=4.0.1.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\packages\\System.Runtime.InteropServices.RuntimeInformation.4.3.0\\lib\\net45\\System.Runtime.InteropServices.RuntimeInformation.dll</HintPath>\n      <Private>True</Private>\n    </Reference>\n    <Reference Include=\"System.Runtime.Remoting\" />\n    <Reference Include=\"System.Runtime.Serialization\" />\n    <Reference Include=\"System.Runtime.Serialization.Formatters, Version=4.0.1.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\packages\\System.Runtime.Serialization.Formatters.4.3.0\\lib\\net46\\System.Runtime.Serialization.Formatters.dll</HintPath>\n      <Private>True</Private>\n    </Reference>\n    <Reference Include=\"System.Runtime.Serialization.Primitives, Version=4.1.2.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\packages\\System.Runtime.Serialization.Primitives.4.3.0\\lib\\net46\\System.Runtime.Serialization.Primitives.dll</HintPath>\n      <Private>True</Private>\n    </Reference>\n    <Reference Include=\"System.Security.AccessControl, Version=4.1.1.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\packages\\System.Security.AccessControl.4.5.0\\lib\\net461\\System.Security.AccessControl.dll</HintPath>\n    </Reference>\n    <Reference Include=\"System.Security.Claims, Version=4.0.2.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\packages\\System.Security.Claims.4.3.0\\lib\\net46\\System.Security.Claims.dll</HintPath>\n      <Private>True</Private>\n    </Reference>\n    <Reference Include=\"System.Security.Permissions, Version=4.0.1.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\packages\\System.Security.Permissions.4.5.0\\lib\\net461\\System.Security.Permissions.dll</HintPath>\n    </Reference>\n    <Reference Include=\"System.Security.Principal.Windows, Version=4.1.1.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\packages\\System.Security.Principal.Windows.4.5.0\\lib\\net461\\System.Security.Principal.Windows.dll</HintPath>\n    </Reference>\n    <Reference Include=\"System.ServiceProcess\" />\n    <Reference Include=\"System.Transactions\" />\n    <Reference Include=\"System.Web\" />\n    <Reference Include=\"System.Xml.Linq\" />\n    <Reference Include=\"System.Data.DataSetExtensions\" />\n    <Reference Include=\"Microsoft.CSharp\" />\n    <Reference Include=\"System.Data\" />\n    <Reference Include=\"System.Net.Http\" />\n    <Reference Include=\"System.Xml\" />\n    <Reference Include=\"System.Xml.XmlDocument, Version=4.0.2.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\packages\\System.Xml.XmlDocument.4.3.0\\lib\\net46\\System.Xml.XmlDocument.dll</HintPath>\n      <Private>True</Private>\n    </Reference>\n    <Reference Include=\"System.Xml.XPath, Version=4.0.2.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\packages\\System.Xml.XPath.4.3.0\\lib\\net46\\System.Xml.XPath.dll</HintPath>\n      <Private>True</Private>\n    </Reference>\n    <Reference Include=\"System.Xml.XPath.XmlDocument, Version=4.0.2.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\packages\\System.Xml.XPath.XmlDocument.4.3.0\\lib\\net46\\System.Xml.XPath.XmlDocument.dll</HintPath>\n    </Reference>\n    <Reference Include=\"TimeZoneConverter, Version=2.4.1.0, Culture=neutral, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\packages\\TimeZoneConverter.2.4.1\\lib\\net45\\TimeZoneConverter.dll</HintPath>\n    </Reference>\n  </ItemGroup>\n  <ItemGroup>\n    <Compile Include=\"AbplusConsts.cs\" />\n    <Compile Include=\"Application\\Navigation\\MenuItemDefinitionPlugInExtensions.cs\" />\n    <Compile Include=\"Application\\Services\\Dto\\IHasDateTimeFilterRequest.cs\" />\n    <Compile Include=\"Application\\Services\\Dto\\IHasKeywordFilterRequest.cs\" />\n    <Compile Include=\"Application\\Services\\Dto\\IPaginationResultRequest.cs\" />\n    <Compile Include=\"Application\\Services\\Dto\\PaginationRequestInput.cs\" />\n    <Compile Include=\"Currencies\\ChineseCentExtension.cs\" />\n    <Compile Include=\"Events\\Bus\\ChangedEventData.cs\" />\n    <Compile Include=\"Events\\Bus\\IShouldBePublish.cs\" />\n    <Compile Include=\"Exceptions\\Publish\\AbpExceptionPublishAttribute.cs\" />\n    <Compile Include=\"Exceptions\\Publish\\AbpExceptionPublishEventData.cs\" />\n    <Compile Include=\"Exceptions\\Publish\\Interceptors\\ExceptionPublishInterceptor.cs\" />\n    <Compile Include=\"Exceptions\\Publish\\Interceptors\\ExceptionPublishInterceptorRegistrar.cs\" />\n    <Compile Include=\"Extensions\\DateTimeExtensions.cs\" />\n    <Compile Include=\"Extensions\\EnumExtensions.cs\" />\n    <Compile Include=\"Extensions\\GuidExtensions.cs\" />\n    <Compile Include=\"Extensions\\IntExtension.cs\" />\n    <Compile Include=\"Extensions\\NullableDateTimeExtensions.cs\" />\n    <Compile Include=\"Extensions\\StringExtensions.cs\" />\n    <Compile Include=\"Interceptors\\AsyncHandlingInterceptor.cs\" />\n    <Compile Include=\"Interceptors\\IAsyncInterceptorHandler.cs\" />\n    <Compile Include=\"Json\\LargeNumJsonConverter.cs\" />\n    <Compile Include=\"MqMessages\\IMqMessagePublisher.cs\" />\n    <Compile Include=\"MqMessages\\MessageTrackers\\DefaultInMemoryMessageTracker.cs\" />\n    <Compile Include=\"MqMessages\\MessageTrackers\\IMessageTracker.cs\" />\n    <Compile Include=\"MqMessages\\NullMqMessagePublisher.cs\" />\n    <Compile Include=\"PlugIns\\IPlugInAreaRegistration.cs\" />\n    <Compile Include=\"PlugIns\\IPlugInAuthorizationProvider.cs\" />\n    <Compile Include=\"PlugIns\\IPlugInNavigationProvider.cs\" />\n    <Compile Include=\"Properties\\AssemblyInfo.cs\" />\n    <Compile Include=\"QrCode\\IQrCodeScannedRealTimeNotifier.cs\" />\n    <Compile Include=\"Reservations\\Events\\ReservationCancelledEventData.cs\" />\n    <Compile Include=\"Reservations\\Events\\ReservationEventDataBase.cs\" />\n    <Compile Include=\"Reservations\\Events\\ReservationSuccessEventData.cs\" />\n    <Compile Include=\"Reservations\\IReservation.cs\" />\n    <Compile Include=\"Reservations\\IReservationBody.cs\" />\n    <Compile Include=\"Reservations\\ReservationBase.cs\" />\n    <Compile Include=\"Reservations\\ReservationBodyBase.cs\" />\n    <Compile Include=\"TimeRanges\\TimeRange.cs\" />\n  </ItemGroup>\n  <ItemGroup>\n    <Folder Include=\"Events\\Bus\\Entities\\\" />\n  </ItemGroup>\n  <ItemGroup>\n    <None Include=\"Abplus.nuspec\">\n      <SubType>Designer</SubType>\n    </None>\n    <None Include=\"app.config\" />\n    <None Include=\"packages.config\">\n      <SubType>Designer</SubType>\n    </None>\n  </ItemGroup>\n  <Import Project=\"$(MSBuildToolsPath)\\Microsoft.CSharp.targets\" />\n  <Import Project=\"..\\..\\packages\\Microsoft.Bcl.Build.1.0.21\\build\\Microsoft.Bcl.Build.targets\" Condition=\"Exists('..\\..\\packages\\Microsoft.Bcl.Build.1.0.21\\build\\Microsoft.Bcl.Build.targets')\" />\n  <Target Name=\"EnsureNuGetPackageBuildImports\" BeforeTargets=\"PrepareForBuild\">\n    <PropertyGroup>\n      <ErrorText>这台计算机上缺少此项目引用的 NuGet 程序包。使用“NuGet 程序包还原”可下载这些程序包。有关更多信息，请参见 http://go.microsoft.com/fwlink/?LinkID=322105。缺少的文件是 {0}。</ErrorText>\n    </PropertyGroup>\n    <Error Condition=\"!Exists('..\\..\\packages\\Microsoft.Bcl.Build.1.0.21\\build\\Microsoft.Bcl.Build.targets')\" Text=\"$([System.String]::Format('$(ErrorText)', '..\\..\\packages\\Microsoft.Bcl.Build.1.0.21\\build\\Microsoft.Bcl.Build.targets'))\" />\n  </Target>\n  <!-- To modify your build process, add your task inside one of the targets below and uncomment it. \n       Other similar extension points exist, see Microsoft.Common.targets.\n  <Target Name=\"BeforeBuild\">\n  </Target>\n  <Target Name=\"AfterBuild\">\n  </Target>\n  -->\n</Project>"
  },
  {
    "path": "src2/Abplus/Abplus.nuspec",
    "content": "<?xml version=\"1.0\"?>\n<package >\n  <metadata>\n    <id>$id$</id>\n    <version>$version$</version>\n    <title>$title$</title>\n    <authors>personball</authors>\n    <owners>personball</owners>\n    <licenseUrl>https://raw.githubusercontent.com/personball/abplus/master/LICENSE</licenseUrl>\n    <projectUrl>https://github.com/personball/abplus</projectUrl>\n    <iconUrl>https://raw.githubusercontent.com/personball/abplus/master/abplus_icon.png</iconUrl>\n    <requireLicenseAcceptance>false</requireLicenseAcceptance>\n    <description>Abp plus, an extension for Abp Framework. </description>\n    <releaseNotes></releaseNotes>\n    <copyright>Copyright 2017</copyright>\n    <tags></tags>\n    <dependencies>\n      <dependency id=\"Abp\" version=\"1.4.2\" />\n    </dependencies>\n  </metadata>\n</package>"
  },
  {
    "path": "src2/Abplus/AbplusConsts.cs",
    "content": "﻿namespace Abp\n{\n    public static class AbplusConsts\n    {\n        public const string CurrentVersion = \"0.1.7.7\";\n       \n    }\n}\n"
  },
  {
    "path": "src2/Abplus/Application/Navigation/MenuItemDefinitionPlugInExtensions.cs",
    "content": "﻿using System.Linq;\nusing Abp.Extensions;\nusing Abp.Localization;\n\nnamespace Abp.Application.Navigation\n{\n    public static class MenuItemDefinitionPlugInExtensions\n    {\n        public static MenuItemDefinition GetOrCreatePlugInsRootMenu(this MenuDefinition menu, string url, string icon, string plugInMenuName = \"PlugIns\", string fixedDisplayName = null, string requiredPermission = null)\n        {\n            if (plugInMenuName.IsNullOrWhiteSpace())\n            {\n                plugInMenuName = \"PlugIns\";\n            }\n\n            if (fixedDisplayName.IsNullOrWhiteSpace())\n            {\n                fixedDisplayName = \"PlugIns\";\n            }\n\n            var plugInRoot = menu.Items.FirstOrDefault(i => i.Name == plugInMenuName);\n            if (plugInRoot == null)\n            {\n                plugInRoot = new MenuItemDefinition(\n                    plugInMenuName,\n                    new FixedLocalizableString(fixedDisplayName),\n                    url: url,\n                    icon: icon,\n                    requiredPermissionName: requiredPermission\n                    );\n\n                menu.AddItem(plugInRoot);\n            }\n\n            return plugInRoot;\n        }\n    }\n}\n"
  },
  {
    "path": "src2/Abplus/Application/Services/Dto/IHasDateTimeFilterRequest.cs",
    "content": "﻿namespace Abp.Application.Services.Dto\n{\n    using System;\n\n    public interface IHasDateTimeFilterRequest\n    {\n        DateTime? StartTime { get; set; }\n\n        DateTime? EndTime { get; set; }\n    }\n}\n"
  },
  {
    "path": "src2/Abplus/Application/Services/Dto/IHasKeywordFilterRequest.cs",
    "content": "﻿namespace Abp.Application.Services.Dto\n{\n    public interface IHasKeywordFilterRequest\n    {\n        string Keyword { get; set; }\n    }\n}\n"
  },
  {
    "path": "src2/Abplus/Application/Services/Dto/IPaginationResultRequest.cs",
    "content": "﻿namespace Abp.Application.Services.Dto\n{\n    public interface IPaginationResultRequest : ISortedResultRequest\n    {\n        int PageIndex { get; set; }\n\n        int PageSize { get; set; }\n    }\n}\n"
  },
  {
    "path": "src2/Abplus/Application/Services/Dto/PaginationRequestInput.cs",
    "content": "﻿namespace Abp.Application.Services.Dto\n{\n    using System.ComponentModel.DataAnnotations;\n\n    public class PaginationResultRequestInput : IPaginationResultRequest\n    {\n        public PaginationResultRequestInput()\n        {\n            PageIndex = 1;\n            PageSize = 10;\n        }\n\n        [Range(1, 1000)]\n        public int PageIndex { get; set; }\n\n        [Range(1, 1000)]\n        public int PageSize { get; set; }\n\n        public string Sorting { get; set; }\n    }\n}\n"
  },
  {
    "path": "src2/Abplus/Currencies/ChineseCentExtension.cs",
    "content": "﻿namespace Abp.Currencies\n{\n    public static class ChineseCentExtension\n    {\n        public static decimal ToYuan(this int moneyInCent)\n        {\n            return moneyInCent / 100m;\n        }\n\n        public static string ToYuanString(this int moneyInCent)\n        {\n            return $\"{moneyInCent.ToYuan().ToString(\"0.00\")}元\";\n        }\n    }\n}\n"
  },
  {
    "path": "src2/Abplus/Events/Bus/ChangedEventData.cs",
    "content": "﻿namespace Abp.Events.Bus\n{\n    public abstract class ChangedEventData<T> : EventData\n    {\n        public T Origin { get; set; }\n        public T Current { get; set; }\n    }\n}\n"
  },
  {
    "path": "src2/Abplus/Events/Bus/IShouldBePublish.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Text;\nusing System.Threading.Tasks;\n\nnamespace Abp.Events.Bus\n{\n    /// <summary>\n    ///this is used to mark an event should be publish.<see cref=\"PublishAllEventsHandler\" />\n    /// </summary>\n    [Obsolete(\"不推荐直接将EventData发布到消息队列\", false)]\n    public interface IShouldBePublish\n    {\n    }\n}\n"
  },
  {
    "path": "src2/Abplus/Extensions/DateTimeExtensions.cs",
    "content": "﻿namespace Abp.Extensions\n{\n    using System;\n\n    /// <summary>\n    /// Extension methods for <see cref=\"DateTime\"/>.\n    /// </summary>\n    public static class DateTimeExtensions\n    {\n        /// <summary>\n        /// 转换为完整时间的字符串(yyyy-MM-dd HH:mm:ss)\n        /// </summary>\n        public static string ToFullTimeString(this DateTime source)\n        {\n            return source.ToString(\"yyyy-MM-dd HH:mm:ss\");\n        }\n\n        /// <summary>\n        /// 转换为短时间的字符串(yyyy-MM-dd HH:mm)\n        /// </summary>\n        public static string ToShortTimeString(this DateTime source)\n        {\n            return source.ToString(\"yyyy-MM-dd HH:mm\");\n        }\n\n        /// <summary>\n        /// 转换为只有日期的字符串(yyyy-MM-dd)\n        /// </summary>\n        public static string ToDateString(this DateTime source)\n        {\n            return source.ToString(\"yyyy-MM-dd\");\n        }\n    }\n}\n"
  },
  {
    "path": "src2/Abplus/Extensions/EnumExtensions.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.ComponentModel.DataAnnotations;\nusing System.Linq;\nusing System.Reflection;\nusing System.Text;\nusing System.Threading.Tasks;\n\nnamespace Abp.Extensions\n{\n    public static class EnumExtensions\n    {\n        public static string GetDisplayName(FieldInfo field)\n        {\n            DisplayAttribute display = field.GetCustomAttribute<DisplayAttribute>(inherit: false);\n            if (display != null)\n            {\n                string name = display.GetName();\n                if (!String.IsNullOrEmpty(name))\n                {\n                    return name;\n                }\n            }\n\n            return field.Name;\n        }\n    }\n}\n"
  },
  {
    "path": "src2/Abplus/Extensions/GuidExtensions.cs",
    "content": "﻿namespace Abp.Extensions\n{\n    using System;\n\n    public static class GuidExtensions\n    {\n        /// <summary>\n        /// 将Guid转换为经过Base64编码的22位字符串\n        /// </summary>\n        public static string ToShortString(this Guid source)\n        {\n            string base64 = Convert.ToBase64String(source.ToByteArray());\n            string result = base64.Replace(\"/\", \"_\").Replace(\"+\", \"-\").Substring(0, 22);\n            return result;\n        }\n\n        /// <summary>\n        /// 转换成sqlserver有序Guid,时间相关，精度为300分之一毫秒\n        /// </summary>\n        /// <param name=\"source\"></param>\n        /// <returns></returns>\n        public static Guid ToCombGuid(this Guid source)\n        {\n            byte[] guidArray = source.ToByteArray();\n            DateTime baseDate = new DateTime(1900, 1, 1);\n            DateTime now = DateTime.Now;\n            // Get the days and milliseconds which will be used to build the byte string \n            TimeSpan days = new TimeSpan(now.Ticks - baseDate.Ticks);\n            TimeSpan msecs = new TimeSpan(now.Ticks - (new DateTime(now.Year, now.Month, now.Day).Ticks));\n            // Convert to a byte array \n            // Note that SQL Server is accurate to 1/300th of a millisecond so we divide by 3.333333 \n            byte[] daysArray = BitConverter.GetBytes(days.Days);\n            byte[] msecsArray = BitConverter.GetBytes((long)(msecs.TotalMilliseconds / 3.333333));\n            // Reverse the bytes to match SQL Servers ordering \n            Array.Reverse(daysArray);\n            Array.Reverse(msecsArray);\n            // Copy the bytes into the guid \n            Array.Copy(daysArray, daysArray.Length - 2, guidArray, guidArray.Length - 6, 2);\n            Array.Copy(msecsArray, msecsArray.Length - 4, guidArray, guidArray.Length - 4, 4);\n            return new Guid(guidArray);\n        }\n    }\n}\n"
  },
  {
    "path": "src2/Abplus/Extensions/IntExtension.cs",
    "content": "﻿using System;\nusing Abp.Application.Services.Dto;\n\nnamespace Abp.Extensions\n{\n    public static class IntExtension\n    {\n        public static int ToSkipCount(this IPaginationResultRequest pagination)\n        {\n            CheckErrors(pagination);\n\n            return (pagination.PageIndex - 1) * pagination.PageSize;\n        }\n\n        public static int ToMaxResultCount(this IPaginationResultRequest pagination)\n        {\n            CheckErrors(pagination);\n\n            return pagination.PageSize;\n        }\n\n        private static void CheckErrors(IPaginationResultRequest pagination)\n        {\n            if (pagination == null)\n            {\n                throw new ArgumentNullException(\"pagination\");\n            }\n\n            if (pagination.PageSize < 1)\n            {\n                throw new ArgumentOutOfRangeException(\"pagesize\");\n            }\n\n            if (pagination.PageIndex < 1)\n            {\n                throw new ArgumentOutOfRangeException(\"pageindex\");\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "src2/Abplus/Extensions/NullableDateTimeExtensions.cs",
    "content": "﻿namespace Abp.Extensions\n{\n    using System;\n\n    public static class NullableDateTimeExtensions\n    {\n        /// <summary>\n        /// 转换为完整时间的字符串(yyyy-MM-dd HH:mm:ss)\n        /// </summary>\n        public static string ToFullString(this DateTime? source)\n        {\n            return source.HasValue ? source.Value.ToFullTimeString() : string.Empty;\n        }\n\n        /// <summary>\n        /// 转换为短时间的字符串(yyyy-MM-dd HH:mm)\n        /// </summary>\n        public static string ToShortString(this DateTime? source)\n        {\n            return source.HasValue ? source.Value.ToShortTimeString() : string.Empty;\n        }\n\n        /// <summary>\n        /// 转换为只有日期的字符串(yyyy-MM-dd)\n        /// </summary>\n        public static string ToDateString(this DateTime? source)\n        {\n            return source.HasValue ? source.Value.ToDateString() : string.Empty;\n        }\n    }\n}\n"
  },
  {
    "path": "src2/Abplus/Extensions/StringExtensions.cs",
    "content": "﻿namespace Abp.Extensions\n{\n    using System;\n    using Newtonsoft.Json;\n\n    public static class StringExtensions\n    {\n        /// <summary>\n        /// 字符串转换为Guid类型\n        /// </summary>\n        /// <param name=\"str\"></param>\n        /// <returns>默认返回Guid.Empty</returns>\n        public static Guid ToGuid(this string str)\n        {\n            return str.ToGuid(null);\n        }\n\n        /// <summary>\n        /// 指定格式字符串转换为Guid类型\n        /// </summary>\n        /// <param name=\"str\"></param>\n        /// <param name=\"format\"></param>\n        /// <returns>默认返回Guid.Empty</returns>\n        public static Guid ToGuid(this string str, string format)\n        {\n            var result = Guid.Empty;\n            if (!format.IsNullOrWhiteSpace())\n            {\n                Guid.TryParseExact(str, format, out result);\n            }\n            else\n            {\n                Guid.TryParse(str, out result);\n            }\n\n            return result;\n        }\n\n        /// <summary>\n        /// 字符串转换为Guid类型或者null，不成功返回null\n        /// </summary>\n        public static Guid? ToGuidOrNull(this string str)\n        {\n            Guid? result = null;\n            if (!string.IsNullOrWhiteSpace(str))\n            {\n                Guid tmp;\n                if (Guid.TryParse(str, out tmp))\n                {\n                    result = tmp;\n                }\n            }\n\n            return result;\n        }\n\n        /// <summary>\n        /// 字符串转换为int类型或者null，不成功返回null\n        /// </summary>\n        public static int? ToIntOrNull(this string str)\n        {\n            int? result = null;\n            if (!string.IsNullOrWhiteSpace(str))\n            {\n                int tmp;\n                if (int.TryParse(str, out tmp))\n                {\n                    result = tmp;\n                }\n            }\n\n            return result;\n        }\n\n        /// <summary>\n        /// 将经过Base64编码的22位字符串还原为Guid\n        /// </summary>\n        public static Guid Base64ToGuid(this string str)\n        {\n            Guid result = Guid.Empty;\n            str = str.Trim();\n            string encoded = string.Concat(str.Trim().Replace(\"-\", \"+\").Replace(\"_\", \"/\"), \"==\");\n\n            try\n            {\n                byte[] base64 = Convert.FromBase64String(encoded);\n                result = new Guid(base64);\n            }\n            catch (Exception ex)\n            {\n                throw new AbpException(\"不是有效的参数格式\", ex);\n            }\n\n            return result;\n        }\n\n        /// <summary>\n        /// 由json字符串反序列化成指定类型的对象，字符串为空或不符合格式，则返回类型的默认值\n        /// </summary>\n        public static T ToObject<T>(this string json)\n        {\n            var obj = default(T);\n            if (json.IsNullOrWhiteSpace())\n            {\n                return obj;\n            }\n\n            try\n            {\n                obj = JsonConvert.DeserializeObject<T>(json);\n            }\n            catch\n            {\n                //eat exception to return default value\n            }\n\n            return obj;\n        }\n    }\n}\n"
  },
  {
    "path": "src2/Abplus/Interceptors/AsyncHandlingInterceptor.cs",
    "content": "﻿using System.Reflection;\nusing System.Threading.Tasks;\nusing Castle.DynamicProxy;\n\nnamespace Abp.Interceptors\n{\n    public abstract class AsyncHandlingInterceptor : IInterceptor\n    {\n        protected readonly IAsyncInterceptorHandler Handler;\n        private static readonly MethodInfo HandleAsyncMethodInfo = typeof(AsyncHandlingInterceptor).GetMethod(\"HandleAsyncWithResult\", BindingFlags.Instance | BindingFlags.NonPublic);\n\n        /// <summary>\n        /// \n        /// </summary>\n        /// <param name=\"handler\"></param>\n        protected AsyncHandlingInterceptor(IAsyncInterceptorHandler handler)\n        {\n            Handler = handler;\n        }\n\n        public void Intercept(IInvocation invocation)\n        {\n            var delegateType = GetDelegateType(invocation);\n            if (delegateType == MethodType.Synchronous)\n            {\n                Handler.Handle(invocation);\n                //Handle(() => invocation.Proceed());\n            }\n            if (delegateType == MethodType.AsyncAction)\n            {\n                Handler.HandleAsync(invocation);\n                //invocation.Proceed();\n                //invocation.ReturnValue = HandleAsync((Task)invocation.ReturnValue);\n            }\n            if (delegateType == MethodType.AsyncFunction)\n            {\n                //invocation.Proceed();\n                ExecuteHandleAsyncWithResultUsingReflection(invocation);\n            }\n        }\n        private void ExecuteHandleAsyncWithResultUsingReflection(IInvocation invocation)\n        {\n            var resultType = invocation.Method.ReturnType.GetGenericArguments()[0];\n            var mi = HandleAsyncMethodInfo.MakeGenericMethod(resultType);\n            invocation.ReturnValue = mi.Invoke(this, new[] { invocation });\n        }\n\n        /// <summary>\n        /// Used by Reflection\n        /// </summary>\n        /// <typeparam name=\"T\"></typeparam>\n        /// <param name=\"invocation\"></param>\n        /// <returns></returns>\n        protected virtual async Task<T> HandleAsyncWithResult<T>(IInvocation invocation)\n        {\n            return await Handler.HandleAsync<T>(invocation);\n        }\n\n        private MethodType GetDelegateType(IInvocation invocation)\n        {\n            var returnType = invocation.Method.ReturnType;\n            if (returnType == typeof(Task))\n                return MethodType.AsyncAction;\n            if (returnType.IsGenericType && returnType.GetGenericTypeDefinition() == typeof(Task<>))\n                return MethodType.AsyncFunction;\n            return MethodType.Synchronous;\n        }\n\n        private enum MethodType\n        {\n            Synchronous,\n            AsyncAction,\n            AsyncFunction\n        }\n    }\n}\n"
  },
  {
    "path": "src2/Abplus/Interceptors/IAsyncInterceptorHandler.cs",
    "content": "﻿using System.Threading.Tasks;\nusing Castle.DynamicProxy;\n\nnamespace Abp.Interceptors\n{\n    /// <summary>\n    /// \n    /// </summary>\n    public interface IAsyncInterceptorHandler\n    {\n        /// <summary>\n        /// \n        /// </summary>\n        /// <param name=\"invocation\"></param>\n        void Handle(IInvocation invocation);\n\n        /// <summary>\n        /// \n        /// </summary>\n        /// <param name=\"invocation\"></param>\n        /// <returns></returns>\n        Task HandleAsync(IInvocation invocation);\n\n        /// <summary>\n        /// \n        /// </summary>\n        /// <typeparam name=\"T\"></typeparam>\n        /// <param name=\"invocation\"></param>\n        /// <returns></returns>\n        Task<T> HandleAsync<T>(IInvocation invocation);\n    }\n}\n"
  },
  {
    "path": "src2/Abplus/Json/LargeNumJsonConverter.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing Newtonsoft.Json;\n\nnamespace Abp.Json\n{\n    /// <summary>\n    /// csharp long type number maybe overflow when it assigned to javascript in a json object, so serialize it as string when its value overflow.\n    /// </summary>\n    public class LargeNumJsonConverter : JsonConverter\n    {\n\n        public override bool CanRead => false;\n\n        public override void WriteJson(JsonWriter writer, object value, JsonSerializer serializer)\n        {\n            var num = value as long?;\n            if (num.HasValue && (num > _maxJsNum || num < _minJsNum))\n            {\n                writer.WriteValue(num.ToString());\n            }\n            else\n            {\n                writer.WriteValue(value);\n            }\n        }\n\n        public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer)\n        {\n            if (LargeNumTypes.Contains(objectType))\n            {\n                long result;\n                if (reader.Value != null && long.TryParse(reader.Value.ToString(), out result))\n                {\n                    return result;\n                }\n                return (long?)null;\n            }\n            return reader.Value;\n        }\n\n        public override bool CanConvert(Type objectType)\n        {\n            //9007199254740992\n            return LargeNumTypes.Contains(objectType);\n        }\n\n        private static long _maxJsNum = 9007199254740992;\n        private static long _minJsNum = -9007199254740992;\n\n        private static readonly List<Type> LargeNumTypes = new List<Type>\n            {\n                typeof(long),\n                typeof(long?)\n            };\n    }\n}\n"
  },
  {
    "path": "src2/Abplus/MqMessages/IMqMessagePublisher.cs",
    "content": "﻿using System.Threading.Tasks;\nusing Abp.Dependency;\nnamespace Abp.MqMessages\n{\n    /// <summary>\n    /// 消息发布接口\n    /// </summary>\n    public interface IMqMessagePublisher : ITransientDependency\n    {\n        /// <summary>\n        /// 发布\n        /// </summary>\n        /// <param name=\"mqMessages\"></param>\n        void Publish(object mqMessages);\n\n        /// <summary>\n        /// 发布\n        /// </summary>\n        /// <param name=\"mqMessages\"></param>\n        /// <returns></returns>\n        Task PublishAsync(object mqMessages);\n    }\n}\n"
  },
  {
    "path": "src2/Abplus/MqMessages/MessageTrackers/DefaultInMemoryMessageTracker.cs",
    "content": "﻿using System.Collections.Concurrent;\nusing System.Linq;\nusing System.Threading.Tasks;\n\nnamespace Abp.MqMessages.MessageTrackers\n{\n    public class DefaultInMemoryMessageTracker : IMessageTracker\n    {\n        private static readonly ConcurrentBag<string> InMemoryStore;\n\n        static DefaultInMemoryMessageTracker()\n        {\n            InMemoryStore = new ConcurrentBag<string>();\n        }\n\n        public static DefaultInMemoryMessageTracker Instance { get { return SingletonInstance; } }\n        private static readonly DefaultInMemoryMessageTracker SingletonInstance = new DefaultInMemoryMessageTracker();\n\n        public Task MarkAsProcessed(string processId)\n        {\n            InMemoryStore.Add(processId);\n            return Task.FromResult(0);\n        }\n\n        public Task<bool> HasProcessed(string processId)\n        {\n            return Task.FromResult(InMemoryStore.Contains(processId));\n        }\n    }\n}\n"
  },
  {
    "path": "src2/Abplus/MqMessages/MessageTrackers/IMessageTracker.cs",
    "content": "﻿using System.Threading.Tasks;\n\nnamespace Abp.MqMessages.MessageTrackers\n{\n    public interface IMessageTracker\n    {\n        /// <summary>\n        /// 查询是否已处理过\n        /// </summary>\n        /// <param name=\"processId\">能唯一标记本次处理过程的Id，可采用msgId+HandlerName等组合</param>\n        /// <returns></returns>\n        Task<bool> HasProcessed(string processId);\n\n        /// <summary>\n        /// 标记为已处理过\n        /// </summary>\n        /// <param name=\"processId\">能唯一标记本次处理过程的Id，可采用msgId+HandlerName等组合</param>\n        /// <returns></returns>\n        Task MarkAsProcessed(string processId);\n    }\n}\n"
  },
  {
    "path": "src2/Abplus/MqMessages/NullMqMessagePublisher.cs",
    "content": "﻿using System.Threading.Tasks;\n\nnamespace Abp.MqMessages\n{\n    /// <summary>\n    /// 空模式\n    /// </summary>\n    public class NullMqMessagePublisher : IMqMessagePublisher\n    {\n        /// <summary>\n        /// \n        /// </summary>\n        public static NullMqMessagePublisher Instance { get { return SingletonInstance; } }\n        private static readonly NullMqMessagePublisher SingletonInstance = new NullMqMessagePublisher();\n\n        /// <summary>\n        /// \n        /// </summary>\n        /// <param name=\"mqMessages\"></param>\n        /// <returns></returns>\n        public Task PublishAsync(object mqMessages)\n        {\n            //do nothing.\n            return Task.FromResult(0);\n        }\n\n        /// <summary>\n        /// \n        /// </summary>\n        /// <param name=\"mqMessages\"></param>\n        public void Publish(object mqMessages)\n        {\n            //do nothing.\n        }\n    }\n}\n"
  },
  {
    "path": "src2/Abplus/PlugIns/IPlugInAreaRegistration.cs",
    "content": "﻿namespace Abp.PlugIns\n{\n    public interface IPlugInAreaRegistration\n    {\n    }\n}\n"
  },
  {
    "path": "src2/Abplus/PlugIns/IPlugInAuthorizationProvider.cs",
    "content": "﻿namespace Abp.PlugIns\n{\n    public interface IPlugInAuthorizationProvider\n    {\n    }\n}\n"
  },
  {
    "path": "src2/Abplus/PlugIns/IPlugInNavigationProvider.cs",
    "content": "﻿namespace Abp.PlugIns\n{\n    public interface IPlugInNavigationProvider\n    {\n    }\n}\n"
  },
  {
    "path": "src2/Abplus/Properties/AssemblyInfo.cs",
    "content": "﻿using System.Reflection;\nusing System.Runtime.CompilerServices;\nusing System.Runtime.InteropServices;\nusing Abp;\n\n// 有关程序集的一般信息由以下\n// 控制。更改这些特性值可修改\n// 与程序集关联的信息。\n[assembly: AssemblyTitle(\"Abplus\")]\n[assembly: AssemblyDescription(\"\")]\n[assembly: AssemblyConfiguration(\"\")]\n[assembly: AssemblyCompany(\"\")]\n[assembly: AssemblyProduct(\"Abplus\")]\n[assembly: AssemblyCopyright(\"Copyright ©  2016\")]\n[assembly: AssemblyTrademark(\"\")]\n[assembly: AssemblyCulture(\"\")]\n\n//将 ComVisible 设置为 false 将使此程序集中的类型\n//对 COM 组件不可见。  如果需要从 COM 访问此程序集中的类型，\n//请将此类型的 ComVisible 特性设置为 true。\n[assembly: ComVisible(false)]\n\n// 如果此项目向 COM 公开，则下列 GUID 用于类型库的 ID\n[assembly: Guid(\"1de8d8d1-987d-4a9c-aec5-ff0a9914bbd4\")]\n\n// 程序集的版本信息由下列四个值组成: \n//\n//      主版本\n//      次版本\n//      生成号\n//      修订号\n//\n//可以指定所有这些值，也可以使用“生成号”和“修订号”的默认值，\n// 方法是按如下所示使用“*”: :\n// [assembly: AssemblyVersion(\"1.0.*\")]\n[assembly: AssemblyVersion(AbplusConsts.CurrentVersion)]\n[assembly: AssemblyFileVersion(AbplusConsts.CurrentVersion)]\n"
  },
  {
    "path": "src2/Abplus/QrCode/IQrCodeScannedRealTimeNotifier.cs",
    "content": "﻿using System.Threading.Tasks;\n\nnamespace Abp.QrCode\n{\n    public interface IQrCodeScannedRealTimeNotifier\n    {\n        Task Notify(string scannerIdentifier, string connectionId, object properties = null);\n    }\n}\n"
  },
  {
    "path": "src2/Abplus/Reservations/Events/ReservationCancelledEventData.cs",
    "content": "﻿namespace Abp.Reservations.Events\n{\n    /// <summary>\n    /// 预定取消事件抽象基类\n    /// </summary>\n    public abstract class ReservationCancelledEventData : ReservationEventDataBase\n    {\n    }\n}\n"
  },
  {
    "path": "src2/Abplus/Reservations/Events/ReservationEventDataBase.cs",
    "content": "﻿using Abp.Events.Bus;\nusing Abp.TimeRanges;\n\nnamespace Abp.Reservations.Events\n{\n    /// <summary>\n    /// 预定发生变化的事件基类\n    /// </summary>\n    public abstract class ReservationEventDataBase : EventData\n    {\n        /// <summary>\n        /// 预定记录唯一标识\n        /// </summary>\n        public string ReservationCode { get; set; }\n        /// <summary>\n        /// 预定主题\n        /// </summary>\n        public string ReservationSubject { get; set; }\n        /// <summary>\n        /// 预定时间区间\n        /// </summary>\n        public TimeRange ReservationTimeRange { get; set; }\n    }\n}\n"
  },
  {
    "path": "src2/Abplus/Reservations/Events/ReservationSuccessEventData.cs",
    "content": "﻿namespace Abp.Reservations.Events\n{\n    /// <summary>\n    /// 预定成功事件抽象基类\n    /// </summary>\n    public abstract class ReservationSuccessEventData : ReservationEventDataBase\n    {\n    }\n}\n"
  },
  {
    "path": "src2/Abplus/Reservations/IReservation.cs",
    "content": "﻿using System.Collections.Generic;\nusing Abp.TimeRanges;\n\nnamespace Abp.Reservations\n{\n    /// <summary>\n    /// 预定\n    /// </summary>\n    public interface IReservation\n    {\n        /// <summary>\n        /// 预定的主题\n        /// </summary>\n        string ReservationSubject { get; }\n\n        /// <summary>\n        /// 预定的类型\n        /// </summary>\n        string ReservationType { get; }\n\n        /// <summary>\n        /// 预定的唯一编码\n        /// </summary>\n        string ReservationCode { get; }\n\n        /// <summary>\n        /// 预定的时间\n        /// </summary>\n        TimeRange ReservationTime { get; }\n\n        /// <summary>\n        /// 同一预定主体的两个预定应检测是否冲突\n        /// </summary>\n        /// <param name=\"reservation\"></param>\n        /// <returns></returns>\n        bool IsConflict(IReservation reservation);\n\n        /// <summary>\n        /// \n        /// </summary>\n        /// <param name=\"reservations\"></param>\n        /// <returns></returns>\n        bool IsConflict(IEnumerable<IReservation> reservations);\n    }\n}\n"
  },
  {
    "path": "src2/Abplus/Reservations/IReservationBody.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\n\nnamespace Abp.Reservations\n{\n    /// <summary>\n    /// 可被预定的资源主体\n    /// </summary>\n    /// <typeparam name=\"T\"></typeparam>\n    public interface IReservationBody<T> where T : IReservation\n    {\n        /// <summary>\n        /// 可被预定的资源唯一标识（建议8位数字）\n        /// </summary>\n        string ResourceCode { get; }\n\n        /// <summary>\n        /// 资源的预定列表\n        /// </summary>\n        ICollection<T> Reservations { get; }\n\n        /// <summary>\n        /// 预定\n        /// </summary>\n        /// <param name=\"subject\"></param>\n        /// <param name=\"from\"></param>\n        /// <param name=\"to\"></param>\n        /// <returns></returns>\n        T Reserve(string subject, DateTime from, DateTime to);\n\n        /// <summary>\n        /// 取消预定\n        /// </summary>\n        /// <param name=\"reservationCode\"></param>\n        /// <returns></returns>\n        T CancelReservation(string reservationCode);\n    }\n}\n"
  },
  {
    "path": "src2/Abplus/Reservations/ReservationBase.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.ComponentModel.DataAnnotations;\nusing System.Linq;\nusing Abp.Domain.Entities.Auditing;\nusing Abp.TimeRanges;\n\nnamespace Abp.Reservations\n{\n    /// <summary>\n    /// 预定基类，可被预定的资源拥有一个预定的列表，具体预定的实现可继承本基类\n    /// </summary>\n    public abstract class ReservationBase : CreationAuditedEntity<Guid>, IReservation\n    {\n        /// <summary>\n        /// 默认最小预定时间区间长度（单位：分钟）\n        /// </summary>\n        public const int DefaultMinTimeRangeLengthForReservationInMinutes = 3;//预定记录唯一编码受预定时间区间粒度影响\n\n        protected ReservationBase() { }\n\n        public ReservationBase(string reservationSubject, TimeRange reservationTime, string reservationType, string reservationResourceCode)\n        {\n            if (reservationTime.To.Subtract(reservationTime.From).TotalMinutes < MinTimeRangeLengthForReservationInMinutes)\n            {\n                throw new ArgumentException($\"预定时间区间应大于{MinTimeRangeLengthForReservationInMinutes}分钟!\");\n            }\n\n            ReservationType = reservationType;\n            ReservationSubject = reservationSubject;\n            ReservationTime = reservationTime;\n\n            SetReservationCode(reservationResourceCode);\n        }\n\n        protected virtual int MinTimeRangeLengthForReservationInMinutes\n        {\n            get\n            {\n                return DefaultMinTimeRangeLengthForReservationInMinutes;\n            }\n        }\n\n        /// <summary>\n        /// 生成预定唯一编码\n        /// </summary>\n        /// <param name=\"resourceCode\"></param>\n        protected virtual void SetReservationCode(string resourceCode)\n        {\n            ReservationCode = $\"{ReservationType}-{resourceCode}-{ReservationTime.From.ToString(\"yyyyMMddHHmm\")}\";\n        }\n\n        /// <summary>\n        /// 预定类型\n        /// </summary>\n        [MaxLength(10)]\n        public string ReservationType { get; private set; }\n\n        /// <summary>\n        /// 预定唯一编码\n        /// </summary>\n        public string ReservationCode { get; private set; }\n\n        /// <summary>\n        /// 预定主题\n        /// </summary>\n        [MaxLength(256)]\n        public string ReservationSubject { get; private set; }\n\n        /// <summary>\n        /// 所预定的时间区间\n        /// </summary>\n        public TimeRange ReservationTime { get; private set; }\n\n        /// <summary>\n        /// 是否冲突\n        /// </summary>\n        /// <param name=\"reservation\"></param>\n        /// <returns></returns>\n        public virtual bool IsConflict(IReservation reservation)\n        {\n            return ReservationTime.IsIntersect(reservation.ReservationTime);\n        }\n\n        /// <summary>\n        /// 是否冲突\n        /// </summary>\n        /// <param name=\"reservations\"></param>\n        /// <returns></returns>\n        public virtual bool IsConflict(IEnumerable<IReservation> reservations)//ICollection<IReservation> 不支持逆变\n        {\n            var times = reservations.Select(r => r.ReservationTime).ToList();\n            return ReservationTime.IsIntersect(times);\n        }\n    }\n}\n"
  },
  {
    "path": "src2/Abplus/Reservations/ReservationBodyBase.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing Abp.Domain.Entities;\nusing Abp.Events.Bus;\nusing Abp.TimeRanges;\nusing Abp.Timing;\n\nnamespace Abp.Reservations\n{\n    /// <summary>\n    /// 可被预定主体的抽象基类\n    /// </summary>\n    /// <typeparam name=\"TReservation\"></typeparam>\n    /// <typeparam name=\"TPrimary\"></typeparam>\n    public abstract class ReservationBodyBase<TReservation, TPrimary> : AggregateRoot<TPrimary>, IReservationBody<TReservation> where TReservation : IReservation\n    {\n        /// <summary>\n        /// 可被预定主体的唯一标识\n        /// </summary>\n        public string ResourceCode { get; protected set; }\n\n        /// <summary>\n        /// 预定列表\n        /// </summary>\n        public virtual ICollection<TReservation> Reservations { get; protected set; }\n\n        /// <summary>\n        /// 获取预定取消时应触发的事件\n        /// </summary>\n        protected abstract Func<TReservation, IEventData> GetReservationCancelledEventData { get; }\n        /// <summary>\n        /// 检查新增预定是否与已有预定相冲突\n        /// </summary>\n        protected abstract Func<TReservation, IEnumerable<TReservation>, bool> GetIfTheseReservationsConflict { get; }\n        /// <summary>\n        /// 获取预定成功时应触发的事件\n        /// </summary>\n        protected abstract Func<TReservation, IEventData> GetReserveSuccessEventData { get; }\n        /// <summary>\n        /// 如果新增预定与已有预定相冲突时，应抛出的具体异常\n        /// </summary>\n        protected abstract Action ThrowIfTheseReservationsConflict { get; }\n\n        /// <summary>\n        /// 取消预定\n        /// </summary>\n        /// <param name=\"reservationCode\"></param>\n        /// <returns></returns>\n        public virtual TReservation CancelReservation(string reservationCode)\n        {\n            Check.NotNullOrWhiteSpace(reservationCode, nameof(reservationCode));\n\n            var reservation = Reservations.FirstOrDefault(r => r.ReservationCode == reservationCode);\n            if (reservation == null)\n            {\n                return reservation;\n            }\n\n            Reservations.Remove(reservation);\n\n            DomainEvents.Add(GetReservationCancelledEventData(reservation));\n\n            return reservation;\n        }\n\n        /// <summary>\n        /// 预定\n        /// </summary>\n        /// <param name=\"subject\">预定主题</param>\n        /// <param name=\"from\">时间区间起</param>\n        /// <param name=\"to\">时间区间止</param>\n        /// <returns></returns>\n        public virtual TReservation Reserve(string subject, DateTime from, DateTime to)\n        {\n            Check.NotNullOrWhiteSpace(subject, nameof(subject));\n\n            TReservation newReservation = (TReservation)Activator.CreateInstance(typeof(TReservation), subject, new TimeRange(from, to), ResourceCode);\n\n            var reservations = Reservations.Where(r => r.ReservationTime.To > Clock.Now).ToList();\n            if (reservations.Any())\n            {\n                if (GetIfTheseReservationsConflict(newReservation, reservations))\n                {\n                    ThrowIfTheseReservationsConflict();\n                }\n            }\n\n            Reservations.Add(newReservation);\n\n            DomainEvents.Add(GetReserveSuccessEventData(newReservation));\n\n            return newReservation;\n        }\n    }\n}\n"
  },
  {
    "path": "src2/Abplus/TimeRanges/TimeRange.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing Abp.Domain.Values;\n\nnamespace Abp.TimeRanges\n{\n    public class TimeRange : ValueObject<TimeRange>\n    {\n        protected TimeRange() { }\n\n        public TimeRange(DateTime from, DateTime to)\n        {\n            Check.NotNull(from, nameof(from));\n            Check.NotNull(to, nameof(to));\n\n            if (from >= to)\n            {\n                throw new ArgumentException(\"时间区间的起点必须小于终点！\");\n            }\n\n            From = from;\n            To = to;\n        }\n\n        /// <summary>\n        /// 时间区间起\n        /// </summary>\n        public DateTime From { get; private set; }\n        /// <summary>\n        /// 时间区间止\n        /// </summary>\n        public DateTime To { get; private set; }\n\n        /// <summary>\n        /// 包含，一般用于匹配\n        /// </summary>\n        /// <param name=\"that\"></param>\n        /// <returns></returns>\n        public bool IsIncluding(TimeRange that)\n        {\n            Check.NotNull(that, nameof(that));\n\n            return From <= that.From && To >= that.To;\n        }\n\n        /// <summary>\n        /// 相交，一般用于检测冲突\n        /// </summary>\n        /// <param name=\"that\"></param>\n        /// <returns></returns>\n        public bool IsIntersect(TimeRange that)\n        {\n            Check.NotNull(that, nameof(that));\n\n            return To >= that.From && To <= that.To\n                || From >= that.From && To <= that.To\n                || From >= that.From && From <= that.To;\n        }\n\n        /// <summary>\n        /// 相交，一般用于检测冲突\n        /// </summary>\n        /// <param name=\"those\"></param>\n        /// <returns></returns>\n        public bool IsIntersect(ICollection<TimeRange> those)\n        {\n            Check.NotNull(those, nameof(those));\n            foreach (var that in those)\n            {\n                if (IsIntersect(that))\n                {\n                    return true;\n                }\n            }\n\n            return false;\n        }\n    }\n}\n"
  },
  {
    "path": "src2/Abplus/app.config",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<configuration>\n  <runtime>\n    <assemblyBinding xmlns=\"urn:schemas-microsoft-com:asm.v1\">\n      <dependentAssembly>\n        <assemblyIdentity name=\"Newtonsoft.Json\" publicKeyToken=\"30ad4fe6b2a6aeed\" culture=\"neutral\" />\n        <bindingRedirect oldVersion=\"0.0.0.0-11.0.0.0\" newVersion=\"11.0.0.0\" />\n      </dependentAssembly>\n      <dependentAssembly>\n        <assemblyIdentity name=\"Microsoft.Extensions.Caching.Abstractions\" publicKeyToken=\"adb9793829ddae60\" culture=\"neutral\" />\n        <bindingRedirect oldVersion=\"0.0.0.0-2.0.1.0\" newVersion=\"2.0.1.0\" />\n      </dependentAssembly>\n      <dependentAssembly>\n        <assemblyIdentity name=\"Microsoft.Extensions.Caching.Memory\" publicKeyToken=\"adb9793829ddae60\" culture=\"neutral\" />\n        <bindingRedirect oldVersion=\"0.0.0.0-2.0.1.0\" newVersion=\"2.0.1.0\" />\n      </dependentAssembly>\n      <dependentAssembly>\n        <assemblyIdentity name=\"Microsoft.Extensions.Options\" publicKeyToken=\"adb9793829ddae60\" culture=\"neutral\" />\n        <bindingRedirect oldVersion=\"0.0.0.0-2.0.1.0\" newVersion=\"2.0.1.0\" />\n      </dependentAssembly>\n      <dependentAssembly>\n        <assemblyIdentity name=\"System.Runtime.InteropServices.RuntimeInformation\" publicKeyToken=\"b03f5f7f11d50a3a\" culture=\"neutral\" />\n        <bindingRedirect oldVersion=\"0.0.0.0-4.0.2.0\" newVersion=\"4.0.2.0\" />\n      </dependentAssembly>\n      <dependentAssembly>\n        <assemblyIdentity name=\"System.Collections.Immutable\" publicKeyToken=\"b03f5f7f11d50a3a\" culture=\"neutral\" />\n        <bindingRedirect oldVersion=\"0.0.0.0-1.2.3.0\" newVersion=\"1.2.3.0\" />\n      </dependentAssembly>\n      <dependentAssembly>\n        <assemblyIdentity name=\"System.ComponentModel.Annotations\" publicKeyToken=\"b03f5f7f11d50a3a\" culture=\"neutral\" />\n        <bindingRedirect oldVersion=\"0.0.0.0-4.2.1.0\" newVersion=\"4.2.1.0\" />\n      </dependentAssembly>\n    </assemblyBinding>\n  </runtime>\n</configuration>"
  },
  {
    "path": "src2/Abplus/packages.config",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<packages>\n  <package id=\"Abp\" version=\"3.7.2\" targetFramework=\"net461\" />\n  <package id=\"Castle.Core\" version=\"4.3.1\" targetFramework=\"net461\" />\n  <package id=\"Castle.LoggingFacility\" version=\"4.1.0\" targetFramework=\"net461\" />\n  <package id=\"Castle.Windsor\" version=\"4.1.0\" targetFramework=\"net461\" />\n  <package id=\"JetBrains.Annotations\" version=\"11.1.0\" targetFramework=\"net461\" />\n  <package id=\"Microsoft.Bcl\" version=\"1.1.10\" targetFramework=\"net461\" />\n  <package id=\"Microsoft.Bcl.Async\" version=\"1.0.168\" targetFramework=\"net461\" />\n  <package id=\"Microsoft.Bcl.Build\" version=\"1.0.21\" targetFramework=\"net461\" />\n  <package id=\"Microsoft.Extensions.Caching.Abstractions\" version=\"2.1.0\" targetFramework=\"net461\" />\n  <package id=\"Microsoft.Extensions.Caching.Memory\" version=\"2.1.0\" targetFramework=\"net461\" />\n  <package id=\"Microsoft.Extensions.DependencyInjection.Abstractions\" version=\"2.1.0\" targetFramework=\"net461\" />\n  <package id=\"Microsoft.Extensions.Options\" version=\"2.1.0\" targetFramework=\"net461\" />\n  <package id=\"Microsoft.Extensions.Primitives\" version=\"2.1.0\" targetFramework=\"net461\" />\n  <package id=\"Newtonsoft.Json\" version=\"11.0.2\" targetFramework=\"net461\" />\n  <package id=\"Nito.AsyncEx\" version=\"4.0.1\" targetFramework=\"net461\" />\n  <package id=\"Nito.AsyncEx.Context\" version=\"1.1.0\" targetFramework=\"net461\" />\n  <package id=\"Nito.AsyncEx.Coordination\" version=\"1.0.2\" targetFramework=\"net461\" />\n  <package id=\"Nito.AsyncEx.Tasks\" version=\"1.1.0\" targetFramework=\"net461\" />\n  <package id=\"Nito.Collections.Deque\" version=\"1.0.4\" targetFramework=\"net461\" />\n  <package id=\"Nito.Disposables\" version=\"1.2.3\" targetFramework=\"net461\" />\n  <package id=\"System.Buffers\" version=\"4.4.0\" targetFramework=\"net461\" />\n  <package id=\"System.Collections.Immutable\" version=\"1.5.0\" targetFramework=\"net461\" />\n  <package id=\"System.ComponentModel.Annotations\" version=\"4.5.0\" targetFramework=\"net461\" />\n  <package id=\"System.Configuration.ConfigurationManager\" version=\"4.5.0\" targetFramework=\"net461\" />\n  <package id=\"System.Data.Common\" version=\"4.3.0\" targetFramework=\"net461\" />\n  <package id=\"System.Linq.Dynamic\" version=\"1.0.7\" targetFramework=\"net461\" />\n  <package id=\"System.Linq.Dynamic.Core\" version=\"1.0.8.9\" targetFramework=\"net461\" />\n  <package id=\"System.Linq.Queryable\" version=\"4.3.0\" targetFramework=\"net461\" />\n  <package id=\"System.Memory\" version=\"4.5.0\" targetFramework=\"net461\" />\n  <package id=\"System.Numerics.Vectors\" version=\"4.4.0\" targetFramework=\"net461\" />\n  <package id=\"System.Runtime.CompilerServices.Unsafe\" version=\"4.5.0\" targetFramework=\"net461\" />\n  <package id=\"System.Runtime.InteropServices.RuntimeInformation\" version=\"4.3.0\" targetFramework=\"net461\" />\n  <package id=\"System.Runtime.Serialization.Formatters\" version=\"4.3.0\" targetFramework=\"net461\" />\n  <package id=\"System.Runtime.Serialization.Primitives\" version=\"4.3.0\" targetFramework=\"net461\" />\n  <package id=\"System.Security.AccessControl\" version=\"4.5.0\" targetFramework=\"net461\" />\n  <package id=\"System.Security.Claims\" version=\"4.3.0\" targetFramework=\"net461\" />\n  <package id=\"System.Security.Permissions\" version=\"4.5.0\" targetFramework=\"net461\" />\n  <package id=\"System.Security.Principal.Windows\" version=\"4.5.0\" targetFramework=\"net461\" />\n  <package id=\"System.Threading\" version=\"4.3.0\" targetFramework=\"net461\" />\n  <package id=\"System.Xml.XmlDocument\" version=\"4.3.0\" targetFramework=\"net461\" />\n  <package id=\"System.Xml.XPath\" version=\"4.3.0\" targetFramework=\"net461\" />\n  <package id=\"System.Xml.XPath.XmlDocument\" version=\"4.3.0\" targetFramework=\"net461\" />\n  <package id=\"TimeZoneConverter\" version=\"2.4.1\" targetFramework=\"net461\" />\n</packages>"
  },
  {
    "path": "src2/Abplus.Common/Abplus.Common.csproj",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<Project ToolsVersion=\"14.0\" DefaultTargets=\"Build\" xmlns=\"http://schemas.microsoft.com/developer/msbuild/2003\">\n  <Import Project=\"$(MSBuildExtensionsPath)\\$(MSBuildToolsVersion)\\Microsoft.Common.props\" Condition=\"Exists('$(MSBuildExtensionsPath)\\$(MSBuildToolsVersion)\\Microsoft.Common.props')\" />\n  <PropertyGroup>\n    <Configuration Condition=\" '$(Configuration)' == '' \">Debug</Configuration>\n    <Platform Condition=\" '$(Platform)' == '' \">AnyCPU</Platform>\n    <ProjectGuid>{2C69763F-3880-4D4D-8E14-A0D3A2B2B4F8}</ProjectGuid>\n    <OutputType>Library</OutputType>\n    <AppDesignerFolder>Properties</AppDesignerFolder>\n    <RootNamespace>Abplus</RootNamespace>\n    <AssemblyName>Abplus.Common</AssemblyName>\n    <TargetFrameworkVersion>v4.6.1</TargetFrameworkVersion>\n    <FileAlignment>512</FileAlignment>\n    <NuGetPackageImportStamp>\n    </NuGetPackageImportStamp>\n  </PropertyGroup>\n  <PropertyGroup Condition=\" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' \">\n    <DebugSymbols>true</DebugSymbols>\n    <DebugType>full</DebugType>\n    <Optimize>false</Optimize>\n    <OutputPath>bin\\Debug\\</OutputPath>\n    <DefineConstants>DEBUG;TRACE</DefineConstants>\n    <ErrorReport>prompt</ErrorReport>\n    <WarningLevel>4</WarningLevel>\n  </PropertyGroup>\n  <PropertyGroup Condition=\" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' \">\n    <DebugType>pdbonly</DebugType>\n    <Optimize>true</Optimize>\n    <OutputPath>bin\\Release\\</OutputPath>\n    <DefineConstants>TRACE</DefineConstants>\n    <ErrorReport>prompt</ErrorReport>\n    <WarningLevel>4</WarningLevel>\n    <DocumentationFile>bin\\Release\\Abplus.Common.XML</DocumentationFile>\n  </PropertyGroup>\n  <ItemGroup>\n    <Reference Include=\"Abp, Version=3.7.2.0, Culture=neutral, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\packages\\Abp.3.7.2\\lib\\netstandard2.0\\Abp.dll</HintPath>\n    </Reference>\n    <Reference Include=\"AutoMapper, Version=6.2.2.0, Culture=neutral, PublicKeyToken=be96cd2c38ef1005, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\packages\\AutoMapper.6.2.2\\lib\\net45\\AutoMapper.dll</HintPath>\n    </Reference>\n    <Reference Include=\"Castle.Core, Version=4.0.0.0, Culture=neutral, PublicKeyToken=407dd0808d44fbdc, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\packages\\Castle.Core.4.3.1\\lib\\net45\\Castle.Core.dll</HintPath>\n    </Reference>\n    <Reference Include=\"Castle.Facilities.Logging, Version=4.0.0.0, Culture=neutral, PublicKeyToken=407dd0808d44fbdc, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\packages\\Castle.LoggingFacility.4.1.0\\lib\\net45\\Castle.Facilities.Logging.dll</HintPath>\n    </Reference>\n    <Reference Include=\"Castle.Windsor, Version=4.0.0.0, Culture=neutral, PublicKeyToken=407dd0808d44fbdc, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\packages\\Castle.Windsor.4.1.0\\lib\\net45\\Castle.Windsor.dll</HintPath>\n    </Reference>\n    <Reference Include=\"EntityFramework, Version=6.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\packages\\EntityFramework.6.2.0\\lib\\net45\\EntityFramework.dll</HintPath>\n    </Reference>\n    <Reference Include=\"EntityFramework.SqlServer, Version=6.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\packages\\EntityFramework.6.2.0\\lib\\net45\\EntityFramework.SqlServer.dll</HintPath>\n    </Reference>\n    <Reference Include=\"JetBrains.Annotations, Version=11.1.0.0, Culture=neutral, PublicKeyToken=1010a0d8d6380325, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\packages\\JetBrains.Annotations.11.1.0\\lib\\net20\\JetBrains.Annotations.dll</HintPath>\n    </Reference>\n    <Reference Include=\"Microsoft.Extensions.Caching.Abstractions, Version=2.1.0.0, Culture=neutral, PublicKeyToken=adb9793829ddae60, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\packages\\Microsoft.Extensions.Caching.Abstractions.2.1.0\\lib\\netstandard2.0\\Microsoft.Extensions.Caching.Abstractions.dll</HintPath>\n    </Reference>\n    <Reference Include=\"Microsoft.Extensions.Caching.Memory, Version=2.1.0.0, Culture=neutral, PublicKeyToken=adb9793829ddae60, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\packages\\Microsoft.Extensions.Caching.Memory.2.1.0\\lib\\netstandard2.0\\Microsoft.Extensions.Caching.Memory.dll</HintPath>\n    </Reference>\n    <Reference Include=\"Microsoft.Extensions.DependencyInjection.Abstractions, Version=2.1.0.0, Culture=neutral, PublicKeyToken=adb9793829ddae60, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\packages\\Microsoft.Extensions.DependencyInjection.Abstractions.2.1.0\\lib\\netstandard2.0\\Microsoft.Extensions.DependencyInjection.Abstractions.dll</HintPath>\n    </Reference>\n    <Reference Include=\"Microsoft.Extensions.Options, Version=2.1.0.0, Culture=neutral, PublicKeyToken=adb9793829ddae60, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\packages\\Microsoft.Extensions.Options.2.1.0\\lib\\netstandard2.0\\Microsoft.Extensions.Options.dll</HintPath>\n    </Reference>\n    <Reference Include=\"Microsoft.Extensions.Primitives, Version=2.1.0.0, Culture=neutral, PublicKeyToken=adb9793829ddae60, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\packages\\Microsoft.Extensions.Primitives.2.1.0\\lib\\netstandard2.0\\Microsoft.Extensions.Primitives.dll</HintPath>\n    </Reference>\n    <Reference Include=\"Microsoft.Threading.Tasks, Version=1.0.12.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\packages\\Microsoft.Bcl.Async.1.0.168\\lib\\net40\\Microsoft.Threading.Tasks.dll</HintPath>\n      <Private>True</Private>\n    </Reference>\n    <Reference Include=\"Microsoft.Threading.Tasks.Extensions, Version=1.0.12.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\packages\\Microsoft.Bcl.Async.1.0.168\\lib\\net40\\Microsoft.Threading.Tasks.Extensions.dll</HintPath>\n      <Private>True</Private>\n    </Reference>\n    <Reference Include=\"Microsoft.Threading.Tasks.Extensions.Desktop, Version=1.0.168.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\packages\\Microsoft.Bcl.Async.1.0.168\\lib\\net40\\Microsoft.Threading.Tasks.Extensions.Desktop.dll</HintPath>\n      <Private>True</Private>\n    </Reference>\n    <Reference Include=\"Newtonsoft.Json, Version=11.0.0.0, Culture=neutral, PublicKeyToken=30ad4fe6b2a6aeed, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\packages\\Newtonsoft.Json.11.0.2\\lib\\net45\\Newtonsoft.Json.dll</HintPath>\n    </Reference>\n    <Reference Include=\"Nito.AsyncEx, Version=4.0.1.0, Culture=neutral, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\packages\\Nito.AsyncEx.4.0.1\\lib\\net45\\Nito.AsyncEx.dll</HintPath>\n      <Private>True</Private>\n    </Reference>\n    <Reference Include=\"Nito.AsyncEx.Concurrent, Version=4.0.1.0, Culture=neutral, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\packages\\Nito.AsyncEx.4.0.1\\lib\\net45\\Nito.AsyncEx.Concurrent.dll</HintPath>\n      <Private>True</Private>\n    </Reference>\n    <Reference Include=\"Nito.AsyncEx.Context, Version=1.1.0.0, Culture=neutral, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\packages\\Nito.AsyncEx.Context.1.1.0\\lib\\net46\\Nito.AsyncEx.Context.dll</HintPath>\n    </Reference>\n    <Reference Include=\"Nito.AsyncEx.Coordination, Version=1.0.2.0, Culture=neutral, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\packages\\Nito.AsyncEx.Coordination.1.0.2\\lib\\net46\\Nito.AsyncEx.Coordination.dll</HintPath>\n    </Reference>\n    <Reference Include=\"Nito.AsyncEx.Enlightenment, Version=4.0.1.0, Culture=neutral, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\packages\\Nito.AsyncEx.4.0.1\\lib\\net45\\Nito.AsyncEx.Enlightenment.dll</HintPath>\n      <Private>True</Private>\n    </Reference>\n    <Reference Include=\"Nito.AsyncEx.Tasks, Version=1.1.0.0, Culture=neutral, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\packages\\Nito.AsyncEx.Tasks.1.1.0\\lib\\net46\\Nito.AsyncEx.Tasks.dll</HintPath>\n    </Reference>\n    <Reference Include=\"Nito.Collections.Deque, Version=1.0.4.0, Culture=neutral, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\packages\\Nito.Collections.Deque.1.0.4\\lib\\netstandard2.0\\Nito.Collections.Deque.dll</HintPath>\n    </Reference>\n    <Reference Include=\"Nito.Disposables, Version=1.2.3.0, Culture=neutral, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\packages\\Nito.Disposables.1.2.3\\lib\\netstandard2.0\\Nito.Disposables.dll</HintPath>\n    </Reference>\n    <Reference Include=\"System\" />\n    <Reference Include=\"System.Buffers, Version=4.0.2.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\packages\\System.Buffers.4.4.0\\lib\\netstandard2.0\\System.Buffers.dll</HintPath>\n    </Reference>\n    <Reference Include=\"System.Collections.Immutable, Version=1.2.3.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\packages\\System.Collections.Immutable.1.5.0\\lib\\netstandard2.0\\System.Collections.Immutable.dll</HintPath>\n    </Reference>\n    <Reference Include=\"System.ComponentModel.Annotations, Version=4.2.1.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\packages\\System.ComponentModel.Annotations.4.5.0\\lib\\net461\\System.ComponentModel.Annotations.dll</HintPath>\n    </Reference>\n    <Reference Include=\"System.ComponentModel.DataAnnotations\" />\n    <Reference Include=\"System.Configuration\" />\n    <Reference Include=\"System.Configuration.ConfigurationManager, Version=4.0.1.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\packages\\System.Configuration.ConfigurationManager.4.5.0\\lib\\net461\\System.Configuration.ConfigurationManager.dll</HintPath>\n    </Reference>\n    <Reference Include=\"System.Core\" />\n    <Reference Include=\"System.Data.Common, Version=4.1.1.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\packages\\System.Data.Common.4.3.0\\lib\\net451\\System.Data.Common.dll</HintPath>\n      <Private>True</Private>\n    </Reference>\n    <Reference Include=\"System.Data.OracleClient\" />\n    <Reference Include=\"System.Drawing\" />\n    <Reference Include=\"System.Linq.Dynamic, Version=1.0.6132.35681, Culture=neutral, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\packages\\System.Linq.Dynamic.1.0.7\\lib\\net40\\System.Linq.Dynamic.dll</HintPath>\n      <Private>True</Private>\n    </Reference>\n    <Reference Include=\"System.Linq.Dynamic.Core, Version=0.0.0.0, Culture=neutral, PublicKeyToken=0f07ec44de6ac832, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\packages\\System.Linq.Dynamic.Core.1.0.8.9\\lib\\net46\\System.Linq.Dynamic.Core.dll</HintPath>\n    </Reference>\n    <Reference Include=\"System.Memory, Version=4.0.1.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\packages\\System.Memory.4.5.0\\lib\\netstandard2.0\\System.Memory.dll</HintPath>\n    </Reference>\n    <Reference Include=\"System.Net\" />\n    <Reference Include=\"System.Numerics\" />\n    <Reference Include=\"System.Numerics.Vectors, Version=4.1.3.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\packages\\System.Numerics.Vectors.4.4.0\\lib\\net46\\System.Numerics.Vectors.dll</HintPath>\n    </Reference>\n    <Reference Include=\"System.Runtime.Caching\" />\n    <Reference Include=\"System.Runtime.CompilerServices.Unsafe, Version=4.0.4.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\packages\\System.Runtime.CompilerServices.Unsafe.4.5.0\\lib\\netstandard2.0\\System.Runtime.CompilerServices.Unsafe.dll</HintPath>\n    </Reference>\n    <Reference Include=\"System.Runtime.InteropServices.RuntimeInformation, Version=4.0.1.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\packages\\System.Runtime.InteropServices.RuntimeInformation.4.3.0\\lib\\net45\\System.Runtime.InteropServices.RuntimeInformation.dll</HintPath>\n      <Private>True</Private>\n    </Reference>\n    <Reference Include=\"System.Runtime.Remoting\" />\n    <Reference Include=\"System.Runtime.Serialization\" />\n    <Reference Include=\"System.Runtime.Serialization.Formatters, Version=4.0.1.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\packages\\System.Runtime.Serialization.Formatters.4.3.0\\lib\\net46\\System.Runtime.Serialization.Formatters.dll</HintPath>\n      <Private>True</Private>\n    </Reference>\n    <Reference Include=\"System.Runtime.Serialization.Primitives, Version=4.1.2.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\packages\\System.Runtime.Serialization.Primitives.4.3.0\\lib\\net46\\System.Runtime.Serialization.Primitives.dll</HintPath>\n      <Private>True</Private>\n    </Reference>\n    <Reference Include=\"System.Security.AccessControl, Version=4.1.1.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\packages\\System.Security.AccessControl.4.5.0\\lib\\net461\\System.Security.AccessControl.dll</HintPath>\n    </Reference>\n    <Reference Include=\"System.Security.Claims, Version=4.0.2.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\packages\\System.Security.Claims.4.3.0\\lib\\net46\\System.Security.Claims.dll</HintPath>\n      <Private>True</Private>\n    </Reference>\n    <Reference Include=\"System.Security.Permissions, Version=4.0.1.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\packages\\System.Security.Permissions.4.5.0\\lib\\net461\\System.Security.Permissions.dll</HintPath>\n    </Reference>\n    <Reference Include=\"System.Security.Principal.Windows, Version=4.1.1.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\packages\\System.Security.Principal.Windows.4.5.0\\lib\\net461\\System.Security.Principal.Windows.dll</HintPath>\n    </Reference>\n    <Reference Include=\"System.ServiceProcess\" />\n    <Reference Include=\"System.Transactions\" />\n    <Reference Include=\"System.Web\" />\n    <Reference Include=\"System.Xml.Linq\" />\n    <Reference Include=\"System.Data.DataSetExtensions\" />\n    <Reference Include=\"Microsoft.CSharp\" />\n    <Reference Include=\"System.Data\" />\n    <Reference Include=\"System.Net.Http\" />\n    <Reference Include=\"System.Xml\" />\n    <Reference Include=\"System.Xml.XmlDocument, Version=4.0.2.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\packages\\System.Xml.XmlDocument.4.3.0\\lib\\net46\\System.Xml.XmlDocument.dll</HintPath>\n      <Private>True</Private>\n    </Reference>\n    <Reference Include=\"System.Xml.XPath, Version=4.0.2.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\packages\\System.Xml.XPath.4.3.0\\lib\\net46\\System.Xml.XPath.dll</HintPath>\n      <Private>True</Private>\n    </Reference>\n    <Reference Include=\"System.Xml.XPath.XmlDocument, Version=4.0.2.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\packages\\System.Xml.XPath.XmlDocument.4.3.0\\lib\\net46\\System.Xml.XPath.XmlDocument.dll</HintPath>\n    </Reference>\n    <Reference Include=\"TimeZoneConverter, Version=2.4.1.0, Culture=neutral, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\packages\\TimeZoneConverter.2.4.1\\lib\\net45\\TimeZoneConverter.dll</HintPath>\n    </Reference>\n  </ItemGroup>\n  <ItemGroup>\n    <Compile Include=\"Application\\Services\\Dto\\IPagedQueryInput.cs\" />\n    <Compile Include=\"Application\\Services\\Dto\\PagedQueryInput.cs\" />\n    <Compile Include=\"Linq\\Extensions\\IQueryableExtension.cs\" />\n    <Compile Include=\"Properties\\AssemblyInfo.cs\" />\n  </ItemGroup>\n  <ItemGroup>\n    <None Include=\"Abplus.Common.nuspec\" />\n    <None Include=\"app.config\" />\n    <None Include=\"packages.config\">\n      <SubType>Designer</SubType>\n    </None>\n  </ItemGroup>\n  <Import Project=\"$(MSBuildToolsPath)\\Microsoft.CSharp.targets\" />\n  <Import Project=\"..\\..\\packages\\Microsoft.Bcl.Build.1.0.21\\build\\Microsoft.Bcl.Build.targets\" Condition=\"Exists('..\\..\\packages\\Microsoft.Bcl.Build.1.0.21\\build\\Microsoft.Bcl.Build.targets')\" />\n  <Target Name=\"EnsureNuGetPackageBuildImports\" BeforeTargets=\"PrepareForBuild\">\n    <PropertyGroup>\n      <ErrorText>这台计算机上缺少此项目引用的 NuGet 程序包。使用“NuGet 程序包还原”可下载这些程序包。有关更多信息，请参见 http://go.microsoft.com/fwlink/?LinkID=322105。缺少的文件是 {0}。</ErrorText>\n    </PropertyGroup>\n    <Error Condition=\"!Exists('..\\..\\packages\\Microsoft.Bcl.Build.1.0.21\\build\\Microsoft.Bcl.Build.targets')\" Text=\"$([System.String]::Format('$(ErrorText)', '..\\..\\packages\\Microsoft.Bcl.Build.1.0.21\\build\\Microsoft.Bcl.Build.targets'))\" />\n  </Target>\n  <!-- To modify your build process, add your task inside one of the targets below and uncomment it. \n       Other similar extension points exist, see Microsoft.Common.targets.\n  <Target Name=\"BeforeBuild\">\n  </Target>\n  <Target Name=\"AfterBuild\">\n  </Target>\n  -->\n</Project>"
  },
  {
    "path": "src2/Abplus.Common/Abplus.Common.nuspec",
    "content": "<?xml version=\"1.0\"?>\n<package >\n  <metadata>\n    <id>$id$</id>\n    <version>$version$</version>\n    <title>$title$</title>\n    <authors>mienreal</authors>\n    <owners>mienreal</owners>\n    <licenseUrl>https://raw.githubusercontent.com/personball/abplus/master/LICENSE</licenseUrl>\n    <projectUrl>https://github.com/personball/abplus</projectUrl>\n    <iconUrl>https://raw.githubusercontent.com/personball/abplus/master/abplus_icon.png</iconUrl>\n    <requireLicenseAcceptance>false</requireLicenseAcceptance>\n    <description>Abp plus, an extension for Abp Framework. </description>\n    <releaseNotes>upgrade version of automapper,abp etc.</releaseNotes>\n    <copyright>Copyright 2017</copyright>\n    <tags></tags>\n  </metadata>\n</package>"
  },
  {
    "path": "src2/Abplus.Common/Application/Services/Dto/IPagedQueryInput.cs",
    "content": "﻿namespace Abp.Application.Services.Dto\n{\n    public interface IPagedQueryInput : IPagedResultRequest, ISortedResultRequest\n    {\n    }\n}\n"
  },
  {
    "path": "src2/Abplus.Common/Application/Services/Dto/PagedQueryInput.cs",
    "content": "﻿namespace Abp.Application.Services.Dto\n{\n    using System;\n    using System.ComponentModel.DataAnnotations;\n\n    public class PagedQueryInput : IPagedQueryInput\n    {\n        const int MaxPageSize = 500;\n        const int DefaultPageSize = 10;\n\n        [Range(1, MaxPageSize)]\n        public virtual int MaxResultCount { get; set; }\n\n        [Range(0, int.MaxValue)]\n        public virtual int SkipCount { get; set; }\n\n        public virtual string Sorting { get; set; }\n\n        public virtual string Filter { get; set; }\n\n        public PagedQueryInput()\n        {\n            MaxResultCount = DefaultPageSize;\n        }\n\n    }\n}\n"
  },
  {
    "path": "src2/Abplus.Common/Linq/Extensions/IQueryableExtension.cs",
    "content": "﻿using AutoMapper.QueryableExtensions;\nnamespace Abp.Linq.Extensions\n{\n    using System;\n    using System.Collections.Generic;\n    using System.Collections.Immutable;\n    using System.Data.Entity;\n    using System.Linq;\n    using System.Linq.Dynamic;\n    using System.Threading.Tasks;\n    using Abp.Application.Services.Dto;\n    using Abp.Linq.Extensions;\n    using Abp.Threading;\n    using Domain.Entities;\n    using System.Linq.Expressions;\n    using Abp.Extensions;\n\n    public static class IQueryableExtension\n    {\n        /// <summary>\n        /// 应用requestInput指定的排序参数\n        /// </summary>\n        public static IQueryable<T> ApplySorting<T>(this IQueryable<T> query, ISortedResultRequest requestInput = null) where T : class\n        {\n            if (requestInput != null && !requestInput.Sorting.IsNullOrWhiteSpace())  //有排序参数\n            {\n                return query.OrderBy(requestInput.Sorting);\n            }\n            return query;\n        }\n\n        /// <summary>\n        /// 应用requestInput指定的分页参数\n        /// </summary>\n        public static IQueryable<T> ApplyPaging<T>(this IQueryable<T> query, IPagedResultRequest requestInput = null) where T : class\n        {\n            if (requestInput != null)\n            {\n                return query.PageBy(requestInput);\n            }\n            return query;\n        }\n\n        /// <summary>\n        /// 根据requestInput进行排序、分页。\n        /// </summary>\n        public static IQueryable<T> ApplySortingAndPaging<T>(this IQueryable<T> query, IPagedQueryInput requestInput = null) where T : class\n        {\n            query = query.ApplySorting(requestInput);\n            query = query.ApplyPaging(requestInput);\n\n            return query;\n        }\n\n        /// <summary>\n        /// 转换为指定Dto类型的IQueryable\n        /// </summary>\n        public static IQueryable<TDto> ProjectTo<TSource, TDto>(this IQueryable<TSource> query, params Expression<Func<TDto, object>>[] membersToExpand)\n        {\n            return query.ProjectTo<TDto>(membersToExpand);\n        }\n\n        /// <summary>\n        /// 只查Dto类型指定字段的列表数据\n        /// </summary>\n        /// <typeparam name=\"TSource\">实体类型</typeparam>\n        /// <typeparam name=\"TDto\">列表Dto类型</typeparam>\n        /// <param name=\"query\"></param>\n        /// <param name=\"requestInput\">查询参数（指定排序列）</param>\n        /// <returns>查询出Dto类型指定字段的列表数据</returns>\n        public static async Task<ListResultDto<TDto>> ToListResultAsync<TSource, TDto>(this IQueryable<TSource> query, ISortedResultRequest requestInput = null)\n            where TSource : class\n            where TDto : class\n        {\n            query = query.ApplySorting(requestInput);\n\n            var result = new ListResultDto<TDto>()\n            {\n                Items = await query.ProjectTo<TDto>().ToListAsync()\n            };\n\n            return result;\n        }\n\n        /// <summary>\n        /// 只查Dto类型指定字段的列表数据\n        /// </summary>\n        /// <typeparam name=\"TSource\">实体类型</typeparam>\n        /// <typeparam name=\"TDto\">列表Dto类型</typeparam>\n        /// <param name=\"query\"></param>\n        /// <param name=\"requestInput\">查询参数（指定排序列）</param>\n        /// <returns>查询出Dto类型指定字段的列表数据</returns>\n        public static ListResultDto<TDto> ToListResult<TSource, TDto>(this IQueryable<TSource> query, ISortedResultRequest requestInput = null)\n            where TSource : class\n            where TDto : class\n        {\n            return AsyncHelper.RunSync(() => query.ToListResultAsync<TSource, TDto>(requestInput));\n        }\n\n        /// <summary>\n        /// 根据requestInput进行排序、分页后，转换为分页查询结果\n        /// </summary>\n        /// <typeparam name=\"TSource\">原Entity类型</typeparam>\n        /// <typeparam name=\"TDto\">目标Dto类型</typeparam>\n        /// <param name=\"query\"></param>\n        /// <param name=\"requestInput\">查询参数</param>\n        /// <returns></returns>\n        public static async Task<PagedResultDto<TDto>> ToPagedResultAsync<TSource, TDto>(this IQueryable<TSource> query, IPagedQueryInput requestInput = null)\n            where TSource : class\n            where TDto : class\n        {\n            var pagedQuery = query.ApplySortingAndPaging(requestInput);\n            var result = new PagedResultDto<TDto>()\n            {\n                Items = await pagedQuery.ProjectTo<TDto>().ToListAsync()\n            };\n\n            //没有分页参数，或者第1页的结果不足一整页时，不需要统计总记录数\n            if (requestInput == null || (requestInput.SkipCount == 0 && result.Items.Count < requestInput.MaxResultCount))\n            {\n                result.TotalCount = result.Items.Count;\n            }\n            else\n            {\n                result.TotalCount = await query.CountAsync();\n            }\n            return result;\n        }\n\n        /// <summary>\n        /// 根据requestInput进行排序、分页后，转换为分页查询结果\n        /// </summary>\n        /// <typeparam name=\"TSource\">原Entity类型</typeparam>\n        /// <typeparam name=\"TDto\">目标Dto类型</typeparam>\n        /// <param name=\"query\"></param>\n        /// <param name=\"requestInput\">查询参数</param>\n        /// <returns></returns>\n        public static PagedResultDto<TDto> ToPagedResult<TSource, TDto>(this IQueryable<TSource> query, IPagedQueryInput requestInput = null)\n            where TSource : class\n            where TDto : class\n        {\n            return AsyncHelper.RunSync(() => query.ToPagedResultAsync<TSource, TDto>(requestInput));\n        }\n\n    }\n}\n"
  },
  {
    "path": "src2/Abplus.Common/Properties/AssemblyInfo.cs",
    "content": "﻿using System.Reflection;\nusing System.Runtime.CompilerServices;\nusing System.Runtime.InteropServices;\n\n// 有关程序集的一般信息由以下\n// 控制。更改这些特性值可修改\n// 与程序集关联的信息。\n[assembly: AssemblyTitle(\"Abplus.Common\")]\n[assembly: AssemblyDescription(\"\")]\n[assembly: AssemblyConfiguration(\"\")]\n[assembly: AssemblyCompany(\"\")]\n[assembly: AssemblyProduct(\"Abplus.Common\")]\n[assembly: AssemblyCopyright(\"Copyright ©  2016\")]\n[assembly: AssemblyTrademark(\"\")]\n[assembly: AssemblyCulture(\"\")]\n\n//将 ComVisible 设置为 false 将使此程序集中的类型\n//对 COM 组件不可见。  如果需要从 COM 访问此程序集中的类型，\n//请将此类型的 ComVisible 特性设置为 true。\n[assembly: ComVisible(false)]\n\n// 如果此项目向 COM 公开，则下列 GUID 用于类型库的 ID\n[assembly: Guid(\"2c69763f-3880-4d4d-8e14-a0d3a2b2b4f8\")]\n\n// 程序集的版本信息由下列四个值组成: \n//\n//      主版本\n//      次版本\n//      生成号\n//      修订号\n//\n//可以指定所有这些值，也可以使用“生成号”和“修订号”的默认值，\n// 方法是按如下所示使用“*”: :\n// [assembly: AssemblyVersion(\"1.0.*\")]\n[assembly: AssemblyVersion(\"0.1.2.1\")]\n[assembly: AssemblyFileVersion(\"0.1.2.1\")]\n"
  },
  {
    "path": "src2/Abplus.Common/app.config",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<configuration>\n  <configSections>\n    <!-- For more information on Entity Framework configuration, visit http://go.microsoft.com/fwlink/?LinkID=237468 -->\n    <section name=\"entityFramework\" type=\"System.Data.Entity.Internal.ConfigFile.EntityFrameworkSection, EntityFramework, Version=6.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089\" requirePermission=\"false\" />\n  </configSections>\n  <runtime>\n    <assemblyBinding xmlns=\"urn:schemas-microsoft-com:asm.v1\">\n      <dependentAssembly>\n        <assemblyIdentity name=\"System.Collections.Immutable\" publicKeyToken=\"b03f5f7f11d50a3a\" culture=\"neutral\" />\n        <bindingRedirect oldVersion=\"0.0.0.0-1.2.3.0\" newVersion=\"1.2.3.0\" />\n      </dependentAssembly>\n      <dependentAssembly>\n        <assemblyIdentity name=\"Newtonsoft.Json\" publicKeyToken=\"30ad4fe6b2a6aeed\" culture=\"neutral\" />\n        <bindingRedirect oldVersion=\"0.0.0.0-11.0.0.0\" newVersion=\"11.0.0.0\" />\n      </dependentAssembly>\n      <dependentAssembly>\n        <assemblyIdentity name=\"Microsoft.Extensions.Caching.Abstractions\" publicKeyToken=\"adb9793829ddae60\" culture=\"neutral\" />\n        <bindingRedirect oldVersion=\"0.0.0.0-2.0.1.0\" newVersion=\"2.0.1.0\" />\n      </dependentAssembly>\n      <dependentAssembly>\n        <assemblyIdentity name=\"Microsoft.Extensions.Caching.Memory\" publicKeyToken=\"adb9793829ddae60\" culture=\"neutral\" />\n        <bindingRedirect oldVersion=\"0.0.0.0-2.0.1.0\" newVersion=\"2.0.1.0\" />\n      </dependentAssembly>\n      <dependentAssembly>\n        <assemblyIdentity name=\"Microsoft.Extensions.Options\" publicKeyToken=\"adb9793829ddae60\" culture=\"neutral\" />\n        <bindingRedirect oldVersion=\"0.0.0.0-2.0.1.0\" newVersion=\"2.0.1.0\" />\n      </dependentAssembly>\n      <dependentAssembly>\n        <assemblyIdentity name=\"System.Runtime.InteropServices.RuntimeInformation\" publicKeyToken=\"b03f5f7f11d50a3a\" culture=\"neutral\" />\n        <bindingRedirect oldVersion=\"0.0.0.0-4.0.2.0\" newVersion=\"4.0.2.0\" />\n      </dependentAssembly>\n      <dependentAssembly>\n        <assemblyIdentity name=\"System.ComponentModel.Annotations\" publicKeyToken=\"b03f5f7f11d50a3a\" culture=\"neutral\" />\n        <bindingRedirect oldVersion=\"0.0.0.0-4.2.1.0\" newVersion=\"4.2.1.0\" />\n      </dependentAssembly>\n    </assemblyBinding>\n  </runtime>\n  <entityFramework>\n    <defaultConnectionFactory type=\"System.Data.Entity.Infrastructure.LocalDbConnectionFactory, EntityFramework\">\n      <parameters>\n        <parameter value=\"mssqllocaldb\" />\n      </parameters>\n    </defaultConnectionFactory>\n    <providers>\n      <provider invariantName=\"System.Data.SqlClient\" type=\"System.Data.Entity.SqlServer.SqlProviderServices, EntityFramework.SqlServer\" />\n    </providers>\n  </entityFramework>\n</configuration>"
  },
  {
    "path": "src2/Abplus.Common/packages.config",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<packages>\n  <package id=\"Abp\" version=\"3.7.2\" targetFramework=\"net461\" />\n  <package id=\"AutoMapper\" version=\"6.2.2\" targetFramework=\"net461\" />\n  <package id=\"Castle.Core\" version=\"4.3.1\" targetFramework=\"net461\" />\n  <package id=\"Castle.LoggingFacility\" version=\"4.1.0\" targetFramework=\"net461\" />\n  <package id=\"Castle.Windsor\" version=\"4.1.0\" targetFramework=\"net461\" />\n  <package id=\"EntityFramework\" version=\"6.2.0\" targetFramework=\"net461\" />\n  <package id=\"JetBrains.Annotations\" version=\"11.1.0\" targetFramework=\"net461\" />\n  <package id=\"Microsoft.Bcl\" version=\"1.1.10\" targetFramework=\"net461\" />\n  <package id=\"Microsoft.Bcl.Async\" version=\"1.0.168\" targetFramework=\"net461\" />\n  <package id=\"Microsoft.Bcl.Build\" version=\"1.0.21\" targetFramework=\"net461\" />\n  <package id=\"Microsoft.Extensions.Caching.Abstractions\" version=\"2.1.0\" targetFramework=\"net461\" />\n  <package id=\"Microsoft.Extensions.Caching.Memory\" version=\"2.1.0\" targetFramework=\"net461\" />\n  <package id=\"Microsoft.Extensions.DependencyInjection.Abstractions\" version=\"2.1.0\" targetFramework=\"net461\" />\n  <package id=\"Microsoft.Extensions.Options\" version=\"2.1.0\" targetFramework=\"net461\" />\n  <package id=\"Microsoft.Extensions.Primitives\" version=\"2.1.0\" targetFramework=\"net461\" />\n  <package id=\"Newtonsoft.Json\" version=\"11.0.2\" targetFramework=\"net461\" />\n  <package id=\"Nito.AsyncEx\" version=\"4.0.1\" targetFramework=\"net461\" />\n  <package id=\"Nito.AsyncEx.Context\" version=\"1.1.0\" targetFramework=\"net461\" />\n  <package id=\"Nito.AsyncEx.Coordination\" version=\"1.0.2\" targetFramework=\"net461\" />\n  <package id=\"Nito.AsyncEx.Tasks\" version=\"1.1.0\" targetFramework=\"net461\" />\n  <package id=\"Nito.Collections.Deque\" version=\"1.0.4\" targetFramework=\"net461\" />\n  <package id=\"Nito.Disposables\" version=\"1.2.3\" targetFramework=\"net461\" />\n  <package id=\"System.Buffers\" version=\"4.4.0\" targetFramework=\"net461\" />\n  <package id=\"System.Collections.Immutable\" version=\"1.5.0\" targetFramework=\"net461\" />\n  <package id=\"System.ComponentModel.Annotations\" version=\"4.5.0\" targetFramework=\"net461\" />\n  <package id=\"System.Configuration.ConfigurationManager\" version=\"4.5.0\" targetFramework=\"net461\" />\n  <package id=\"System.Data.Common\" version=\"4.3.0\" targetFramework=\"net461\" />\n  <package id=\"System.Linq.Dynamic\" version=\"1.0.7\" targetFramework=\"net461\" />\n  <package id=\"System.Linq.Dynamic.Core\" version=\"1.0.8.9\" targetFramework=\"net461\" />\n  <package id=\"System.Linq.Queryable\" version=\"4.3.0\" targetFramework=\"net461\" />\n  <package id=\"System.Memory\" version=\"4.5.0\" targetFramework=\"net461\" />\n  <package id=\"System.Numerics.Vectors\" version=\"4.4.0\" targetFramework=\"net461\" />\n  <package id=\"System.Runtime.CompilerServices.Unsafe\" version=\"4.5.0\" targetFramework=\"net461\" />\n  <package id=\"System.Runtime.InteropServices.RuntimeInformation\" version=\"4.3.0\" targetFramework=\"net461\" />\n  <package id=\"System.Runtime.Serialization.Formatters\" version=\"4.3.0\" targetFramework=\"net461\" />\n  <package id=\"System.Runtime.Serialization.Primitives\" version=\"4.3.0\" targetFramework=\"net461\" />\n  <package id=\"System.Security.AccessControl\" version=\"4.5.0\" targetFramework=\"net461\" />\n  <package id=\"System.Security.Claims\" version=\"4.3.0\" targetFramework=\"net461\" />\n  <package id=\"System.Security.Permissions\" version=\"4.5.0\" targetFramework=\"net461\" />\n  <package id=\"System.Security.Principal.Windows\" version=\"4.5.0\" targetFramework=\"net461\" />\n  <package id=\"System.Threading\" version=\"4.3.0\" targetFramework=\"net461\" />\n  <package id=\"System.Xml.XmlDocument\" version=\"4.3.0\" targetFramework=\"net461\" />\n  <package id=\"System.Xml.XPath\" version=\"4.3.0\" targetFramework=\"net461\" />\n  <package id=\"System.Xml.XPath.XmlDocument\" version=\"4.3.0\" targetFramework=\"net461\" />\n  <package id=\"TimeZoneConverter\" version=\"2.4.1\" targetFramework=\"net461\" />\n</packages>"
  },
  {
    "path": "src2/Abplus.EntityFramework/Abplus.EntityFramework.csproj",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<Project ToolsVersion=\"14.0\" DefaultTargets=\"Build\" xmlns=\"http://schemas.microsoft.com/developer/msbuild/2003\">\n  <Import Project=\"$(MSBuildExtensionsPath)\\$(MSBuildToolsVersion)\\Microsoft.Common.props\" Condition=\"Exists('$(MSBuildExtensionsPath)\\$(MSBuildToolsVersion)\\Microsoft.Common.props')\" />\n  <PropertyGroup>\n    <Configuration Condition=\" '$(Configuration)' == '' \">Debug</Configuration>\n    <Platform Condition=\" '$(Platform)' == '' \">AnyCPU</Platform>\n    <ProjectGuid>{4BEE8A8E-59D8-4DD4-BE1C-0DE31A348515}</ProjectGuid>\n    <OutputType>Library</OutputType>\n    <AppDesignerFolder>Properties</AppDesignerFolder>\n    <RootNamespace>Abp</RootNamespace>\n    <AssemblyName>Abplus.EntityFramework</AssemblyName>\n    <TargetFrameworkVersion>v4.6.1</TargetFrameworkVersion>\n    <FileAlignment>512</FileAlignment>\n  </PropertyGroup>\n  <PropertyGroup Condition=\" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' \">\n    <DebugSymbols>true</DebugSymbols>\n    <DebugType>full</DebugType>\n    <Optimize>false</Optimize>\n    <OutputPath>bin\\Debug\\</OutputPath>\n    <DefineConstants>DEBUG;TRACE</DefineConstants>\n    <ErrorReport>prompt</ErrorReport>\n    <WarningLevel>4</WarningLevel>\n  </PropertyGroup>\n  <PropertyGroup Condition=\" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' \">\n    <DebugType>pdbonly</DebugType>\n    <Optimize>true</Optimize>\n    <OutputPath>bin\\Release\\</OutputPath>\n    <DefineConstants>TRACE</DefineConstants>\n    <ErrorReport>prompt</ErrorReport>\n    <WarningLevel>4</WarningLevel>\n  </PropertyGroup>\n  <ItemGroup>\n    <Reference Include=\"EntityFramework, Version=6.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\packages\\EntityFramework.6.2.0\\lib\\net45\\EntityFramework.dll</HintPath>\n    </Reference>\n    <Reference Include=\"EntityFramework.SqlServer, Version=6.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\packages\\EntityFramework.6.2.0\\lib\\net45\\EntityFramework.SqlServer.dll</HintPath>\n    </Reference>\n    <Reference Include=\"System\" />\n    <Reference Include=\"System.ComponentModel.DataAnnotations\" />\n    <Reference Include=\"System.Core\" />\n    <Reference Include=\"System.Xml.Linq\" />\n    <Reference Include=\"System.Data.DataSetExtensions\" />\n    <Reference Include=\"Microsoft.CSharp\" />\n    <Reference Include=\"System.Data\" />\n    <Reference Include=\"System.Net.Http\" />\n    <Reference Include=\"System.Xml\" />\n  </ItemGroup>\n  <ItemGroup>\n    <Compile Include=\"EntityFramework\\DbContextUtils.cs\" />\n    <Compile Include=\"EntityFramework\\DbModelBuilderExtensions.cs\" />\n    <Compile Include=\"Properties\\AssemblyInfo.cs\" />\n  </ItemGroup>\n  <ItemGroup>\n    <None Include=\"Abplus.EntityFramework.nuspec\" />\n    <None Include=\"App.config\" />\n    <None Include=\"packages.config\" />\n  </ItemGroup>\n  <Import Project=\"$(MSBuildToolsPath)\\Microsoft.CSharp.targets\" />\n  <!-- To modify your build process, add your task inside one of the targets below and uncomment it. \n       Other similar extension points exist, see Microsoft.Common.targets.\n  <Target Name=\"BeforeBuild\">\n  </Target>\n  <Target Name=\"AfterBuild\">\n  </Target>\n  -->\n</Project>"
  },
  {
    "path": "src2/Abplus.EntityFramework/Abplus.EntityFramework.nuspec",
    "content": "<?xml version=\"1.0\"?>\n<package >\n  <metadata>\n    <id>$id$</id>\n    <version>$version$</version>\n    <title>$title$</title>\n    <authors>personball</authors>\n    <owners>personball</owners>\n    <licenseUrl>https://raw.githubusercontent.com/personball/abplus/master/LICENSE</licenseUrl>\n    <projectUrl>https://github.com/personball/abplus</projectUrl>\n    <iconUrl>https://raw.githubusercontent.com/personball/abplus/master/abplus_icon.png</iconUrl>\n    <requireLicenseAcceptance>false</requireLicenseAcceptance>\n    <description>Abp plus, an extension for Abp Framework. </description>\n    <releaseNotes></releaseNotes>\n    <copyright>Copyright 2017</copyright>\n    <tags></tags>\n    <dependencies>\n      <dependency id=\"EntityFramework\" version=\"6.1.3\" />\n    </dependencies>\n  </metadata>\n</package>"
  },
  {
    "path": "src2/Abplus.EntityFramework/App.config",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<configuration>\n  <configSections>\n    \n    <section name=\"entityFramework\" type=\"System.Data.Entity.Internal.ConfigFile.EntityFrameworkSection, EntityFramework, Version=6.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089\" requirePermission=\"false\" />\n  <!-- For more information on Entity Framework configuration, visit http://go.microsoft.com/fwlink/?LinkID=237468 --></configSections>\n  <entityFramework>\n    <defaultConnectionFactory type=\"System.Data.Entity.Infrastructure.LocalDbConnectionFactory, EntityFramework\">\n      <parameters>\n        <parameter value=\"mssqllocaldb\" />\n      </parameters>\n    </defaultConnectionFactory>\n    <providers>\n      <provider invariantName=\"System.Data.SqlClient\" type=\"System.Data.Entity.SqlServer.SqlProviderServices, EntityFramework.SqlServer\" />\n    </providers>\n  </entityFramework>\n</configuration>"
  },
  {
    "path": "src2/Abplus.EntityFramework/EntityFramework/DbContextUtils.cs",
    "content": "﻿using System.Collections.Generic;\nusing System.Data.Entity;\nusing System.Data.Entity.Core.Mapping;\nusing System.Data.Entity.Core.Metadata.Edm;\nusing System.Data.Entity.Infrastructure;\n\nnamespace Abp.EntityFramework\n{\n    public static class DbContextUtils\n    {\n        public static void WarmUp<TContext>() where TContext : DbContext, new()\n        {\n            using (var dbcontext = new TContext())\n            {\n                var objectContext = ((IObjectContextAdapter)dbcontext).ObjectContext;\n                var mappingCollection = (StorageMappingItemCollection)objectContext.MetadataWorkspace.GetItemCollection(DataSpace.CSSpace);\n                mappingCollection.GenerateViews(new List<EdmSchemaError>());\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "src2/Abplus.EntityFramework/EntityFramework/DbModelBuilderExtensions.cs",
    "content": "﻿using System;\nusing System.Data.Entity;\nusing System.Linq;\nusing System.Reflection;\n\nnamespace Abp.EntityFramework\n{\n    public static class DbModelBuilderExtensions\n    {\n        public static void AutoRegisterTypeConfigurations(this DbModelBuilder modelBuilder, Assembly assembly, params Type[] baseTypes)\n        {\n            var typesToRegister = assembly.GetTypes()\n                .Where(type => !string.IsNullOrEmpty(type.Namespace))\n                .Where(type => type.BaseType != null && type.BaseType.IsGenericType && baseTypes.Contains(type.BaseType.GetGenericTypeDefinition()));\n\n            foreach (var type in typesToRegister)\n            {\n                dynamic configurationInstance = Activator.CreateInstance(type);\n                modelBuilder.Configurations.Add(configurationInstance);\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "src2/Abplus.EntityFramework/Properties/AssemblyInfo.cs",
    "content": "﻿using System.Reflection;\nusing System.Runtime.CompilerServices;\nusing System.Runtime.InteropServices;\n\n// 有关程序集的一般信息由以下\n// 控制。更改这些特性值可修改\n// 与程序集关联的信息。\n[assembly: AssemblyTitle(\"Abplus.EntityFramework\")]\n[assembly: AssemblyDescription(\"\")]\n[assembly: AssemblyConfiguration(\"\")]\n[assembly: AssemblyCompany(\"\")]\n[assembly: AssemblyProduct(\"Abplus.EntityFramework\")]\n[assembly: AssemblyCopyright(\"Copyright ©  2017\")]\n[assembly: AssemblyTrademark(\"\")]\n[assembly: AssemblyCulture(\"\")]\n\n//将 ComVisible 设置为 false 将使此程序集中的类型\n//对 COM 组件不可见。  如果需要从 COM 访问此程序集中的类型，\n//请将此类型的 ComVisible 特性设置为 true。\n[assembly: ComVisible(false)]\n\n// 如果此项目向 COM 公开，则下列 GUID 用于类型库的 ID\n[assembly: Guid(\"4bee8a8e-59d8-4dd4-be1c-0de31a348515\")]\n\n// 程序集的版本信息由下列四个值组成: \n//\n//      主版本\n//      次版本\n//      生成号\n//      修订号\n//\n//可以指定所有这些值，也可以使用“生成号”和“修订号”的默认值，\n// 方法是按如下所示使用“*”: :\n// [assembly: AssemblyVersion(\"1.0.*\")]\n[assembly: AssemblyVersion(\"0.1.0.0\")]\n[assembly: AssemblyFileVersion(\"0.1.0.0\")]\n"
  },
  {
    "path": "src2/Abplus.EntityFramework/packages.config",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<packages>\n  <package id=\"EntityFramework\" version=\"6.2.0\" targetFramework=\"net461\" />\n</packages>"
  },
  {
    "path": "src2/Abplus.Events.Producer/Abplus.Events.Producer.csproj",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<Project ToolsVersion=\"14.0\" DefaultTargets=\"Build\" xmlns=\"http://schemas.microsoft.com/developer/msbuild/2003\">\n  <Import Project=\"$(MSBuildExtensionsPath)\\$(MSBuildToolsVersion)\\Microsoft.Common.props\" Condition=\"Exists('$(MSBuildExtensionsPath)\\$(MSBuildToolsVersion)\\Microsoft.Common.props')\" />\n  <PropertyGroup>\n    <Configuration Condition=\" '$(Configuration)' == '' \">Debug</Configuration>\n    <Platform Condition=\" '$(Platform)' == '' \">AnyCPU</Platform>\n    <ProjectGuid>{E9957D88-655D-4411-98C3-C7D6009BA13C}</ProjectGuid>\n    <OutputType>Library</OutputType>\n    <AppDesignerFolder>Properties</AppDesignerFolder>\n    <RootNamespace>Abp</RootNamespace>\n    <AssemblyName>Abplus.Events.Producer</AssemblyName>\n    <TargetFrameworkVersion>v4.6.1</TargetFrameworkVersion>\n    <FileAlignment>512</FileAlignment>\n    <NuGetPackageImportStamp>\n    </NuGetPackageImportStamp>\n  </PropertyGroup>\n  <PropertyGroup Condition=\" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' \">\n    <DebugSymbols>true</DebugSymbols>\n    <DebugType>full</DebugType>\n    <Optimize>false</Optimize>\n    <OutputPath>bin\\Debug\\</OutputPath>\n    <DefineConstants>DEBUG;TRACE</DefineConstants>\n    <ErrorReport>prompt</ErrorReport>\n    <WarningLevel>4</WarningLevel>\n  </PropertyGroup>\n  <PropertyGroup Condition=\" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' \">\n    <DebugType>pdbonly</DebugType>\n    <Optimize>true</Optimize>\n    <OutputPath>bin\\Release\\</OutputPath>\n    <DefineConstants>TRACE</DefineConstants>\n    <ErrorReport>prompt</ErrorReport>\n    <WarningLevel>4</WarningLevel>\n    <DocumentationFile>bin\\Release\\Abplus.Events.Producer.XML</DocumentationFile>\n  </PropertyGroup>\n  <ItemGroup>\n    <Reference Include=\"Abp, Version=1.4.2.0, Culture=neutral, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\packages\\Abp.1.4.2.0\\lib\\net452\\Abp.dll</HintPath>\n      <Private>True</Private>\n    </Reference>\n    <Reference Include=\"Castle.Core, Version=3.3.0.0, Culture=neutral, PublicKeyToken=407dd0808d44fbdc, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\packages\\Castle.Core.3.3.3\\lib\\net45\\Castle.Core.dll</HintPath>\n      <Private>True</Private>\n    </Reference>\n    <Reference Include=\"Castle.Facilities.Logging, Version=3.4.0.0, Culture=neutral, PublicKeyToken=407dd0808d44fbdc, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\packages\\Castle.LoggingFacility.3.4.0\\lib\\net45\\Castle.Facilities.Logging.dll</HintPath>\n      <Private>True</Private>\n    </Reference>\n    <Reference Include=\"Castle.Windsor, Version=3.4.0.0, Culture=neutral, PublicKeyToken=407dd0808d44fbdc, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\packages\\Castle.Windsor.3.4.0\\lib\\net45\\Castle.Windsor.dll</HintPath>\n      <Private>True</Private>\n    </Reference>\n    <Reference Include=\"Microsoft.Threading.Tasks, Version=1.0.12.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\packages\\Microsoft.Bcl.Async.1.0.168\\lib\\net40\\Microsoft.Threading.Tasks.dll</HintPath>\n      <Private>True</Private>\n    </Reference>\n    <Reference Include=\"Microsoft.Threading.Tasks.Extensions, Version=1.0.12.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\packages\\Microsoft.Bcl.Async.1.0.168\\lib\\net40\\Microsoft.Threading.Tasks.Extensions.dll</HintPath>\n      <Private>True</Private>\n    </Reference>\n    <Reference Include=\"Microsoft.Threading.Tasks.Extensions.Desktop, Version=1.0.168.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\packages\\Microsoft.Bcl.Async.1.0.168\\lib\\net40\\Microsoft.Threading.Tasks.Extensions.Desktop.dll</HintPath>\n      <Private>True</Private>\n    </Reference>\n    <Reference Include=\"Newtonsoft.Json, Version=9.0.0.0, Culture=neutral, PublicKeyToken=30ad4fe6b2a6aeed, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\packages\\Newtonsoft.Json.9.0.1\\lib\\net45\\Newtonsoft.Json.dll</HintPath>\n      <Private>True</Private>\n    </Reference>\n    <Reference Include=\"Nito.AsyncEx, Version=4.0.1.0, Culture=neutral, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\packages\\Nito.AsyncEx.4.0.1\\lib\\net45\\Nito.AsyncEx.dll</HintPath>\n      <Private>True</Private>\n    </Reference>\n    <Reference Include=\"Nito.AsyncEx.Concurrent, Version=4.0.1.0, Culture=neutral, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\packages\\Nito.AsyncEx.4.0.1\\lib\\net45\\Nito.AsyncEx.Concurrent.dll</HintPath>\n      <Private>True</Private>\n    </Reference>\n    <Reference Include=\"Nito.AsyncEx.Enlightenment, Version=4.0.1.0, Culture=neutral, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\packages\\Nito.AsyncEx.4.0.1\\lib\\net45\\Nito.AsyncEx.Enlightenment.dll</HintPath>\n      <Private>True</Private>\n    </Reference>\n    <Reference Include=\"System\" />\n    <Reference Include=\"System.Collections.Immutable, Version=1.2.1.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\packages\\System.Collections.Immutable.1.3.1\\lib\\portable-net45+win8+wp8+wpa81\\System.Collections.Immutable.dll</HintPath>\n      <Private>True</Private>\n    </Reference>\n    <Reference Include=\"System.ComponentModel.DataAnnotations\" />\n    <Reference Include=\"System.Configuration\" />\n    <Reference Include=\"System.Core\" />\n    <Reference Include=\"System.Linq.Dynamic, Version=1.0.6132.35681, Culture=neutral, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\packages\\System.Linq.Dynamic.1.0.7\\lib\\net40\\System.Linq.Dynamic.dll</HintPath>\n      <Private>True</Private>\n    </Reference>\n    <Reference Include=\"System.Net\" />\n    <Reference Include=\"System.Runtime.Caching\" />\n    <Reference Include=\"System.Transactions\" />\n    <Reference Include=\"System.Xml.Linq\" />\n    <Reference Include=\"System.Data.DataSetExtensions\" />\n    <Reference Include=\"Microsoft.CSharp\" />\n    <Reference Include=\"System.Data\" />\n    <Reference Include=\"System.Net.Http\" />\n    <Reference Include=\"System.Xml\" />\n  </ItemGroup>\n  <ItemGroup>\n    <Compile Include=\"Events\\Producer\\AbpEventsProducerModule.cs\" />\n    <Compile Include=\"Events\\Producer\\Handler\\PublishAllEventsHandler.cs\" />\n    <Compile Include=\"Events\\Producer\\IProducer.cs\" />\n    <Compile Include=\"Events\\Producer\\NullProducer.cs\" />\n    <Compile Include=\"Properties\\AssemblyInfo.cs\" />\n  </ItemGroup>\n  <ItemGroup>\n    <None Include=\"Abplus.Events.Producer.nuspec\" />\n    <None Include=\"packages.config\" />\n  </ItemGroup>\n  <ItemGroup>\n    <ProjectReference Include=\"..\\Abplus\\Abplus.csproj\">\n      <Project>{1de8d8d1-987d-4a9c-aec5-ff0a9914bbd4}</Project>\n      <Name>Abplus</Name>\n    </ProjectReference>\n  </ItemGroup>\n  <Import Project=\"$(MSBuildToolsPath)\\Microsoft.CSharp.targets\" />\n  <Import Project=\"..\\..\\packages\\Microsoft.Bcl.Build.1.0.21\\build\\Microsoft.Bcl.Build.targets\" Condition=\"Exists('..\\..\\packages\\Microsoft.Bcl.Build.1.0.21\\build\\Microsoft.Bcl.Build.targets')\" />\n  <Target Name=\"EnsureNuGetPackageBuildImports\" BeforeTargets=\"PrepareForBuild\">\n    <PropertyGroup>\n      <ErrorText>这台计算机上缺少此项目引用的 NuGet 程序包。使用“NuGet 程序包还原”可下载这些程序包。有关更多信息，请参见 http://go.microsoft.com/fwlink/?LinkID=322105。缺少的文件是 {0}。</ErrorText>\n    </PropertyGroup>\n    <Error Condition=\"!Exists('..\\..\\packages\\Microsoft.Bcl.Build.1.0.21\\build\\Microsoft.Bcl.Build.targets')\" Text=\"$([System.String]::Format('$(ErrorText)', '..\\..\\packages\\Microsoft.Bcl.Build.1.0.21\\build\\Microsoft.Bcl.Build.targets'))\" />\n  </Target>\n  <!-- To modify your build process, add your task inside one of the targets below and uncomment it. \n       Other similar extension points exist, see Microsoft.Common.targets.\n  <Target Name=\"BeforeBuild\">\n  </Target>\n  <Target Name=\"AfterBuild\">\n  </Target>\n  -->\n</Project>"
  },
  {
    "path": "src2/Abplus.Events.Producer/Abplus.Events.Producer.nuspec",
    "content": "<?xml version=\"1.0\"?>\n<package >\n  <metadata>\n    <id>$id$</id>\n    <version>$version$</version>\n    <title>$title$</title>\n    <authors>personball</authors>\n    <owners>personball</owners>\n    <licenseUrl>https://raw.githubusercontent.com/personball/abplus/master/LICENSE</licenseUrl>\n    <projectUrl>https://github.com/personball/abplus</projectUrl>\n    <iconUrl>https://raw.githubusercontent.com/personball/abplus/master/abplus_icon.png</iconUrl>\n    <requireLicenseAcceptance>false</requireLicenseAcceptance>\n    <description>Abp plus, an extension for Abp Framework. </description>\n    <releaseNotes></releaseNotes>\n    <copyright>Copyright 2017</copyright>\n    <tags></tags>\n  </metadata>\n</package>"
  },
  {
    "path": "src2/Abplus.Events.Producer/Events/Producer/AbpEventsProducerModule.cs",
    "content": "﻿using System.Reflection;\nusing Abp.Modules;\n\nnamespace Abp.Events.Producer\n{\n    [DependsOn(typeof(AbpKernelModule))]\n    public class AbpEventsProducerModule : AbpModule\n    {\n        public override void Initialize()\n        {\n            IocManager.RegisterAssemblyByConvention(Assembly.GetExecutingAssembly());\n        }\n    }\n}\n"
  },
  {
    "path": "src2/Abplus.Events.Producer/Events/Producer/Handler/PublishAllEventsHandler.cs",
    "content": "﻿using Abp.Dependency;\nusing Abp.Domain.Uow;\nusing Abp.Events.Bus;\nusing Abp.Events.Bus.Handlers;\n\nnamespace Abp.Events.Producer.Handler\n{\n    public class PublishAllEventsHandler : IEventHandler<EventData>, ITransientDependency\n    {\n        public IProducer _producer { get; set; }\n        private readonly IUnitOfWorkManager _unitOfWorkManager;\n\n        public PublishAllEventsHandler(IUnitOfWorkManager unitOfWorkManager)\n        {\n            _producer = NullProducer.Instance;\n            _unitOfWorkManager = unitOfWorkManager;\n        }\n\n        public void HandleEvent(EventData eventData)\n        {\n            if (eventData is IShouldBePublish)\n            {\n                if (_unitOfWorkManager.Current == null)\n                {\n                    _producer.Publish(eventData);\n                }\n                else\n                {\n                    _unitOfWorkManager.Current.Completed += (sender, e) => _producer.Publish(eventData);\n                }\n            }\n        }\n\n    }\n}\n"
  },
  {
    "path": "src2/Abplus.Events.Producer/Events/Producer/IProducer.cs",
    "content": "﻿\nusing System;\n\nnamespace Abp.Events.Producer\n{\n    [Obsolete(\"不推荐直接将EventData发布到消息队列，请使用Abp.MqMessages.IMqMessagePublisher\", false)]\n    public interface IProducer\n    {\n        void Publish(object events);\n    }\n}\n"
  },
  {
    "path": "src2/Abplus.Events.Producer/Events/Producer/NullProducer.cs",
    "content": "﻿\nnamespace Abp.Events.Producer\n{\n    public class NullProducer : IProducer\n    {\n        public static NullProducer Instance { get { return SingletonInstance; } }\n        private static readonly NullProducer SingletonInstance = new NullProducer();\n\n        public void Publish(object events)\n        {\n        }\n    }\n}\n"
  },
  {
    "path": "src2/Abplus.Events.Producer/Properties/AssemblyInfo.cs",
    "content": "﻿using System.Reflection;\nusing System.Runtime.CompilerServices;\nusing System.Runtime.InteropServices;\nusing Abp;\n\n// 有关程序集的一般信息由以下\n// 控制。更改这些特性值可修改\n// 与程序集关联的信息。\n[assembly: AssemblyTitle(\"Abplus.Events.Producer\")]\n[assembly: AssemblyDescription(\"\")]\n[assembly: AssemblyConfiguration(\"\")]\n[assembly: AssemblyCompany(\"\")]\n[assembly: AssemblyProduct(\"Abplus.Events.Producer\")]\n[assembly: AssemblyCopyright(\"Copyright ©  2016\")]\n[assembly: AssemblyTrademark(\"\")]\n[assembly: AssemblyCulture(\"\")]\n\n//将 ComVisible 设置为 false 将使此程序集中的类型\n//对 COM 组件不可见。  如果需要从 COM 访问此程序集中的类型，\n//请将此类型的 ComVisible 特性设置为 true。\n[assembly: ComVisible(false)]\n\n// 如果此项目向 COM 公开，则下列 GUID 用于类型库的 ID\n[assembly: Guid(\"e9957d88-655d-4411-98c3-c7d6009ba13c\")]\n\n// 程序集的版本信息由下列四个值组成: \n//\n//      主版本\n//      次版本\n//      生成号\n//      修订号\n//\n//可以指定所有这些值，也可以使用“生成号”和“修订号”的默认值，\n// 方法是按如下所示使用“*”: :\n// [assembly: AssemblyVersion(\"1.0.*\")]\n[assembly: AssemblyVersion(AbplusConsts.CurrentVersion)]\n[assembly: AssemblyFileVersion(AbplusConsts.CurrentVersion)]\n"
  },
  {
    "path": "src2/Abplus.Events.Producer/packages.config",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<packages>\n  <package id=\"Abp\" version=\"1.4.2.0\" targetFramework=\"net461\" />\n  <package id=\"Castle.Core\" version=\"3.3.3\" targetFramework=\"net461\" />\n  <package id=\"Castle.LoggingFacility\" version=\"3.4.0\" targetFramework=\"net461\" />\n  <package id=\"Castle.Windsor\" version=\"3.4.0\" targetFramework=\"net461\" />\n  <package id=\"Microsoft.Bcl\" version=\"1.1.10\" targetFramework=\"net461\" />\n  <package id=\"Microsoft.Bcl.Async\" version=\"1.0.168\" targetFramework=\"net461\" />\n  <package id=\"Microsoft.Bcl.Build\" version=\"1.0.21\" targetFramework=\"net461\" />\n  <package id=\"Newtonsoft.Json\" version=\"9.0.1\" targetFramework=\"net461\" />\n  <package id=\"Nito.AsyncEx\" version=\"4.0.1\" targetFramework=\"net461\" />\n  <package id=\"System.Collections.Immutable\" version=\"1.3.1\" targetFramework=\"net461\" />\n  <package id=\"System.Linq.Dynamic\" version=\"1.0.7\" targetFramework=\"net461\" />\n</packages>"
  },
  {
    "path": "src2/Abplus.MqMessages/Abplus.MqMessages.csproj",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<Project ToolsVersion=\"14.0\" DefaultTargets=\"Build\" xmlns=\"http://schemas.microsoft.com/developer/msbuild/2003\">\n  <Import Project=\"$(MSBuildExtensionsPath)\\$(MSBuildToolsVersion)\\Microsoft.Common.props\" Condition=\"Exists('$(MSBuildExtensionsPath)\\$(MSBuildToolsVersion)\\Microsoft.Common.props')\" />\n  <PropertyGroup>\n    <Configuration Condition=\" '$(Configuration)' == '' \">Debug</Configuration>\n    <Platform Condition=\" '$(Platform)' == '' \">AnyCPU</Platform>\n    <ProjectGuid>{F0ECE646-29F7-48EB-AB40-6D238F785B73}</ProjectGuid>\n    <OutputType>Library</OutputType>\n    <AppDesignerFolder>Properties</AppDesignerFolder>\n    <RootNamespace>Abp</RootNamespace>\n    <AssemblyName>Abplus.MqMessages</AssemblyName>\n    <TargetFrameworkVersion>v4.6.1</TargetFrameworkVersion>\n    <FileAlignment>512</FileAlignment>\n    <NuGetPackageImportStamp>\n    </NuGetPackageImportStamp>\n  </PropertyGroup>\n  <PropertyGroup Condition=\" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' \">\n    <DebugSymbols>true</DebugSymbols>\n    <DebugType>full</DebugType>\n    <Optimize>false</Optimize>\n    <OutputPath>bin\\Debug\\</OutputPath>\n    <DefineConstants>DEBUG;TRACE</DefineConstants>\n    <ErrorReport>prompt</ErrorReport>\n    <WarningLevel>4</WarningLevel>\n  </PropertyGroup>\n  <PropertyGroup Condition=\" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' \">\n    <DebugType>pdbonly</DebugType>\n    <Optimize>true</Optimize>\n    <OutputPath>bin\\Release\\</OutputPath>\n    <DefineConstants>TRACE</DefineConstants>\n    <ErrorReport>prompt</ErrorReport>\n    <WarningLevel>4</WarningLevel>\n  </PropertyGroup>\n  <ItemGroup>\n    <Reference Include=\"Abp, Version=3.7.2.0, Culture=neutral, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\packages\\Abp.3.7.2\\lib\\netstandard2.0\\Abp.dll</HintPath>\n    </Reference>\n    <Reference Include=\"Abp.AutoMapper, Version=3.7.2.0, Culture=neutral, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\packages\\Abp.AutoMapper.3.7.2\\lib\\netstandard2.0\\Abp.AutoMapper.dll</HintPath>\n    </Reference>\n    <Reference Include=\"AutoMapper, Version=6.2.2.0, Culture=neutral, PublicKeyToken=be96cd2c38ef1005, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\packages\\AutoMapper.6.2.2\\lib\\net45\\AutoMapper.dll</HintPath>\n    </Reference>\n    <Reference Include=\"Castle.Core, Version=4.0.0.0, Culture=neutral, PublicKeyToken=407dd0808d44fbdc, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\packages\\Castle.Core.4.3.1\\lib\\net45\\Castle.Core.dll</HintPath>\n    </Reference>\n    <Reference Include=\"Castle.Facilities.Logging, Version=4.0.0.0, Culture=neutral, PublicKeyToken=407dd0808d44fbdc, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\packages\\Castle.LoggingFacility.4.1.0\\lib\\net45\\Castle.Facilities.Logging.dll</HintPath>\n    </Reference>\n    <Reference Include=\"Castle.Windsor, Version=4.0.0.0, Culture=neutral, PublicKeyToken=407dd0808d44fbdc, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\packages\\Castle.Windsor.4.1.0\\lib\\net45\\Castle.Windsor.dll</HintPath>\n    </Reference>\n    <Reference Include=\"JetBrains.Annotations, Version=11.1.0.0, Culture=neutral, PublicKeyToken=1010a0d8d6380325, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\packages\\JetBrains.Annotations.11.1.0\\lib\\net20\\JetBrains.Annotations.dll</HintPath>\n    </Reference>\n    <Reference Include=\"Microsoft.Extensions.Caching.Abstractions, Version=2.1.0.0, Culture=neutral, PublicKeyToken=adb9793829ddae60, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\packages\\Microsoft.Extensions.Caching.Abstractions.2.1.0\\lib\\netstandard2.0\\Microsoft.Extensions.Caching.Abstractions.dll</HintPath>\n    </Reference>\n    <Reference Include=\"Microsoft.Extensions.Caching.Memory, Version=2.1.0.0, Culture=neutral, PublicKeyToken=adb9793829ddae60, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\packages\\Microsoft.Extensions.Caching.Memory.2.1.0\\lib\\netstandard2.0\\Microsoft.Extensions.Caching.Memory.dll</HintPath>\n    </Reference>\n    <Reference Include=\"Microsoft.Extensions.DependencyInjection.Abstractions, Version=2.1.0.0, Culture=neutral, PublicKeyToken=adb9793829ddae60, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\packages\\Microsoft.Extensions.DependencyInjection.Abstractions.2.1.0\\lib\\netstandard2.0\\Microsoft.Extensions.DependencyInjection.Abstractions.dll</HintPath>\n    </Reference>\n    <Reference Include=\"Microsoft.Extensions.Options, Version=2.1.0.0, Culture=neutral, PublicKeyToken=adb9793829ddae60, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\packages\\Microsoft.Extensions.Options.2.1.0\\lib\\netstandard2.0\\Microsoft.Extensions.Options.dll</HintPath>\n    </Reference>\n    <Reference Include=\"Microsoft.Extensions.Primitives, Version=2.1.0.0, Culture=neutral, PublicKeyToken=adb9793829ddae60, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\packages\\Microsoft.Extensions.Primitives.2.1.0\\lib\\netstandard2.0\\Microsoft.Extensions.Primitives.dll</HintPath>\n    </Reference>\n    <Reference Include=\"Microsoft.Threading.Tasks, Version=1.0.12.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\packages\\Microsoft.Bcl.Async.1.0.168\\lib\\net40\\Microsoft.Threading.Tasks.dll</HintPath>\n      <Private>True</Private>\n    </Reference>\n    <Reference Include=\"Microsoft.Threading.Tasks.Extensions, Version=1.0.12.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\packages\\Microsoft.Bcl.Async.1.0.168\\lib\\net40\\Microsoft.Threading.Tasks.Extensions.dll</HintPath>\n      <Private>True</Private>\n    </Reference>\n    <Reference Include=\"Microsoft.Threading.Tasks.Extensions.Desktop, Version=1.0.168.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\packages\\Microsoft.Bcl.Async.1.0.168\\lib\\net40\\Microsoft.Threading.Tasks.Extensions.Desktop.dll</HintPath>\n      <Private>True</Private>\n    </Reference>\n    <Reference Include=\"Newtonsoft.Json, Version=11.0.0.0, Culture=neutral, PublicKeyToken=30ad4fe6b2a6aeed, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\packages\\Newtonsoft.Json.11.0.2\\lib\\net45\\Newtonsoft.Json.dll</HintPath>\n    </Reference>\n    <Reference Include=\"Nito.AsyncEx, Version=4.0.1.0, Culture=neutral, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\packages\\Nito.AsyncEx.4.0.1\\lib\\net45\\Nito.AsyncEx.dll</HintPath>\n      <Private>True</Private>\n    </Reference>\n    <Reference Include=\"Nito.AsyncEx.Concurrent, Version=4.0.1.0, Culture=neutral, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\packages\\Nito.AsyncEx.4.0.1\\lib\\net45\\Nito.AsyncEx.Concurrent.dll</HintPath>\n      <Private>True</Private>\n    </Reference>\n    <Reference Include=\"Nito.AsyncEx.Context, Version=1.1.0.0, Culture=neutral, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\packages\\Nito.AsyncEx.Context.1.1.0\\lib\\net46\\Nito.AsyncEx.Context.dll</HintPath>\n    </Reference>\n    <Reference Include=\"Nito.AsyncEx.Coordination, Version=1.0.2.0, Culture=neutral, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\packages\\Nito.AsyncEx.Coordination.1.0.2\\lib\\net46\\Nito.AsyncEx.Coordination.dll</HintPath>\n    </Reference>\n    <Reference Include=\"Nito.AsyncEx.Enlightenment, Version=4.0.1.0, Culture=neutral, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\packages\\Nito.AsyncEx.4.0.1\\lib\\net45\\Nito.AsyncEx.Enlightenment.dll</HintPath>\n      <Private>True</Private>\n    </Reference>\n    <Reference Include=\"Nito.AsyncEx.Tasks, Version=1.1.0.0, Culture=neutral, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\packages\\Nito.AsyncEx.Tasks.1.1.0\\lib\\net46\\Nito.AsyncEx.Tasks.dll</HintPath>\n    </Reference>\n    <Reference Include=\"Nito.Collections.Deque, Version=1.0.4.0, Culture=neutral, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\packages\\Nito.Collections.Deque.1.0.4\\lib\\netstandard2.0\\Nito.Collections.Deque.dll</HintPath>\n    </Reference>\n    <Reference Include=\"Nito.Disposables, Version=1.2.3.0, Culture=neutral, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\packages\\Nito.Disposables.1.2.3\\lib\\netstandard2.0\\Nito.Disposables.dll</HintPath>\n    </Reference>\n    <Reference Include=\"System\" />\n    <Reference Include=\"System.Buffers, Version=4.0.2.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\packages\\System.Buffers.4.4.0\\lib\\netstandard2.0\\System.Buffers.dll</HintPath>\n    </Reference>\n    <Reference Include=\"System.Collections.Immutable, Version=1.2.3.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\packages\\System.Collections.Immutable.1.5.0\\lib\\netstandard2.0\\System.Collections.Immutable.dll</HintPath>\n    </Reference>\n    <Reference Include=\"System.ComponentModel.Annotations, Version=4.2.1.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\packages\\System.ComponentModel.Annotations.4.5.0\\lib\\net461\\System.ComponentModel.Annotations.dll</HintPath>\n    </Reference>\n    <Reference Include=\"System.ComponentModel.DataAnnotations\" />\n    <Reference Include=\"System.Configuration\" />\n    <Reference Include=\"System.Configuration.ConfigurationManager, Version=4.0.1.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\packages\\System.Configuration.ConfigurationManager.4.5.0\\lib\\net461\\System.Configuration.ConfigurationManager.dll</HintPath>\n    </Reference>\n    <Reference Include=\"System.Core\" />\n    <Reference Include=\"System.Data.Common, Version=4.1.1.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\packages\\System.Data.Common.4.3.0\\lib\\net451\\System.Data.Common.dll</HintPath>\n      <Private>True</Private>\n    </Reference>\n    <Reference Include=\"System.Data.OracleClient\" />\n    <Reference Include=\"System.Drawing\" />\n    <Reference Include=\"System.Linq.Dynamic, Version=1.0.6132.35681, Culture=neutral, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\packages\\System.Linq.Dynamic.1.0.7\\lib\\net40\\System.Linq.Dynamic.dll</HintPath>\n      <Private>True</Private>\n    </Reference>\n    <Reference Include=\"System.Linq.Dynamic.Core, Version=0.0.0.0, Culture=neutral, PublicKeyToken=0f07ec44de6ac832, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\packages\\System.Linq.Dynamic.Core.1.0.8.9\\lib\\net46\\System.Linq.Dynamic.Core.dll</HintPath>\n    </Reference>\n    <Reference Include=\"System.Memory, Version=4.0.1.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\packages\\System.Memory.4.5.0\\lib\\netstandard2.0\\System.Memory.dll</HintPath>\n    </Reference>\n    <Reference Include=\"System.Net\" />\n    <Reference Include=\"System.Numerics\" />\n    <Reference Include=\"System.Numerics.Vectors, Version=4.1.3.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\packages\\System.Numerics.Vectors.4.4.0\\lib\\net46\\System.Numerics.Vectors.dll</HintPath>\n    </Reference>\n    <Reference Include=\"System.Runtime.Caching\" />\n    <Reference Include=\"System.Runtime.CompilerServices.Unsafe, Version=4.0.4.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\packages\\System.Runtime.CompilerServices.Unsafe.4.5.0\\lib\\netstandard2.0\\System.Runtime.CompilerServices.Unsafe.dll</HintPath>\n    </Reference>\n    <Reference Include=\"System.Runtime.InteropServices.RuntimeInformation, Version=4.0.1.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\packages\\System.Runtime.InteropServices.RuntimeInformation.4.3.0\\lib\\net45\\System.Runtime.InteropServices.RuntimeInformation.dll</HintPath>\n      <Private>True</Private>\n    </Reference>\n    <Reference Include=\"System.Runtime.Remoting\" />\n    <Reference Include=\"System.Runtime.Serialization\" />\n    <Reference Include=\"System.Runtime.Serialization.Formatters, Version=4.0.1.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\packages\\System.Runtime.Serialization.Formatters.4.3.0\\lib\\net46\\System.Runtime.Serialization.Formatters.dll</HintPath>\n      <Private>True</Private>\n    </Reference>\n    <Reference Include=\"System.Runtime.Serialization.Primitives, Version=4.1.2.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\packages\\System.Runtime.Serialization.Primitives.4.3.0\\lib\\net46\\System.Runtime.Serialization.Primitives.dll</HintPath>\n      <Private>True</Private>\n    </Reference>\n    <Reference Include=\"System.Security.AccessControl, Version=4.1.1.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\packages\\System.Security.AccessControl.4.5.0\\lib\\net461\\System.Security.AccessControl.dll</HintPath>\n    </Reference>\n    <Reference Include=\"System.Security.Claims, Version=4.0.2.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\packages\\System.Security.Claims.4.3.0\\lib\\net46\\System.Security.Claims.dll</HintPath>\n      <Private>True</Private>\n    </Reference>\n    <Reference Include=\"System.Security.Permissions, Version=4.0.1.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\packages\\System.Security.Permissions.4.5.0\\lib\\net461\\System.Security.Permissions.dll</HintPath>\n    </Reference>\n    <Reference Include=\"System.Security.Principal.Windows, Version=4.1.1.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\packages\\System.Security.Principal.Windows.4.5.0\\lib\\net461\\System.Security.Principal.Windows.dll</HintPath>\n    </Reference>\n    <Reference Include=\"System.ServiceProcess\" />\n    <Reference Include=\"System.Transactions\" />\n    <Reference Include=\"System.Web\" />\n    <Reference Include=\"System.Xml.Linq\" />\n    <Reference Include=\"System.Data.DataSetExtensions\" />\n    <Reference Include=\"Microsoft.CSharp\" />\n    <Reference Include=\"System.Data\" />\n    <Reference Include=\"System.Net.Http\" />\n    <Reference Include=\"System.Xml\" />\n    <Reference Include=\"System.Xml.XmlDocument, Version=4.0.2.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\packages\\System.Xml.XmlDocument.4.3.0\\lib\\net46\\System.Xml.XmlDocument.dll</HintPath>\n      <Private>True</Private>\n    </Reference>\n    <Reference Include=\"System.Xml.XPath, Version=4.0.2.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\packages\\System.Xml.XPath.4.3.0\\lib\\net46\\System.Xml.XPath.dll</HintPath>\n      <Private>True</Private>\n    </Reference>\n    <Reference Include=\"System.Xml.XPath.XmlDocument, Version=4.0.2.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\packages\\System.Xml.XPath.XmlDocument.4.3.0\\lib\\net46\\System.Xml.XPath.XmlDocument.dll</HintPath>\n    </Reference>\n    <Reference Include=\"TimeZoneConverter, Version=2.4.1.0, Culture=neutral, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\packages\\TimeZoneConverter.2.4.1\\lib\\net45\\TimeZoneConverter.dll</HintPath>\n    </Reference>\n  </ItemGroup>\n  <ItemGroup>\n    <Compile Include=\"Configuration\\Startup\\ExceptionLogInterceptorRegistrar.cs\" />\n    <Compile Include=\"MqMessages\\AutoMapper\\AutoEventsMapToMqMessagesHelper.cs\" />\n    <Compile Include=\"MqMessages\\Handlers\\EventDataPublishHandlerBase.cs\" />\n    <Compile Include=\"MqMessages\\MqHandlers\\AbpMqHandlerBase.cs\" />\n    <Compile Include=\"MqMessages\\MqHandlers\\ExceptionLoggling\\ExceptionLogAttribute.cs\" />\n    <Compile Include=\"MqMessages\\MqHandlers\\ExceptionLoggling\\ExceptionLogHandler.cs\" />\n    <Compile Include=\"MqMessages\\MqHandlers\\ExceptionLoggling\\ExceptionLogInterceptor.cs\" />\n    <Compile Include=\"Properties\\AssemblyInfo.cs\" />\n  </ItemGroup>\n  <ItemGroup>\n    <None Include=\"Abplus.MqMessages.nuspec\" />\n    <None Include=\"app.config\" />\n    <None Include=\"packages.config\">\n      <SubType>Designer</SubType>\n    </None>\n  </ItemGroup>\n  <ItemGroup>\n    <ProjectReference Include=\"..\\Abplus\\Abplus.csproj\">\n      <Project>{1de8d8d1-987d-4a9c-aec5-ff0a9914bbd4}</Project>\n      <Name>Abplus</Name>\n    </ProjectReference>\n  </ItemGroup>\n  <Import Project=\"$(MSBuildToolsPath)\\Microsoft.CSharp.targets\" />\n  <Import Project=\"..\\..\\packages\\Microsoft.Bcl.Build.1.0.21\\build\\Microsoft.Bcl.Build.targets\" Condition=\"Exists('..\\..\\packages\\Microsoft.Bcl.Build.1.0.21\\build\\Microsoft.Bcl.Build.targets')\" />\n  <Target Name=\"EnsureNuGetPackageBuildImports\" BeforeTargets=\"PrepareForBuild\">\n    <PropertyGroup>\n      <ErrorText>这台计算机上缺少此项目引用的 NuGet 程序包。使用“NuGet 程序包还原”可下载这些程序包。有关更多信息，请参见 http://go.microsoft.com/fwlink/?LinkID=322105。缺少的文件是 {0}。</ErrorText>\n    </PropertyGroup>\n    <Error Condition=\"!Exists('..\\..\\packages\\Microsoft.Bcl.Build.1.0.21\\build\\Microsoft.Bcl.Build.targets')\" Text=\"$([System.String]::Format('$(ErrorText)', '..\\..\\packages\\Microsoft.Bcl.Build.1.0.21\\build\\Microsoft.Bcl.Build.targets'))\" />\n  </Target>\n  <!-- To modify your build process, add your task inside one of the targets below and uncomment it. \n       Other similar extension points exist, see Microsoft.Common.targets.\n  <Target Name=\"BeforeBuild\">\n  </Target>\n  <Target Name=\"AfterBuild\">\n  </Target>\n  -->\n</Project>"
  },
  {
    "path": "src2/Abplus.MqMessages/Abplus.MqMessages.nuspec",
    "content": "<?xml version=\"1.0\"?>\n<package >\n  <metadata>\n    <id>$id$</id>\n    <version>$version$</version>\n    <title>$title$</title>\n    <authors>personball</authors>\n    <owners>personball</owners>\n    <licenseUrl>https://raw.githubusercontent.com/personball/abplus/master/LICENSE</licenseUrl>\n    <projectUrl>https://github.com/personball/abplus</projectUrl>\n    <iconUrl>https://raw.githubusercontent.com/personball/abplus/master/abplus_icon.png</iconUrl>\n    <requireLicenseAcceptance>false</requireLicenseAcceptance>\n    <description>Abp plus, an extension for Abp Framework. </description>\n    <releaseNotes></releaseNotes>\n    <copyright>Copyright 2017</copyright>\n    <tags></tags>\n    <dependencies>\n      <dependency id=\"Abplus\" version=\"$version$\" />\n      <dependency id=\"Abp.AutoMapper\" version=\"1.4.2\" />\n      <dependency id=\"AutoMapper\" version=\"6.0.2\" />\n    </dependencies>\n  </metadata>\n</package>"
  },
  {
    "path": "src2/Abplus.MqMessages/Configuration/Startup/ExceptionLogInterceptorRegistrar.cs",
    "content": "﻿using Abp.Dependency;\nusing Abp.MqMessages.MqHandlers;\nusing Abp.MqMessages.MqHandlers.ExceptionLogging;\nusing Castle.Core;\nusing Castle.MicroKernel;\n\nnamespace Abp.Configuration.Startup\n{\n    public static class ExceptionLogInterceptorRegistrar\n    {\n        public static void Initialize(IIocManager iocManager)\n        {\n            iocManager.Register<ExceptionLogHandler>();\n            iocManager.Register<ExceptionLogInterceptor>();\n            iocManager.IocContainer.Kernel.ComponentRegistered += Kernel_ComponentRegistered;\n        }\n\n        private static void Kernel_ComponentRegistered(string key, IHandler handler)\n        {\n            if (typeof(AbpMqHandlerBase).IsAssignableFrom(handler.ComponentModel.Implementation))\n            {\n                handler.ComponentModel.Interceptors.Add(new InterceptorReference(typeof(ExceptionLogInterceptor)));\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "src2/Abplus.MqMessages/MqMessages/AutoMapper/AutoEventsMapToMqMessagesHelper.cs",
    "content": "﻿using System.Linq;\nusing System.Reflection;\nusing Abp.MqMessages.Handlers;\nusing AutoMapper;\n\nnamespace Abp.MqMessages.AutoMapper\n{\n    public static class AutoEventsMapToMqMessagesHelper\n    {\n        public static void CreateEventsToMqMessagesMappings(this IMapperConfigurationExpression mapper, Assembly assembly)\n        {\n            var typesToRegister = assembly.GetTypes()\n                .Where(type => !string.IsNullOrEmpty(type.Namespace))\n                .Where(type => type.BaseType != null\n                && type.BaseType.IsGenericType\n                && (type.BaseType.GetGenericTypeDefinition() == typeof(EventDataPublishHandlerBase<,>)));\n\n            foreach (var type in typesToRegister)\n            {\n                var genericArgs = type.BaseType.GetGenericArguments();\n                if (genericArgs.Length > 1 && !genericArgs[0].BaseType.IsGenericType)\n                {\n                    mapper.CreateMap(genericArgs[0], genericArgs[1]);\n                }\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "src2/Abplus.MqMessages/MqMessages/Handlers/EventDataPublishHandlerBase.cs",
    "content": "﻿using Abp.AutoMapper;\nusing Abp.Dependency;\nusing Abp.Domain.Uow;\nusing Abp.Events.Bus;\nusing Abp.Events.Bus.Handlers;\nusing Castle.Core.Logging;\n\nnamespace Abp.MqMessages.Handlers\n{\n    /// <summary>\n    /// 订阅EventData并发布消息到消息队列的抽象基类\n    /// </summary>\n    /// <typeparam name=\"TEventData\">Abp事件</typeparam>\n    /// <typeparam name=\"TMqMessage\">支持序列化的消息体（类DTO对象）</typeparam>\n    public abstract class EventDataPublishHandlerBase<TEventData, TMqMessage>\n        : IEventHandler<TEventData>, ITransientDependency\n        where TEventData : EventData\n        where TMqMessage : class\n    {\n        protected readonly IUnitOfWorkManager UnitOfWorkManager;\n\n        public ILogger Logger { get; set; }\n\n        public IMqMessagePublisher MqMessagePublisher { get; set; }\n\n        public EventDataPublishHandlerBase(IUnitOfWorkManager unitOfWorkManager)\n        {\n            UnitOfWorkManager = unitOfWorkManager;\n            Logger = NullLogger.Instance;\n            MqMessagePublisher = NullMqMessagePublisher.Instance;\n        }\n\n        public virtual void HandleEvent(TEventData eventData)\n        {\n            if (UnitOfWorkManager.Current == null)\n            {\n                MqMessagePublisher.Publish(ConvertEventDataToMqMessage(eventData));\n            }\n            else\n            {\n                UnitOfWorkManager.Current.Completed += (sender, e) => MqMessagePublisher.Publish(ConvertEventDataToMqMessage(eventData));\n            }\n        }\n\n        /// <summary>\n        /// 转换EventData为MqMessage，默认采用eventData.MapTo<TMqMessage>()\n        /// </summary>\n        /// <param name=\"eventData\"></param>\n        /// <returns></returns>\n        public virtual TMqMessage ConvertEventDataToMqMessage(TEventData eventData)\n        {\n            return eventData.MapTo<TMqMessage>();\n        }\n    }\n}\n"
  },
  {
    "path": "src2/Abplus.MqMessages/MqMessages/MqHandlers/AbpMqHandlerBase.cs",
    "content": "﻿using System;\nusing System.Threading.Tasks;\nusing Abp.Dependency;\nusing Abp.MqMessages.MessageTrackers;\nnamespace Abp.MqMessages.MqHandlers\n{\n    public abstract class AbpMqHandlerBase : AbpServiceBase, ITransientDependency\n    {\n        public IMessageTracker MessageTracker { get; set; }\n\n        public AbpMqHandlerBase(string localizationSourceName)\n        {\n            LocalizationSourceName = localizationSourceName;\n            MessageTracker = DefaultInMemoryMessageTracker.Instance;\n        }\n\n        protected async Task<bool> IsTrueSetting(string settingKey)\n        {\n            return string.Equals(\"true\", await SettingManager.GetSettingValueForApplicationAsync(settingKey), StringComparison.CurrentCultureIgnoreCase);\n        }\n    }\n}\n"
  },
  {
    "path": "src2/Abplus.MqMessages/MqMessages/MqHandlers/ExceptionLoggling/ExceptionLogAttribute.cs",
    "content": "﻿using System;\nusing Abp.Logging;\n\nnamespace Abp.MqMessages.MqHandlers.ExceptionLogging\n{\n    public class ExceptionLogAttribute : Attribute\n    {\n        /// <summary>\n        /// 需拦截的异常\n        /// </summary>\n        public Type[] ExceptionTypes { get; set; }\n\n        /// <summary>\n        /// 是否记录日志,默认true\n        /// </summary>\n        public bool Logged { get; set; }\n\n        /// <summary>\n        /// 日志级别，默认Warn\n        /// </summary>\n        public LogSeverity LogLevel { get; set; }\n\n        /// <summary>\n        /// 是否吃掉异常，默认false\n        /// </summary>\n        public bool NotThrow { get; set; }\n\n        /// <summary>\n        /// \n        /// </summary>\n        /// <param name=\"exceptionTypes\"></param>\n        public ExceptionLogAttribute(params Type[] exceptionTypes)\n            : this(true, LogSeverity.Warn, false, exceptionTypes)\n        {\n        }\n\n        /// <summary>\n        /// \n        /// </summary>\n        /// <param name=\"notThrow\"></param>\n        /// <param name=\"exceptionTypes\"></param>\n        public ExceptionLogAttribute(bool notThrow, params Type[] exceptionTypes)\n            : this(true, LogSeverity.Warn, notThrow, exceptionTypes)\n        {\n        }\n\n        /// <summary>\n        /// \n        /// </summary>\n        /// <param name=\"logged\"></param>\n        /// <param name=\"logLevel\"></param>\n        /// <param name=\"exceptionTypes\"></param>\n        public ExceptionLogAttribute(bool logged, LogSeverity logLevel, params Type[] exceptionTypes)\n            : this(logged, logLevel, false, exceptionTypes)\n        {\n        }\n\n        /// <summary>\n        /// \n        /// </summary>\n        /// <param name=\"logged\">记录日志（警告级别），默认true</param>\n        /// <param name=\"logLevel\">日志等级</param>\n        /// <param name=\"notThrow\">是否吃掉异常</param>\n        /// <param name=\"exceptionTypes\">需拦截的异常</param>\n        public ExceptionLogAttribute(bool logged, LogSeverity logLevel, bool notThrow, params Type[] exceptionTypes)\n        {\n            Logged = logged;\n            LogLevel = logLevel;\n            NotThrow = notThrow;\n            ExceptionTypes = exceptionTypes;\n        }\n    }\n}\n"
  },
  {
    "path": "src2/Abplus.MqMessages/MqMessages/MqHandlers/ExceptionLoggling/ExceptionLogHandler.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Reflection;\nusing System.Threading.Tasks;\nusing Abp.Extensions;\nusing Abp.Interceptors;\nusing Castle.Core.Logging;\nusing Castle.DynamicProxy;\n\nnamespace Abp.MqMessages.MqHandlers.ExceptionLogging\n{\n    public class ExceptionLogHandler : IAsyncInterceptorHandler\n    {\n        public ILogger Logger { get; set; }\n\n        public ExceptionLogHandler()\n        {\n            Logger = NullLogger.Instance;\n        }\n\n        public void Handle(IInvocation invocation)\n        {\n            var handleExceptionAttributes = GetAttributesOfMemberAndDeclaringType<ExceptionLogAttribute>(\n                invocation.MethodInvocationTarget);\n\n            if (handleExceptionAttributes.Count <= 0)\n            {\n                invocation.Proceed();\n                return;\n            }\n            else\n            {\n                try\n                {\n                    invocation.Proceed();\n                }\n                catch (Exception ex)\n                {\n                    var exType = ex.GetType();\n                    var attribute = handleExceptionAttributes.FirstOrDefault(h => h.ExceptionTypes.Contains(exType));\n\n                    if (attribute == null)\n                    {\n                        ex.ReThrow();\n                    }\n\n                    LogException(attribute, ex, invocation.MethodInvocationTarget);\n\n                    if (!attribute.NotThrow)\n                    {\n                        ex.ReThrow();\n                    }\n                }\n            }\n        }\n\n        public async Task HandleAsync(IInvocation invocation)\n        {\n            var handleExceptionAttributes = GetAttributesOfMemberAndDeclaringType<ExceptionLogAttribute>(\n                 invocation.MethodInvocationTarget);\n\n            if (handleExceptionAttributes.Count <= 0)\n            {\n                invocation.Proceed();\n                await (Task)invocation.ReturnValue;\n            }\n            else\n            {\n                try\n                {\n                    invocation.Proceed();\n                    await (Task)invocation.ReturnValue;\n                }\n                catch (Exception ex)\n                {\n                    var exType = ex.GetType();\n                    var attribute = handleExceptionAttributes.FirstOrDefault(h => h.ExceptionTypes.Contains(exType));\n\n                    if (attribute == null)\n                    {\n                        ex.ReThrow();\n                    }\n\n                    LogException(attribute, ex, invocation.MethodInvocationTarget);\n\n                    if (!attribute.NotThrow)\n                    {\n                        ex.ReThrow();\n                    }\n                }\n            }\n        }\n\n        public async Task<T> HandleAsync<T>(IInvocation invocation)\n        {\n            var handleExceptionAttributes = GetAttributesOfMemberAndDeclaringType<ExceptionLogAttribute>(\n               invocation.MethodInvocationTarget);\n\n            if (handleExceptionAttributes.Count <= 0)\n            {\n                invocation.Proceed();\n                return await (Task<T>)invocation.ReturnValue;\n            }\n            else\n            {\n                try\n                {\n                    invocation.Proceed();\n                    return await (Task<T>)invocation.ReturnValue;\n                }\n                catch (Exception ex)\n                {\n                    var exType = ex.GetType();\n                    var attribute = handleExceptionAttributes.FirstOrDefault(h => h.ExceptionTypes.Contains(exType));\n\n                    if (attribute == null)\n                    {\n                        ex.ReThrow();\n                    }\n\n                    LogException(attribute, ex, invocation.MethodInvocationTarget);\n\n                    if (!attribute.NotThrow)\n                    {\n                        ex.ReThrow();\n                    }\n\n                    return default(T);\n                }\n            }\n        }\n\n        private static List<TAttribute> GetAttributesOfMemberAndDeclaringType<TAttribute>(MemberInfo memberInfo)\n           where TAttribute : Attribute\n        {\n            var attributeList = new List<TAttribute>();\n\n            //Add attributes on the member\n            if (memberInfo.IsDefined(typeof(TAttribute), true))\n            {\n                attributeList.AddRange(memberInfo.GetCustomAttributes(typeof(TAttribute), true).Cast<TAttribute>());\n            }\n\n            //Add attributes on the class\n            if (memberInfo.DeclaringType != null && memberInfo.DeclaringType.IsDefined(typeof(TAttribute), true))\n            {\n                attributeList.AddRange(memberInfo.DeclaringType.GetCustomAttributes(typeof(TAttribute), true).Cast<TAttribute>());\n            }\n\n            return attributeList;\n        }\n\n        private void LogException(ExceptionLogAttribute attribute, Exception ex, MethodInfo methodInfo)\n        {\n            if (attribute.Logged)\n            {\n                var msg = $\"{methodInfo.DeclaringType.FullName}.{$\".{methodInfo.Name}\"} Fail:{ex.Message}\";\n\n                switch (attribute.LogLevel)\n                {\n                    case Abp.Logging.LogSeverity.Debug:\n                        Logger.Debug(msg, ex);\n                        return;\n                    case Abp.Logging.LogSeverity.Info:\n                        Logger.Info(msg, ex);\n                        return;\n                    case Abp.Logging.LogSeverity.Warn:\n                        Logger.Warn(msg, ex);\n                        return;\n                    case Abp.Logging.LogSeverity.Error:\n                        Logger.Error(msg, ex);\n                        return;\n                    case Abp.Logging.LogSeverity.Fatal:\n                        Logger.Fatal(msg, ex);\n                        return;\n                    default:\n                        Logger.Warn(msg, ex);\n                        return;\n                }\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "src2/Abplus.MqMessages/MqMessages/MqHandlers/ExceptionLoggling/ExceptionLogInterceptor.cs",
    "content": "﻿using Abp.Interceptors;\n\nnamespace Abp.MqMessages.MqHandlers.ExceptionLogging\n{\n    public class ExceptionLogInterceptor : AsyncHandlingInterceptor\n    {\n        public ExceptionLogInterceptor(ExceptionLogHandler handler) : base(handler)\n        {\n        }\n    }\n}\n"
  },
  {
    "path": "src2/Abplus.MqMessages/Properties/AssemblyInfo.cs",
    "content": "﻿using System.Reflection;\nusing System.Runtime.CompilerServices;\nusing System.Runtime.InteropServices;\nusing Abp;\n\n// 有关程序集的一般信息由以下\n// 控制。更改这些特性值可修改\n// 与程序集关联的信息。\n[assembly: AssemblyTitle(\"Abplus.MqMessages\")]\n[assembly: AssemblyDescription(\"\")]\n[assembly: AssemblyConfiguration(\"\")]\n[assembly: AssemblyCompany(\"\")]\n[assembly: AssemblyProduct(\"Abplus.MqMessages\")]\n[assembly: AssemblyCopyright(\"Copyright ©  2017\")]\n[assembly: AssemblyTrademark(\"\")]\n[assembly: AssemblyCulture(\"\")]\n\n//将 ComVisible 设置为 false 将使此程序集中的类型\n//对 COM 组件不可见。  如果需要从 COM 访问此程序集中的类型，\n//请将此类型的 ComVisible 特性设置为 true。\n[assembly: ComVisible(false)]\n\n// 如果此项目向 COM 公开，则下列 GUID 用于类型库的 ID\n[assembly: Guid(\"f0ece646-29f7-48eb-ab40-6d238f785b73\")]\n\n// 程序集的版本信息由下列四个值组成: \n//\n//      主版本\n//      次版本\n//      生成号\n//      修订号\n//\n//可以指定所有这些值，也可以使用“生成号”和“修订号”的默认值，\n// 方法是按如下所示使用“*”: :\n// [assembly: AssemblyVersion(\"1.0.*\")]\n[assembly: AssemblyVersion(AbplusConsts.CurrentVersion)]\n[assembly: AssemblyFileVersion(AbplusConsts.CurrentVersion)]\n"
  },
  {
    "path": "src2/Abplus.MqMessages/app.config",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<configuration>\n  <runtime>\n    <assemblyBinding xmlns=\"urn:schemas-microsoft-com:asm.v1\">\n      <dependentAssembly>\n        <assemblyIdentity name=\"AutoMapper\" publicKeyToken=\"be96cd2c38ef1005\" culture=\"neutral\" />\n        <bindingRedirect oldVersion=\"0.0.0.0-6.2.2.0\" newVersion=\"6.2.2.0\" />\n      </dependentAssembly>\n      <dependentAssembly>\n        <assemblyIdentity name=\"Newtonsoft.Json\" publicKeyToken=\"30ad4fe6b2a6aeed\" culture=\"neutral\" />\n        <bindingRedirect oldVersion=\"0.0.0.0-11.0.0.0\" newVersion=\"11.0.0.0\" />\n      </dependentAssembly>\n      <dependentAssembly>\n        <assemblyIdentity name=\"Castle.Windsor\" publicKeyToken=\"407dd0808d44fbdc\" culture=\"neutral\" />\n        <bindingRedirect oldVersion=\"0.0.0.0-4.0.0.0\" newVersion=\"4.0.0.0\" />\n      </dependentAssembly>\n      <dependentAssembly>\n        <assemblyIdentity name=\"Castle.Core\" publicKeyToken=\"407dd0808d44fbdc\" culture=\"neutral\" />\n        <bindingRedirect oldVersion=\"0.0.0.0-4.0.0.0\" newVersion=\"4.0.0.0\" />\n      </dependentAssembly>\n      <dependentAssembly>\n        <assemblyIdentity name=\"Microsoft.Extensions.Caching.Abstractions\" publicKeyToken=\"adb9793829ddae60\" culture=\"neutral\" />\n        <bindingRedirect oldVersion=\"0.0.0.0-2.0.1.0\" newVersion=\"2.0.1.0\" />\n      </dependentAssembly>\n      <dependentAssembly>\n        <assemblyIdentity name=\"Microsoft.Extensions.Caching.Memory\" publicKeyToken=\"adb9793829ddae60\" culture=\"neutral\" />\n        <bindingRedirect oldVersion=\"0.0.0.0-2.0.1.0\" newVersion=\"2.0.1.0\" />\n      </dependentAssembly>\n      <dependentAssembly>\n        <assemblyIdentity name=\"Microsoft.Extensions.Options\" publicKeyToken=\"adb9793829ddae60\" culture=\"neutral\" />\n        <bindingRedirect oldVersion=\"0.0.0.0-2.0.1.0\" newVersion=\"2.0.1.0\" />\n      </dependentAssembly>\n      <dependentAssembly>\n        <assemblyIdentity name=\"System.Runtime.InteropServices.RuntimeInformation\" publicKeyToken=\"b03f5f7f11d50a3a\" culture=\"neutral\" />\n        <bindingRedirect oldVersion=\"0.0.0.0-4.0.2.0\" newVersion=\"4.0.2.0\" />\n      </dependentAssembly>\n      <dependentAssembly>\n        <assemblyIdentity name=\"System.Collections.Immutable\" publicKeyToken=\"b03f5f7f11d50a3a\" culture=\"neutral\" />\n        <bindingRedirect oldVersion=\"0.0.0.0-1.2.3.0\" newVersion=\"1.2.3.0\" />\n      </dependentAssembly>\n      <dependentAssembly>\n        <assemblyIdentity name=\"System.ComponentModel.Annotations\" publicKeyToken=\"b03f5f7f11d50a3a\" culture=\"neutral\" />\n        <bindingRedirect oldVersion=\"0.0.0.0-4.2.1.0\" newVersion=\"4.2.1.0\" />\n      </dependentAssembly>\n    </assemblyBinding>\n  </runtime>\n</configuration>"
  },
  {
    "path": "src2/Abplus.MqMessages/packages.config",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<packages>\n  <package id=\"Abp\" version=\"3.7.2\" targetFramework=\"net461\" />\n  <package id=\"Abp.AutoMapper\" version=\"3.7.2\" targetFramework=\"net461\" />\n  <package id=\"AutoMapper\" version=\"6.2.2\" targetFramework=\"net461\" />\n  <package id=\"Castle.Core\" version=\"4.3.1\" targetFramework=\"net461\" />\n  <package id=\"Castle.LoggingFacility\" version=\"4.1.0\" targetFramework=\"net461\" />\n  <package id=\"Castle.Windsor\" version=\"4.1.0\" targetFramework=\"net461\" />\n  <package id=\"JetBrains.Annotations\" version=\"11.1.0\" targetFramework=\"net461\" />\n  <package id=\"Microsoft.Bcl\" version=\"1.1.10\" targetFramework=\"net461\" />\n  <package id=\"Microsoft.Bcl.Async\" version=\"1.0.168\" targetFramework=\"net461\" />\n  <package id=\"Microsoft.Bcl.Build\" version=\"1.0.21\" targetFramework=\"net461\" />\n  <package id=\"Microsoft.Extensions.Caching.Abstractions\" version=\"2.1.0\" targetFramework=\"net461\" />\n  <package id=\"Microsoft.Extensions.Caching.Memory\" version=\"2.1.0\" targetFramework=\"net461\" />\n  <package id=\"Microsoft.Extensions.DependencyInjection.Abstractions\" version=\"2.1.0\" targetFramework=\"net461\" />\n  <package id=\"Microsoft.Extensions.Options\" version=\"2.1.0\" targetFramework=\"net461\" />\n  <package id=\"Microsoft.Extensions.Primitives\" version=\"2.1.0\" targetFramework=\"net461\" />\n  <package id=\"Newtonsoft.Json\" version=\"11.0.2\" targetFramework=\"net461\" />\n  <package id=\"Nito.AsyncEx\" version=\"4.0.1\" targetFramework=\"net461\" />\n  <package id=\"Nito.AsyncEx.Context\" version=\"1.1.0\" targetFramework=\"net461\" />\n  <package id=\"Nito.AsyncEx.Coordination\" version=\"1.0.2\" targetFramework=\"net461\" />\n  <package id=\"Nito.AsyncEx.Tasks\" version=\"1.1.0\" targetFramework=\"net461\" />\n  <package id=\"Nito.Collections.Deque\" version=\"1.0.4\" targetFramework=\"net461\" />\n  <package id=\"Nito.Disposables\" version=\"1.2.3\" targetFramework=\"net461\" />\n  <package id=\"System.Buffers\" version=\"4.4.0\" targetFramework=\"net461\" />\n  <package id=\"System.Collections.Immutable\" version=\"1.5.0\" targetFramework=\"net461\" />\n  <package id=\"System.ComponentModel.Annotations\" version=\"4.5.0\" targetFramework=\"net461\" />\n  <package id=\"System.Configuration.ConfigurationManager\" version=\"4.5.0\" targetFramework=\"net461\" />\n  <package id=\"System.Data.Common\" version=\"4.3.0\" targetFramework=\"net461\" />\n  <package id=\"System.Linq.Dynamic\" version=\"1.0.7\" targetFramework=\"net461\" />\n  <package id=\"System.Linq.Dynamic.Core\" version=\"1.0.8.9\" targetFramework=\"net461\" />\n  <package id=\"System.Linq.Queryable\" version=\"4.3.0\" targetFramework=\"net461\" />\n  <package id=\"System.Memory\" version=\"4.5.0\" targetFramework=\"net461\" />\n  <package id=\"System.Numerics.Vectors\" version=\"4.4.0\" targetFramework=\"net461\" />\n  <package id=\"System.Runtime.CompilerServices.Unsafe\" version=\"4.5.0\" targetFramework=\"net461\" />\n  <package id=\"System.Runtime.InteropServices.RuntimeInformation\" version=\"4.3.0\" targetFramework=\"net461\" />\n  <package id=\"System.Runtime.Serialization.Formatters\" version=\"4.3.0\" targetFramework=\"net461\" />\n  <package id=\"System.Runtime.Serialization.Primitives\" version=\"4.3.0\" targetFramework=\"net461\" />\n  <package id=\"System.Security.AccessControl\" version=\"4.5.0\" targetFramework=\"net461\" />\n  <package id=\"System.Security.Claims\" version=\"4.3.0\" targetFramework=\"net461\" />\n  <package id=\"System.Security.Permissions\" version=\"4.5.0\" targetFramework=\"net461\" />\n  <package id=\"System.Security.Principal.Windows\" version=\"4.5.0\" targetFramework=\"net461\" />\n  <package id=\"System.Threading\" version=\"4.3.0\" targetFramework=\"net461\" />\n  <package id=\"System.Xml.XmlDocument\" version=\"4.3.0\" targetFramework=\"net461\" />\n  <package id=\"System.Xml.XPath\" version=\"4.3.0\" targetFramework=\"net461\" />\n  <package id=\"System.Xml.XPath.XmlDocument\" version=\"4.3.0\" targetFramework=\"net461\" />\n  <package id=\"TimeZoneConverter\" version=\"2.4.1\" targetFramework=\"net461\" />\n</packages>"
  },
  {
    "path": "src2/Abplus.MqMessages.AuditingConsumerHandler/Abplus.MqMessages.AuditingConsumerRebusHandler.csproj",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<Project ToolsVersion=\"14.0\" DefaultTargets=\"Build\" xmlns=\"http://schemas.microsoft.com/developer/msbuild/2003\">\n  <Import Project=\"$(MSBuildExtensionsPath)\\$(MSBuildToolsVersion)\\Microsoft.Common.props\" Condition=\"Exists('$(MSBuildExtensionsPath)\\$(MSBuildToolsVersion)\\Microsoft.Common.props')\" />\n  <PropertyGroup>\n    <Configuration Condition=\" '$(Configuration)' == '' \">Debug</Configuration>\n    <Platform Condition=\" '$(Platform)' == '' \">AnyCPU</Platform>\n    <ProjectGuid>{0F8EDD31-AB0A-45FE-8F35-AE7AF0873AE3}</ProjectGuid>\n    <OutputType>Library</OutputType>\n    <AppDesignerFolder>Properties</AppDesignerFolder>\n    <RootNamespace>Abp</RootNamespace>\n    <AssemblyName>Abplus.MqMessages.AuditingConsumerRebusHandler</AssemblyName>\n    <TargetFrameworkVersion>v4.6.1</TargetFrameworkVersion>\n    <FileAlignment>512</FileAlignment>\n    <NuGetPackageImportStamp>\n    </NuGetPackageImportStamp>\n  </PropertyGroup>\n  <PropertyGroup Condition=\" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' \">\n    <DebugSymbols>true</DebugSymbols>\n    <DebugType>full</DebugType>\n    <Optimize>false</Optimize>\n    <OutputPath>bin\\Debug\\</OutputPath>\n    <DefineConstants>DEBUG;TRACE</DefineConstants>\n    <ErrorReport>prompt</ErrorReport>\n    <WarningLevel>4</WarningLevel>\n  </PropertyGroup>\n  <PropertyGroup Condition=\" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' \">\n    <DebugType>pdbonly</DebugType>\n    <Optimize>true</Optimize>\n    <OutputPath>bin\\Release\\</OutputPath>\n    <DefineConstants>TRACE</DefineConstants>\n    <ErrorReport>prompt</ErrorReport>\n    <WarningLevel>4</WarningLevel>\n  </PropertyGroup>\n  <ItemGroup>\n    <Reference Include=\"Abp, Version=1.4.2.0, Culture=neutral, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\packages\\Abp.1.4.2.0\\lib\\net452\\Abp.dll</HintPath>\n      <Private>True</Private>\n    </Reference>\n    <Reference Include=\"Castle.Core, Version=3.3.0.0, Culture=neutral, PublicKeyToken=407dd0808d44fbdc, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\packages\\Castle.Core.3.3.0\\lib\\net45\\Castle.Core.dll</HintPath>\n      <Private>True</Private>\n    </Reference>\n    <Reference Include=\"Castle.Facilities.Logging, Version=3.4.0.0, Culture=neutral, PublicKeyToken=407dd0808d44fbdc, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\packages\\Castle.LoggingFacility.3.4.0\\lib\\net45\\Castle.Facilities.Logging.dll</HintPath>\n      <Private>True</Private>\n    </Reference>\n    <Reference Include=\"Castle.Windsor, Version=3.4.0.0, Culture=neutral, PublicKeyToken=407dd0808d44fbdc, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\packages\\Castle.Windsor.3.4.0\\lib\\net45\\Castle.Windsor.dll</HintPath>\n      <Private>True</Private>\n    </Reference>\n    <Reference Include=\"Microsoft.Threading.Tasks, Version=1.0.12.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\packages\\Microsoft.Bcl.Async.1.0.168\\lib\\net40\\Microsoft.Threading.Tasks.dll</HintPath>\n      <Private>True</Private>\n    </Reference>\n    <Reference Include=\"Microsoft.Threading.Tasks.Extensions, Version=1.0.12.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\packages\\Microsoft.Bcl.Async.1.0.168\\lib\\net40\\Microsoft.Threading.Tasks.Extensions.dll</HintPath>\n      <Private>True</Private>\n    </Reference>\n    <Reference Include=\"Microsoft.Threading.Tasks.Extensions.Desktop, Version=1.0.168.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\packages\\Microsoft.Bcl.Async.1.0.168\\lib\\net40\\Microsoft.Threading.Tasks.Extensions.Desktop.dll</HintPath>\n      <Private>True</Private>\n    </Reference>\n    <Reference Include=\"Newtonsoft.Json, Version=9.0.0.0, Culture=neutral, PublicKeyToken=30ad4fe6b2a6aeed, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\packages\\Newtonsoft.Json.9.0.1\\lib\\net45\\Newtonsoft.Json.dll</HintPath>\n      <Private>True</Private>\n    </Reference>\n    <Reference Include=\"Nito.AsyncEx, Version=4.0.1.0, Culture=neutral, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\packages\\Nito.AsyncEx.4.0.1\\lib\\net45\\Nito.AsyncEx.dll</HintPath>\n      <Private>True</Private>\n    </Reference>\n    <Reference Include=\"Nito.AsyncEx.Concurrent, Version=4.0.1.0, Culture=neutral, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\packages\\Nito.AsyncEx.4.0.1\\lib\\net45\\Nito.AsyncEx.Concurrent.dll</HintPath>\n      <Private>True</Private>\n    </Reference>\n    <Reference Include=\"Nito.AsyncEx.Enlightenment, Version=4.0.1.0, Culture=neutral, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\packages\\Nito.AsyncEx.4.0.1\\lib\\net45\\Nito.AsyncEx.Enlightenment.dll</HintPath>\n      <Private>True</Private>\n    </Reference>\n    <Reference Include=\"Rebus, Version=3.1.4.0, Culture=neutral, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\packages\\Rebus.3.1.4\\lib\\NET45\\Rebus.dll</HintPath>\n      <Private>True</Private>\n    </Reference>\n    <Reference Include=\"System\" />\n    <Reference Include=\"System.Collections.Immutable, Version=1.2.1.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\packages\\System.Collections.Immutable.1.3.1\\lib\\portable-net45+win8+wp8+wpa81\\System.Collections.Immutable.dll</HintPath>\n      <Private>True</Private>\n    </Reference>\n    <Reference Include=\"System.ComponentModel.DataAnnotations\" />\n    <Reference Include=\"System.Configuration\" />\n    <Reference Include=\"System.Core\" />\n    <Reference Include=\"System.Linq.Dynamic, Version=1.0.6132.35681, Culture=neutral, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\packages\\System.Linq.Dynamic.1.0.7\\lib\\net40\\System.Linq.Dynamic.dll</HintPath>\n      <Private>True</Private>\n    </Reference>\n    <Reference Include=\"System.Net\" />\n    <Reference Include=\"System.Runtime.Caching\" />\n    <Reference Include=\"System.Transactions\" />\n    <Reference Include=\"System.Xml.Linq\" />\n    <Reference Include=\"System.Data.DataSetExtensions\" />\n    <Reference Include=\"Microsoft.CSharp\" />\n    <Reference Include=\"System.Data\" />\n    <Reference Include=\"System.Net.Http\" />\n    <Reference Include=\"System.Xml\" />\n  </ItemGroup>\n  <ItemGroup>\n    <Compile Include=\"Auditing\\AuditingStore\\AuditingConsumerRebusHandlerModule.cs\" />\n    <Compile Include=\"Auditing\\AuditingStore\\AuditingConsumerRebusHandlerModuleConfig.cs\" />\n    <Compile Include=\"Auditing\\AuditingStore\\IAuditingConsumerRebusHandlerModuleConfig.cs\" />\n    <Compile Include=\"Auditing\\AuditingStore\\MqMessageAuditingStoreRebusHandler.cs\" />\n    <Compile Include=\"Configuration\\Startup\\AuditingConsumerRebusHandlerConfigurationExtensions.cs\" />\n    <Compile Include=\"Properties\\AssemblyInfo.cs\" />\n  </ItemGroup>\n  <ItemGroup>\n    <ProjectReference Include=\"..\\Abplus.MqMessages.AuditingStore\\Abplus.MqMessages.AuditingStore.csproj\">\n      <Project>{b1585b83-25a5-4c8c-a384-b1205e459c16}</Project>\n      <Name>Abplus.MqMessages.AuditingStore</Name>\n    </ProjectReference>\n    <ProjectReference Include=\"..\\Abplus.MqMessages\\Abplus.MqMessages.csproj\">\n      <Project>{f0ece646-29f7-48eb-ab40-6d238f785b73}</Project>\n      <Name>Abplus.MqMessages</Name>\n    </ProjectReference>\n    <ProjectReference Include=\"..\\Abplus\\Abplus.csproj\">\n      <Project>{1de8d8d1-987d-4a9c-aec5-ff0a9914bbd4}</Project>\n      <Name>Abplus</Name>\n    </ProjectReference>\n  </ItemGroup>\n  <ItemGroup>\n    <None Include=\"app.config\" />\n    <None Include=\"packages.config\" />\n  </ItemGroup>\n  <Import Project=\"$(MSBuildToolsPath)\\Microsoft.CSharp.targets\" />\n  <Import Project=\"..\\..\\packages\\Microsoft.Bcl.Build.1.0.21\\build\\Microsoft.Bcl.Build.targets\" Condition=\"Exists('..\\..\\packages\\Microsoft.Bcl.Build.1.0.21\\build\\Microsoft.Bcl.Build.targets')\" />\n  <Target Name=\"EnsureNuGetPackageBuildImports\" BeforeTargets=\"PrepareForBuild\">\n    <PropertyGroup>\n      <ErrorText>这台计算机上缺少此项目引用的 NuGet 程序包。使用“NuGet 程序包还原”可下载这些程序包。有关更多信息，请参见 http://go.microsoft.com/fwlink/?LinkID=322105。缺少的文件是 {0}。</ErrorText>\n    </PropertyGroup>\n    <Error Condition=\"!Exists('..\\..\\packages\\Microsoft.Bcl.Build.1.0.21\\build\\Microsoft.Bcl.Build.targets')\" Text=\"$([System.String]::Format('$(ErrorText)', '..\\..\\packages\\Microsoft.Bcl.Build.1.0.21\\build\\Microsoft.Bcl.Build.targets'))\" />\n  </Target>\n  <!-- To modify your build process, add your task inside one of the targets below and uncomment it. \n       Other similar extension points exist, see Microsoft.Common.targets.\n  <Target Name=\"BeforeBuild\">\n  </Target>\n  <Target Name=\"AfterBuild\">\n  </Target>\n  -->\n</Project>"
  },
  {
    "path": "src2/Abplus.MqMessages.AuditingConsumerHandler/Auditing/AuditingStore/AuditingConsumerRebusHandlerModule.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Reflection;\nusing System.Text;\nusing System.Threading.Tasks;\nusing Abp.Modules;\n\nnamespace Abp.Auditing.AuditingStore\n{\n    public class AuditingConsumerRebusHandlerModule : AbpModule\n    {\n        public override void PreInitialize()\n        {\n            IocManager.Register<IAuditingConsumerRebusHandlerModuleConfig, AuditingConsumerRebusHandlerModuleConfig>();\n        }\n\n        public override void Initialize()\n        {\n            IocManager.RegisterAssemblyByConvention(Assembly.GetExecutingAssembly());\n        }\n\n        public override void PostInitialize()\n        {\n            MqMessageAuditingStoreRebusHandler.Timer.Start();\n        }\n\n        public override void Shutdown()\n        {\n            MqMessageAuditingStoreRebusHandler.Timer.Stop();\n        }\n    }\n}\n"
  },
  {
    "path": "src2/Abplus.MqMessages.AuditingConsumerHandler/Auditing/AuditingStore/AuditingConsumerRebusHandlerModuleConfig.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Text;\nusing System.Threading.Tasks;\n\nnamespace Abp.Auditing.AuditingStore\n{\n    public class AuditingConsumerRebusHandlerModuleConfig : IAuditingConsumerRebusHandlerModuleConfig\n    {\n        public AuditingConsumerRebusHandlerModuleConfig()\n        {\n            BatchSize = 100;\n            PeriodInSeconds = 1;\n            BatchStoreAction = (msgList) => { };\n        }\n        public int BatchSize { get; private set; }\n\n        public Action<IEnumerable<AuditInfoMqMessage>> BatchStoreAction { get; private set; }\n\n        public int PeriodInSeconds { get; private set; }\n\n    }\n}\n"
  },
  {
    "path": "src2/Abplus.MqMessages.AuditingConsumerHandler/Auditing/AuditingStore/IAuditingConsumerRebusHandlerModuleConfig.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Text;\nusing System.Threading.Tasks;\n\nnamespace Abp.Auditing.AuditingStore\n{\n    public interface IAuditingConsumerRebusHandlerModuleConfig\n    {\n        /// <summary>\n        /// 每批大小\n        /// </summary>\n        int BatchSize { get; }\n\n        /// <summary>\n        /// 执行间隔（单位：秒）\n        /// </summary>\n        int PeriodInSeconds { get; }\n\n        /// <summary>\n        /// 批量存储的委托\n        /// </summary>\n        Action<IEnumerable<AuditInfoMqMessage>> BatchStoreAction { get; }\n    }\n}\n"
  },
  {
    "path": "src2/Abplus.MqMessages.AuditingConsumerHandler/Auditing/AuditingStore/MqMessageAuditingStoreRebusHandler.cs",
    "content": "﻿using System.Collections.Concurrent;\nusing System.Collections.Generic;\nusing System.Threading.Tasks;\nusing Abp.Dependency;\nusing Abp.Threading.Timers;\nusing Rebus.Handlers;\nusing System.Linq;\n\nnamespace Abp.Auditing.AuditingStore\n{\n    public class MqMessageAuditingStoreRebusHandler :\n         IHandleMessages<AuditInfoMqMessage>\n        , ITransientDependency\n    {\n        private static ConcurrentQueue<AuditInfoMqMessage> InMemoryAuditInfoQueue;\n        public static AbpTimer Timer;\n\n        static MqMessageAuditingStoreRebusHandler()\n        {\n            InMemoryAuditInfoQueue = new ConcurrentQueue<AuditInfoMqMessage>();\n\n            var config = IocManager.Instance.Resolve<IAuditingConsumerRebusHandlerModuleConfig>();\n            Timer = new AbpTimer(config.PeriodInSeconds * 1000);\n\n            Timer.Elapsed += (s, e) =>\n            {\n                var tmpMsg = new List<AuditInfoMqMessage>();\n                for (int i = 0; i < config.BatchSize; i++)\n                {\n                    AuditInfoMqMessage msg;\n                    if (InMemoryAuditInfoQueue.TryDequeue(out msg))\n                    {\n                        tmpMsg.Add(msg);\n                    }\n                    else\n                    {\n                        break;\n                    }\n                }\n\n                if (tmpMsg.Any())\n                {\n                    config.BatchStoreAction(tmpMsg);\n                }\n            };\n        }\n\n        public async Task Handle(AuditInfoMqMessage message)\n        {\n            InMemoryAuditInfoQueue.Enqueue(message);\n        }\n    }\n}\n"
  },
  {
    "path": "src2/Abplus.MqMessages.AuditingConsumerHandler/Configuration/Startup/AuditingConsumerRebusHandlerConfigurationExtensions.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Text;\nusing System.Threading.Tasks;\n\nnamespace Abp.Configuration.Startup\n{\n    public static class AuditingConsumerRebusHandlerConfigurationExtensions\n    {\n\n    }\n}\n"
  },
  {
    "path": "src2/Abplus.MqMessages.AuditingConsumerHandler/Properties/AssemblyInfo.cs",
    "content": "﻿using System.Reflection;\nusing System.Runtime.CompilerServices;\nusing System.Runtime.InteropServices;\nusing Abp;\n\n// 有关程序集的一般信息由以下\n// 控制。更改这些特性值可修改\n// 与程序集关联的信息。\n[assembly: AssemblyTitle(\"Abplus.MqMessages.AuditingConsumerHandler\")]\n[assembly: AssemblyDescription(\"\")]\n[assembly: AssemblyConfiguration(\"\")]\n[assembly: AssemblyCompany(\"\")]\n[assembly: AssemblyProduct(\"Abplus.MqMessages.AuditingConsumerHandler\")]\n[assembly: AssemblyCopyright(\"Copyright ©  2017\")]\n[assembly: AssemblyTrademark(\"\")]\n[assembly: AssemblyCulture(\"\")]\n\n//将 ComVisible 设置为 false 将使此程序集中的类型\n//对 COM 组件不可见。  如果需要从 COM 访问此程序集中的类型，\n//请将此类型的 ComVisible 特性设置为 true。\n[assembly: ComVisible(false)]\n\n// 如果此项目向 COM 公开，则下列 GUID 用于类型库的 ID\n[assembly: Guid(\"0f8edd31-ab0a-45fe-8f35-ae7af0873ae3\")]\n\n// 程序集的版本信息由下列四个值组成: \n//\n//      主版本\n//      次版本\n//      生成号\n//      修订号\n//\n//可以指定所有这些值，也可以使用“生成号”和“修订号”的默认值，\n// 方法是按如下所示使用“*”: :\n// [assembly: AssemblyVersion(\"1.0.*\")]\n[assembly: AssemblyVersion(AbplusConsts.CurrentVersion)]\n[assembly: AssemblyFileVersion(AbplusConsts.CurrentVersion)]\n"
  },
  {
    "path": "src2/Abplus.MqMessages.AuditingConsumerHandler/app.config",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<configuration>\n  <runtime>\n    <assemblyBinding xmlns=\"urn:schemas-microsoft-com:asm.v1\">\n      <dependentAssembly>\n        <assemblyIdentity name=\"AutoMapper\" publicKeyToken=\"be96cd2c38ef1005\" culture=\"neutral\" />\n        <bindingRedirect oldVersion=\"0.0.0.0-6.0.2.0\" newVersion=\"6.0.2.0\" />\n      </dependentAssembly>\n    </assemblyBinding>\n  </runtime>\n</configuration>"
  },
  {
    "path": "src2/Abplus.MqMessages.AuditingConsumerHandler/packages.config",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<packages>\n  <package id=\"Abp\" version=\"1.4.2.0\" targetFramework=\"net461\" />\n  <package id=\"Castle.Core\" version=\"3.3.0\" targetFramework=\"net461\" />\n  <package id=\"Castle.LoggingFacility\" version=\"3.4.0\" targetFramework=\"net461\" />\n  <package id=\"Castle.Windsor\" version=\"3.4.0\" targetFramework=\"net461\" />\n  <package id=\"Microsoft.Bcl\" version=\"1.1.10\" targetFramework=\"net461\" />\n  <package id=\"Microsoft.Bcl.Async\" version=\"1.0.168\" targetFramework=\"net461\" />\n  <package id=\"Microsoft.Bcl.Build\" version=\"1.0.21\" targetFramework=\"net461\" />\n  <package id=\"Newtonsoft.Json\" version=\"9.0.1\" targetFramework=\"net461\" />\n  <package id=\"Nito.AsyncEx\" version=\"4.0.1\" targetFramework=\"net461\" />\n  <package id=\"Rebus\" version=\"3.1.4\" targetFramework=\"net461\" />\n  <package id=\"System.Collections.Immutable\" version=\"1.3.1\" targetFramework=\"net461\" />\n  <package id=\"System.Linq.Dynamic\" version=\"1.0.7\" targetFramework=\"net461\" />\n</packages>"
  },
  {
    "path": "src2/Abplus.MqMessages.AuditingStore/Abplus.MqMessages.AuditingStore.csproj",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<Project ToolsVersion=\"14.0\" DefaultTargets=\"Build\" xmlns=\"http://schemas.microsoft.com/developer/msbuild/2003\">\n  <Import Project=\"$(MSBuildExtensionsPath)\\$(MSBuildToolsVersion)\\Microsoft.Common.props\" Condition=\"Exists('$(MSBuildExtensionsPath)\\$(MSBuildToolsVersion)\\Microsoft.Common.props')\" />\n  <PropertyGroup>\n    <Configuration Condition=\" '$(Configuration)' == '' \">Debug</Configuration>\n    <Platform Condition=\" '$(Platform)' == '' \">AnyCPU</Platform>\n    <ProjectGuid>{B1585B83-25A5-4C8C-A384-B1205E459C16}</ProjectGuid>\n    <OutputType>Library</OutputType>\n    <AppDesignerFolder>Properties</AppDesignerFolder>\n    <RootNamespace>Abp</RootNamespace>\n    <AssemblyName>Abplus.MqMessages.AuditingStore</AssemblyName>\n    <TargetFrameworkVersion>v4.6.1</TargetFrameworkVersion>\n    <FileAlignment>512</FileAlignment>\n    <NuGetPackageImportStamp>\n    </NuGetPackageImportStamp>\n  </PropertyGroup>\n  <PropertyGroup Condition=\" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' \">\n    <DebugSymbols>true</DebugSymbols>\n    <DebugType>full</DebugType>\n    <Optimize>false</Optimize>\n    <OutputPath>bin\\Debug\\</OutputPath>\n    <DefineConstants>DEBUG;TRACE</DefineConstants>\n    <ErrorReport>prompt</ErrorReport>\n    <WarningLevel>4</WarningLevel>\n  </PropertyGroup>\n  <PropertyGroup Condition=\" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' \">\n    <DebugType>pdbonly</DebugType>\n    <Optimize>true</Optimize>\n    <OutputPath>bin\\Release\\</OutputPath>\n    <DefineConstants>TRACE</DefineConstants>\n    <ErrorReport>prompt</ErrorReport>\n    <WarningLevel>4</WarningLevel>\n  </PropertyGroup>\n  <ItemGroup>\n    <Reference Include=\"Abp, Version=3.7.2.0, Culture=neutral, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\packages\\Abp.3.7.2\\lib\\netstandard2.0\\Abp.dll</HintPath>\n    </Reference>\n    <Reference Include=\"Abplus, Version=0.1.7.6, Culture=neutral, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\packages\\Abplus.0.1.7.6\\lib\\net461\\Abplus.dll</HintPath>\n    </Reference>\n    <Reference Include=\"Abplus.MqMessages.RebusCore, Version=0.1.6.3, Culture=neutral, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\packages\\Abplus.MqMessages.RebusCore.0.1.6.3\\lib\\net461\\Abplus.MqMessages.RebusCore.dll</HintPath>\n    </Reference>\n    <Reference Include=\"Castle.Core, Version=4.0.0.0, Culture=neutral, PublicKeyToken=407dd0808d44fbdc, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\packages\\Castle.Core.4.3.1\\lib\\net45\\Castle.Core.dll</HintPath>\n    </Reference>\n    <Reference Include=\"Castle.Facilities.Logging, Version=4.0.0.0, Culture=neutral, PublicKeyToken=407dd0808d44fbdc, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\packages\\Castle.LoggingFacility.4.1.0\\lib\\net45\\Castle.Facilities.Logging.dll</HintPath>\n    </Reference>\n    <Reference Include=\"Castle.Windsor, Version=4.0.0.0, Culture=neutral, PublicKeyToken=407dd0808d44fbdc, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\packages\\Castle.Windsor.4.1.0\\lib\\net45\\Castle.Windsor.dll</HintPath>\n    </Reference>\n    <Reference Include=\"JetBrains.Annotations, Version=11.1.0.0, Culture=neutral, PublicKeyToken=1010a0d8d6380325, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\packages\\JetBrains.Annotations.11.1.0\\lib\\net20\\JetBrains.Annotations.dll</HintPath>\n    </Reference>\n    <Reference Include=\"Microsoft.Extensions.Caching.Abstractions, Version=2.1.0.0, Culture=neutral, PublicKeyToken=adb9793829ddae60, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\packages\\Microsoft.Extensions.Caching.Abstractions.2.1.0\\lib\\netstandard2.0\\Microsoft.Extensions.Caching.Abstractions.dll</HintPath>\n    </Reference>\n    <Reference Include=\"Microsoft.Extensions.Caching.Memory, Version=2.1.0.0, Culture=neutral, PublicKeyToken=adb9793829ddae60, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\packages\\Microsoft.Extensions.Caching.Memory.2.1.0\\lib\\netstandard2.0\\Microsoft.Extensions.Caching.Memory.dll</HintPath>\n    </Reference>\n    <Reference Include=\"Microsoft.Extensions.DependencyInjection.Abstractions, Version=2.1.0.0, Culture=neutral, PublicKeyToken=adb9793829ddae60, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\packages\\Microsoft.Extensions.DependencyInjection.Abstractions.2.1.0\\lib\\netstandard2.0\\Microsoft.Extensions.DependencyInjection.Abstractions.dll</HintPath>\n    </Reference>\n    <Reference Include=\"Microsoft.Extensions.Options, Version=2.1.0.0, Culture=neutral, PublicKeyToken=adb9793829ddae60, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\packages\\Microsoft.Extensions.Options.2.1.0\\lib\\netstandard2.0\\Microsoft.Extensions.Options.dll</HintPath>\n    </Reference>\n    <Reference Include=\"Microsoft.Extensions.Primitives, Version=2.1.0.0, Culture=neutral, PublicKeyToken=adb9793829ddae60, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\packages\\Microsoft.Extensions.Primitives.2.1.0\\lib\\netstandard2.0\\Microsoft.Extensions.Primitives.dll</HintPath>\n    </Reference>\n    <Reference Include=\"Microsoft.Threading.Tasks, Version=1.0.12.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\packages\\Microsoft.Bcl.Async.1.0.168\\lib\\net40\\Microsoft.Threading.Tasks.dll</HintPath>\n      <Private>True</Private>\n    </Reference>\n    <Reference Include=\"Microsoft.Threading.Tasks.Extensions, Version=1.0.12.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\packages\\Microsoft.Bcl.Async.1.0.168\\lib\\net40\\Microsoft.Threading.Tasks.Extensions.dll</HintPath>\n      <Private>True</Private>\n    </Reference>\n    <Reference Include=\"Microsoft.Threading.Tasks.Extensions.Desktop, Version=1.0.168.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\packages\\Microsoft.Bcl.Async.1.0.168\\lib\\net40\\Microsoft.Threading.Tasks.Extensions.Desktop.dll</HintPath>\n      <Private>True</Private>\n    </Reference>\n    <Reference Include=\"Newtonsoft.Json, Version=11.0.0.0, Culture=neutral, PublicKeyToken=30ad4fe6b2a6aeed, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\packages\\Newtonsoft.Json.11.0.2\\lib\\net45\\Newtonsoft.Json.dll</HintPath>\n    </Reference>\n    <Reference Include=\"Nito.AsyncEx, Version=4.0.1.0, Culture=neutral, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\packages\\Nito.AsyncEx.4.0.1\\lib\\net45\\Nito.AsyncEx.dll</HintPath>\n      <Private>True</Private>\n    </Reference>\n    <Reference Include=\"Nito.AsyncEx.Concurrent, Version=4.0.1.0, Culture=neutral, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\packages\\Nito.AsyncEx.4.0.1\\lib\\net45\\Nito.AsyncEx.Concurrent.dll</HintPath>\n      <Private>True</Private>\n    </Reference>\n    <Reference Include=\"Nito.AsyncEx.Context, Version=1.1.0.0, Culture=neutral, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\packages\\Nito.AsyncEx.Context.1.1.0\\lib\\net46\\Nito.AsyncEx.Context.dll</HintPath>\n    </Reference>\n    <Reference Include=\"Nito.AsyncEx.Coordination, Version=1.0.2.0, Culture=neutral, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\packages\\Nito.AsyncEx.Coordination.1.0.2\\lib\\net46\\Nito.AsyncEx.Coordination.dll</HintPath>\n    </Reference>\n    <Reference Include=\"Nito.AsyncEx.Enlightenment, Version=4.0.1.0, Culture=neutral, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\packages\\Nito.AsyncEx.4.0.1\\lib\\net45\\Nito.AsyncEx.Enlightenment.dll</HintPath>\n      <Private>True</Private>\n    </Reference>\n    <Reference Include=\"Nito.AsyncEx.Tasks, Version=1.1.0.0, Culture=neutral, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\packages\\Nito.AsyncEx.Tasks.1.1.0\\lib\\net46\\Nito.AsyncEx.Tasks.dll</HintPath>\n    </Reference>\n    <Reference Include=\"Nito.Collections.Deque, Version=1.0.4.0, Culture=neutral, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\packages\\Nito.Collections.Deque.1.0.4\\lib\\netstandard2.0\\Nito.Collections.Deque.dll</HintPath>\n    </Reference>\n    <Reference Include=\"Nito.Disposables, Version=1.2.3.0, Culture=neutral, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\packages\\Nito.Disposables.1.2.3\\lib\\netstandard2.0\\Nito.Disposables.dll</HintPath>\n    </Reference>\n    <Reference Include=\"Rebus, Version=4.2.1.0, Culture=neutral, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\packages\\Rebus.4.2.1\\lib\\net45\\Rebus.dll</HintPath>\n    </Reference>\n    <Reference Include=\"System\" />\n    <Reference Include=\"System.Buffers, Version=4.0.2.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\packages\\System.Buffers.4.4.0\\lib\\netstandard2.0\\System.Buffers.dll</HintPath>\n    </Reference>\n    <Reference Include=\"System.Collections.Immutable, Version=1.2.3.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\packages\\System.Collections.Immutable.1.5.0\\lib\\netstandard2.0\\System.Collections.Immutable.dll</HintPath>\n    </Reference>\n    <Reference Include=\"System.ComponentModel.Annotations, Version=4.2.1.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\packages\\System.ComponentModel.Annotations.4.5.0\\lib\\net461\\System.ComponentModel.Annotations.dll</HintPath>\n    </Reference>\n    <Reference Include=\"System.ComponentModel.DataAnnotations\" />\n    <Reference Include=\"System.Configuration\" />\n    <Reference Include=\"System.Configuration.ConfigurationManager, Version=4.0.1.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\packages\\System.Configuration.ConfigurationManager.4.5.0\\lib\\net461\\System.Configuration.ConfigurationManager.dll</HintPath>\n    </Reference>\n    <Reference Include=\"System.Core\" />\n    <Reference Include=\"System.Data.Common, Version=4.1.1.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\packages\\System.Data.Common.4.3.0\\lib\\net451\\System.Data.Common.dll</HintPath>\n      <Private>True</Private>\n    </Reference>\n    <Reference Include=\"System.Data.OracleClient\" />\n    <Reference Include=\"System.Drawing\" />\n    <Reference Include=\"System.Linq.Dynamic, Version=1.0.6132.35681, Culture=neutral, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\packages\\System.Linq.Dynamic.1.0.7\\lib\\net40\\System.Linq.Dynamic.dll</HintPath>\n      <Private>True</Private>\n    </Reference>\n    <Reference Include=\"System.Linq.Dynamic.Core, Version=0.0.0.0, Culture=neutral, PublicKeyToken=0f07ec44de6ac832, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\packages\\System.Linq.Dynamic.Core.1.0.8.9\\lib\\net46\\System.Linq.Dynamic.Core.dll</HintPath>\n    </Reference>\n    <Reference Include=\"System.Memory, Version=4.0.1.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\packages\\System.Memory.4.5.0\\lib\\netstandard2.0\\System.Memory.dll</HintPath>\n    </Reference>\n    <Reference Include=\"System.Net\" />\n    <Reference Include=\"System.Numerics\" />\n    <Reference Include=\"System.Numerics.Vectors, Version=4.1.3.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\packages\\System.Numerics.Vectors.4.4.0\\lib\\net46\\System.Numerics.Vectors.dll</HintPath>\n    </Reference>\n    <Reference Include=\"System.Runtime.Caching\" />\n    <Reference Include=\"System.Runtime.CompilerServices.Unsafe, Version=4.0.4.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\packages\\System.Runtime.CompilerServices.Unsafe.4.5.0\\lib\\netstandard2.0\\System.Runtime.CompilerServices.Unsafe.dll</HintPath>\n    </Reference>\n    <Reference Include=\"System.Runtime.InteropServices.RuntimeInformation, Version=4.0.1.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\packages\\System.Runtime.InteropServices.RuntimeInformation.4.3.0\\lib\\net45\\System.Runtime.InteropServices.RuntimeInformation.dll</HintPath>\n      <Private>True</Private>\n    </Reference>\n    <Reference Include=\"System.Runtime.Remoting\" />\n    <Reference Include=\"System.Runtime.Serialization\" />\n    <Reference Include=\"System.Runtime.Serialization.Formatters, Version=4.0.1.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\packages\\System.Runtime.Serialization.Formatters.4.3.0\\lib\\net46\\System.Runtime.Serialization.Formatters.dll</HintPath>\n      <Private>True</Private>\n    </Reference>\n    <Reference Include=\"System.Runtime.Serialization.Primitives, Version=4.1.2.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\packages\\System.Runtime.Serialization.Primitives.4.3.0\\lib\\net46\\System.Runtime.Serialization.Primitives.dll</HintPath>\n      <Private>True</Private>\n    </Reference>\n    <Reference Include=\"System.Security.AccessControl, Version=4.1.1.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\packages\\System.Security.AccessControl.4.5.0\\lib\\net461\\System.Security.AccessControl.dll</HintPath>\n    </Reference>\n    <Reference Include=\"System.Security.Claims, Version=4.0.2.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\packages\\System.Security.Claims.4.3.0\\lib\\net46\\System.Security.Claims.dll</HintPath>\n      <Private>True</Private>\n    </Reference>\n    <Reference Include=\"System.Security.Permissions, Version=4.0.1.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\packages\\System.Security.Permissions.4.5.0\\lib\\net461\\System.Security.Permissions.dll</HintPath>\n    </Reference>\n    <Reference Include=\"System.Security.Principal.Windows, Version=4.1.1.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\packages\\System.Security.Principal.Windows.4.5.0\\lib\\net461\\System.Security.Principal.Windows.dll</HintPath>\n    </Reference>\n    <Reference Include=\"System.ServiceProcess\" />\n    <Reference Include=\"System.Transactions\" />\n    <Reference Include=\"System.Web\" />\n    <Reference Include=\"System.Xml.Linq\" />\n    <Reference Include=\"System.Data.DataSetExtensions\" />\n    <Reference Include=\"Microsoft.CSharp\" />\n    <Reference Include=\"System.Data\" />\n    <Reference Include=\"System.Net.Http\" />\n    <Reference Include=\"System.Xml\" />\n    <Reference Include=\"System.Xml.XmlDocument, Version=4.0.2.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\packages\\System.Xml.XmlDocument.4.3.0\\lib\\net46\\System.Xml.XmlDocument.dll</HintPath>\n      <Private>True</Private>\n    </Reference>\n    <Reference Include=\"System.Xml.XPath, Version=4.0.2.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\packages\\System.Xml.XPath.4.3.0\\lib\\net46\\System.Xml.XPath.dll</HintPath>\n      <Private>True</Private>\n    </Reference>\n    <Reference Include=\"System.Xml.XPath.XmlDocument, Version=4.0.2.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\packages\\System.Xml.XPath.XmlDocument.4.3.0\\lib\\net46\\System.Xml.XPath.XmlDocument.dll</HintPath>\n    </Reference>\n    <Reference Include=\"TimeZoneConverter, Version=2.4.1.0, Culture=neutral, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\packages\\TimeZoneConverter.2.4.1\\lib\\net45\\TimeZoneConverter.dll</HintPath>\n    </Reference>\n  </ItemGroup>\n  <ItemGroup>\n    <Compile Include=\"Auditing\\AuditingStores\\AuditInfoMqMessage.cs\" />\n    <Compile Include=\"Auditing\\AuditingStores\\MqMessageAuditingStore.cs\" />\n    <Compile Include=\"Auditing\\AuditingStores\\MqMessageAuditingStoreModule.cs\" />\n    <Compile Include=\"Properties\\AssemblyInfo.cs\" />\n  </ItemGroup>\n  <ItemGroup>\n    <None Include=\"Abplus.MqMessages.AuditingStore.nuspec\" />\n    <None Include=\"app.config\" />\n    <None Include=\"packages.config\" />\n  </ItemGroup>\n  <Import Project=\"$(MSBuildToolsPath)\\Microsoft.CSharp.targets\" />\n  <Import Project=\"..\\..\\packages\\Microsoft.Bcl.Build.1.0.21\\build\\Microsoft.Bcl.Build.targets\" Condition=\"Exists('..\\..\\packages\\Microsoft.Bcl.Build.1.0.21\\build\\Microsoft.Bcl.Build.targets')\" />\n  <Target Name=\"EnsureNuGetPackageBuildImports\" BeforeTargets=\"PrepareForBuild\">\n    <PropertyGroup>\n      <ErrorText>这台计算机上缺少此项目引用的 NuGet 程序包。使用“NuGet 程序包还原”可下载这些程序包。有关更多信息，请参见 http://go.microsoft.com/fwlink/?LinkID=322105。缺少的文件是 {0}。</ErrorText>\n    </PropertyGroup>\n    <Error Condition=\"!Exists('..\\..\\packages\\Microsoft.Bcl.Build.1.0.21\\build\\Microsoft.Bcl.Build.targets')\" Text=\"$([System.String]::Format('$(ErrorText)', '..\\..\\packages\\Microsoft.Bcl.Build.1.0.21\\build\\Microsoft.Bcl.Build.targets'))\" />\n  </Target>\n  <!-- To modify your build process, add your task inside one of the targets below and uncomment it. \n       Other similar extension points exist, see Microsoft.Common.targets.\n  <Target Name=\"BeforeBuild\">\n  </Target>\n  <Target Name=\"AfterBuild\">\n  </Target>\n  -->\n</Project>"
  },
  {
    "path": "src2/Abplus.MqMessages.AuditingStore/Abplus.MqMessages.AuditingStore.nuspec",
    "content": "<?xml version=\"1.0\"?>\n<package >\n  <metadata>\n    <id>$id$</id>\n    <version>$version$</version>\n    <title>$title$</title>\n    <authors>personball</authors>\n    <owners>personball</owners>\n    <licenseUrl>https://raw.githubusercontent.com/personball/abplus/master/LICENSE</licenseUrl>\n    <projectUrl>https://github.com/personball/abplus</projectUrl>\n    <iconUrl>https://raw.githubusercontent.com/personball/abplus/master/abplus_icon.png</iconUrl>\n    <requireLicenseAcceptance>false</requireLicenseAcceptance>\n    <description>Abp plus, an extension for Abp Framework. </description>\n    <releaseNotes></releaseNotes>\n    <copyright>Copyright 2017</copyright>\n    <tags></tags>\n    <dependencies>\n      <dependency id=\"Abplus.MqMessages.RebusCore\" version=\"$version$\" />\n    </dependencies>\n  </metadata>\n</package>"
  },
  {
    "path": "src2/Abplus.MqMessages.AuditingStore/Auditing/AuditingStores/AuditInfoMqMessage.cs",
    "content": "﻿using System;\n\nnamespace Abp.Auditing.AuditingStores\n{\n    public class AuditInfoMqMessage\n    {\n        /// <summary>\n        /// TenantId.\n        /// </summary>\n        public int? TenantId { get; set; }\n\n        /// <summary>\n        /// UserId.\n        /// </summary>\n        public long? UserId { get; set; }\n\n        /// <summary>\n        /// ImpersonatorUserId.\n        /// </summary>\n        public long? ImpersonatorUserId { get; set; }\n\n        /// <summary>\n        /// ImpersonatorTenantId.\n        /// </summary>\n        public int? ImpersonatorTenantId { get; set; }\n\n        /// <summary>\n        /// Service (class/interface) name.\n        /// </summary>\n        public string ServiceName { get; set; }\n\n        /// <summary>\n        /// Executed method name.\n        /// </summary>\n        public string MethodName { get; set; }\n\n        /// <summary>\n        /// Calling parameters.\n        /// </summary>\n        public string Parameters { get; set; }\n\n        /// <summary>\n        /// Start time of the method execution.\n        /// </summary>\n        public DateTime ExecutionTime { get; set; }\n\n        /// <summary>\n        /// Total duration of the method call.\n        /// </summary>\n        public int ExecutionDuration { get; set; }\n\n        /// <summary>\n        /// IP address of the client.\n        /// </summary>\n        public string ClientIpAddress { get; set; }\n\n        /// <summary>\n        /// Name (generally computer name) of the client.\n        /// </summary>\n        public string ClientName { get; set; }\n\n        /// <summary>\n        /// Browser information if this method is called in a web request.\n        /// </summary>\n        public string BrowserInfo { get; set; }\n\n        /// <summary>\n        /// Optional custom data that can be filled and used.\n        /// </summary>\n        public string CustomData { get; set; }\n\n        /// <summary>\n        /// \n        /// </summary>\n        public string Exception { get; set; }\n    }\n}\n"
  },
  {
    "path": "src2/Abplus.MqMessages.AuditingStore/Auditing/AuditingStores/MqMessageAuditingStore.cs",
    "content": "﻿using System;\nusing System.Threading.Tasks;\nusing Abp.Dependency;\nusing Abp.MqMessages;\n\nnamespace Abp.Auditing.AuditingStores\n{\n    public class MqMessageAuditingStore : IAuditingStore, ITransientDependency\n    {\n        private readonly Lazy<IMqMessagePublisher> MqMessagePublisher;//why this need Lazy<>?\n\n        public MqMessageAuditingStore()\n        {\n            MqMessagePublisher = new Lazy<IMqMessagePublisher>(() =>\n            {\n                return IocManager.Instance.Resolve<IMqMessagePublisher>();\n            });\n        }\n\n        public async Task SaveAsync(AuditInfo auditInfo)\n        {\n            var mqMsgAuditInfo = new AuditInfoMqMessage\n            {\n                BrowserInfo = auditInfo.BrowserInfo,\n                ClientIpAddress = auditInfo.ClientIpAddress,\n                ClientName = auditInfo.ClientName,\n                CustomData = auditInfo.CustomData,\n                ExecutionDuration = auditInfo.ExecutionDuration,\n                ImpersonatorTenantId = auditInfo.ImpersonatorTenantId,\n                ImpersonatorUserId = auditInfo.ImpersonatorUserId,\n                MethodName = auditInfo.MethodName,\n                Parameters = auditInfo.Parameters,\n                ServiceName = auditInfo.ServiceName,\n                UserId = auditInfo.UserId,\n                ExecutionTime = auditInfo.ExecutionTime,\n                TenantId = auditInfo.TenantId\n            };\n\n            if (auditInfo.Exception != null)\n            {\n                mqMsgAuditInfo.CustomData += $\" {auditInfo.Exception.Message}\";\n                mqMsgAuditInfo.Exception = auditInfo.Exception.StackTrace;\n                if (auditInfo.Exception.InnerException != null)\n                {\n                    mqMsgAuditInfo.CustomData += $\" {auditInfo.Exception.InnerException.Message}\";\n                    mqMsgAuditInfo.Exception = auditInfo.Exception.InnerException.StackTrace;\n                }\n            }\n\n            await MqMessagePublisher.Value.PublishAsync(mqMsgAuditInfo);\n        }\n    }\n}\n"
  },
  {
    "path": "src2/Abplus.MqMessages.AuditingStore/Auditing/AuditingStores/MqMessageAuditingStoreModule.cs",
    "content": "﻿using Abp.Modules;\nusing Abp.MqMessages.Publishers;\n\nnamespace Abp.Auditing.AuditingStores\n{\n    [DependsOn(typeof(RebusRabbitMqPublisherCoreModule))]\n    public class MqMessageAuditingStoreModule : AbpModule\n    {\n        public override void PreInitialize()\n        {\n            IocManager.Register<IAuditingStore, MqMessageAuditingStore>();\n        }\n    }\n}\n"
  },
  {
    "path": "src2/Abplus.MqMessages.AuditingStore/Properties/AssemblyInfo.cs",
    "content": "﻿using System.Reflection;\nusing System.Runtime.CompilerServices;\nusing System.Runtime.InteropServices;\nusing Abp;\n\n// 有关程序集的一般信息由以下\n// 控制。更改这些特性值可修改\n// 与程序集关联的信息。\n[assembly: AssemblyTitle(\"Abplus.MqMessages.AuditingStore\")]\n[assembly: AssemblyDescription(\"\")]\n[assembly: AssemblyConfiguration(\"\")]\n[assembly: AssemblyCompany(\"\")]\n[assembly: AssemblyProduct(\"Abplus.MqMessages.AuditingStore\")]\n[assembly: AssemblyCopyright(\"Copyright ©  2017\")]\n[assembly: AssemblyTrademark(\"\")]\n[assembly: AssemblyCulture(\"\")]\n\n//将 ComVisible 设置为 false 将使此程序集中的类型\n//对 COM 组件不可见。  如果需要从 COM 访问此程序集中的类型，\n//请将此类型的 ComVisible 特性设置为 true。\n[assembly: ComVisible(false)]\n\n// 如果此项目向 COM 公开，则下列 GUID 用于类型库的 ID\n[assembly: Guid(\"b1585b83-25a5-4c8c-a384-b1205e459c16\")]\n\n// 程序集的版本信息由下列四个值组成: \n//\n//      主版本\n//      次版本\n//      生成号\n//      修订号\n//\n//可以指定所有这些值，也可以使用“生成号”和“修订号”的默认值，\n// 方法是按如下所示使用“*”: :\n// [assembly: AssemblyVersion(\"1.0.*\")]\n[assembly: AssemblyVersion(AbplusConsts.CurrentVersion)]\n[assembly: AssemblyFileVersion(AbplusConsts.CurrentVersion)]\n"
  },
  {
    "path": "src2/Abplus.MqMessages.AuditingStore/app.config",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<configuration>\n  <runtime>\n    <assemblyBinding xmlns=\"urn:schemas-microsoft-com:asm.v1\">\n      <dependentAssembly>\n        <assemblyIdentity name=\"Newtonsoft.Json\" publicKeyToken=\"30ad4fe6b2a6aeed\" culture=\"neutral\" />\n        <bindingRedirect oldVersion=\"0.0.0.0-11.0.0.0\" newVersion=\"11.0.0.0\" />\n      </dependentAssembly>\n      <dependentAssembly>\n        <assemblyIdentity name=\"Castle.Core\" publicKeyToken=\"407dd0808d44fbdc\" culture=\"neutral\" />\n        <bindingRedirect oldVersion=\"0.0.0.0-4.0.0.0\" newVersion=\"4.0.0.0\" />\n      </dependentAssembly>\n      <dependentAssembly>\n        <assemblyIdentity name=\"Castle.Windsor\" publicKeyToken=\"407dd0808d44fbdc\" culture=\"neutral\" />\n        <bindingRedirect oldVersion=\"0.0.0.0-4.0.0.0\" newVersion=\"4.0.0.0\" />\n      </dependentAssembly>\n      <dependentAssembly>\n        <assemblyIdentity name=\"Microsoft.Extensions.Caching.Abstractions\" publicKeyToken=\"adb9793829ddae60\" culture=\"neutral\" />\n        <bindingRedirect oldVersion=\"0.0.0.0-2.0.1.0\" newVersion=\"2.0.1.0\" />\n      </dependentAssembly>\n      <dependentAssembly>\n        <assemblyIdentity name=\"Microsoft.Extensions.Caching.Memory\" publicKeyToken=\"adb9793829ddae60\" culture=\"neutral\" />\n        <bindingRedirect oldVersion=\"0.0.0.0-2.0.1.0\" newVersion=\"2.0.1.0\" />\n      </dependentAssembly>\n      <dependentAssembly>\n        <assemblyIdentity name=\"Microsoft.Extensions.Options\" publicKeyToken=\"adb9793829ddae60\" culture=\"neutral\" />\n        <bindingRedirect oldVersion=\"0.0.0.0-2.0.1.0\" newVersion=\"2.0.1.0\" />\n      </dependentAssembly>\n      <dependentAssembly>\n        <assemblyIdentity name=\"System.Runtime.InteropServices.RuntimeInformation\" publicKeyToken=\"b03f5f7f11d50a3a\" culture=\"neutral\" />\n        <bindingRedirect oldVersion=\"0.0.0.0-4.0.2.0\" newVersion=\"4.0.2.0\" />\n      </dependentAssembly>\n      <dependentAssembly>\n        <assemblyIdentity name=\"System.Collections.Immutable\" publicKeyToken=\"b03f5f7f11d50a3a\" culture=\"neutral\" />\n        <bindingRedirect oldVersion=\"0.0.0.0-1.2.3.0\" newVersion=\"1.2.3.0\" />\n      </dependentAssembly>\n      <dependentAssembly>\n        <assemblyIdentity name=\"System.ComponentModel.Annotations\" publicKeyToken=\"b03f5f7f11d50a3a\" culture=\"neutral\" />\n        <bindingRedirect oldVersion=\"0.0.0.0-4.2.1.0\" newVersion=\"4.2.1.0\" />\n      </dependentAssembly>\n    </assemblyBinding>\n  </runtime>\n</configuration>"
  },
  {
    "path": "src2/Abplus.MqMessages.AuditingStore/packages.config",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<packages>\n  <package id=\"Abp\" version=\"3.7.2\" targetFramework=\"net461\" />\n  <package id=\"Abplus\" version=\"0.1.7.6\" targetFramework=\"net461\" />\n  <package id=\"Abplus.MqMessages.RebusCore\" version=\"0.1.6.3\" targetFramework=\"net461\" />\n  <package id=\"Castle.Core\" version=\"4.3.1\" targetFramework=\"net461\" />\n  <package id=\"Castle.LoggingFacility\" version=\"4.1.0\" targetFramework=\"net461\" />\n  <package id=\"Castle.Windsor\" version=\"4.1.0\" targetFramework=\"net461\" />\n  <package id=\"JetBrains.Annotations\" version=\"11.1.0\" targetFramework=\"net461\" />\n  <package id=\"Microsoft.Bcl\" version=\"1.1.10\" targetFramework=\"net461\" />\n  <package id=\"Microsoft.Bcl.Async\" version=\"1.0.168\" targetFramework=\"net461\" />\n  <package id=\"Microsoft.Bcl.Build\" version=\"1.0.21\" targetFramework=\"net461\" />\n  <package id=\"Microsoft.Extensions.Caching.Abstractions\" version=\"2.1.0\" targetFramework=\"net461\" />\n  <package id=\"Microsoft.Extensions.Caching.Memory\" version=\"2.1.0\" targetFramework=\"net461\" />\n  <package id=\"Microsoft.Extensions.DependencyInjection.Abstractions\" version=\"2.1.0\" targetFramework=\"net461\" />\n  <package id=\"Microsoft.Extensions.Options\" version=\"2.1.0\" targetFramework=\"net461\" />\n  <package id=\"Microsoft.Extensions.Primitives\" version=\"2.1.0\" targetFramework=\"net461\" />\n  <package id=\"Newtonsoft.Json\" version=\"11.0.2\" targetFramework=\"net461\" />\n  <package id=\"Nito.AsyncEx\" version=\"4.0.1\" targetFramework=\"net461\" />\n  <package id=\"Nito.AsyncEx.Context\" version=\"1.1.0\" targetFramework=\"net461\" />\n  <package id=\"Nito.AsyncEx.Coordination\" version=\"1.0.2\" targetFramework=\"net461\" />\n  <package id=\"Nito.AsyncEx.Tasks\" version=\"1.1.0\" targetFramework=\"net461\" />\n  <package id=\"Nito.Collections.Deque\" version=\"1.0.4\" targetFramework=\"net461\" />\n  <package id=\"Nito.Disposables\" version=\"1.2.3\" targetFramework=\"net461\" />\n  <package id=\"Rebus\" version=\"4.2.1\" targetFramework=\"net461\" />\n  <package id=\"System.Buffers\" version=\"4.4.0\" targetFramework=\"net461\" />\n  <package id=\"System.Collections.Immutable\" version=\"1.5.0\" targetFramework=\"net461\" />\n  <package id=\"System.ComponentModel.Annotations\" version=\"4.5.0\" targetFramework=\"net461\" />\n  <package id=\"System.Configuration.ConfigurationManager\" version=\"4.5.0\" targetFramework=\"net461\" />\n  <package id=\"System.Data.Common\" version=\"4.3.0\" targetFramework=\"net461\" />\n  <package id=\"System.Linq.Dynamic\" version=\"1.0.7\" targetFramework=\"net461\" />\n  <package id=\"System.Linq.Dynamic.Core\" version=\"1.0.8.9\" targetFramework=\"net461\" />\n  <package id=\"System.Linq.Queryable\" version=\"4.3.0\" targetFramework=\"net461\" />\n  <package id=\"System.Memory\" version=\"4.5.0\" targetFramework=\"net461\" />\n  <package id=\"System.Numerics.Vectors\" version=\"4.4.0\" targetFramework=\"net461\" />\n  <package id=\"System.Runtime.CompilerServices.Unsafe\" version=\"4.5.0\" targetFramework=\"net461\" />\n  <package id=\"System.Runtime.InteropServices.RuntimeInformation\" version=\"4.3.0\" targetFramework=\"net461\" />\n  <package id=\"System.Runtime.Serialization.Formatters\" version=\"4.3.0\" targetFramework=\"net461\" />\n  <package id=\"System.Runtime.Serialization.Primitives\" version=\"4.3.0\" targetFramework=\"net461\" />\n  <package id=\"System.Security.AccessControl\" version=\"4.5.0\" targetFramework=\"net461\" />\n  <package id=\"System.Security.Claims\" version=\"4.3.0\" targetFramework=\"net461\" />\n  <package id=\"System.Security.Permissions\" version=\"4.5.0\" targetFramework=\"net461\" />\n  <package id=\"System.Security.Principal.Windows\" version=\"4.5.0\" targetFramework=\"net461\" />\n  <package id=\"System.Threading\" version=\"4.3.0\" targetFramework=\"net461\" />\n  <package id=\"System.Xml.XmlDocument\" version=\"4.3.0\" targetFramework=\"net461\" />\n  <package id=\"System.Xml.XPath\" version=\"4.3.0\" targetFramework=\"net461\" />\n  <package id=\"System.Xml.XPath.XmlDocument\" version=\"4.3.0\" targetFramework=\"net461\" />\n  <package id=\"TimeZoneConverter\" version=\"2.4.1\" targetFramework=\"net461\" />\n</packages>"
  },
  {
    "path": "src2/Abplus.MqMessages.IndexToES/Abplus.MqMessages.IndexToES.csproj",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<Project ToolsVersion=\"14.0\" DefaultTargets=\"Build\" xmlns=\"http://schemas.microsoft.com/developer/msbuild/2003\">\n  <Import Project=\"$(MSBuildExtensionsPath)\\$(MSBuildToolsVersion)\\Microsoft.Common.props\" Condition=\"Exists('$(MSBuildExtensionsPath)\\$(MSBuildToolsVersion)\\Microsoft.Common.props')\" />\n  <PropertyGroup>\n    <Configuration Condition=\" '$(Configuration)' == '' \">Debug</Configuration>\n    <Platform Condition=\" '$(Platform)' == '' \">AnyCPU</Platform>\n    <ProjectGuid>{47D3D635-4801-4D88-8AB5-B933FBFB8BA6}</ProjectGuid>\n    <OutputType>Library</OutputType>\n    <AppDesignerFolder>Properties</AppDesignerFolder>\n    <RootNamespace>Abp</RootNamespace>\n    <AssemblyName>Abplus.MqMessages.IndexToES</AssemblyName>\n    <TargetFrameworkVersion>v4.6.1</TargetFrameworkVersion>\n    <FileAlignment>512</FileAlignment>\n    <NuGetPackageImportStamp>\n    </NuGetPackageImportStamp>\n  </PropertyGroup>\n  <PropertyGroup Condition=\" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' \">\n    <DebugSymbols>true</DebugSymbols>\n    <DebugType>full</DebugType>\n    <Optimize>false</Optimize>\n    <OutputPath>bin\\Debug\\</OutputPath>\n    <DefineConstants>DEBUG;TRACE</DefineConstants>\n    <ErrorReport>prompt</ErrorReport>\n    <WarningLevel>4</WarningLevel>\n  </PropertyGroup>\n  <PropertyGroup Condition=\" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' \">\n    <DebugType>pdbonly</DebugType>\n    <Optimize>true</Optimize>\n    <OutputPath>bin\\Release\\</OutputPath>\n    <DefineConstants>TRACE</DefineConstants>\n    <ErrorReport>prompt</ErrorReport>\n    <WarningLevel>4</WarningLevel>\n  </PropertyGroup>\n  <ItemGroup>\n    <Reference Include=\"Abp, Version=3.7.2.0, Culture=neutral, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\packages\\Abp.3.7.2\\lib\\netstandard2.0\\Abp.dll</HintPath>\n    </Reference>\n    <Reference Include=\"Castle.Core, Version=4.0.0.0, Culture=neutral, PublicKeyToken=407dd0808d44fbdc, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\packages\\Castle.Core.4.3.1\\lib\\net45\\Castle.Core.dll</HintPath>\n    </Reference>\n    <Reference Include=\"Castle.Facilities.Logging, Version=4.0.0.0, Culture=neutral, PublicKeyToken=407dd0808d44fbdc, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\packages\\Castle.LoggingFacility.4.1.0\\lib\\net45\\Castle.Facilities.Logging.dll</HintPath>\n    </Reference>\n    <Reference Include=\"Castle.Windsor, Version=4.0.0.0, Culture=neutral, PublicKeyToken=407dd0808d44fbdc, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\packages\\Castle.Windsor.4.1.0\\lib\\net45\\Castle.Windsor.dll</HintPath>\n    </Reference>\n    <Reference Include=\"Elasticsearch.Net, Version=6.0.0.0, Culture=neutral, PublicKeyToken=96c599bbe3e70f5d, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\packages\\Elasticsearch.Net.6.0.2\\lib\\net46\\Elasticsearch.Net.dll</HintPath>\n    </Reference>\n    <Reference Include=\"JetBrains.Annotations, Version=11.1.0.0, Culture=neutral, PublicKeyToken=1010a0d8d6380325, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\packages\\JetBrains.Annotations.11.1.0\\lib\\net20\\JetBrains.Annotations.dll</HintPath>\n    </Reference>\n    <Reference Include=\"Microsoft.Extensions.Caching.Abstractions, Version=2.1.0.0, Culture=neutral, PublicKeyToken=adb9793829ddae60, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\packages\\Microsoft.Extensions.Caching.Abstractions.2.1.0\\lib\\netstandard2.0\\Microsoft.Extensions.Caching.Abstractions.dll</HintPath>\n    </Reference>\n    <Reference Include=\"Microsoft.Extensions.Caching.Memory, Version=2.1.0.0, Culture=neutral, PublicKeyToken=adb9793829ddae60, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\packages\\Microsoft.Extensions.Caching.Memory.2.1.0\\lib\\netstandard2.0\\Microsoft.Extensions.Caching.Memory.dll</HintPath>\n    </Reference>\n    <Reference Include=\"Microsoft.Extensions.DependencyInjection.Abstractions, Version=2.1.0.0, Culture=neutral, PublicKeyToken=adb9793829ddae60, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\packages\\Microsoft.Extensions.DependencyInjection.Abstractions.2.1.0\\lib\\netstandard2.0\\Microsoft.Extensions.DependencyInjection.Abstractions.dll</HintPath>\n    </Reference>\n    <Reference Include=\"Microsoft.Extensions.Options, Version=2.1.0.0, Culture=neutral, PublicKeyToken=adb9793829ddae60, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\packages\\Microsoft.Extensions.Options.2.1.0\\lib\\netstandard2.0\\Microsoft.Extensions.Options.dll</HintPath>\n    </Reference>\n    <Reference Include=\"Microsoft.Extensions.Primitives, Version=2.1.0.0, Culture=neutral, PublicKeyToken=adb9793829ddae60, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\packages\\Microsoft.Extensions.Primitives.2.1.0\\lib\\netstandard2.0\\Microsoft.Extensions.Primitives.dll</HintPath>\n    </Reference>\n    <Reference Include=\"Microsoft.Threading.Tasks, Version=1.0.12.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\packages\\Microsoft.Bcl.Async.1.0.168\\lib\\net40\\Microsoft.Threading.Tasks.dll</HintPath>\n      <Private>True</Private>\n    </Reference>\n    <Reference Include=\"Microsoft.Threading.Tasks.Extensions, Version=1.0.12.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\packages\\Microsoft.Bcl.Async.1.0.168\\lib\\net40\\Microsoft.Threading.Tasks.Extensions.dll</HintPath>\n      <Private>True</Private>\n    </Reference>\n    <Reference Include=\"Microsoft.Threading.Tasks.Extensions.Desktop, Version=1.0.168.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\packages\\Microsoft.Bcl.Async.1.0.168\\lib\\net40\\Microsoft.Threading.Tasks.Extensions.Desktop.dll</HintPath>\n      <Private>True</Private>\n    </Reference>\n    <Reference Include=\"Nest, Version=6.0.0.0, Culture=neutral, PublicKeyToken=96c599bbe3e70f5d, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\packages\\NEST.6.0.2\\lib\\net46\\Nest.dll</HintPath>\n    </Reference>\n    <Reference Include=\"Newtonsoft.Json, Version=11.0.0.0, Culture=neutral, PublicKeyToken=30ad4fe6b2a6aeed, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\packages\\Newtonsoft.Json.11.0.2\\lib\\net45\\Newtonsoft.Json.dll</HintPath>\n    </Reference>\n    <Reference Include=\"Nito.AsyncEx, Version=4.0.1.0, Culture=neutral, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\packages\\Nito.AsyncEx.4.0.1\\lib\\net45\\Nito.AsyncEx.dll</HintPath>\n      <Private>True</Private>\n    </Reference>\n    <Reference Include=\"Nito.AsyncEx.Concurrent, Version=4.0.1.0, Culture=neutral, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\packages\\Nito.AsyncEx.4.0.1\\lib\\net45\\Nito.AsyncEx.Concurrent.dll</HintPath>\n      <Private>True</Private>\n    </Reference>\n    <Reference Include=\"Nito.AsyncEx.Context, Version=1.1.0.0, Culture=neutral, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\packages\\Nito.AsyncEx.Context.1.1.0\\lib\\net46\\Nito.AsyncEx.Context.dll</HintPath>\n    </Reference>\n    <Reference Include=\"Nito.AsyncEx.Coordination, Version=1.0.2.0, Culture=neutral, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\packages\\Nito.AsyncEx.Coordination.1.0.2\\lib\\net46\\Nito.AsyncEx.Coordination.dll</HintPath>\n    </Reference>\n    <Reference Include=\"Nito.AsyncEx.Enlightenment, Version=4.0.1.0, Culture=neutral, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\packages\\Nito.AsyncEx.4.0.1\\lib\\net45\\Nito.AsyncEx.Enlightenment.dll</HintPath>\n      <Private>True</Private>\n    </Reference>\n    <Reference Include=\"Nito.AsyncEx.Tasks, Version=1.1.0.0, Culture=neutral, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\packages\\Nito.AsyncEx.Tasks.1.1.0\\lib\\net46\\Nito.AsyncEx.Tasks.dll</HintPath>\n    </Reference>\n    <Reference Include=\"Nito.Collections.Deque, Version=1.0.4.0, Culture=neutral, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\packages\\Nito.Collections.Deque.1.0.4\\lib\\netstandard2.0\\Nito.Collections.Deque.dll</HintPath>\n    </Reference>\n    <Reference Include=\"Nito.Disposables, Version=1.2.3.0, Culture=neutral, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\packages\\Nito.Disposables.1.2.3\\lib\\netstandard2.0\\Nito.Disposables.dll</HintPath>\n    </Reference>\n    <Reference Include=\"Rebus, Version=4.2.1.0, Culture=neutral, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\packages\\Rebus.4.2.1\\lib\\net45\\Rebus.dll</HintPath>\n    </Reference>\n    <Reference Include=\"System\" />\n    <Reference Include=\"System.Buffers, Version=4.0.2.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\packages\\System.Buffers.4.4.0\\lib\\netstandard2.0\\System.Buffers.dll</HintPath>\n    </Reference>\n    <Reference Include=\"System.Collections.Immutable, Version=1.2.3.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\packages\\System.Collections.Immutable.1.5.0\\lib\\netstandard2.0\\System.Collections.Immutable.dll</HintPath>\n    </Reference>\n    <Reference Include=\"System.ComponentModel.Annotations, Version=4.2.1.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\packages\\System.ComponentModel.Annotations.4.5.0\\lib\\net461\\System.ComponentModel.Annotations.dll</HintPath>\n    </Reference>\n    <Reference Include=\"System.ComponentModel.DataAnnotations\" />\n    <Reference Include=\"System.Configuration\" />\n    <Reference Include=\"System.Configuration.ConfigurationManager, Version=4.0.1.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\packages\\System.Configuration.ConfigurationManager.4.5.0\\lib\\net461\\System.Configuration.ConfigurationManager.dll</HintPath>\n    </Reference>\n    <Reference Include=\"System.Core\" />\n    <Reference Include=\"System.Data.Common, Version=4.1.1.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\packages\\System.Data.Common.4.3.0\\lib\\net451\\System.Data.Common.dll</HintPath>\n      <Private>True</Private>\n    </Reference>\n    <Reference Include=\"System.Data.OracleClient\" />\n    <Reference Include=\"System.Drawing\" />\n    <Reference Include=\"System.Linq.Dynamic, Version=1.0.6132.35681, Culture=neutral, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\packages\\System.Linq.Dynamic.1.0.7\\lib\\net40\\System.Linq.Dynamic.dll</HintPath>\n      <Private>True</Private>\n    </Reference>\n    <Reference Include=\"System.Linq.Dynamic.Core, Version=0.0.0.0, Culture=neutral, PublicKeyToken=0f07ec44de6ac832, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\packages\\System.Linq.Dynamic.Core.1.0.8.9\\lib\\net46\\System.Linq.Dynamic.Core.dll</HintPath>\n    </Reference>\n    <Reference Include=\"System.Memory, Version=4.0.1.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\packages\\System.Memory.4.5.0\\lib\\netstandard2.0\\System.Memory.dll</HintPath>\n    </Reference>\n    <Reference Include=\"System.Net\" />\n    <Reference Include=\"System.Numerics\" />\n    <Reference Include=\"System.Numerics.Vectors, Version=4.1.3.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\packages\\System.Numerics.Vectors.4.4.0\\lib\\net46\\System.Numerics.Vectors.dll</HintPath>\n    </Reference>\n    <Reference Include=\"System.Runtime.Caching\" />\n    <Reference Include=\"System.Runtime.CompilerServices.Unsafe, Version=4.0.4.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\packages\\System.Runtime.CompilerServices.Unsafe.4.5.0\\lib\\netstandard2.0\\System.Runtime.CompilerServices.Unsafe.dll</HintPath>\n    </Reference>\n    <Reference Include=\"System.Runtime.InteropServices.RuntimeInformation, Version=4.0.1.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\packages\\System.Runtime.InteropServices.RuntimeInformation.4.3.0\\lib\\net45\\System.Runtime.InteropServices.RuntimeInformation.dll</HintPath>\n      <Private>True</Private>\n    </Reference>\n    <Reference Include=\"System.Runtime.Remoting\" />\n    <Reference Include=\"System.Runtime.Serialization\" />\n    <Reference Include=\"System.Runtime.Serialization.Formatters, Version=4.0.1.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\packages\\System.Runtime.Serialization.Formatters.4.3.0\\lib\\net46\\System.Runtime.Serialization.Formatters.dll</HintPath>\n      <Private>True</Private>\n    </Reference>\n    <Reference Include=\"System.Runtime.Serialization.Primitives, Version=4.1.2.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\packages\\System.Runtime.Serialization.Primitives.4.3.0\\lib\\net46\\System.Runtime.Serialization.Primitives.dll</HintPath>\n      <Private>True</Private>\n    </Reference>\n    <Reference Include=\"System.Security.AccessControl, Version=4.1.1.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\packages\\System.Security.AccessControl.4.5.0\\lib\\net461\\System.Security.AccessControl.dll</HintPath>\n    </Reference>\n    <Reference Include=\"System.Security.Claims, Version=4.0.2.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\packages\\System.Security.Claims.4.3.0\\lib\\net46\\System.Security.Claims.dll</HintPath>\n      <Private>True</Private>\n    </Reference>\n    <Reference Include=\"System.Security.Permissions, Version=4.0.1.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\packages\\System.Security.Permissions.4.5.0\\lib\\net461\\System.Security.Permissions.dll</HintPath>\n    </Reference>\n    <Reference Include=\"System.Security.Principal.Windows, Version=4.1.1.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\packages\\System.Security.Principal.Windows.4.5.0\\lib\\net461\\System.Security.Principal.Windows.dll</HintPath>\n    </Reference>\n    <Reference Include=\"System.ServiceProcess\" />\n    <Reference Include=\"System.Transactions\" />\n    <Reference Include=\"System.Web\" />\n    <Reference Include=\"System.Xml.Linq\" />\n    <Reference Include=\"System.Data.DataSetExtensions\" />\n    <Reference Include=\"Microsoft.CSharp\" />\n    <Reference Include=\"System.Data\" />\n    <Reference Include=\"System.Net.Http\" />\n    <Reference Include=\"System.Xml\" />\n    <Reference Include=\"System.Xml.XmlDocument, Version=4.0.2.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\packages\\System.Xml.XmlDocument.4.3.0\\lib\\net46\\System.Xml.XmlDocument.dll</HintPath>\n      <Private>True</Private>\n    </Reference>\n    <Reference Include=\"System.Xml.XPath, Version=4.0.2.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\packages\\System.Xml.XPath.4.3.0\\lib\\net46\\System.Xml.XPath.dll</HintPath>\n      <Private>True</Private>\n    </Reference>\n    <Reference Include=\"System.Xml.XPath.XmlDocument, Version=4.0.2.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\packages\\System.Xml.XPath.XmlDocument.4.3.0\\lib\\net46\\System.Xml.XPath.XmlDocument.dll</HintPath>\n    </Reference>\n    <Reference Include=\"TimeZoneConverter, Version=2.4.1.0, Culture=neutral, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\packages\\TimeZoneConverter.2.4.1\\lib\\net45\\TimeZoneConverter.dll</HintPath>\n    </Reference>\n  </ItemGroup>\n  <ItemGroup>\n    <Compile Include=\"DateTimeExtensions.cs\" />\n    <Compile Include=\"IndexFreq.cs\" />\n    <Compile Include=\"MqMessages\\MqHandlers\\MqMessageIndexToESHandlerBase.cs\" />\n    <Compile Include=\"MqMessages\\MqHandlers\\MqMessageIndexToESHandlerBuilder.cs\">\n      <DependentUpon>MqMessageIndexToESHandlerBuilder.tt</DependentUpon>\n      <AutoGen>True</AutoGen>\n      <DesignTime>True</DesignTime>\n    </Compile>\n    <Content Include=\"MqMessages\\MqHandlers\\MqMessagesT4Register.cs\" />\n    <Compile Include=\"Properties\\AssemblyInfo.cs\" />\n  </ItemGroup>\n  <ItemGroup />\n  <ItemGroup>\n    <ProjectReference Include=\"..\\Abplus.MqMessages\\Abplus.MqMessages.csproj\">\n      <Project>{f0ece646-29f7-48eb-ab40-6d238f785b73}</Project>\n      <Name>Abplus.MqMessages</Name>\n    </ProjectReference>\n  </ItemGroup>\n  <ItemGroup>\n    <Content Include=\"MqMessages\\MqHandlers\\MqMessageIndexToESHandlerBuilder.tt\">\n      <Generator>TextTemplatingFileGenerator</Generator>\n      <LastGenOutput>MqMessageIndexToESHandlerBuilder.cs</LastGenOutput>\n    </Content>\n    <None Include=\"Abplus.MqMessages.IndexToES.nuspec\" />\n    <None Include=\"app.config\" />\n    <Content Include=\"MqMessages\\MqHandlers\\T4MultipleOutputManager.ttinclude\" />\n    <None Include=\"packages.config\" />\n  </ItemGroup>\n  <Import Project=\"$(MSBuildToolsPath)\\Microsoft.CSharp.targets\" />\n  <Import Project=\"..\\..\\packages\\Microsoft.Bcl.Build.1.0.21\\build\\Microsoft.Bcl.Build.targets\" Condition=\"Exists('..\\..\\packages\\Microsoft.Bcl.Build.1.0.21\\build\\Microsoft.Bcl.Build.targets')\" />\n  <Target Name=\"EnsureNuGetPackageBuildImports\" BeforeTargets=\"PrepareForBuild\">\n    <PropertyGroup>\n      <ErrorText>这台计算机上缺少此项目引用的 NuGet 程序包。使用“NuGet 程序包还原”可下载这些程序包。有关更多信息，请参见 http://go.microsoft.com/fwlink/?LinkID=322105。缺少的文件是 {0}。</ErrorText>\n    </PropertyGroup>\n    <Error Condition=\"!Exists('..\\..\\packages\\Microsoft.Bcl.Build.1.0.21\\build\\Microsoft.Bcl.Build.targets')\" Text=\"$([System.String]::Format('$(ErrorText)', '..\\..\\packages\\Microsoft.Bcl.Build.1.0.21\\build\\Microsoft.Bcl.Build.targets'))\" />\n  </Target>\n  <!-- To modify your build process, add your task inside one of the targets below and uncomment it. \n       Other similar extension points exist, see Microsoft.Common.targets.\n  <Target Name=\"BeforeBuild\">\n  </Target>\n  <Target Name=\"AfterBuild\">\n  </Target>\n  -->\n</Project>"
  },
  {
    "path": "src2/Abplus.MqMessages.IndexToES/Abplus.MqMessages.IndexToES.nuspec",
    "content": "<?xml version=\"1.0\"?>\n<package >\n  <metadata>\n    <id>$id$</id>\n    <version>$version$</version>\n    <title>$title$</title>\n    <authors>personball</authors>\n    <owners>personball</owners>\n    <licenseUrl>https://raw.githubusercontent.com/personball/abplus/master/LICENSE</licenseUrl>\n    <projectUrl>https://github.com/personball/abplus</projectUrl>\n    <iconUrl>https://raw.githubusercontent.com/personball/abplus/master/abplus_icon.png</iconUrl>\n    <requireLicenseAcceptance>false</requireLicenseAcceptance>\n    <description>Abp plus, an extension for Abp Framework. </description>\n    <releaseNotes></releaseNotes>\n    <copyright>Copyright 2017</copyright>\n    <tags></tags>\n    <dependencies>\n      <dependency id=\"Abp\" version=\"1.4.2\" />\n      <dependency id=\"Rebus\" version=\"3.1.2\" />\n      <dependency id=\"NEST\" version=\"5.5.0\" />\n    </dependencies>\n    <contentFiles>\n      <files include=\"MqMessages\\MqHandlers\\MqMessagesT4Register.cs\" />\n      <files include=\"MqMessages\\MqHandlers\\MqMessageIndexToESHandlerBuilder.tt\" />\n      <files include=\"MqMessages\\MqHandlers\\T4MultipleOutputManager.ttinclude\" />\n    </contentFiles>\n  </metadata>\n</package>"
  },
  {
    "path": "src2/Abplus.MqMessages.IndexToES/DateTimeExtensions.cs",
    "content": "﻿using System;\n\nnamespace Abp\n{\n    public static class DateTimeExtensions\n    {\n        public static string GetESIndexName(this DateTime now, string defaultIndexName, IndexFreq freqSetting)\n        {\n            Check.NotNullOrWhiteSpace(defaultIndexName, nameof(defaultIndexName));\n\n            if (freqSetting == IndexFreq.PerDay)\n            {\n                return $\"{defaultIndexName}-{DateTime.Now.Date.ToString(\"yyyy.MM.dd\")}\";\n            }\n            else if (freqSetting == IndexFreq.PerMonth)\n            {\n                return $\"{defaultIndexName}-{DateTime.Now.Date.ToString(\"yyyy.MM\")}\";\n            }\n            else if (freqSetting == IndexFreq.PerYear)\n            {\n                return $\"{defaultIndexName}-{DateTime.Now.Date.ToString(\"yyyy\")}\";\n            }\n            else\n            {\n                return defaultIndexName;\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "src2/Abplus.MqMessages.IndexToES/IndexFreq.cs",
    "content": "﻿namespace Abp\n{\n    /// <summary>\n    /// 定义创建索引的频率\n    /// </summary>\n    public enum IndexFreq\n    {\n        /// <summary>\n        /// 每天一个索引\n        /// </summary>\n        PerDay = 0,\n\n        /// <summary>\n        /// 每月一个索引\n        /// </summary>\n        PerMonth = 1,\n\n        /// <summary>\n        /// 每年一个索引\n        /// </summary>\n        PerYear = 2,\n\n        /// <summary>\n        /// 仅一个索引，索引名不加日期后缀\n        /// </summary>\n        None = 3\n    }\n}\n"
  },
  {
    "path": "src2/Abplus.MqMessages.IndexToES/MqMessages/MqHandlers/MqMessageIndexToESHandlerBase.cs",
    "content": "﻿using System;\nusing System.Threading.Tasks;\nusing Abp.Dependency;\nusing Nest;\nusing Rebus.Handlers;\n\nnamespace Abp.MqMessages.MqHandlers\n{\n    public abstract class MqMessageIndexToESHandlerBase<TMqMessage> : AbpMqHandlerBase\n        , IHandleMessages<TMqMessage>\n        , ITransientDependency where TMqMessage : class\n    {\n\n        protected string DefaultIndexName { get; set; }\n\n        protected IndexFreq IndexFreq { get; set; }\n\n        public IElasticClient ElasticClient { get; set; }\n\n        public MqMessageIndexToESHandlerBase(string defaultIndexName, IndexFreq indexFreq, string localizationSourceName)\n            : base(localizationSourceName)\n        {\n            DefaultIndexName = defaultIndexName;\n            IndexFreq = indexFreq;\n        }\n\n        public async Task Handle(TMqMessage message)\n        {\n            var indexName = CustomIndexName();\n            var indexFreq = CustomIndexFreq();\n\n            await ElasticClient.IndexAsync(message, i => i.Index(DateTime.Now.GetESIndexName(indexName, indexFreq)));\n        }\n\n        public virtual string CustomIndexName()\n        {\n            return DefaultIndexName;\n        }\n\n        public virtual IndexFreq CustomIndexFreq()\n        {\n            return IndexFreq;\n        }\n    }\n}\n"
  },
  {
    "path": "src2/Abplus.MqMessages.IndexToES/MqMessages/MqHandlers/MqMessageIndexToESHandlerBuilder.cs",
    "content": ""
  },
  {
    "path": "src2/Abplus.MqMessages.IndexToES/MqMessages/MqHandlers/MqMessageIndexToESHandlerBuilder.tt",
    "content": "﻿<#@ template debug=\"false\" hostspecific=\"true\" language=\"C#\" #>\n\n<#@ include file=\"T4MultipleOutputManager.ttinclude\" #>\n\n<#@ assembly name=\"System.Core\" #>\n<#@ assembly name=\"System.IO\" #>\n<#@ assembly name=\"$(SolutionDir)packages\\Newtonsoft.Json.9.0.1\\lib\\net45\\Newtonsoft.Json.dll\" #>\n<#@ assembly name=\"$(ProjectDir)bin\\$(ConfigurationName)\\$(ProjectName).exe\" #>\n<#@ import namespace=\"System.Linq\" #>\n<#@ import namespace=\"System.Text\" #>\n<#@ import namespace=\"System.Collections.Generic\" #>\n<#@ import namespace=\"Newtonsoft.Json\" #>\n<#@ import namespace=\"Newtonsoft.Json.Linq\" #>\n<#@ import namespace=\"System.Globalization\" #>\n<#@ import namespace=\"Abp.MqMessages.MqHandlers\" #>\n<#@ output extension=\".cs\" #>\n\n\n<#\n\tvar tempateManager = Manager.Create(Host,GenerationEnvironment);\n\tstring projectName = Host.ResolveAssemblyReference(\"$(ProjectName)\");\n\t\n\tvar types=MqMessagesT4Register.MqMessageTypes;\n\tforeach(var type in types)\n\t{\n\t\ttempateManager.StartNewFile(type.Name+\"IndexToESHandler.cs\");\n#>\nusing Abp;\nusing Abp.MqMessages.MqHandlers;\nusing <#=type.Namespace#>;\n\nnamespace <#=projectName#>.MqMessages.MqHandlers\n{\n    public class <#=type.Name#>IndexToESHandler : MqMessageIndexToESHandlerBase<<#=type.Name#>>\n    {\n        public <#=type.Name#>IndexToESHandler() \n\t\t\t: base(【DefaultIndexName】, IndexFreq.PerMonth, 【Consts.LocalizationSourceName】)\n        {\n        }\n    }\n}\n<#\n\t}//foreach-end\n\t\t\t\t\n\ttempateManager.EndBlock();\n\ttempateManager.Process(true); \n#>\n\n\n"
  },
  {
    "path": "src2/Abplus.MqMessages.IndexToES/MqMessages/MqHandlers/MqMessagesT4Register.cs",
    "content": "﻿using System;\n\nnamespace Abp.MqMessages.MqHandlers\n{\n    public static class MqMessagesT4Register\n    {\n        public static Type[] MqMessageTypes = new Type[] {\n            //typeof(SampleMqMessage)\n        };\n    }\n}\n"
  },
  {
    "path": "src2/Abplus.MqMessages.IndexToES/MqMessages/MqHandlers/T4MultipleOutputManager.ttinclude",
    "content": "<#@ assembly name=\"System.Core\"\n#><#@ assembly name=\"System.Data.Linq\"\n#><#@ assembly name=\"EnvDTE\"\n#><#@ assembly name=\"System.Xml\"\n#><#@ assembly name=\"System.Xml.Linq\"\n#><#@ import namespace=\"System.Collections.Generic\"\n#><#@ import namespace=\"System.IO\"\n#><#@ import namespace=\"System.Text\"\n#><#@ import namespace=\"Microsoft.VisualStudio.TextTemplating\"\n#><#+\n// https://raw.github.com/damieng/DamienGKit\n// http://damieng.com/blog/2009/11/06/multiple-outputs-from-t4-made-easy-revisited\n\n// Manager class records the various blocks so it can split them up\nclass Manager {\n    private class Block {\n        public String Name;\n        public int Start, Length;\n        public bool IncludeInDefault;\n    }\n\n    private Block currentBlock;\n    private readonly List<Block> files = new List<Block>();\n    private readonly Block footer = new Block();\n    private readonly Block header = new Block();\n    private readonly ITextTemplatingEngineHost host;\n    private readonly StringBuilder template;\n    protected readonly List<String> generatedFileNames = new List<String>();\n\n    public static Manager Create(ITextTemplatingEngineHost host, StringBuilder template) {\n        return (host is IServiceProvider) ? new VSManager(host, template) : new Manager(host, template);\n    }\n\n    public void StartNewFile(String name) {\n        if (name == null)\n            throw new ArgumentNullException(\"name\");\n        CurrentBlock = new Block { Name = name };\n    }\n\n    public void StartFooter(bool includeInDefault=true) {\n        CurrentBlock = footer;\n        footer.IncludeInDefault = includeInDefault;\n    }\n\n    public void StartHeader(bool includeInDefault=true) {\n        CurrentBlock = header;\n        header.IncludeInDefault = includeInDefault;\n    }\n\n    public void EndBlock() {\n        if (CurrentBlock == null)\n            return;\n        CurrentBlock.Length = template.Length - CurrentBlock.Start;\n        if (CurrentBlock != header && CurrentBlock != footer)\n            files.Add(CurrentBlock);\n        currentBlock = null;\n    }\n\n    public virtual void Process(bool split, bool sync =true) {\n        if (split) {\n            EndBlock();\n            String headerText = template.ToString(header.Start, header.Length);\n            String footerText = template.ToString(footer.Start, footer.Length);\n            String outputPath = Path.GetDirectoryName(host.TemplateFile);\n            files.Reverse();\n            if (!footer.IncludeInDefault)\n                template.Remove(footer.Start, footer.Length);\n            foreach(Block block in files) {\n                String fileName = Path.Combine(outputPath, block.Name);\n                String content = headerText + template.ToString(block.Start, block.Length) + footerText;\n                generatedFileNames.Add(fileName);\n                CreateFile(fileName, content);\n                template.Remove(block.Start, block.Length);\n            }\n            if (!header.IncludeInDefault)\n                template.Remove(header.Start, header.Length);\n        }\n    }\n\n    protected virtual void CreateFile(String fileName, String content) {\n        if (IsFileContentDifferent(fileName, content))\n            File.WriteAllText(fileName, content);\n    }\n\n    public virtual String GetCustomToolNamespace(String fileName) {\n        return null;\n    }\n\n    public virtual String DefaultProjectNamespace {\n        get { return null; }\n    }\n\n    protected bool IsFileContentDifferent(String fileName, String newContent) {\n        return !(File.Exists(fileName) && File.ReadAllText(fileName) == newContent);\n    }\n\n    private Manager(ITextTemplatingEngineHost host, StringBuilder template) {\n        this.host = host;\n        this.template = template;\n    }\n\n    private Block CurrentBlock {\n        get { return currentBlock; }\n        set {\n            if (CurrentBlock != null)\n                EndBlock();\n            if (value != null)\n                value.Start = template.Length;\n            currentBlock = value;\n        }\n    }\n\n    private class VSManager: Manager {\n        private readonly EnvDTE.ProjectItem templateProjectItem;\n        private readonly EnvDTE.DTE dte;\n        private readonly Action<String> checkOutAction;\n        private readonly Action<List<String>> projectSyncAction;\n\n        public override String DefaultProjectNamespace {\n            get {\n                return templateProjectItem.ContainingProject.Properties.Item(\"DefaultNamespace\").Value.ToString();\n            }\n        }\n\n        public override String GetCustomToolNamespace(string fileName) {\n            return dte.Solution.FindProjectItem(fileName).Properties.Item(\"CustomToolNamespace\").Value.ToString();\n        }\n\n        public override void Process(bool split, bool sync) {\n            if (templateProjectItem.ProjectItems == null)\n                return;\n            base.Process(split, sync);\n            if (sync)\n                projectSyncAction.EndInvoke(projectSyncAction.BeginInvoke(generatedFileNames, null, null));\n        }\n\n        protected override void CreateFile(String fileName, String content) {\n            if (IsFileContentDifferent(fileName, content)) {\n                CheckoutFileIfRequired(fileName);\n                File.WriteAllText(fileName, content);\n            }\n        }\n\n        internal VSManager(ITextTemplatingEngineHost host, StringBuilder template)\n            : base(host, template) {\n            var hostServiceProvider = (IServiceProvider)host;\n            if (hostServiceProvider == null)\n                throw new ArgumentNullException(\"Could not obtain IServiceProvider\");\n            dte = (EnvDTE.DTE) hostServiceProvider.GetService(typeof(EnvDTE.DTE));\n            if (dte == null)\n                throw new ArgumentNullException(\"Could not obtain DTE from host\");\n            templateProjectItem = dte.Solution.FindProjectItem(host.TemplateFile);\n            checkOutAction = fileName => dte.SourceControl.CheckOutItem(fileName);\n            projectSyncAction = keepFileNames => ProjectSync(templateProjectItem, keepFileNames);\n        }\n\n        private static void ProjectSync(EnvDTE.ProjectItem templateProjectItem, List<String> keepFileNames) {\n            var keepFileNameSet = new HashSet<String>(keepFileNames);\n            var projectFiles = new Dictionary<String, EnvDTE.ProjectItem>();\n            var originalFilePrefix = Path.GetFileNameWithoutExtension(templateProjectItem.FileNames[0]) + \".\";\n            foreach (EnvDTE.ProjectItem projectItem in templateProjectItem.ProjectItems)\n                projectFiles.Add(projectItem.FileNames[0], projectItem);\n\n            // Remove unused items from the project\n            foreach (var pair in projectFiles)\n                if (!keepFileNames.Contains(pair.Key) && !(Path.GetFileNameWithoutExtension(pair.Key) + \".\").StartsWith(originalFilePrefix))\n                    pair.Value.Delete();\n\n            // Add missing files to the project\n            foreach(String fileName in keepFileNameSet)\n                if (!projectFiles.ContainsKey(fileName))\n                    templateProjectItem.ProjectItems.AddFromFile(fileName);\n        }\n\n        private void CheckoutFileIfRequired(String fileName) {\n            var sc = dte.SourceControl;\n            if (sc != null && sc.IsItemUnderSCC(fileName) && !sc.IsItemCheckedOut(fileName))\n                checkOutAction.EndInvoke(checkOutAction.BeginInvoke(fileName, null, null));\n        }\n    }\n} #>"
  },
  {
    "path": "src2/Abplus.MqMessages.IndexToES/Properties/AssemblyInfo.cs",
    "content": "﻿using System.Reflection;\nusing System.Runtime.CompilerServices;\nusing System.Runtime.InteropServices;\n\n// 有关程序集的一般信息由以下\n// 控制。更改这些特性值可修改\n// 与程序集关联的信息。\n[assembly: AssemblyTitle(\"Abplus.MqMessages.IndexToES\")]\n[assembly: AssemblyDescription(\"\")]\n[assembly: AssemblyConfiguration(\"\")]\n[assembly: AssemblyCompany(\"\")]\n[assembly: AssemblyProduct(\"Abplus.MqMessages.IndexToES\")]\n[assembly: AssemblyCopyright(\"Copyright ©  2017\")]\n[assembly: AssemblyTrademark(\"\")]\n[assembly: AssemblyCulture(\"\")]\n\n//将 ComVisible 设置为 false 将使此程序集中的类型\n//对 COM 组件不可见。  如果需要从 COM 访问此程序集中的类型，\n//请将此类型的 ComVisible 特性设置为 true。\n[assembly: ComVisible(false)]\n\n// 如果此项目向 COM 公开，则下列 GUID 用于类型库的 ID\n[assembly: Guid(\"47d3d635-4801-4d88-8ab5-b933fbfb8ba6\")]\n\n// 程序集的版本信息由下列四个值组成: \n//\n//      主版本\n//      次版本\n//      生成号\n//      修订号\n//\n//可以指定所有这些值，也可以使用“生成号”和“修订号”的默认值，\n// 方法是按如下所示使用“*”: :\n// [assembly: AssemblyVersion(\"1.0.*\")]\n[assembly: AssemblyVersion(\"1.0.0.0\")]\n[assembly: AssemblyFileVersion(\"1.0.0.0\")]\n"
  },
  {
    "path": "src2/Abplus.MqMessages.IndexToES/app.config",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<configuration>\n  <runtime>\n    <assemblyBinding xmlns=\"urn:schemas-microsoft-com:asm.v1\">\n      <dependentAssembly>\n        <assemblyIdentity name=\"AutoMapper\" publicKeyToken=\"be96cd2c38ef1005\" culture=\"neutral\" />\n        <bindingRedirect oldVersion=\"0.0.0.0-6.2.2.0\" newVersion=\"6.2.2.0\" />\n      </dependentAssembly>\n      <dependentAssembly>\n        <assemblyIdentity name=\"Newtonsoft.Json\" publicKeyToken=\"30ad4fe6b2a6aeed\" culture=\"neutral\" />\n        <bindingRedirect oldVersion=\"0.0.0.0-11.0.0.0\" newVersion=\"11.0.0.0\" />\n      </dependentAssembly>\n      <dependentAssembly>\n        <assemblyIdentity name=\"Castle.Windsor\" publicKeyToken=\"407dd0808d44fbdc\" culture=\"neutral\" />\n        <bindingRedirect oldVersion=\"0.0.0.0-4.0.0.0\" newVersion=\"4.0.0.0\" />\n      </dependentAssembly>\n      <dependentAssembly>\n        <assemblyIdentity name=\"Castle.Core\" publicKeyToken=\"407dd0808d44fbdc\" culture=\"neutral\" />\n        <bindingRedirect oldVersion=\"0.0.0.0-4.0.0.0\" newVersion=\"4.0.0.0\" />\n      </dependentAssembly>\n      <dependentAssembly>\n        <assemblyIdentity name=\"Microsoft.Extensions.Caching.Abstractions\" publicKeyToken=\"adb9793829ddae60\" culture=\"neutral\" />\n        <bindingRedirect oldVersion=\"0.0.0.0-2.0.1.0\" newVersion=\"2.0.1.0\" />\n      </dependentAssembly>\n      <dependentAssembly>\n        <assemblyIdentity name=\"Microsoft.Extensions.Caching.Memory\" publicKeyToken=\"adb9793829ddae60\" culture=\"neutral\" />\n        <bindingRedirect oldVersion=\"0.0.0.0-2.0.1.0\" newVersion=\"2.0.1.0\" />\n      </dependentAssembly>\n      <dependentAssembly>\n        <assemblyIdentity name=\"Microsoft.Extensions.Options\" publicKeyToken=\"adb9793829ddae60\" culture=\"neutral\" />\n        <bindingRedirect oldVersion=\"0.0.0.0-2.0.1.0\" newVersion=\"2.0.1.0\" />\n      </dependentAssembly>\n      <dependentAssembly>\n        <assemblyIdentity name=\"System.Runtime.InteropServices.RuntimeInformation\" publicKeyToken=\"b03f5f7f11d50a3a\" culture=\"neutral\" />\n        <bindingRedirect oldVersion=\"0.0.0.0-4.0.2.0\" newVersion=\"4.0.2.0\" />\n      </dependentAssembly>\n      <dependentAssembly>\n        <assemblyIdentity name=\"System.Collections.Immutable\" publicKeyToken=\"b03f5f7f11d50a3a\" culture=\"neutral\" />\n        <bindingRedirect oldVersion=\"0.0.0.0-1.2.3.0\" newVersion=\"1.2.3.0\" />\n      </dependentAssembly>\n      <dependentAssembly>\n        <assemblyIdentity name=\"System.ComponentModel.Annotations\" publicKeyToken=\"b03f5f7f11d50a3a\" culture=\"neutral\" />\n        <bindingRedirect oldVersion=\"0.0.0.0-4.2.1.0\" newVersion=\"4.2.1.0\" />\n      </dependentAssembly>\n    </assemblyBinding>\n  </runtime>\n</configuration>"
  },
  {
    "path": "src2/Abplus.MqMessages.IndexToES/packages.config",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<packages>\n  <package id=\"Abp\" version=\"3.7.2\" targetFramework=\"net461\" />\n  <package id=\"Castle.Core\" version=\"4.3.1\" targetFramework=\"net461\" />\n  <package id=\"Castle.LoggingFacility\" version=\"4.1.0\" targetFramework=\"net461\" />\n  <package id=\"Castle.Windsor\" version=\"4.1.0\" targetFramework=\"net461\" />\n  <package id=\"Elasticsearch.Net\" version=\"6.0.2\" targetFramework=\"net461\" />\n  <package id=\"JetBrains.Annotations\" version=\"11.1.0\" targetFramework=\"net461\" />\n  <package id=\"Microsoft.Bcl\" version=\"1.1.10\" targetFramework=\"net461\" />\n  <package id=\"Microsoft.Bcl.Async\" version=\"1.0.168\" targetFramework=\"net461\" />\n  <package id=\"Microsoft.Bcl.Build\" version=\"1.0.21\" targetFramework=\"net461\" />\n  <package id=\"Microsoft.Extensions.Caching.Abstractions\" version=\"2.1.0\" targetFramework=\"net461\" />\n  <package id=\"Microsoft.Extensions.Caching.Memory\" version=\"2.1.0\" targetFramework=\"net461\" />\n  <package id=\"Microsoft.Extensions.DependencyInjection.Abstractions\" version=\"2.1.0\" targetFramework=\"net461\" />\n  <package id=\"Microsoft.Extensions.Options\" version=\"2.1.0\" targetFramework=\"net461\" />\n  <package id=\"Microsoft.Extensions.Primitives\" version=\"2.1.0\" targetFramework=\"net461\" />\n  <package id=\"NEST\" version=\"6.0.2\" targetFramework=\"net461\" />\n  <package id=\"Newtonsoft.Json\" version=\"11.0.2\" targetFramework=\"net461\" />\n  <package id=\"Nito.AsyncEx\" version=\"4.0.1\" targetFramework=\"net461\" />\n  <package id=\"Nito.AsyncEx.Context\" version=\"1.1.0\" targetFramework=\"net461\" />\n  <package id=\"Nito.AsyncEx.Coordination\" version=\"1.0.2\" targetFramework=\"net461\" />\n  <package id=\"Nito.AsyncEx.Tasks\" version=\"1.1.0\" targetFramework=\"net461\" />\n  <package id=\"Nito.Collections.Deque\" version=\"1.0.4\" targetFramework=\"net461\" />\n  <package id=\"Nito.Disposables\" version=\"1.2.3\" targetFramework=\"net461\" />\n  <package id=\"Rebus\" version=\"4.2.1\" targetFramework=\"net461\" />\n  <package id=\"System.Buffers\" version=\"4.4.0\" targetFramework=\"net461\" />\n  <package id=\"System.Collections.Immutable\" version=\"1.5.0\" targetFramework=\"net461\" />\n  <package id=\"System.ComponentModel.Annotations\" version=\"4.5.0\" targetFramework=\"net461\" />\n  <package id=\"System.Configuration.ConfigurationManager\" version=\"4.5.0\" targetFramework=\"net461\" />\n  <package id=\"System.Data.Common\" version=\"4.3.0\" targetFramework=\"net461\" />\n  <package id=\"System.Linq.Dynamic\" version=\"1.0.7\" targetFramework=\"net461\" />\n  <package id=\"System.Linq.Dynamic.Core\" version=\"1.0.8.9\" targetFramework=\"net461\" />\n  <package id=\"System.Linq.Queryable\" version=\"4.3.0\" targetFramework=\"net461\" />\n  <package id=\"System.Memory\" version=\"4.5.0\" targetFramework=\"net461\" />\n  <package id=\"System.Numerics.Vectors\" version=\"4.4.0\" targetFramework=\"net461\" />\n  <package id=\"System.Runtime.CompilerServices.Unsafe\" version=\"4.5.0\" targetFramework=\"net461\" />\n  <package id=\"System.Runtime.InteropServices.RuntimeInformation\" version=\"4.3.0\" targetFramework=\"net461\" />\n  <package id=\"System.Runtime.Serialization.Formatters\" version=\"4.3.0\" targetFramework=\"net461\" />\n  <package id=\"System.Runtime.Serialization.Primitives\" version=\"4.3.0\" targetFramework=\"net461\" />\n  <package id=\"System.Security.AccessControl\" version=\"4.5.0\" targetFramework=\"net461\" />\n  <package id=\"System.Security.Claims\" version=\"4.3.0\" targetFramework=\"net461\" />\n  <package id=\"System.Security.Permissions\" version=\"4.5.0\" targetFramework=\"net461\" />\n  <package id=\"System.Security.Principal.Windows\" version=\"4.5.0\" targetFramework=\"net461\" />\n  <package id=\"System.Threading\" version=\"4.3.0\" targetFramework=\"net461\" />\n  <package id=\"System.Xml.XmlDocument\" version=\"4.3.0\" targetFramework=\"net461\" />\n  <package id=\"System.Xml.XPath\" version=\"4.3.0\" targetFramework=\"net461\" />\n  <package id=\"System.Xml.XPath.XmlDocument\" version=\"4.3.0\" targetFramework=\"net461\" />\n  <package id=\"TimeZoneConverter\" version=\"2.4.1\" targetFramework=\"net461\" />\n</packages>"
  },
  {
    "path": "src2/Abplus.MqMessages.RebusConsumer/Abplus.MqMessages.RebusConsumer.nuspec",
    "content": "<?xml version=\"1.0\"?>\n<package >\n  <metadata>\n    <id>$id$</id>\n    <version>$version$</version>\n    <title>$title$</title>\n    <authors>personball</authors>\n    <owners>personball</owners>\n    <licenseUrl>https://raw.githubusercontent.com/personball/abplus/master/LICENSE</licenseUrl>\n    <projectUrl>https://github.com/personball/abplus</projectUrl>\n    <iconUrl>https://raw.githubusercontent.com/personball/abplus/master/abplus_icon.png</iconUrl>\n    <requireLicenseAcceptance>false</requireLicenseAcceptance>\n    <description>Abp plus, an extension for Abp Framework. </description>\n    <releaseNotes></releaseNotes>\n    <copyright>Copyright 2017</copyright>\n    <tags></tags>\n    <dependencies>\n      <dependency id=\"Abplus\" version=\"$version$\" />\n      <dependency id=\"Abplus.MqMessages.RebusCore\" version=\"$version$\"/>\n      <dependency id=\"Rebus.Castle.Windsor\" version=\"3.0.0\" />\n      <dependency id=\"Rebus.RabbitMq\" version=\"3.0.0\" />\n    </dependencies>\n  </metadata>\n</package>"
  },
  {
    "path": "src2/Abplus.MqMessages.RebusConsumer/Abplus.MqMessages.RebusRabbitMqConsumer.csproj",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<Project ToolsVersion=\"14.0\" DefaultTargets=\"Build\" xmlns=\"http://schemas.microsoft.com/developer/msbuild/2003\">\n  <Import Project=\"$(MSBuildExtensionsPath)\\$(MSBuildToolsVersion)\\Microsoft.Common.props\" Condition=\"Exists('$(MSBuildExtensionsPath)\\$(MSBuildToolsVersion)\\Microsoft.Common.props')\" />\n  <PropertyGroup>\n    <Configuration Condition=\" '$(Configuration)' == '' \">Debug</Configuration>\n    <Platform Condition=\" '$(Platform)' == '' \">AnyCPU</Platform>\n    <ProjectGuid>{9AF821F9-8F33-489D-97E9-3BA5127320DE}</ProjectGuid>\n    <OutputType>Library</OutputType>\n    <AppDesignerFolder>Properties</AppDesignerFolder>\n    <RootNamespace>Abp</RootNamespace>\n    <AssemblyName>Abplus.MqMessages.RebusRabbitMqConsumer</AssemblyName>\n    <TargetFrameworkVersion>v4.6.1</TargetFrameworkVersion>\n    <FileAlignment>512</FileAlignment>\n    <NuGetPackageImportStamp>\n    </NuGetPackageImportStamp>\n  </PropertyGroup>\n  <PropertyGroup Condition=\" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' \">\n    <DebugSymbols>true</DebugSymbols>\n    <DebugType>full</DebugType>\n    <Optimize>false</Optimize>\n    <OutputPath>bin\\Debug\\</OutputPath>\n    <DefineConstants>DEBUG;TRACE</DefineConstants>\n    <ErrorReport>prompt</ErrorReport>\n    <WarningLevel>4</WarningLevel>\n  </PropertyGroup>\n  <PropertyGroup Condition=\" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' \">\n    <DebugType>pdbonly</DebugType>\n    <Optimize>true</Optimize>\n    <OutputPath>bin\\Release\\</OutputPath>\n    <DefineConstants>TRACE</DefineConstants>\n    <ErrorReport>prompt</ErrorReport>\n    <WarningLevel>4</WarningLevel>\n  </PropertyGroup>\n  <ItemGroup>\n    <Reference Include=\"Abp, Version=3.7.2.0, Culture=neutral, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\packages\\Abp.3.7.2\\lib\\netstandard2.0\\Abp.dll</HintPath>\n    </Reference>\n    <Reference Include=\"Castle.Core, Version=4.0.0.0, Culture=neutral, PublicKeyToken=407dd0808d44fbdc, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\packages\\Castle.Core.4.3.1\\lib\\net45\\Castle.Core.dll</HintPath>\n    </Reference>\n    <Reference Include=\"Castle.Facilities.Logging, Version=4.0.0.0, Culture=neutral, PublicKeyToken=407dd0808d44fbdc, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\packages\\Castle.LoggingFacility.4.1.0\\lib\\net45\\Castle.Facilities.Logging.dll</HintPath>\n    </Reference>\n    <Reference Include=\"Castle.Windsor, Version=4.0.0.0, Culture=neutral, PublicKeyToken=407dd0808d44fbdc, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\packages\\Castle.Windsor.4.1.0\\lib\\net45\\Castle.Windsor.dll</HintPath>\n    </Reference>\n    <Reference Include=\"JetBrains.Annotations, Version=11.1.0.0, Culture=neutral, PublicKeyToken=1010a0d8d6380325, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\packages\\JetBrains.Annotations.11.1.0\\lib\\net20\\JetBrains.Annotations.dll</HintPath>\n    </Reference>\n    <Reference Include=\"Microsoft.Diagnostics.Tracing.EventSource, Version=2.0.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\packages\\Microsoft.Diagnostics.Tracing.EventSource.Redist.2.0.0\\lib\\net461\\Microsoft.Diagnostics.Tracing.EventSource.dll</HintPath>\n    </Reference>\n    <Reference Include=\"Microsoft.Extensions.Caching.Abstractions, Version=2.1.0.0, Culture=neutral, PublicKeyToken=adb9793829ddae60, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\packages\\Microsoft.Extensions.Caching.Abstractions.2.1.0\\lib\\netstandard2.0\\Microsoft.Extensions.Caching.Abstractions.dll</HintPath>\n    </Reference>\n    <Reference Include=\"Microsoft.Extensions.Caching.Memory, Version=2.1.0.0, Culture=neutral, PublicKeyToken=adb9793829ddae60, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\packages\\Microsoft.Extensions.Caching.Memory.2.1.0\\lib\\netstandard2.0\\Microsoft.Extensions.Caching.Memory.dll</HintPath>\n    </Reference>\n    <Reference Include=\"Microsoft.Extensions.DependencyInjection.Abstractions, Version=2.1.0.0, Culture=neutral, PublicKeyToken=adb9793829ddae60, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\packages\\Microsoft.Extensions.DependencyInjection.Abstractions.2.1.0\\lib\\netstandard2.0\\Microsoft.Extensions.DependencyInjection.Abstractions.dll</HintPath>\n    </Reference>\n    <Reference Include=\"Microsoft.Extensions.Options, Version=2.1.0.0, Culture=neutral, PublicKeyToken=adb9793829ddae60, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\packages\\Microsoft.Extensions.Options.2.1.0\\lib\\netstandard2.0\\Microsoft.Extensions.Options.dll</HintPath>\n    </Reference>\n    <Reference Include=\"Microsoft.Extensions.Primitives, Version=2.1.0.0, Culture=neutral, PublicKeyToken=adb9793829ddae60, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\packages\\Microsoft.Extensions.Primitives.2.1.0\\lib\\netstandard2.0\\Microsoft.Extensions.Primitives.dll</HintPath>\n    </Reference>\n    <Reference Include=\"Microsoft.Threading.Tasks, Version=1.0.12.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\packages\\Microsoft.Bcl.Async.1.0.168\\lib\\net40\\Microsoft.Threading.Tasks.dll</HintPath>\n      <Private>True</Private>\n    </Reference>\n    <Reference Include=\"Microsoft.Threading.Tasks.Extensions, Version=1.0.12.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\packages\\Microsoft.Bcl.Async.1.0.168\\lib\\net40\\Microsoft.Threading.Tasks.Extensions.dll</HintPath>\n      <Private>True</Private>\n    </Reference>\n    <Reference Include=\"Microsoft.Threading.Tasks.Extensions.Desktop, Version=1.0.168.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\packages\\Microsoft.Bcl.Async.1.0.168\\lib\\net40\\Microsoft.Threading.Tasks.Extensions.Desktop.dll</HintPath>\n      <Private>True</Private>\n    </Reference>\n    <Reference Include=\"Newtonsoft.Json, Version=11.0.0.0, Culture=neutral, PublicKeyToken=30ad4fe6b2a6aeed, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\packages\\Newtonsoft.Json.11.0.2\\lib\\net45\\Newtonsoft.Json.dll</HintPath>\n    </Reference>\n    <Reference Include=\"Nito.AsyncEx, Version=4.0.1.0, Culture=neutral, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\packages\\Nito.AsyncEx.4.0.1\\lib\\net45\\Nito.AsyncEx.dll</HintPath>\n      <Private>True</Private>\n    </Reference>\n    <Reference Include=\"Nito.AsyncEx.Concurrent, Version=4.0.1.0, Culture=neutral, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\packages\\Nito.AsyncEx.4.0.1\\lib\\net45\\Nito.AsyncEx.Concurrent.dll</HintPath>\n      <Private>True</Private>\n    </Reference>\n    <Reference Include=\"Nito.AsyncEx.Context, Version=1.1.0.0, Culture=neutral, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\packages\\Nito.AsyncEx.Context.1.1.0\\lib\\net46\\Nito.AsyncEx.Context.dll</HintPath>\n    </Reference>\n    <Reference Include=\"Nito.AsyncEx.Coordination, Version=1.0.2.0, Culture=neutral, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\packages\\Nito.AsyncEx.Coordination.1.0.2\\lib\\net46\\Nito.AsyncEx.Coordination.dll</HintPath>\n    </Reference>\n    <Reference Include=\"Nito.AsyncEx.Enlightenment, Version=4.0.1.0, Culture=neutral, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\packages\\Nito.AsyncEx.4.0.1\\lib\\net45\\Nito.AsyncEx.Enlightenment.dll</HintPath>\n      <Private>True</Private>\n    </Reference>\n    <Reference Include=\"Nito.AsyncEx.Tasks, Version=1.1.0.0, Culture=neutral, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\packages\\Nito.AsyncEx.Tasks.1.1.0\\lib\\net46\\Nito.AsyncEx.Tasks.dll</HintPath>\n    </Reference>\n    <Reference Include=\"Nito.Collections.Deque, Version=1.0.4.0, Culture=neutral, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\packages\\Nito.Collections.Deque.1.0.4\\lib\\netstandard2.0\\Nito.Collections.Deque.dll</HintPath>\n    </Reference>\n    <Reference Include=\"Nito.Disposables, Version=1.2.3.0, Culture=neutral, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\packages\\Nito.Disposables.1.2.3\\lib\\netstandard2.0\\Nito.Disposables.dll</HintPath>\n    </Reference>\n    <Reference Include=\"RabbitMQ.Client, Version=5.0.0.0, Culture=neutral, PublicKeyToken=89e7d7c5feba84ce, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\packages\\RabbitMQ.Client.5.0.1\\lib\\net451\\RabbitMQ.Client.dll</HintPath>\n    </Reference>\n    <Reference Include=\"Rebus, Version=4.2.1.0, Culture=neutral, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\packages\\Rebus.4.2.1\\lib\\net45\\Rebus.dll</HintPath>\n    </Reference>\n    <Reference Include=\"Rebus.CastleWindsor, Version=4.0.0.0, Culture=neutral, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\packages\\Rebus.Castle.Windsor.4.0.0\\lib\\net45\\Rebus.CastleWindsor.dll</HintPath>\n    </Reference>\n    <Reference Include=\"Rebus.NewtonsoftJson, Version=3.1.5.0, Culture=neutral, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\packages\\Rebus.NewtonsoftJson.3.1.5\\lib\\NET45\\Rebus.NewtonsoftJson.dll</HintPath>\n    </Reference>\n    <Reference Include=\"Rebus.RabbitMq, Version=4.4.2.0, Culture=neutral, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\packages\\Rebus.RabbitMq.4.4.2\\lib\\net452\\Rebus.RabbitMq.dll</HintPath>\n    </Reference>\n    <Reference Include=\"System\" />\n    <Reference Include=\"System.Buffers, Version=4.0.2.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\packages\\System.Buffers.4.4.0\\lib\\netstandard2.0\\System.Buffers.dll</HintPath>\n    </Reference>\n    <Reference Include=\"System.Collections.Immutable, Version=1.2.3.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\packages\\System.Collections.Immutable.1.5.0\\lib\\netstandard2.0\\System.Collections.Immutable.dll</HintPath>\n    </Reference>\n    <Reference Include=\"System.ComponentModel.Annotations, Version=4.2.1.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\packages\\System.ComponentModel.Annotations.4.5.0\\lib\\net461\\System.ComponentModel.Annotations.dll</HintPath>\n    </Reference>\n    <Reference Include=\"System.ComponentModel.DataAnnotations\" />\n    <Reference Include=\"System.Configuration\" />\n    <Reference Include=\"System.Configuration.ConfigurationManager, Version=4.0.1.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\packages\\System.Configuration.ConfigurationManager.4.5.0\\lib\\net461\\System.Configuration.ConfigurationManager.dll</HintPath>\n    </Reference>\n    <Reference Include=\"System.Core\" />\n    <Reference Include=\"System.Data.Common, Version=4.1.1.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\packages\\System.Data.Common.4.3.0\\lib\\net451\\System.Data.Common.dll</HintPath>\n      <Private>True</Private>\n    </Reference>\n    <Reference Include=\"System.Data.OracleClient\" />\n    <Reference Include=\"System.Drawing\" />\n    <Reference Include=\"System.Linq.Dynamic, Version=1.0.6132.35681, Culture=neutral, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\packages\\System.Linq.Dynamic.1.0.7\\lib\\net40\\System.Linq.Dynamic.dll</HintPath>\n      <Private>True</Private>\n    </Reference>\n    <Reference Include=\"System.Linq.Dynamic.Core, Version=0.0.0.0, Culture=neutral, PublicKeyToken=0f07ec44de6ac832, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\packages\\System.Linq.Dynamic.Core.1.0.8.9\\lib\\net46\\System.Linq.Dynamic.Core.dll</HintPath>\n    </Reference>\n    <Reference Include=\"System.Memory, Version=4.0.1.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\packages\\System.Memory.4.5.0\\lib\\netstandard2.0\\System.Memory.dll</HintPath>\n    </Reference>\n    <Reference Include=\"System.Net\" />\n    <Reference Include=\"System.Numerics\" />\n    <Reference Include=\"System.Numerics.Vectors, Version=4.1.3.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\packages\\System.Numerics.Vectors.4.4.0\\lib\\net46\\System.Numerics.Vectors.dll</HintPath>\n    </Reference>\n    <Reference Include=\"System.Runtime.Caching\" />\n    <Reference Include=\"System.Runtime.CompilerServices.Unsafe, Version=4.0.4.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\packages\\System.Runtime.CompilerServices.Unsafe.4.5.0\\lib\\netstandard2.0\\System.Runtime.CompilerServices.Unsafe.dll</HintPath>\n    </Reference>\n    <Reference Include=\"System.Runtime.InteropServices.RuntimeInformation, Version=4.0.1.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\packages\\System.Runtime.InteropServices.RuntimeInformation.4.3.0\\lib\\net45\\System.Runtime.InteropServices.RuntimeInformation.dll</HintPath>\n      <Private>True</Private>\n    </Reference>\n    <Reference Include=\"System.Runtime.Remoting\" />\n    <Reference Include=\"System.Runtime.Serialization\" />\n    <Reference Include=\"System.Runtime.Serialization.Formatters, Version=4.0.1.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\packages\\System.Runtime.Serialization.Formatters.4.3.0\\lib\\net46\\System.Runtime.Serialization.Formatters.dll</HintPath>\n      <Private>True</Private>\n    </Reference>\n    <Reference Include=\"System.Runtime.Serialization.Primitives, Version=4.1.2.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\packages\\System.Runtime.Serialization.Primitives.4.3.0\\lib\\net46\\System.Runtime.Serialization.Primitives.dll</HintPath>\n      <Private>True</Private>\n    </Reference>\n    <Reference Include=\"System.Security.AccessControl, Version=4.1.1.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\packages\\System.Security.AccessControl.4.5.0\\lib\\net461\\System.Security.AccessControl.dll</HintPath>\n    </Reference>\n    <Reference Include=\"System.Security.Claims, Version=4.0.2.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\packages\\System.Security.Claims.4.3.0\\lib\\net46\\System.Security.Claims.dll</HintPath>\n      <Private>True</Private>\n    </Reference>\n    <Reference Include=\"System.Security.Permissions, Version=4.0.1.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\packages\\System.Security.Permissions.4.5.0\\lib\\net461\\System.Security.Permissions.dll</HintPath>\n    </Reference>\n    <Reference Include=\"System.Security.Principal.Windows, Version=4.1.1.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\packages\\System.Security.Principal.Windows.4.5.0\\lib\\net461\\System.Security.Principal.Windows.dll</HintPath>\n    </Reference>\n    <Reference Include=\"System.ServiceProcess\" />\n    <Reference Include=\"System.Transactions\" />\n    <Reference Include=\"System.Web\" />\n    <Reference Include=\"System.Xml.Linq\" />\n    <Reference Include=\"System.Data.DataSetExtensions\" />\n    <Reference Include=\"Microsoft.CSharp\" />\n    <Reference Include=\"System.Data\" />\n    <Reference Include=\"System.Net.Http\" />\n    <Reference Include=\"System.Xml\" />\n    <Reference Include=\"System.Xml.XmlDocument, Version=4.0.2.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\packages\\System.Xml.XmlDocument.4.3.0\\lib\\net46\\System.Xml.XmlDocument.dll</HintPath>\n      <Private>True</Private>\n    </Reference>\n    <Reference Include=\"System.Xml.XPath, Version=4.0.2.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\packages\\System.Xml.XPath.4.3.0\\lib\\net46\\System.Xml.XPath.dll</HintPath>\n      <Private>True</Private>\n    </Reference>\n    <Reference Include=\"System.Xml.XPath.XmlDocument, Version=4.0.2.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\packages\\System.Xml.XPath.XmlDocument.4.3.0\\lib\\net46\\System.Xml.XPath.XmlDocument.dll</HintPath>\n    </Reference>\n    <Reference Include=\"TimeZoneConverter, Version=2.4.1.0, Culture=neutral, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\packages\\TimeZoneConverter.2.4.1\\lib\\net45\\TimeZoneConverter.dll</HintPath>\n    </Reference>\n  </ItemGroup>\n  <ItemGroup>\n    <Compile Include=\"Configuration\\Startup\\RebusRabbitMqConsumerConfigurationExtensions.cs\" />\n    <Compile Include=\"MqMessages\\Consumers\\IRebusRabbitMqConsumerModuleConfig.cs\" />\n    <Compile Include=\"MqMessages\\Consumers\\RebusRabbitMqConsumerModule.cs\" />\n    <Compile Include=\"MqMessages\\Consumers\\RebusRabbitMqConsumerModuleConfig.cs\" />\n    <Compile Include=\"Properties\\AssemblyInfo.cs\" />\n  </ItemGroup>\n  <ItemGroup>\n    <ProjectReference Include=\"..\\Abplus.MqMessages.RebusCore\\Abplus.MqMessages.RebusCore.csproj\">\n      <Project>{220d5f17-f49b-4a66-b2ee-cf107ef0d9be}</Project>\n      <Name>Abplus.MqMessages.RebusCore</Name>\n    </ProjectReference>\n    <ProjectReference Include=\"..\\Abplus\\Abplus.csproj\">\n      <Project>{1DE8D8D1-987D-4A9C-AEC5-FF0A9914BBD4}</Project>\n      <Name>Abplus</Name>\n    </ProjectReference>\n  </ItemGroup>\n  <ItemGroup>\n    <None Include=\"Abplus.MqMessages.RebusConsumer.nuspec\" />\n    <None Include=\"app.config\" />\n    <None Include=\"packages.config\" />\n  </ItemGroup>\n  <ItemGroup />\n  <Import Project=\"$(MSBuildToolsPath)\\Microsoft.CSharp.targets\" />\n  <Import Project=\"..\\..\\packages\\Microsoft.Bcl.Build.1.0.21\\build\\Microsoft.Bcl.Build.targets\" Condition=\"Exists('..\\..\\packages\\Microsoft.Bcl.Build.1.0.21\\build\\Microsoft.Bcl.Build.targets')\" />\n  <Target Name=\"EnsureNuGetPackageBuildImports\" BeforeTargets=\"PrepareForBuild\">\n    <PropertyGroup>\n      <ErrorText>这台计算机上缺少此项目引用的 NuGet 程序包。使用“NuGet 程序包还原”可下载这些程序包。有关更多信息，请参见 http://go.microsoft.com/fwlink/?LinkID=322105。缺少的文件是 {0}。</ErrorText>\n    </PropertyGroup>\n    <Error Condition=\"!Exists('..\\..\\packages\\Microsoft.Bcl.Build.1.0.21\\build\\Microsoft.Bcl.Build.targets')\" Text=\"$([System.String]::Format('$(ErrorText)', '..\\..\\packages\\Microsoft.Bcl.Build.1.0.21\\build\\Microsoft.Bcl.Build.targets'))\" />\n  </Target>\n  <!-- To modify your build process, add your task inside one of the targets below and uncomment it. \n       Other similar extension points exist, see Microsoft.Common.targets.\n  <Target Name=\"BeforeBuild\">\n  </Target>\n  <Target Name=\"AfterBuild\">\n  </Target>\n  -->\n</Project>"
  },
  {
    "path": "src2/Abplus.MqMessages.RebusConsumer/Configuration/Startup/RebusRabbitMqConsumerConfigurationExtensions.cs",
    "content": "﻿using Abp.MqMessages.Consumers;\n\nnamespace Abp.Configuration.Startup\n{\n    public static class RebusRabbitMqConsumerConfigurationExtensions\n    {\n        public static IRebusRabbitMqConsumerModuleConfig UseAbplusRebusRabbitMqConsumer(this IModuleConfigurations configurations)\n        {\n            return configurations.AbpConfiguration.GetOrCreate(\"Modules.Abp.RebusRabbitMqConsumer\", () => configurations.AbpConfiguration.IocManager.Resolve<IRebusRabbitMqConsumerModuleConfig>());\n        }\n    }\n}\n"
  },
  {
    "path": "src2/Abplus.MqMessages.RebusConsumer/MqMessages/Consumers/IRebusRabbitMqConsumerModuleConfig.cs",
    "content": "﻿using System;\nusing System.Reflection;\nusing Rebus.Config;\nusing Rebus.Serialization;\n\nnamespace Abp.MqMessages.Consumers\n{\n    public interface IRebusRabbitMqConsumerModuleConfig\n    {\n        /// <summary>\n        /// 是否启用，默认启用\n        /// </summary>\n        bool Enabled { get; }\n\n        /// <summary>\n        /// RabbitMq连接字符串\n        /// </summary>\n        string ConnectString { get; }\n\n        /// <summary>\n        /// 队列名\n        /// </summary>\n        string QueueName { get; }\n\n        /// <summary>\n        /// 最大并行数\n        /// </summary>\n        int MaxParallelism { get; }\n\n        /// <summary>\n        /// 最大Worker数\n        /// </summary>\n        int NumberOfWorkers { get; }\n\n        /// <summary>\n        /// 消息审计是否开启，默认不开启\n        /// </summary>\n        bool MessageAuditingEnabled { get; }\n\n        /// <summary>\n        /// 消息审计队列名，默认不启用\n        /// </summary>\n        string MessageAuditingQueueName { get; }\n\n        /// <summary>\n        /// 包含RebusMqMessageHandler的程序集(自动订阅消息和自动注册handler)\n        /// </summary>\n        Assembly[] AssemblysIncludeRebusMqMessageHandlers { get; }\n\n        /// <summary>\n        /// 配置日志组件\n        /// </summary>\n        Action<RebusLoggingConfigurer> LoggingConfigurer { get; }\n\n        /// <summary>\n        /// 其他选项配置\n        /// </summary>\n        Action<OptionsConfigurer> OptionsConfigurer { get; }\n\n        /// <summary>\n        /// 序列化组件配置\n        /// </summary>\n        Action<StandardConfigurer<ISerializer>> SerializerConfigurer { get; }\n\n        /// <summary>\n        /// \n        /// </summary>\n        /// <param name=\"enabled\">是否启用，默认启用</param>\n        /// <returns></returns>\n        IRebusRabbitMqConsumerModuleConfig Enable(bool enabled);\n        /// <summary>\n        /// \n        /// </summary>\n        /// <param name=\"connectString\">RabbitMq连接字符串</param>\n        /// <returns></returns>\n        IRebusRabbitMqConsumerModuleConfig ConnectTo(string connectString);\n\n        /// <summary>\n        /// \n        /// </summary>\n        /// <param name=\"queueName\">使用队列名</param>\n        /// <returns></returns>\n        IRebusRabbitMqConsumerModuleConfig UseQueue(string queueName);\n\n        /// <summary>\n        /// \n        /// </summary>\n        /// <param name=\"maxParallelism\">最大并行数</param>\n        /// <returns></returns>\n        IRebusRabbitMqConsumerModuleConfig SetMaxParallelism(int maxParallelism);\n\n        /// <summary>\n        /// \n        /// </summary>\n        /// <param name=\"numberOfWorkers\">最大Worker数</param>\n        /// <returns></returns>\n        IRebusRabbitMqConsumerModuleConfig SetNumberOfWorkers(int numberOfWorkers);\n\n        /// <summary>\n        /// 启用消息审计\n        /// </summary>\n        /// <param name=\"messageAuditingQueueName\">消息审计队列名</param>\n        /// <returns></returns>\n        IRebusRabbitMqConsumerModuleConfig EnableMessageAuditing(string messageAuditingQueueName);\n\n        /// <summary>\n        /// 注册Rebus Handlers\n        /// </summary>\n        /// <param name=\"assemblys\">包含Rebus Handlers的程序集</param>\n        /// <returns></returns>\n        IRebusRabbitMqConsumerModuleConfig RegisterHandlerInAssemblys(params Assembly[] assemblys);\n\n        /// <summary>\n        /// 配置日志组件\n        /// </summary>\n        /// <param name=\"loggingConfigurer\"></param>\n        /// <returns></returns>\n        IRebusRabbitMqConsumerModuleConfig UseLogging(Action<RebusLoggingConfigurer> loggingConfigurer);\n        /// <summary>\n        /// 配置其他选项\n        /// </summary>\n        /// <param name=\"optionsConfigurer\"></param>\n        /// <returns></returns>\n        IRebusRabbitMqConsumerModuleConfig UseOptions(Action<OptionsConfigurer> optionsConfigurer);\n\n        /// <summary>\n        /// 配置序列化\n        /// </summary>\n        /// <param name=\"serializerConfigurer\"></param>\n        /// <returns></returns>\n        IRebusRabbitMqConsumerModuleConfig UseSerializer(Action<StandardConfigurer<ISerializer>> serializerConfigurer);\n    }\n}\n"
  },
  {
    "path": "src2/Abplus.MqMessages.RebusConsumer/MqMessages/Consumers/RebusRabbitMqConsumerModule.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Reflection;\nusing Abp.Modules;\nusing Abp.MqMessages.Publishers;\nusing Rebus.Auditing.Messages;\nusing Rebus.Bus;\nusing Rebus.CastleWindsor;\nusing Rebus.Config;\nusing Rebus.Handlers;\n\nnamespace Abp.MqMessages.Consumers\n{\n    [DependsOn(typeof(RebusRabbitMqPublisherCoreModule))]\n    public class RebusRabbitMqConsumerModule : AbpModule\n    {\n        private IBus _bus;\n\n        public override void PreInitialize()\n        {\n            IocManager.Register<IRebusRabbitMqConsumerModuleConfig, RebusRabbitMqConsumerModuleConfig>();\n        }\n\n        public override void Initialize()\n        {\n            IocManager.RegisterAssemblyByConvention(Assembly.GetExecutingAssembly());\n        }\n\n        public override void PostInitialize()\n        {\n            var moduleConfig = IocManager.Resolve<IRebusRabbitMqConsumerModuleConfig>();\n\n            if (moduleConfig.Enabled)\n            {\n                var rebusConfig = Configure.With(new CastleWindsorContainerAdapter(IocManager.IocContainer));\n\n                if (moduleConfig.LoggingConfigurer != null)\n                {\n                    rebusConfig.Logging(moduleConfig.LoggingConfigurer);\n                }\n\n                rebusConfig.Serialization(moduleConfig.SerializerConfigurer);\n\n                if (moduleConfig.OptionsConfigurer != null)\n                {\n                    rebusConfig.Options(moduleConfig.OptionsConfigurer);\n                }\n\n                rebusConfig.Options(c =>\n                {\n                    c.SetMaxParallelism(moduleConfig.MaxParallelism);\n                    c.SetNumberOfWorkers(moduleConfig.NumberOfWorkers);\n                });\n\n                if (moduleConfig.MessageAuditingEnabled)\n                {\n                    rebusConfig.Options(o => o.EnableMessageAuditing(moduleConfig.MessageAuditingQueueName));\n                }\n                \n                var mqMessageTypes = new List<Type>();\n                //Register handlers first!\n                foreach (var assembly in moduleConfig.AssemblysIncludeRebusMqMessageHandlers)\n                {\n                    IocManager.IocContainer.AutoRegisterHandlersFromAssembly(assembly);\n\n                    mqMessageTypes.AddRange(assembly.GetTypes()\n                        .Where(t => t.GetInterfaces().Any(i => i.IsGenericType && i.GetGenericTypeDefinition() == typeof(IHandleMessages<>)))\n                        .SelectMany(t => t.GetInterfaces())\n                        .Distinct()\n                        .SelectMany(t => t.GetGenericArguments())\n                        .Distinct());\n                }\n\n                _bus = rebusConfig.Transport(c => c.UseRabbitMq(moduleConfig.ConnectString, moduleConfig.QueueName))\n                      .Start();\n\n                //Subscribe messages\n                mqMessageTypes = mqMessageTypes.Distinct().ToList();\n\n                foreach (var mqMessageType in mqMessageTypes)\n                {\n                    _bus.Subscribe(mqMessageType);\n                }\n            }\n        }\n\n        public override void Shutdown()\n        {\n            if (_bus != null)\n            {\n                _bus.Dispose();\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "src2/Abplus.MqMessages.RebusConsumer/MqMessages/Consumers/RebusRabbitMqConsumerModuleConfig.cs",
    "content": "﻿using System;\nusing System.Reflection;\nusing Newtonsoft.Json;\nusing Rebus.Config;\nusing Rebus.NewtonsoftJson;\nusing Rebus.Serialization;\n\nnamespace Abp.MqMessages.Consumers\n{\n    public class RebusRabbitMqConsumerModuleConfig : IRebusRabbitMqConsumerModuleConfig\n    {\n        public RebusRabbitMqConsumerModuleConfig()\n        {\n            Enabled = true;\n            MessageAuditingEnabled = false;\n            MaxParallelism = 1;\n            NumberOfWorkers = 1;\n            SerializerConfigurer = c => c.UseNewtonsoftJson(new JsonSerializerSettings { TypeNameHandling = TypeNameHandling.All });\n        }\n\n        public Assembly[] AssemblysIncludeRebusMqMessageHandlers { get; private set; }\n\n        public string ConnectString { get; private set; }\n\n        public bool Enabled { get; private set; }\n\n        public Action<RebusLoggingConfigurer> LoggingConfigurer { get; private set; }\n\n        public int MaxParallelism { get; private set; }\n\n        public bool MessageAuditingEnabled { get; private set; }\n\n        public string MessageAuditingQueueName { get; private set; }\n\n        public int NumberOfWorkers { get; private set; }\n\n        public Action<OptionsConfigurer> OptionsConfigurer { get; private set; }\n\n        public string QueueName { get; private set; }\n\n        public Action<StandardConfigurer<ISerializer>> SerializerConfigurer { get; private set; }\n\n        public IRebusRabbitMqConsumerModuleConfig ConnectTo(string connectString)\n        {\n            ConnectString = connectString;\n            return this;\n        }\n\n        public IRebusRabbitMqConsumerModuleConfig Enable(bool enabled)\n        {\n            Enabled = enabled;\n            return this;\n        }\n\n        public IRebusRabbitMqConsumerModuleConfig EnableMessageAuditing(string messageAuditingQueueName)\n        {\n            MessageAuditingEnabled = true;\n            MessageAuditingQueueName = messageAuditingQueueName;\n            return this;\n        }\n\n        public IRebusRabbitMqConsumerModuleConfig RegisterHandlerInAssemblys(params Assembly[] assemblys)\n        {\n            AssemblysIncludeRebusMqMessageHandlers = assemblys;\n            return this;\n        }\n\n        public IRebusRabbitMqConsumerModuleConfig SetMaxParallelism(int maxParallelism)\n        {\n            MaxParallelism = maxParallelism;\n            return this;\n        }\n\n        public IRebusRabbitMqConsumerModuleConfig SetNumberOfWorkers(int numberOfWorkers)\n        {\n            NumberOfWorkers = numberOfWorkers;\n            return this;\n        }\n\n        public IRebusRabbitMqConsumerModuleConfig UseLogging(Action<RebusLoggingConfigurer> loggingConfigurer)\n        {\n            LoggingConfigurer = loggingConfigurer;\n            return this;\n        }\n\n        public IRebusRabbitMqConsumerModuleConfig UseOptions(Action<OptionsConfigurer> optionsConfigurer)\n        {\n            OptionsConfigurer = optionsConfigurer;\n            return this;\n        }\n\n        public IRebusRabbitMqConsumerModuleConfig UseQueue(string queueName)\n        {\n            QueueName = queueName;\n            return this;\n        }\n\n        public IRebusRabbitMqConsumerModuleConfig UseSerializer(Action<StandardConfigurer<ISerializer>> serializerConfigurer)\n        {\n            SerializerConfigurer = serializerConfigurer;\n            return this;\n        }\n    }\n}\n"
  },
  {
    "path": "src2/Abplus.MqMessages.RebusConsumer/Properties/AssemblyInfo.cs",
    "content": "﻿using System.Reflection;\nusing System.Runtime.InteropServices;\nusing Abp;\n\n// 有关程序集的一般信息由以下\n// 控制。更改这些特性值可修改\n// 与程序集关联的信息。\n[assembly: AssemblyTitle(\"Abplus.MqMessages.RebusConsumer\")]\n[assembly: AssemblyDescription(\"\")]\n[assembly: AssemblyConfiguration(\"\")]\n[assembly: AssemblyCompany(\"\")]\n[assembly: AssemblyProduct(\"Abplus.MqMessages.RebusConsumer\")]\n[assembly: AssemblyCopyright(\"Copyright ©  2017\")]\n[assembly: AssemblyTrademark(\"\")]\n[assembly: AssemblyCulture(\"\")]\n\n//将 ComVisible 设置为 false 将使此程序集中的类型\n//对 COM 组件不可见。  如果需要从 COM 访问此程序集中的类型，\n//请将此类型的 ComVisible 特性设置为 true。\n[assembly: ComVisible(false)]\n\n// 如果此项目向 COM 公开，则下列 GUID 用于类型库的 ID\n[assembly: Guid(\"9af821f9-8f33-489d-97e9-3ba5127320de\")]\n\n// 程序集的版本信息由下列四个值组成: \n//\n//      主版本\n//      次版本\n//      生成号\n//      修订号\n//\n//可以指定所有这些值，也可以使用“生成号”和“修订号”的默认值，\n// 方法是按如下所示使用“*”: :\n// [assembly: AssemblyVersion(\"1.0.*\")]\n[assembly: AssemblyVersion(AbplusConsts.CurrentVersion)]\n[assembly: AssemblyFileVersion(AbplusConsts.CurrentVersion)]\n"
  },
  {
    "path": "src2/Abplus.MqMessages.RebusConsumer/app.config",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<configuration>\n  <runtime>\n    <assemblyBinding xmlns=\"urn:schemas-microsoft-com:asm.v1\">\n      <dependentAssembly>\n        <assemblyIdentity name=\"Castle.Windsor\" publicKeyToken=\"407dd0808d44fbdc\" culture=\"neutral\" />\n        <bindingRedirect oldVersion=\"0.0.0.0-4.0.0.0\" newVersion=\"4.0.0.0\" />\n      </dependentAssembly>\n      <dependentAssembly>\n        <assemblyIdentity name=\"Newtonsoft.Json\" publicKeyToken=\"30ad4fe6b2a6aeed\" culture=\"neutral\" />\n        <bindingRedirect oldVersion=\"0.0.0.0-11.0.0.0\" newVersion=\"11.0.0.0\" />\n      </dependentAssembly>\n      <dependentAssembly>\n        <assemblyIdentity name=\"Microsoft.Extensions.Caching.Abstractions\" publicKeyToken=\"adb9793829ddae60\" culture=\"neutral\" />\n        <bindingRedirect oldVersion=\"0.0.0.0-2.0.1.0\" newVersion=\"2.0.1.0\" />\n      </dependentAssembly>\n      <dependentAssembly>\n        <assemblyIdentity name=\"Microsoft.Extensions.Caching.Memory\" publicKeyToken=\"adb9793829ddae60\" culture=\"neutral\" />\n        <bindingRedirect oldVersion=\"0.0.0.0-2.0.1.0\" newVersion=\"2.0.1.0\" />\n      </dependentAssembly>\n      <dependentAssembly>\n        <assemblyIdentity name=\"Microsoft.Extensions.Options\" publicKeyToken=\"adb9793829ddae60\" culture=\"neutral\" />\n        <bindingRedirect oldVersion=\"0.0.0.0-2.0.1.0\" newVersion=\"2.0.1.0\" />\n      </dependentAssembly>\n      <dependentAssembly>\n        <assemblyIdentity name=\"System.Runtime.InteropServices.RuntimeInformation\" publicKeyToken=\"b03f5f7f11d50a3a\" culture=\"neutral\" />\n        <bindingRedirect oldVersion=\"0.0.0.0-4.0.2.0\" newVersion=\"4.0.2.0\" />\n      </dependentAssembly>\n      <dependentAssembly>\n        <assemblyIdentity name=\"RabbitMQ.Client\" publicKeyToken=\"89e7d7c5feba84ce\" culture=\"neutral\" />\n        <bindingRedirect oldVersion=\"0.0.0.0-5.0.0.0\" newVersion=\"5.0.0.0\" />\n      </dependentAssembly>\n      <dependentAssembly>\n        <assemblyIdentity name=\"System.Runtime.CompilerServices.Unsafe\" publicKeyToken=\"b03f5f7f11d50a3a\" culture=\"neutral\" />\n        <bindingRedirect oldVersion=\"0.0.0.0-4.0.3.0\" newVersion=\"4.0.3.0\" />\n      </dependentAssembly>\n      <dependentAssembly>\n        <assemblyIdentity name=\"System.Collections.Immutable\" publicKeyToken=\"b03f5f7f11d50a3a\" culture=\"neutral\" />\n        <bindingRedirect oldVersion=\"0.0.0.0-1.2.3.0\" newVersion=\"1.2.3.0\" />\n      </dependentAssembly>\n      <dependentAssembly>\n        <assemblyIdentity name=\"System.ComponentModel.Annotations\" publicKeyToken=\"b03f5f7f11d50a3a\" culture=\"neutral\" />\n        <bindingRedirect oldVersion=\"0.0.0.0-4.2.1.0\" newVersion=\"4.2.1.0\" />\n      </dependentAssembly>\n    </assemblyBinding>\n  </runtime>\n</configuration>"
  },
  {
    "path": "src2/Abplus.MqMessages.RebusConsumer/packages.config",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<packages>\n  <package id=\"Abp\" version=\"3.7.2\" targetFramework=\"net461\" />\n  <package id=\"Castle.Core\" version=\"4.3.1\" targetFramework=\"net461\" />\n  <package id=\"Castle.LoggingFacility\" version=\"4.1.0\" targetFramework=\"net461\" />\n  <package id=\"Castle.Windsor\" version=\"4.1.0\" targetFramework=\"net461\" />\n  <package id=\"JetBrains.Annotations\" version=\"11.1.0\" targetFramework=\"net461\" />\n  <package id=\"Microsoft.Bcl\" version=\"1.1.10\" targetFramework=\"net461\" />\n  <package id=\"Microsoft.Bcl.Async\" version=\"1.0.168\" targetFramework=\"net461\" />\n  <package id=\"Microsoft.Bcl.Build\" version=\"1.0.21\" targetFramework=\"net461\" />\n  <package id=\"Microsoft.Diagnostics.Tracing.EventSource.Redist\" version=\"2.0.0\" targetFramework=\"net461\" />\n  <package id=\"Microsoft.Extensions.Caching.Abstractions\" version=\"2.1.0\" targetFramework=\"net461\" />\n  <package id=\"Microsoft.Extensions.Caching.Memory\" version=\"2.1.0\" targetFramework=\"net461\" />\n  <package id=\"Microsoft.Extensions.DependencyInjection.Abstractions\" version=\"2.1.0\" targetFramework=\"net461\" />\n  <package id=\"Microsoft.Extensions.Options\" version=\"2.1.0\" targetFramework=\"net461\" />\n  <package id=\"Microsoft.Extensions.Primitives\" version=\"2.1.0\" targetFramework=\"net461\" />\n  <package id=\"Newtonsoft.Json\" version=\"11.0.2\" targetFramework=\"net461\" />\n  <package id=\"Nito.AsyncEx\" version=\"4.0.1\" targetFramework=\"net461\" />\n  <package id=\"Nito.AsyncEx.Context\" version=\"1.1.0\" targetFramework=\"net461\" />\n  <package id=\"Nito.AsyncEx.Coordination\" version=\"1.0.2\" targetFramework=\"net461\" />\n  <package id=\"Nito.AsyncEx.Tasks\" version=\"1.1.0\" targetFramework=\"net461\" />\n  <package id=\"Nito.Collections.Deque\" version=\"1.0.4\" targetFramework=\"net461\" />\n  <package id=\"Nito.Disposables\" version=\"1.2.3\" targetFramework=\"net461\" />\n  <package id=\"RabbitMQ.Client\" version=\"5.0.1\" targetFramework=\"net461\" />\n  <package id=\"Rebus\" version=\"4.2.1\" targetFramework=\"net461\" />\n  <package id=\"Rebus.Castle.Windsor\" version=\"4.0.0\" targetFramework=\"net461\" />\n  <package id=\"Rebus.NewtonsoftJson\" version=\"3.1.5\" targetFramework=\"net461\" />\n  <package id=\"Rebus.RabbitMq\" version=\"4.4.2\" targetFramework=\"net461\" />\n  <package id=\"System.Buffers\" version=\"4.4.0\" targetFramework=\"net461\" />\n  <package id=\"System.Collections.Immutable\" version=\"1.5.0\" targetFramework=\"net461\" />\n  <package id=\"System.ComponentModel.Annotations\" version=\"4.5.0\" targetFramework=\"net461\" />\n  <package id=\"System.Configuration.ConfigurationManager\" version=\"4.5.0\" targetFramework=\"net461\" />\n  <package id=\"System.Data.Common\" version=\"4.3.0\" targetFramework=\"net461\" />\n  <package id=\"System.Linq.Dynamic\" version=\"1.0.7\" targetFramework=\"net461\" />\n  <package id=\"System.Linq.Dynamic.Core\" version=\"1.0.8.9\" targetFramework=\"net461\" />\n  <package id=\"System.Linq.Queryable\" version=\"4.3.0\" targetFramework=\"net461\" />\n  <package id=\"System.Memory\" version=\"4.5.0\" targetFramework=\"net461\" />\n  <package id=\"System.Numerics.Vectors\" version=\"4.4.0\" targetFramework=\"net461\" />\n  <package id=\"System.Runtime.CompilerServices.Unsafe\" version=\"4.5.0\" targetFramework=\"net461\" />\n  <package id=\"System.Runtime.InteropServices.RuntimeInformation\" version=\"4.3.0\" targetFramework=\"net461\" />\n  <package id=\"System.Runtime.Serialization.Formatters\" version=\"4.3.0\" targetFramework=\"net461\" />\n  <package id=\"System.Runtime.Serialization.Primitives\" version=\"4.3.0\" targetFramework=\"net461\" />\n  <package id=\"System.Security.AccessControl\" version=\"4.5.0\" targetFramework=\"net461\" />\n  <package id=\"System.Security.Claims\" version=\"4.3.0\" targetFramework=\"net461\" />\n  <package id=\"System.Security.Permissions\" version=\"4.5.0\" targetFramework=\"net461\" />\n  <package id=\"System.Security.Principal.Windows\" version=\"4.5.0\" targetFramework=\"net461\" />\n  <package id=\"System.Threading\" version=\"4.3.0\" targetFramework=\"net461\" />\n  <package id=\"System.Xml.XmlDocument\" version=\"4.3.0\" targetFramework=\"net461\" />\n  <package id=\"System.Xml.XPath\" version=\"4.3.0\" targetFramework=\"net461\" />\n  <package id=\"System.Xml.XPath.XmlDocument\" version=\"4.3.0\" targetFramework=\"net461\" />\n  <package id=\"TimeZoneConverter\" version=\"2.4.1\" targetFramework=\"net461\" />\n</packages>"
  },
  {
    "path": "src2/Abplus.MqMessages.RebusCore/Abplus.MqMessages.RebusCore.csproj",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<Project ToolsVersion=\"14.0\" DefaultTargets=\"Build\" xmlns=\"http://schemas.microsoft.com/developer/msbuild/2003\">\n  <Import Project=\"$(MSBuildExtensionsPath)\\$(MSBuildToolsVersion)\\Microsoft.Common.props\" Condition=\"Exists('$(MSBuildExtensionsPath)\\$(MSBuildToolsVersion)\\Microsoft.Common.props')\" />\n  <PropertyGroup>\n    <Configuration Condition=\" '$(Configuration)' == '' \">Debug</Configuration>\n    <Platform Condition=\" '$(Platform)' == '' \">AnyCPU</Platform>\n    <ProjectGuid>{220D5F17-F49B-4A66-B2EE-CF107EF0D9BE}</ProjectGuid>\n    <OutputType>Library</OutputType>\n    <AppDesignerFolder>Properties</AppDesignerFolder>\n    <RootNamespace>Abp</RootNamespace>\n    <AssemblyName>Abplus.MqMessages.RebusCore</AssemblyName>\n    <TargetFrameworkVersion>v4.6.1</TargetFrameworkVersion>\n    <FileAlignment>512</FileAlignment>\n    <NuGetPackageImportStamp>\n    </NuGetPackageImportStamp>\n  </PropertyGroup>\n  <PropertyGroup Condition=\" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' \">\n    <DebugSymbols>true</DebugSymbols>\n    <DebugType>full</DebugType>\n    <Optimize>false</Optimize>\n    <OutputPath>bin\\Debug\\</OutputPath>\n    <DefineConstants>DEBUG;TRACE</DefineConstants>\n    <ErrorReport>prompt</ErrorReport>\n    <WarningLevel>4</WarningLevel>\n  </PropertyGroup>\n  <PropertyGroup Condition=\" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' \">\n    <DebugType>pdbonly</DebugType>\n    <Optimize>true</Optimize>\n    <OutputPath>bin\\Release\\</OutputPath>\n    <DefineConstants>TRACE</DefineConstants>\n    <ErrorReport>prompt</ErrorReport>\n    <WarningLevel>4</WarningLevel>\n  </PropertyGroup>\n  <ItemGroup>\n    <Reference Include=\"Abp, Version=3.7.2.0, Culture=neutral, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\packages\\Abp.3.7.2\\lib\\netstandard2.0\\Abp.dll</HintPath>\n    </Reference>\n    <Reference Include=\"Castle.Core, Version=4.0.0.0, Culture=neutral, PublicKeyToken=407dd0808d44fbdc, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\packages\\Castle.Core.4.3.1\\lib\\net45\\Castle.Core.dll</HintPath>\n    </Reference>\n    <Reference Include=\"Castle.Facilities.Logging, Version=4.0.0.0, Culture=neutral, PublicKeyToken=407dd0808d44fbdc, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\packages\\Castle.LoggingFacility.4.1.0\\lib\\net45\\Castle.Facilities.Logging.dll</HintPath>\n    </Reference>\n    <Reference Include=\"Castle.Windsor, Version=4.0.0.0, Culture=neutral, PublicKeyToken=407dd0808d44fbdc, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\packages\\Castle.Windsor.4.1.0\\lib\\net45\\Castle.Windsor.dll</HintPath>\n    </Reference>\n    <Reference Include=\"JetBrains.Annotations, Version=11.1.0.0, Culture=neutral, PublicKeyToken=1010a0d8d6380325, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\packages\\JetBrains.Annotations.11.1.0\\lib\\net20\\JetBrains.Annotations.dll</HintPath>\n    </Reference>\n    <Reference Include=\"Microsoft.Extensions.Caching.Abstractions, Version=2.1.0.0, Culture=neutral, PublicKeyToken=adb9793829ddae60, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\packages\\Microsoft.Extensions.Caching.Abstractions.2.1.0\\lib\\netstandard2.0\\Microsoft.Extensions.Caching.Abstractions.dll</HintPath>\n    </Reference>\n    <Reference Include=\"Microsoft.Extensions.Caching.Memory, Version=2.1.0.0, Culture=neutral, PublicKeyToken=adb9793829ddae60, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\packages\\Microsoft.Extensions.Caching.Memory.2.1.0\\lib\\netstandard2.0\\Microsoft.Extensions.Caching.Memory.dll</HintPath>\n    </Reference>\n    <Reference Include=\"Microsoft.Extensions.DependencyInjection.Abstractions, Version=2.1.0.0, Culture=neutral, PublicKeyToken=adb9793829ddae60, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\packages\\Microsoft.Extensions.DependencyInjection.Abstractions.2.1.0\\lib\\netstandard2.0\\Microsoft.Extensions.DependencyInjection.Abstractions.dll</HintPath>\n    </Reference>\n    <Reference Include=\"Microsoft.Extensions.Options, Version=2.1.0.0, Culture=neutral, PublicKeyToken=adb9793829ddae60, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\packages\\Microsoft.Extensions.Options.2.1.0\\lib\\netstandard2.0\\Microsoft.Extensions.Options.dll</HintPath>\n    </Reference>\n    <Reference Include=\"Microsoft.Extensions.Primitives, Version=2.1.0.0, Culture=neutral, PublicKeyToken=adb9793829ddae60, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\packages\\Microsoft.Extensions.Primitives.2.1.0\\lib\\netstandard2.0\\Microsoft.Extensions.Primitives.dll</HintPath>\n    </Reference>\n    <Reference Include=\"Microsoft.Threading.Tasks, Version=1.0.12.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\packages\\Microsoft.Bcl.Async.1.0.168\\lib\\net40\\Microsoft.Threading.Tasks.dll</HintPath>\n      <Private>True</Private>\n    </Reference>\n    <Reference Include=\"Microsoft.Threading.Tasks.Extensions, Version=1.0.12.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\packages\\Microsoft.Bcl.Async.1.0.168\\lib\\net40\\Microsoft.Threading.Tasks.Extensions.dll</HintPath>\n      <Private>True</Private>\n    </Reference>\n    <Reference Include=\"Microsoft.Threading.Tasks.Extensions.Desktop, Version=1.0.168.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\packages\\Microsoft.Bcl.Async.1.0.168\\lib\\net40\\Microsoft.Threading.Tasks.Extensions.Desktop.dll</HintPath>\n      <Private>True</Private>\n    </Reference>\n    <Reference Include=\"Newtonsoft.Json, Version=11.0.0.0, Culture=neutral, PublicKeyToken=30ad4fe6b2a6aeed, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\packages\\Newtonsoft.Json.11.0.2\\lib\\net45\\Newtonsoft.Json.dll</HintPath>\n    </Reference>\n    <Reference Include=\"Nito.AsyncEx, Version=4.0.1.0, Culture=neutral, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\packages\\Nito.AsyncEx.4.0.1\\lib\\net45\\Nito.AsyncEx.dll</HintPath>\n      <Private>True</Private>\n    </Reference>\n    <Reference Include=\"Nito.AsyncEx.Concurrent, Version=4.0.1.0, Culture=neutral, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\packages\\Nito.AsyncEx.4.0.1\\lib\\net45\\Nito.AsyncEx.Concurrent.dll</HintPath>\n      <Private>True</Private>\n    </Reference>\n    <Reference Include=\"Nito.AsyncEx.Context, Version=1.1.0.0, Culture=neutral, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\packages\\Nito.AsyncEx.Context.1.1.0\\lib\\net46\\Nito.AsyncEx.Context.dll</HintPath>\n    </Reference>\n    <Reference Include=\"Nito.AsyncEx.Coordination, Version=1.0.2.0, Culture=neutral, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\packages\\Nito.AsyncEx.Coordination.1.0.2\\lib\\net46\\Nito.AsyncEx.Coordination.dll</HintPath>\n    </Reference>\n    <Reference Include=\"Nito.AsyncEx.Enlightenment, Version=4.0.1.0, Culture=neutral, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\packages\\Nito.AsyncEx.4.0.1\\lib\\net45\\Nito.AsyncEx.Enlightenment.dll</HintPath>\n      <Private>True</Private>\n    </Reference>\n    <Reference Include=\"Nito.AsyncEx.Tasks, Version=1.1.0.0, Culture=neutral, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\packages\\Nito.AsyncEx.Tasks.1.1.0\\lib\\net46\\Nito.AsyncEx.Tasks.dll</HintPath>\n    </Reference>\n    <Reference Include=\"Nito.Collections.Deque, Version=1.0.4.0, Culture=neutral, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\packages\\Nito.Collections.Deque.1.0.4\\lib\\netstandard2.0\\Nito.Collections.Deque.dll</HintPath>\n    </Reference>\n    <Reference Include=\"Nito.Disposables, Version=1.2.3.0, Culture=neutral, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\packages\\Nito.Disposables.1.2.3\\lib\\netstandard2.0\\Nito.Disposables.dll</HintPath>\n    </Reference>\n    <Reference Include=\"Rebus, Version=4.2.1.0, Culture=neutral, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\packages\\Rebus.4.2.1\\lib\\net45\\Rebus.dll</HintPath>\n    </Reference>\n    <Reference Include=\"System\" />\n    <Reference Include=\"System.Buffers, Version=4.0.2.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\packages\\System.Buffers.4.4.0\\lib\\netstandard2.0\\System.Buffers.dll</HintPath>\n    </Reference>\n    <Reference Include=\"System.Collections.Immutable, Version=1.2.3.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\packages\\System.Collections.Immutable.1.5.0\\lib\\netstandard2.0\\System.Collections.Immutable.dll</HintPath>\n    </Reference>\n    <Reference Include=\"System.ComponentModel.Annotations, Version=4.2.1.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\packages\\System.ComponentModel.Annotations.4.5.0\\lib\\net461\\System.ComponentModel.Annotations.dll</HintPath>\n    </Reference>\n    <Reference Include=\"System.ComponentModel.DataAnnotations\" />\n    <Reference Include=\"System.Configuration\" />\n    <Reference Include=\"System.Configuration.ConfigurationManager, Version=4.0.1.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\packages\\System.Configuration.ConfigurationManager.4.5.0\\lib\\net461\\System.Configuration.ConfigurationManager.dll</HintPath>\n    </Reference>\n    <Reference Include=\"System.Core\" />\n    <Reference Include=\"System.Data.Common, Version=4.1.1.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\packages\\System.Data.Common.4.3.0\\lib\\net451\\System.Data.Common.dll</HintPath>\n      <Private>True</Private>\n    </Reference>\n    <Reference Include=\"System.Data.OracleClient\" />\n    <Reference Include=\"System.Drawing\" />\n    <Reference Include=\"System.Linq.Dynamic, Version=1.0.6132.35681, Culture=neutral, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\packages\\System.Linq.Dynamic.1.0.7\\lib\\net40\\System.Linq.Dynamic.dll</HintPath>\n      <Private>True</Private>\n    </Reference>\n    <Reference Include=\"System.Linq.Dynamic.Core, Version=0.0.0.0, Culture=neutral, PublicKeyToken=0f07ec44de6ac832, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\packages\\System.Linq.Dynamic.Core.1.0.8.9\\lib\\net46\\System.Linq.Dynamic.Core.dll</HintPath>\n    </Reference>\n    <Reference Include=\"System.Memory, Version=4.0.1.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\packages\\System.Memory.4.5.0\\lib\\netstandard2.0\\System.Memory.dll</HintPath>\n    </Reference>\n    <Reference Include=\"System.Net\" />\n    <Reference Include=\"System.Numerics\" />\n    <Reference Include=\"System.Numerics.Vectors, Version=4.1.3.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\packages\\System.Numerics.Vectors.4.4.0\\lib\\net46\\System.Numerics.Vectors.dll</HintPath>\n    </Reference>\n    <Reference Include=\"System.Runtime.Caching\" />\n    <Reference Include=\"System.Runtime.CompilerServices.Unsafe, Version=4.0.4.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\packages\\System.Runtime.CompilerServices.Unsafe.4.5.0\\lib\\netstandard2.0\\System.Runtime.CompilerServices.Unsafe.dll</HintPath>\n    </Reference>\n    <Reference Include=\"System.Runtime.InteropServices.RuntimeInformation, Version=4.0.1.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\packages\\System.Runtime.InteropServices.RuntimeInformation.4.3.0\\lib\\net45\\System.Runtime.InteropServices.RuntimeInformation.dll</HintPath>\n      <Private>True</Private>\n    </Reference>\n    <Reference Include=\"System.Runtime.Remoting\" />\n    <Reference Include=\"System.Runtime.Serialization\" />\n    <Reference Include=\"System.Runtime.Serialization.Formatters, Version=4.0.1.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\packages\\System.Runtime.Serialization.Formatters.4.3.0\\lib\\net46\\System.Runtime.Serialization.Formatters.dll</HintPath>\n      <Private>True</Private>\n    </Reference>\n    <Reference Include=\"System.Runtime.Serialization.Primitives, Version=4.1.2.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\packages\\System.Runtime.Serialization.Primitives.4.3.0\\lib\\net46\\System.Runtime.Serialization.Primitives.dll</HintPath>\n      <Private>True</Private>\n    </Reference>\n    <Reference Include=\"System.Security.AccessControl, Version=4.1.1.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\packages\\System.Security.AccessControl.4.5.0\\lib\\net461\\System.Security.AccessControl.dll</HintPath>\n    </Reference>\n    <Reference Include=\"System.Security.Claims, Version=4.0.2.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\packages\\System.Security.Claims.4.3.0\\lib\\net46\\System.Security.Claims.dll</HintPath>\n      <Private>True</Private>\n    </Reference>\n    <Reference Include=\"System.Security.Permissions, Version=4.0.1.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\packages\\System.Security.Permissions.4.5.0\\lib\\net461\\System.Security.Permissions.dll</HintPath>\n    </Reference>\n    <Reference Include=\"System.Security.Principal.Windows, Version=4.1.1.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\packages\\System.Security.Principal.Windows.4.5.0\\lib\\net461\\System.Security.Principal.Windows.dll</HintPath>\n    </Reference>\n    <Reference Include=\"System.ServiceProcess\" />\n    <Reference Include=\"System.Transactions\" />\n    <Reference Include=\"System.Web\" />\n    <Reference Include=\"System.Xml.Linq\" />\n    <Reference Include=\"System.Data.DataSetExtensions\" />\n    <Reference Include=\"Microsoft.CSharp\" />\n    <Reference Include=\"System.Data\" />\n    <Reference Include=\"System.Net.Http\" />\n    <Reference Include=\"System.Xml\" />\n    <Reference Include=\"System.Xml.XmlDocument, Version=4.0.2.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\packages\\System.Xml.XmlDocument.4.3.0\\lib\\net46\\System.Xml.XmlDocument.dll</HintPath>\n      <Private>True</Private>\n    </Reference>\n    <Reference Include=\"System.Xml.XPath, Version=4.0.2.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\packages\\System.Xml.XPath.4.3.0\\lib\\net46\\System.Xml.XPath.dll</HintPath>\n      <Private>True</Private>\n    </Reference>\n    <Reference Include=\"System.Xml.XPath.XmlDocument, Version=4.0.2.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\packages\\System.Xml.XPath.XmlDocument.4.3.0\\lib\\net46\\System.Xml.XPath.XmlDocument.dll</HintPath>\n    </Reference>\n    <Reference Include=\"TimeZoneConverter, Version=2.4.1.0, Culture=neutral, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\packages\\TimeZoneConverter.2.4.1\\lib\\net45\\TimeZoneConverter.dll</HintPath>\n    </Reference>\n  </ItemGroup>\n  <ItemGroup>\n    <Compile Include=\"MqMessages\\Publishers\\RebusRabbitMqPublisher.cs\" />\n    <Compile Include=\"MqMessages\\Publishers\\RebusRabbitMqPublisherCoreModule.cs\" />\n    <Compile Include=\"Properties\\AssemblyInfo.cs\" />\n  </ItemGroup>\n  <ItemGroup>\n    <None Include=\"Abplus.MqMessages.RebusCore.nuspec\" />\n    <None Include=\"app.config\" />\n    <None Include=\"packages.config\" />\n  </ItemGroup>\n  <ItemGroup>\n    <ProjectReference Include=\"..\\Abplus\\Abplus.csproj\">\n      <Project>{1de8d8d1-987d-4a9c-aec5-ff0a9914bbd4}</Project>\n      <Name>Abplus</Name>\n    </ProjectReference>\n  </ItemGroup>\n  <Import Project=\"$(MSBuildToolsPath)\\Microsoft.CSharp.targets\" />\n  <Import Project=\"..\\..\\packages\\Microsoft.Bcl.Build.1.0.21\\build\\Microsoft.Bcl.Build.targets\" Condition=\"Exists('..\\..\\packages\\Microsoft.Bcl.Build.1.0.21\\build\\Microsoft.Bcl.Build.targets')\" />\n  <Target Name=\"EnsureNuGetPackageBuildImports\" BeforeTargets=\"PrepareForBuild\">\n    <PropertyGroup>\n      <ErrorText>这台计算机上缺少此项目引用的 NuGet 程序包。使用“NuGet 程序包还原”可下载这些程序包。有关更多信息，请参见 http://go.microsoft.com/fwlink/?LinkID=322105。缺少的文件是 {0}。</ErrorText>\n    </PropertyGroup>\n    <Error Condition=\"!Exists('..\\..\\packages\\Microsoft.Bcl.Build.1.0.21\\build\\Microsoft.Bcl.Build.targets')\" Text=\"$([System.String]::Format('$(ErrorText)', '..\\..\\packages\\Microsoft.Bcl.Build.1.0.21\\build\\Microsoft.Bcl.Build.targets'))\" />\n  </Target>\n  <!-- To modify your build process, add your task inside one of the targets below and uncomment it. \n       Other similar extension points exist, see Microsoft.Common.targets.\n  <Target Name=\"BeforeBuild\">\n  </Target>\n  <Target Name=\"AfterBuild\">\n  </Target>\n  -->\n</Project>"
  },
  {
    "path": "src2/Abplus.MqMessages.RebusCore/Abplus.MqMessages.RebusCore.nuspec",
    "content": "<?xml version=\"1.0\"?>\n<package >\n  <metadata>\n    <id>$id$</id>\n    <version>$version$</version>\n    <title>$title$</title>\n    <authors>personball</authors>\n    <owners>personball</owners>\n    <licenseUrl>https://raw.githubusercontent.com/personball/abplus/master/LICENSE</licenseUrl>\n    <projectUrl>https://github.com/personball/abplus</projectUrl>\n    <iconUrl>https://raw.githubusercontent.com/personball/abplus/master/abplus_icon.png</iconUrl>\n    <requireLicenseAcceptance>false</requireLicenseAcceptance>\n    <description>Abp plus, an extension for Abp Framework. </description>\n    <releaseNotes></releaseNotes>\n    <copyright>Copyright 2017</copyright>\n    <tags></tags>\n    <dependencies>\n      <dependency id=\"Abplus\" version=\"$version$\" />\n      <dependency id=\"Rebus\" version=\"3.1.2\" />\n    </dependencies>\n  </metadata>\n</package>"
  },
  {
    "path": "src2/Abplus.MqMessages.RebusCore/MqMessages/Publishers/RebusRabbitMqPublisher.cs",
    "content": "﻿using System.Threading.Tasks;\nusing Abp.Json;\nusing Abp.Runtime.Session;\nusing Abp.Threading;\nusing Castle.Core.Logging;\nusing Rebus.Bus;\n\nnamespace Abp.MqMessages.Publishers\n{\n    public class RebusRabbitMqPublisher : IMqMessagePublisher\n    {\n        private readonly IBus _bus;\n\n        public ILogger Logger { get; set; }\n\n        public IAbpSession AbpSession { get; set; }\n\n        public RebusRabbitMqPublisher(IBus bus)\n        {\n            _bus = bus;\n            Logger = NullLogger.Instance;\n            AbpSession = NullAbpSession.Instance;\n        }\n\n        public void Publish(object mqMessages)\n        {\n            TryFillSessionInfo(mqMessages);\n\n            Logger.Debug(mqMessages.GetType().FullName + \":\" + mqMessages.ToJsonString());\n\n            AsyncHelper.RunSync(() => _bus.Publish(mqMessages));\n        }\n\n        private void TryFillSessionInfo(object mqMessages)\n        {\n            if (AbpSession.UserId.HasValue)\n            {\n                var operatorUserIdProperty = mqMessages.GetType().GetProperty(\"OperatorUserId\");\n                if (operatorUserIdProperty != null && (operatorUserIdProperty.PropertyType == typeof(long?)))\n                {\n                    operatorUserIdProperty.SetValue(mqMessages, AbpSession.UserId);\n                }\n            }\n\n            if (AbpSession.TenantId.HasValue)\n            {\n                var tenantIdProperty = mqMessages.GetType().GetProperty(\"TenantId\");\n                if (tenantIdProperty != null && (tenantIdProperty.PropertyType == typeof(int?)))\n                {\n                    tenantIdProperty.SetValue(mqMessages, AbpSession.TenantId);\n                }\n            }\n        }\n\n        public async Task PublishAsync(object mqMessages)\n        {\n            Logger.Debug(mqMessages.GetType().FullName + \":\" + mqMessages.ToJsonString());\n\n            await _bus.Publish(mqMessages);\n        }\n    }\n}\n"
  },
  {
    "path": "src2/Abplus.MqMessages.RebusCore/MqMessages/Publishers/RebusRabbitMqPublisherCoreModule.cs",
    "content": "﻿using Abp.Modules;\n\nnamespace Abp.MqMessages.Publishers\n{\n    public class RebusRabbitMqPublisherCoreModule : AbpModule\n    {\n        public override void PreInitialize()\n        {\n            IocManager.Register<IMqMessagePublisher, RebusRabbitMqPublisher>();\n        }\n    }\n}\n"
  },
  {
    "path": "src2/Abplus.MqMessages.RebusCore/Properties/AssemblyInfo.cs",
    "content": "﻿using System.Reflection;\nusing System.Runtime.CompilerServices;\nusing System.Runtime.InteropServices;\nusing Abp;\n\n// 有关程序集的一般信息由以下\n// 控制。更改这些特性值可修改\n// 与程序集关联的信息。\n[assembly: AssemblyTitle(\"Abplus.MqMessages.RebusRabbitMqCore\")]\n[assembly: AssemblyDescription(\"\")]\n[assembly: AssemblyConfiguration(\"\")]\n[assembly: AssemblyCompany(\"\")]\n[assembly: AssemblyProduct(\"Abplus.MqMessages.RebusRabbitMqCore\")]\n[assembly: AssemblyCopyright(\"Copyright ©  2017\")]\n[assembly: AssemblyTrademark(\"\")]\n[assembly: AssemblyCulture(\"\")]\n\n//将 ComVisible 设置为 false 将使此程序集中的类型\n//对 COM 组件不可见。  如果需要从 COM 访问此程序集中的类型，\n//请将此类型的 ComVisible 特性设置为 true。\n[assembly: ComVisible(false)]\n\n// 如果此项目向 COM 公开，则下列 GUID 用于类型库的 ID\n[assembly: Guid(\"220d5f17-f49b-4a66-b2ee-cf107ef0d9be\")]\n\n// 程序集的版本信息由下列四个值组成: \n//\n//      主版本\n//      次版本\n//      生成号\n//      修订号\n//\n//可以指定所有这些值，也可以使用“生成号”和“修订号”的默认值，\n// 方法是按如下所示使用“*”: :\n// [assembly: AssemblyVersion(\"1.0.*\")]\n[assembly: AssemblyVersion(AbplusConsts.CurrentVersion)]\n[assembly: AssemblyFileVersion(AbplusConsts.CurrentVersion)]\n"
  },
  {
    "path": "src2/Abplus.MqMessages.RebusCore/app.config",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<configuration>\n  <runtime>\n    <assemblyBinding xmlns=\"urn:schemas-microsoft-com:asm.v1\">\n      <dependentAssembly>\n        <assemblyIdentity name=\"Newtonsoft.Json\" publicKeyToken=\"30ad4fe6b2a6aeed\" culture=\"neutral\" />\n        <bindingRedirect oldVersion=\"0.0.0.0-11.0.0.0\" newVersion=\"11.0.0.0\" />\n      </dependentAssembly>\n      <dependentAssembly>\n        <assemblyIdentity name=\"Microsoft.Extensions.Caching.Abstractions\" publicKeyToken=\"adb9793829ddae60\" culture=\"neutral\" />\n        <bindingRedirect oldVersion=\"0.0.0.0-2.0.1.0\" newVersion=\"2.0.1.0\" />\n      </dependentAssembly>\n      <dependentAssembly>\n        <assemblyIdentity name=\"Microsoft.Extensions.Caching.Memory\" publicKeyToken=\"adb9793829ddae60\" culture=\"neutral\" />\n        <bindingRedirect oldVersion=\"0.0.0.0-2.0.1.0\" newVersion=\"2.0.1.0\" />\n      </dependentAssembly>\n      <dependentAssembly>\n        <assemblyIdentity name=\"Microsoft.Extensions.Options\" publicKeyToken=\"adb9793829ddae60\" culture=\"neutral\" />\n        <bindingRedirect oldVersion=\"0.0.0.0-2.0.1.0\" newVersion=\"2.0.1.0\" />\n      </dependentAssembly>\n      <dependentAssembly>\n        <assemblyIdentity name=\"System.Runtime.InteropServices.RuntimeInformation\" publicKeyToken=\"b03f5f7f11d50a3a\" culture=\"neutral\" />\n        <bindingRedirect oldVersion=\"0.0.0.0-4.0.2.0\" newVersion=\"4.0.2.0\" />\n      </dependentAssembly>\n      <dependentAssembly>\n        <assemblyIdentity name=\"System.Collections.Immutable\" publicKeyToken=\"b03f5f7f11d50a3a\" culture=\"neutral\" />\n        <bindingRedirect oldVersion=\"0.0.0.0-1.2.3.0\" newVersion=\"1.2.3.0\" />\n      </dependentAssembly>\n      <dependentAssembly>\n        <assemblyIdentity name=\"System.ComponentModel.Annotations\" publicKeyToken=\"b03f5f7f11d50a3a\" culture=\"neutral\" />\n        <bindingRedirect oldVersion=\"0.0.0.0-4.2.1.0\" newVersion=\"4.2.1.0\" />\n      </dependentAssembly>\n    </assemblyBinding>\n  </runtime>\n</configuration>"
  },
  {
    "path": "src2/Abplus.MqMessages.RebusCore/packages.config",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<packages>\n  <package id=\"Abp\" version=\"3.7.2\" targetFramework=\"net461\" />\n  <package id=\"Castle.Core\" version=\"4.3.1\" targetFramework=\"net461\" />\n  <package id=\"Castle.LoggingFacility\" version=\"4.1.0\" targetFramework=\"net461\" />\n  <package id=\"Castle.Windsor\" version=\"4.1.0\" targetFramework=\"net461\" />\n  <package id=\"JetBrains.Annotations\" version=\"11.1.0\" targetFramework=\"net461\" />\n  <package id=\"Microsoft.Bcl\" version=\"1.1.10\" targetFramework=\"net461\" />\n  <package id=\"Microsoft.Bcl.Async\" version=\"1.0.168\" targetFramework=\"net461\" />\n  <package id=\"Microsoft.Bcl.Build\" version=\"1.0.21\" targetFramework=\"net461\" />\n  <package id=\"Microsoft.Extensions.Caching.Abstractions\" version=\"2.1.0\" targetFramework=\"net461\" />\n  <package id=\"Microsoft.Extensions.Caching.Memory\" version=\"2.1.0\" targetFramework=\"net461\" />\n  <package id=\"Microsoft.Extensions.DependencyInjection.Abstractions\" version=\"2.1.0\" targetFramework=\"net461\" />\n  <package id=\"Microsoft.Extensions.Options\" version=\"2.1.0\" targetFramework=\"net461\" />\n  <package id=\"Microsoft.Extensions.Primitives\" version=\"2.1.0\" targetFramework=\"net461\" />\n  <package id=\"Newtonsoft.Json\" version=\"11.0.2\" targetFramework=\"net461\" />\n  <package id=\"Nito.AsyncEx\" version=\"4.0.1\" targetFramework=\"net461\" />\n  <package id=\"Nito.AsyncEx.Context\" version=\"1.1.0\" targetFramework=\"net461\" />\n  <package id=\"Nito.AsyncEx.Coordination\" version=\"1.0.2\" targetFramework=\"net461\" />\n  <package id=\"Nito.AsyncEx.Tasks\" version=\"1.1.0\" targetFramework=\"net461\" />\n  <package id=\"Nito.Collections.Deque\" version=\"1.0.4\" targetFramework=\"net461\" />\n  <package id=\"Nito.Disposables\" version=\"1.2.3\" targetFramework=\"net461\" />\n  <package id=\"Rebus\" version=\"4.2.1\" targetFramework=\"net461\" />\n  <package id=\"System.Buffers\" version=\"4.4.0\" targetFramework=\"net461\" />\n  <package id=\"System.Collections.Immutable\" version=\"1.5.0\" targetFramework=\"net461\" />\n  <package id=\"System.ComponentModel.Annotations\" version=\"4.5.0\" targetFramework=\"net461\" />\n  <package id=\"System.Configuration.ConfigurationManager\" version=\"4.5.0\" targetFramework=\"net461\" />\n  <package id=\"System.Data.Common\" version=\"4.3.0\" targetFramework=\"net461\" />\n  <package id=\"System.Linq.Dynamic\" version=\"1.0.7\" targetFramework=\"net461\" />\n  <package id=\"System.Linq.Dynamic.Core\" version=\"1.0.8.9\" targetFramework=\"net461\" />\n  <package id=\"System.Linq.Queryable\" version=\"4.3.0\" targetFramework=\"net461\" />\n  <package id=\"System.Memory\" version=\"4.5.0\" targetFramework=\"net461\" />\n  <package id=\"System.Numerics.Vectors\" version=\"4.4.0\" targetFramework=\"net461\" />\n  <package id=\"System.Runtime.CompilerServices.Unsafe\" version=\"4.5.0\" targetFramework=\"net461\" />\n  <package id=\"System.Runtime.InteropServices.RuntimeInformation\" version=\"4.3.0\" targetFramework=\"net461\" />\n  <package id=\"System.Runtime.Serialization.Formatters\" version=\"4.3.0\" targetFramework=\"net461\" />\n  <package id=\"System.Runtime.Serialization.Primitives\" version=\"4.3.0\" targetFramework=\"net461\" />\n  <package id=\"System.Security.AccessControl\" version=\"4.5.0\" targetFramework=\"net461\" />\n  <package id=\"System.Security.Claims\" version=\"4.3.0\" targetFramework=\"net461\" />\n  <package id=\"System.Security.Permissions\" version=\"4.5.0\" targetFramework=\"net461\" />\n  <package id=\"System.Security.Principal.Windows\" version=\"4.5.0\" targetFramework=\"net461\" />\n  <package id=\"System.Threading\" version=\"4.3.0\" targetFramework=\"net461\" />\n  <package id=\"System.Xml.XmlDocument\" version=\"4.3.0\" targetFramework=\"net461\" />\n  <package id=\"System.Xml.XPath\" version=\"4.3.0\" targetFramework=\"net461\" />\n  <package id=\"System.Xml.XPath.XmlDocument\" version=\"4.3.0\" targetFramework=\"net461\" />\n  <package id=\"TimeZoneConverter\" version=\"2.4.1\" targetFramework=\"net461\" />\n</packages>"
  },
  {
    "path": "src2/Abplus.MqMessages.RebusPublisher/Abplus.MqMessages.RebusPublisher.nuspec",
    "content": "<?xml version=\"1.0\"?>\n<package >\n  <metadata>\n    <id>$id$</id>\n    <version>$version$</version>\n    <title>$title$</title>\n    <authors>personball</authors>\n    <owners>personball</owners>\n    <licenseUrl>https://raw.githubusercontent.com/personball/abplus/master/LICENSE</licenseUrl>\n    <projectUrl>https://github.com/personball/abplus</projectUrl>\n    <iconUrl>https://raw.githubusercontent.com/personball/abplus/master/abplus_icon.png</iconUrl>\n    <requireLicenseAcceptance>false</requireLicenseAcceptance>\n    <description>Abp plus, an extension for Abp Framework. </description>\n    <releaseNotes></releaseNotes>\n    <copyright>Copyright 2017</copyright>\n    <tags></tags>\n    <dependencies>\n      <dependency id=\"Abplus\" version=\"$version$\" />\n      <dependency id=\"Abplus.MqMessages.RebusCore\" version=\"$version$\"/>\n      <dependency id=\"Rebus.Castle.Windsor\" version=\"3.0.0\" />\n      <dependency id=\"Rebus.RabbitMq\" version=\"3.0.0\" />\n    </dependencies>\n  </metadata>\n</package>"
  },
  {
    "path": "src2/Abplus.MqMessages.RebusPublisher/Abplus.MqMessages.RebusRabbitMqPublisher.csproj",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<Project ToolsVersion=\"14.0\" DefaultTargets=\"Build\" xmlns=\"http://schemas.microsoft.com/developer/msbuild/2003\">\n  <Import Project=\"$(MSBuildExtensionsPath)\\$(MSBuildToolsVersion)\\Microsoft.Common.props\" Condition=\"Exists('$(MSBuildExtensionsPath)\\$(MSBuildToolsVersion)\\Microsoft.Common.props')\" />\n  <PropertyGroup>\n    <Configuration Condition=\" '$(Configuration)' == '' \">Debug</Configuration>\n    <Platform Condition=\" '$(Platform)' == '' \">AnyCPU</Platform>\n    <ProjectGuid>{97AA3659-AE5C-4561-A4A0-51FB71144E03}</ProjectGuid>\n    <OutputType>Library</OutputType>\n    <AppDesignerFolder>Properties</AppDesignerFolder>\n    <RootNamespace>Abp</RootNamespace>\n    <AssemblyName>Abplus.MqMessages.RebusRabbitMqPublisher</AssemblyName>\n    <TargetFrameworkVersion>v4.6.1</TargetFrameworkVersion>\n    <FileAlignment>512</FileAlignment>\n    <NuGetPackageImportStamp>\n    </NuGetPackageImportStamp>\n  </PropertyGroup>\n  <PropertyGroup Condition=\" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' \">\n    <DebugSymbols>true</DebugSymbols>\n    <DebugType>full</DebugType>\n    <Optimize>false</Optimize>\n    <OutputPath>bin\\Debug\\</OutputPath>\n    <DefineConstants>DEBUG;TRACE</DefineConstants>\n    <ErrorReport>prompt</ErrorReport>\n    <WarningLevel>4</WarningLevel>\n  </PropertyGroup>\n  <PropertyGroup Condition=\" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' \">\n    <DebugType>pdbonly</DebugType>\n    <Optimize>true</Optimize>\n    <OutputPath>bin\\Release\\</OutputPath>\n    <DefineConstants>TRACE</DefineConstants>\n    <ErrorReport>prompt</ErrorReport>\n    <WarningLevel>4</WarningLevel>\n  </PropertyGroup>\n  <ItemGroup>\n    <Reference Include=\"Abp, Version=3.7.2.0, Culture=neutral, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\packages\\Abp.3.7.2\\lib\\netstandard2.0\\Abp.dll</HintPath>\n    </Reference>\n    <Reference Include=\"Castle.Core, Version=4.0.0.0, Culture=neutral, PublicKeyToken=407dd0808d44fbdc, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\packages\\Castle.Core.4.3.1\\lib\\net45\\Castle.Core.dll</HintPath>\n    </Reference>\n    <Reference Include=\"Castle.Facilities.Logging, Version=4.0.0.0, Culture=neutral, PublicKeyToken=407dd0808d44fbdc, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\packages\\Castle.LoggingFacility.4.1.0\\lib\\net45\\Castle.Facilities.Logging.dll</HintPath>\n    </Reference>\n    <Reference Include=\"Castle.Windsor, Version=4.0.0.0, Culture=neutral, PublicKeyToken=407dd0808d44fbdc, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\packages\\Castle.Windsor.4.1.0\\lib\\net45\\Castle.Windsor.dll</HintPath>\n    </Reference>\n    <Reference Include=\"JetBrains.Annotations, Version=11.1.0.0, Culture=neutral, PublicKeyToken=1010a0d8d6380325, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\packages\\JetBrains.Annotations.11.1.0\\lib\\net20\\JetBrains.Annotations.dll</HintPath>\n    </Reference>\n    <Reference Include=\"Microsoft.Diagnostics.Tracing.EventSource, Version=2.0.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\packages\\Microsoft.Diagnostics.Tracing.EventSource.Redist.2.0.0\\lib\\net461\\Microsoft.Diagnostics.Tracing.EventSource.dll</HintPath>\n    </Reference>\n    <Reference Include=\"Microsoft.Extensions.Caching.Abstractions, Version=2.1.0.0, Culture=neutral, PublicKeyToken=adb9793829ddae60, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\packages\\Microsoft.Extensions.Caching.Abstractions.2.1.0\\lib\\netstandard2.0\\Microsoft.Extensions.Caching.Abstractions.dll</HintPath>\n    </Reference>\n    <Reference Include=\"Microsoft.Extensions.Caching.Memory, Version=2.1.0.0, Culture=neutral, PublicKeyToken=adb9793829ddae60, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\packages\\Microsoft.Extensions.Caching.Memory.2.1.0\\lib\\netstandard2.0\\Microsoft.Extensions.Caching.Memory.dll</HintPath>\n    </Reference>\n    <Reference Include=\"Microsoft.Extensions.DependencyInjection.Abstractions, Version=2.1.0.0, Culture=neutral, PublicKeyToken=adb9793829ddae60, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\packages\\Microsoft.Extensions.DependencyInjection.Abstractions.2.1.0\\lib\\netstandard2.0\\Microsoft.Extensions.DependencyInjection.Abstractions.dll</HintPath>\n    </Reference>\n    <Reference Include=\"Microsoft.Extensions.Options, Version=2.1.0.0, Culture=neutral, PublicKeyToken=adb9793829ddae60, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\packages\\Microsoft.Extensions.Options.2.1.0\\lib\\netstandard2.0\\Microsoft.Extensions.Options.dll</HintPath>\n    </Reference>\n    <Reference Include=\"Microsoft.Extensions.Primitives, Version=2.1.0.0, Culture=neutral, PublicKeyToken=adb9793829ddae60, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\packages\\Microsoft.Extensions.Primitives.2.1.0\\lib\\netstandard2.0\\Microsoft.Extensions.Primitives.dll</HintPath>\n    </Reference>\n    <Reference Include=\"Microsoft.Threading.Tasks, Version=1.0.12.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\packages\\Microsoft.Bcl.Async.1.0.168\\lib\\net40\\Microsoft.Threading.Tasks.dll</HintPath>\n      <Private>True</Private>\n    </Reference>\n    <Reference Include=\"Microsoft.Threading.Tasks.Extensions, Version=1.0.12.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\packages\\Microsoft.Bcl.Async.1.0.168\\lib\\net40\\Microsoft.Threading.Tasks.Extensions.dll</HintPath>\n      <Private>True</Private>\n    </Reference>\n    <Reference Include=\"Microsoft.Threading.Tasks.Extensions.Desktop, Version=1.0.168.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\packages\\Microsoft.Bcl.Async.1.0.168\\lib\\net40\\Microsoft.Threading.Tasks.Extensions.Desktop.dll</HintPath>\n      <Private>True</Private>\n    </Reference>\n    <Reference Include=\"Newtonsoft.Json, Version=11.0.0.0, Culture=neutral, PublicKeyToken=30ad4fe6b2a6aeed, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\packages\\Newtonsoft.Json.11.0.2\\lib\\net45\\Newtonsoft.Json.dll</HintPath>\n    </Reference>\n    <Reference Include=\"Nito.AsyncEx, Version=4.0.1.0, Culture=neutral, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\packages\\Nito.AsyncEx.4.0.1\\lib\\net45\\Nito.AsyncEx.dll</HintPath>\n      <Private>True</Private>\n    </Reference>\n    <Reference Include=\"Nito.AsyncEx.Concurrent, Version=4.0.1.0, Culture=neutral, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\packages\\Nito.AsyncEx.4.0.1\\lib\\net45\\Nito.AsyncEx.Concurrent.dll</HintPath>\n      <Private>True</Private>\n    </Reference>\n    <Reference Include=\"Nito.AsyncEx.Context, Version=1.1.0.0, Culture=neutral, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\packages\\Nito.AsyncEx.Context.1.1.0\\lib\\net46\\Nito.AsyncEx.Context.dll</HintPath>\n    </Reference>\n    <Reference Include=\"Nito.AsyncEx.Coordination, Version=1.0.2.0, Culture=neutral, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\packages\\Nito.AsyncEx.Coordination.1.0.2\\lib\\net46\\Nito.AsyncEx.Coordination.dll</HintPath>\n    </Reference>\n    <Reference Include=\"Nito.AsyncEx.Enlightenment, Version=4.0.1.0, Culture=neutral, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\packages\\Nito.AsyncEx.4.0.1\\lib\\net45\\Nito.AsyncEx.Enlightenment.dll</HintPath>\n      <Private>True</Private>\n    </Reference>\n    <Reference Include=\"Nito.AsyncEx.Tasks, Version=1.1.0.0, Culture=neutral, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\packages\\Nito.AsyncEx.Tasks.1.1.0\\lib\\net46\\Nito.AsyncEx.Tasks.dll</HintPath>\n    </Reference>\n    <Reference Include=\"Nito.Collections.Deque, Version=1.0.4.0, Culture=neutral, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\packages\\Nito.Collections.Deque.1.0.4\\lib\\netstandard2.0\\Nito.Collections.Deque.dll</HintPath>\n    </Reference>\n    <Reference Include=\"Nito.Disposables, Version=1.2.3.0, Culture=neutral, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\packages\\Nito.Disposables.1.2.3\\lib\\netstandard2.0\\Nito.Disposables.dll</HintPath>\n    </Reference>\n    <Reference Include=\"RabbitMQ.Client, Version=5.0.0.0, Culture=neutral, PublicKeyToken=89e7d7c5feba84ce, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\packages\\RabbitMQ.Client.5.0.1\\lib\\net451\\RabbitMQ.Client.dll</HintPath>\n    </Reference>\n    <Reference Include=\"Rebus, Version=4.2.1.0, Culture=neutral, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\packages\\Rebus.4.2.1\\lib\\net45\\Rebus.dll</HintPath>\n    </Reference>\n    <Reference Include=\"Rebus.CastleWindsor, Version=4.0.0.0, Culture=neutral, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\packages\\Rebus.Castle.Windsor.4.0.0\\lib\\net45\\Rebus.CastleWindsor.dll</HintPath>\n    </Reference>\n    <Reference Include=\"Rebus.RabbitMq, Version=4.4.2.0, Culture=neutral, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\packages\\Rebus.RabbitMq.4.4.2\\lib\\net452\\Rebus.RabbitMq.dll</HintPath>\n    </Reference>\n    <Reference Include=\"System\" />\n    <Reference Include=\"System.Buffers, Version=4.0.2.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\packages\\System.Buffers.4.4.0\\lib\\netstandard2.0\\System.Buffers.dll</HintPath>\n    </Reference>\n    <Reference Include=\"System.Collections.Immutable, Version=1.2.3.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\packages\\System.Collections.Immutable.1.5.0\\lib\\netstandard2.0\\System.Collections.Immutable.dll</HintPath>\n    </Reference>\n    <Reference Include=\"System.ComponentModel.Annotations, Version=4.2.1.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\packages\\System.ComponentModel.Annotations.4.5.0\\lib\\net461\\System.ComponentModel.Annotations.dll</HintPath>\n    </Reference>\n    <Reference Include=\"System.ComponentModel.DataAnnotations\" />\n    <Reference Include=\"System.Configuration\" />\n    <Reference Include=\"System.Configuration.ConfigurationManager, Version=4.0.1.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\packages\\System.Configuration.ConfigurationManager.4.5.0\\lib\\net461\\System.Configuration.ConfigurationManager.dll</HintPath>\n    </Reference>\n    <Reference Include=\"System.Core\" />\n    <Reference Include=\"System.Data.Common, Version=4.1.1.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\packages\\System.Data.Common.4.3.0\\lib\\net451\\System.Data.Common.dll</HintPath>\n      <Private>True</Private>\n    </Reference>\n    <Reference Include=\"System.Data.OracleClient\" />\n    <Reference Include=\"System.Drawing\" />\n    <Reference Include=\"System.Linq.Dynamic, Version=1.0.6132.35681, Culture=neutral, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\packages\\System.Linq.Dynamic.1.0.7\\lib\\net40\\System.Linq.Dynamic.dll</HintPath>\n      <Private>True</Private>\n    </Reference>\n    <Reference Include=\"System.Linq.Dynamic.Core, Version=0.0.0.0, Culture=neutral, PublicKeyToken=0f07ec44de6ac832, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\packages\\System.Linq.Dynamic.Core.1.0.8.9\\lib\\net46\\System.Linq.Dynamic.Core.dll</HintPath>\n    </Reference>\n    <Reference Include=\"System.Memory, Version=4.0.1.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\packages\\System.Memory.4.5.0\\lib\\netstandard2.0\\System.Memory.dll</HintPath>\n    </Reference>\n    <Reference Include=\"System.Net\" />\n    <Reference Include=\"System.Numerics\" />\n    <Reference Include=\"System.Numerics.Vectors, Version=4.1.3.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\packages\\System.Numerics.Vectors.4.4.0\\lib\\net46\\System.Numerics.Vectors.dll</HintPath>\n    </Reference>\n    <Reference Include=\"System.Runtime.Caching\" />\n    <Reference Include=\"System.Runtime.CompilerServices.Unsafe, Version=4.0.4.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\packages\\System.Runtime.CompilerServices.Unsafe.4.5.0\\lib\\netstandard2.0\\System.Runtime.CompilerServices.Unsafe.dll</HintPath>\n    </Reference>\n    <Reference Include=\"System.Runtime.InteropServices.RuntimeInformation, Version=4.0.1.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\packages\\System.Runtime.InteropServices.RuntimeInformation.4.3.0\\lib\\net45\\System.Runtime.InteropServices.RuntimeInformation.dll</HintPath>\n      <Private>True</Private>\n    </Reference>\n    <Reference Include=\"System.Runtime.Remoting\" />\n    <Reference Include=\"System.Runtime.Serialization\" />\n    <Reference Include=\"System.Runtime.Serialization.Formatters, Version=4.0.1.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\packages\\System.Runtime.Serialization.Formatters.4.3.0\\lib\\net46\\System.Runtime.Serialization.Formatters.dll</HintPath>\n      <Private>True</Private>\n    </Reference>\n    <Reference Include=\"System.Runtime.Serialization.Primitives, Version=4.1.2.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\packages\\System.Runtime.Serialization.Primitives.4.3.0\\lib\\net46\\System.Runtime.Serialization.Primitives.dll</HintPath>\n      <Private>True</Private>\n    </Reference>\n    <Reference Include=\"System.Security.AccessControl, Version=4.1.1.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\packages\\System.Security.AccessControl.4.5.0\\lib\\net461\\System.Security.AccessControl.dll</HintPath>\n    </Reference>\n    <Reference Include=\"System.Security.Claims, Version=4.0.2.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\packages\\System.Security.Claims.4.3.0\\lib\\net46\\System.Security.Claims.dll</HintPath>\n      <Private>True</Private>\n    </Reference>\n    <Reference Include=\"System.Security.Permissions, Version=4.0.1.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\packages\\System.Security.Permissions.4.5.0\\lib\\net461\\System.Security.Permissions.dll</HintPath>\n    </Reference>\n    <Reference Include=\"System.Security.Principal.Windows, Version=4.1.1.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\packages\\System.Security.Principal.Windows.4.5.0\\lib\\net461\\System.Security.Principal.Windows.dll</HintPath>\n    </Reference>\n    <Reference Include=\"System.ServiceProcess\" />\n    <Reference Include=\"System.Transactions\" />\n    <Reference Include=\"System.Web\" />\n    <Reference Include=\"System.Xml.Linq\" />\n    <Reference Include=\"System.Data.DataSetExtensions\" />\n    <Reference Include=\"Microsoft.CSharp\" />\n    <Reference Include=\"System.Data\" />\n    <Reference Include=\"System.Net.Http\" />\n    <Reference Include=\"System.Xml\" />\n    <Reference Include=\"System.Xml.XmlDocument, Version=4.0.2.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\packages\\System.Xml.XmlDocument.4.3.0\\lib\\net46\\System.Xml.XmlDocument.dll</HintPath>\n      <Private>True</Private>\n    </Reference>\n    <Reference Include=\"System.Xml.XPath, Version=4.0.2.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\packages\\System.Xml.XPath.4.3.0\\lib\\net46\\System.Xml.XPath.dll</HintPath>\n      <Private>True</Private>\n    </Reference>\n    <Reference Include=\"System.Xml.XPath.XmlDocument, Version=4.0.2.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\packages\\System.Xml.XPath.XmlDocument.4.3.0\\lib\\net46\\System.Xml.XPath.XmlDocument.dll</HintPath>\n    </Reference>\n    <Reference Include=\"TimeZoneConverter, Version=2.4.1.0, Culture=neutral, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\packages\\TimeZoneConverter.2.4.1\\lib\\net45\\TimeZoneConverter.dll</HintPath>\n    </Reference>\n  </ItemGroup>\n  <ItemGroup>\n    <Compile Include=\"Configuration\\Startup\\RebusRabbitMqPublisherConfigurationExtensions.cs\" />\n    <Compile Include=\"MqMessages\\Publishers\\IRebusRabbitMqPublisherModuleConfig.cs\" />\n    <Compile Include=\"MqMessages\\Publishers\\RebusRabbitMqPublisherModule.cs\" />\n    <Compile Include=\"MqMessages\\Publishers\\RebusRabbitMqPublisherModuleConfig.cs\" />\n    <Compile Include=\"Properties\\AssemblyInfo.cs\" />\n  </ItemGroup>\n  <ItemGroup>\n    <ProjectReference Include=\"..\\Abplus.MqMessages.RebusCore\\Abplus.MqMessages.RebusCore.csproj\">\n      <Project>{220d5f17-f49b-4a66-b2ee-cf107ef0d9be}</Project>\n      <Name>Abplus.MqMessages.RebusCore</Name>\n    </ProjectReference>\n    <ProjectReference Include=\"..\\Abplus\\Abplus.csproj\">\n      <Project>{1de8d8d1-987d-4a9c-aec5-ff0a9914bbd4}</Project>\n      <Name>Abplus</Name>\n    </ProjectReference>\n  </ItemGroup>\n  <ItemGroup>\n    <None Include=\"Abplus.MqMessages.RebusPublisher.nuspec\" />\n    <None Include=\"app.config\" />\n    <None Include=\"packages.config\" />\n  </ItemGroup>\n  <ItemGroup />\n  <Import Project=\"$(MSBuildToolsPath)\\Microsoft.CSharp.targets\" />\n  <Import Project=\"..\\..\\packages\\Microsoft.Bcl.Build.1.0.21\\build\\Microsoft.Bcl.Build.targets\" Condition=\"Exists('..\\..\\packages\\Microsoft.Bcl.Build.1.0.21\\build\\Microsoft.Bcl.Build.targets')\" />\n  <Target Name=\"EnsureNuGetPackageBuildImports\" BeforeTargets=\"PrepareForBuild\">\n    <PropertyGroup>\n      <ErrorText>这台计算机上缺少此项目引用的 NuGet 程序包。使用“NuGet 程序包还原”可下载这些程序包。有关更多信息，请参见 http://go.microsoft.com/fwlink/?LinkID=322105。缺少的文件是 {0}。</ErrorText>\n    </PropertyGroup>\n    <Error Condition=\"!Exists('..\\..\\packages\\Microsoft.Bcl.Build.1.0.21\\build\\Microsoft.Bcl.Build.targets')\" Text=\"$([System.String]::Format('$(ErrorText)', '..\\..\\packages\\Microsoft.Bcl.Build.1.0.21\\build\\Microsoft.Bcl.Build.targets'))\" />\n  </Target>\n  <!-- To modify your build process, add your task inside one of the targets below and uncomment it. \n       Other similar extension points exist, see Microsoft.Common.targets.\n  <Target Name=\"BeforeBuild\">\n  </Target>\n  <Target Name=\"AfterBuild\">\n  </Target>\n  -->\n</Project>"
  },
  {
    "path": "src2/Abplus.MqMessages.RebusPublisher/Configuration/Startup/RebusRabbitMqPublisherConfigurationExtensions.cs",
    "content": "﻿using Abp.MqMessages.Publishers;\n\nnamespace Abp.Configuration.Startup\n{\n    public static class RebusRabbitMqPublisherConfigurationExtensions\n    {\n        public static IRebusRabbitMqPublisherModuleConfig  UseAbplusRebusRabbitMqPublisher(this IModuleConfigurations configurations)\n        {\n            return configurations.AbpConfiguration.GetOrCreate(\"Modules.Abp.RebusRabbitMqPublisher\", () => configurations.AbpConfiguration.IocManager.Resolve<IRebusRabbitMqPublisherModuleConfig>());\n        }\n    }\n}\n"
  },
  {
    "path": "src2/Abplus.MqMessages.RebusPublisher/MqMessages/Publishers/IRebusRabbitMqPublisherModuleConfig.cs",
    "content": "﻿using System;\nusing Rebus.Config;\n\nnamespace Abp.MqMessages.Publishers\n{\n    public interface IRebusRabbitMqPublisherModuleConfig\n    {\n        /// <summary>\n        /// 是否启用，默认启用\n        /// </summary>\n        bool Enabled { get; }\n\n        /// <summary>\n        /// 日志配置委托\n        /// </summary>\n        Action<RebusLoggingConfigurer> LoggingConfigurer { get; }\n\n        /// <summary>\n        /// RabbitMq连接字符串\n        /// </summary>\n        string ConnectionString { get; }\n\n        /// <summary>\n        /// 消息审计是否开启，默认不开启\n        /// </summary>\n        bool MessageAuditingEnabled { get; }\n\n        /// <summary>\n        /// 消息审计队列名，默认不启用\n        /// </summary>\n        string MessageAuditingQueueName { get; }\n\n        /// <summary>\n        /// 是否启用，默认启用\n        /// </summary>\n        /// <param name=\"enabled\"></param>\n        /// <returns></returns>\n        IRebusRabbitMqPublisherModuleConfig Enable(bool enabled);\n\n        /// <summary>\n        /// 设置RabbitMq连接字符串\n        /// </summary>\n        /// <param name=\"connectionString\"></param>\n        /// <returns></returns>\n        IRebusRabbitMqPublisherModuleConfig ConnectionTo(string connectionString);\n\n        /// <summary>\n        /// 配置日志组件\n        /// </summary>\n        /// <param name=\"loggingConfigurer\"></param>\n        /// <returns></returns>\n        IRebusRabbitMqPublisherModuleConfig UseLogging(Action<RebusLoggingConfigurer> loggingConfigurer);\n\n        /// <summary>\n        /// 是否启用消息审计，默认不启用\n        /// </summary>\n        /// <param name=\"messageAuditingQueueName\">审计队列名</param>\n        /// <returns></returns>\n        IRebusRabbitMqPublisherModuleConfig EnableMessageAuditing(string messageAuditingQueueName);\n    }\n}\n"
  },
  {
    "path": "src2/Abplus.MqMessages.RebusPublisher/MqMessages/Publishers/RebusRabbitMqPublisherModule.cs",
    "content": "﻿using System.Reflection;\nusing Abp.Modules;\nusing Rebus.Auditing.Messages;\nusing Rebus.Bus;\nusing Rebus.Config;\n\nnamespace Abp.MqMessages.Publishers\n{\n    [DependsOn(typeof(RebusRabbitMqPublisherCoreModule))]\n    public class RebusRabbitMqPublisherModule : AbpModule\n    {\n        private IBus _bus;\n\n        public override void PreInitialize()\n        {\n            IocManager.Register<IRebusRabbitMqPublisherModuleConfig, RebusRabbitMqPublisherModuleConfig>();\n        }\n\n        public override void Initialize()\n        {\n            IocManager.RegisterAssemblyByConvention(Assembly.GetExecutingAssembly());\n        }\n\n        public override void PostInitialize()\n        {\n            var moduleConfig = IocManager.Resolve<IRebusRabbitMqPublisherModuleConfig>();\n            if (moduleConfig.Enabled)\n            {\n                var rebusConfig = Configure.With(new CastleWindsorContainerAdapter(IocManager.IocContainer));\n                if (moduleConfig.MessageAuditingEnabled)\n                {\n                    rebusConfig.Options(o => o.EnableMessageAuditing(moduleConfig.MessageAuditingQueueName));\n                }\n\n                if (moduleConfig.LoggingConfigurer != null)\n                {\n                    rebusConfig.Logging(moduleConfig.LoggingConfigurer);\n                }\n\n                _bus = rebusConfig.Transport(t => t.UseRabbitMqAsOneWayClient(moduleConfig.ConnectionString))\n                     .Start();\n            }\n        }\n\n        public override void Shutdown()\n        {\n            if (_bus != null)\n            {\n                _bus.Dispose();\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "src2/Abplus.MqMessages.RebusPublisher/MqMessages/Publishers/RebusRabbitMqPublisherModuleConfig.cs",
    "content": "﻿using System;\nusing Rebus.Config;\n\nnamespace Abp.MqMessages.Publishers\n{\n    public class RebusRabbitMqPublisherModuleConfig : IRebusRabbitMqPublisherModuleConfig\n    {\n        public RebusRabbitMqPublisherModuleConfig()\n        {\n            Enabled = true;\n            MessageAuditingEnabled = false;\n        }\n        public string ConnectionString { get; private set; }\n\n        public bool Enabled { get; private set; }\n\n        public Action<RebusLoggingConfigurer> LoggingConfigurer { get; private set; }\n\n        public bool MessageAuditingEnabled { get; private set; }\n\n        public string MessageAuditingQueueName { get; private set; }\n\n        public IRebusRabbitMqPublisherModuleConfig ConnectionTo(string connectionString)\n        {\n            ConnectionString = connectionString;\n            return this;\n        }\n\n        public IRebusRabbitMqPublisherModuleConfig Enable(bool enabled)\n        {\n            Enabled = enabled;\n            return this;\n        }\n\n        public IRebusRabbitMqPublisherModuleConfig EnableMessageAuditing(string messageAuditingQueueName)\n        {\n            MessageAuditingEnabled = true;\n            MessageAuditingQueueName = messageAuditingQueueName;\n            return this;\n        }\n\n        public IRebusRabbitMqPublisherModuleConfig UseLogging(Action<RebusLoggingConfigurer> loggingConfigurer)\n        {\n            LoggingConfigurer = loggingConfigurer;\n            return this;\n        }\n    }\n}\n"
  },
  {
    "path": "src2/Abplus.MqMessages.RebusPublisher/Properties/AssemblyInfo.cs",
    "content": "﻿using System.Reflection;\nusing System.Runtime.CompilerServices;\nusing System.Runtime.InteropServices;\nusing Abp;\n\n// 有关程序集的一般信息由以下\n// 控制。更改这些特性值可修改\n// 与程序集关联的信息。\n[assembly: AssemblyTitle(\"Abplus.MqMessages.RebusRabbitMqPublisher\")]\n[assembly: AssemblyDescription(\"\")]\n[assembly: AssemblyConfiguration(\"\")]\n[assembly: AssemblyCompany(\"\")]\n[assembly: AssemblyProduct(\"Abplus.MqMessages.RebusRabbitMqPublisher\")]\n[assembly: AssemblyCopyright(\"Copyright ©  2017\")]\n[assembly: AssemblyTrademark(\"\")]\n[assembly: AssemblyCulture(\"\")]\n\n//将 ComVisible 设置为 false 将使此程序集中的类型\n//对 COM 组件不可见。  如果需要从 COM 访问此程序集中的类型，\n//请将此类型的 ComVisible 特性设置为 true。\n[assembly: ComVisible(false)]\n\n// 如果此项目向 COM 公开，则下列 GUID 用于类型库的 ID\n[assembly: Guid(\"97aa3659-ae5c-4561-a4a0-51fb71144e03\")]\n\n// 程序集的版本信息由下列四个值组成: \n//\n//      主版本\n//      次版本\n//      生成号\n//      修订号\n//\n//可以指定所有这些值，也可以使用“生成号”和“修订号”的默认值，\n// 方法是按如下所示使用“*”: :\n// [assembly: AssemblyVersion(\"1.0.*\")]\n[assembly: AssemblyVersion(AbplusConsts.CurrentVersion)]\n[assembly: AssemblyFileVersion(AbplusConsts.CurrentVersion)]\n"
  },
  {
    "path": "src2/Abplus.MqMessages.RebusPublisher/app.config",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<configuration>\n  <runtime>\n    <assemblyBinding xmlns=\"urn:schemas-microsoft-com:asm.v1\">\n      <dependentAssembly>\n        <assemblyIdentity name=\"Castle.Windsor\" publicKeyToken=\"407dd0808d44fbdc\" culture=\"neutral\" />\n        <bindingRedirect oldVersion=\"0.0.0.0-4.0.0.0\" newVersion=\"4.0.0.0\" />\n      </dependentAssembly>\n      <dependentAssembly>\n        <assemblyIdentity name=\"Newtonsoft.Json\" publicKeyToken=\"30ad4fe6b2a6aeed\" culture=\"neutral\" />\n        <bindingRedirect oldVersion=\"0.0.0.0-11.0.0.0\" newVersion=\"11.0.0.0\" />\n      </dependentAssembly>\n      <dependentAssembly>\n        <assemblyIdentity name=\"Microsoft.Extensions.Caching.Abstractions\" publicKeyToken=\"adb9793829ddae60\" culture=\"neutral\" />\n        <bindingRedirect oldVersion=\"0.0.0.0-2.0.1.0\" newVersion=\"2.0.1.0\" />\n      </dependentAssembly>\n      <dependentAssembly>\n        <assemblyIdentity name=\"Microsoft.Extensions.Caching.Memory\" publicKeyToken=\"adb9793829ddae60\" culture=\"neutral\" />\n        <bindingRedirect oldVersion=\"0.0.0.0-2.0.1.0\" newVersion=\"2.0.1.0\" />\n      </dependentAssembly>\n      <dependentAssembly>\n        <assemblyIdentity name=\"Microsoft.Extensions.Options\" publicKeyToken=\"adb9793829ddae60\" culture=\"neutral\" />\n        <bindingRedirect oldVersion=\"0.0.0.0-2.0.1.0\" newVersion=\"2.0.1.0\" />\n      </dependentAssembly>\n      <dependentAssembly>\n        <assemblyIdentity name=\"System.Runtime.InteropServices.RuntimeInformation\" publicKeyToken=\"b03f5f7f11d50a3a\" culture=\"neutral\" />\n        <bindingRedirect oldVersion=\"0.0.0.0-4.0.2.0\" newVersion=\"4.0.2.0\" />\n      </dependentAssembly>\n      <dependentAssembly>\n        <assemblyIdentity name=\"RabbitMQ.Client\" publicKeyToken=\"89e7d7c5feba84ce\" culture=\"neutral\" />\n        <bindingRedirect oldVersion=\"0.0.0.0-5.0.0.0\" newVersion=\"5.0.0.0\" />\n      </dependentAssembly>\n      <dependentAssembly>\n        <assemblyIdentity name=\"System.Runtime.CompilerServices.Unsafe\" publicKeyToken=\"b03f5f7f11d50a3a\" culture=\"neutral\" />\n        <bindingRedirect oldVersion=\"0.0.0.0-4.0.3.0\" newVersion=\"4.0.3.0\" />\n      </dependentAssembly>\n      <dependentAssembly>\n        <assemblyIdentity name=\"System.Collections.Immutable\" publicKeyToken=\"b03f5f7f11d50a3a\" culture=\"neutral\" />\n        <bindingRedirect oldVersion=\"0.0.0.0-1.2.3.0\" newVersion=\"1.2.3.0\" />\n      </dependentAssembly>\n      <dependentAssembly>\n        <assemblyIdentity name=\"System.ComponentModel.Annotations\" publicKeyToken=\"b03f5f7f11d50a3a\" culture=\"neutral\" />\n        <bindingRedirect oldVersion=\"0.0.0.0-4.2.1.0\" newVersion=\"4.2.1.0\" />\n      </dependentAssembly>\n    </assemblyBinding>\n  </runtime>\n</configuration>"
  },
  {
    "path": "src2/Abplus.MqMessages.RebusPublisher/packages.config",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<packages>\n  <package id=\"Abp\" version=\"3.7.2\" targetFramework=\"net461\" />\n  <package id=\"Castle.Core\" version=\"4.3.1\" targetFramework=\"net461\" />\n  <package id=\"Castle.LoggingFacility\" version=\"4.1.0\" targetFramework=\"net461\" />\n  <package id=\"Castle.Windsor\" version=\"4.1.0\" targetFramework=\"net461\" />\n  <package id=\"JetBrains.Annotations\" version=\"11.1.0\" targetFramework=\"net461\" />\n  <package id=\"Microsoft.Bcl\" version=\"1.1.10\" targetFramework=\"net461\" />\n  <package id=\"Microsoft.Bcl.Async\" version=\"1.0.168\" targetFramework=\"net461\" />\n  <package id=\"Microsoft.Bcl.Build\" version=\"1.0.21\" targetFramework=\"net461\" />\n  <package id=\"Microsoft.Diagnostics.Tracing.EventSource.Redist\" version=\"2.0.0\" targetFramework=\"net461\" />\n  <package id=\"Microsoft.Extensions.Caching.Abstractions\" version=\"2.1.0\" targetFramework=\"net461\" />\n  <package id=\"Microsoft.Extensions.Caching.Memory\" version=\"2.1.0\" targetFramework=\"net461\" />\n  <package id=\"Microsoft.Extensions.DependencyInjection.Abstractions\" version=\"2.1.0\" targetFramework=\"net461\" />\n  <package id=\"Microsoft.Extensions.Options\" version=\"2.1.0\" targetFramework=\"net461\" />\n  <package id=\"Microsoft.Extensions.Primitives\" version=\"2.1.0\" targetFramework=\"net461\" />\n  <package id=\"Newtonsoft.Json\" version=\"11.0.2\" targetFramework=\"net461\" />\n  <package id=\"Nito.AsyncEx\" version=\"4.0.1\" targetFramework=\"net461\" />\n  <package id=\"Nito.AsyncEx.Context\" version=\"1.1.0\" targetFramework=\"net461\" />\n  <package id=\"Nito.AsyncEx.Coordination\" version=\"1.0.2\" targetFramework=\"net461\" />\n  <package id=\"Nito.AsyncEx.Tasks\" version=\"1.1.0\" targetFramework=\"net461\" />\n  <package id=\"Nito.Collections.Deque\" version=\"1.0.4\" targetFramework=\"net461\" />\n  <package id=\"Nito.Disposables\" version=\"1.2.3\" targetFramework=\"net461\" />\n  <package id=\"RabbitMQ.Client\" version=\"5.0.1\" targetFramework=\"net461\" />\n  <package id=\"Rebus\" version=\"4.2.1\" targetFramework=\"net461\" />\n  <package id=\"Rebus.Castle.Windsor\" version=\"4.0.0\" targetFramework=\"net461\" />\n  <package id=\"Rebus.RabbitMq\" version=\"4.4.2\" targetFramework=\"net461\" />\n  <package id=\"System.Buffers\" version=\"4.4.0\" targetFramework=\"net461\" />\n  <package id=\"System.Collections.Immutable\" version=\"1.5.0\" targetFramework=\"net461\" />\n  <package id=\"System.ComponentModel.Annotations\" version=\"4.5.0\" targetFramework=\"net461\" />\n  <package id=\"System.Configuration.ConfigurationManager\" version=\"4.5.0\" targetFramework=\"net461\" />\n  <package id=\"System.Data.Common\" version=\"4.3.0\" targetFramework=\"net461\" />\n  <package id=\"System.Linq.Dynamic\" version=\"1.0.7\" targetFramework=\"net461\" />\n  <package id=\"System.Linq.Dynamic.Core\" version=\"1.0.8.9\" targetFramework=\"net461\" />\n  <package id=\"System.Linq.Queryable\" version=\"4.3.0\" targetFramework=\"net461\" />\n  <package id=\"System.Memory\" version=\"4.5.0\" targetFramework=\"net461\" />\n  <package id=\"System.Numerics.Vectors\" version=\"4.4.0\" targetFramework=\"net461\" />\n  <package id=\"System.Runtime.CompilerServices.Unsafe\" version=\"4.5.0\" targetFramework=\"net461\" />\n  <package id=\"System.Runtime.InteropServices.RuntimeInformation\" version=\"4.3.0\" targetFramework=\"net461\" />\n  <package id=\"System.Runtime.Serialization.Formatters\" version=\"4.3.0\" targetFramework=\"net461\" />\n  <package id=\"System.Runtime.Serialization.Primitives\" version=\"4.3.0\" targetFramework=\"net461\" />\n  <package id=\"System.Security.AccessControl\" version=\"4.5.0\" targetFramework=\"net461\" />\n  <package id=\"System.Security.Claims\" version=\"4.3.0\" targetFramework=\"net461\" />\n  <package id=\"System.Security.Permissions\" version=\"4.5.0\" targetFramework=\"net461\" />\n  <package id=\"System.Security.Principal.Windows\" version=\"4.5.0\" targetFramework=\"net461\" />\n  <package id=\"System.Threading\" version=\"4.3.0\" targetFramework=\"net461\" />\n  <package id=\"System.Xml.XmlDocument\" version=\"4.3.0\" targetFramework=\"net461\" />\n  <package id=\"System.Xml.XPath\" version=\"4.3.0\" targetFramework=\"net461\" />\n  <package id=\"System.Xml.XPath.XmlDocument\" version=\"4.3.0\" targetFramework=\"net461\" />\n  <package id=\"TimeZoneConverter\" version=\"2.4.1\" targetFramework=\"net461\" />\n</packages>"
  },
  {
    "path": "src2/Abplus.MqMessages.RedisStoreMessageTracker/Abplus.MqMessages.RedisStoreMessageTracker.csproj",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<Project ToolsVersion=\"14.0\" DefaultTargets=\"Build\" xmlns=\"http://schemas.microsoft.com/developer/msbuild/2003\">\n  <Import Project=\"$(MSBuildExtensionsPath)\\$(MSBuildToolsVersion)\\Microsoft.Common.props\" Condition=\"Exists('$(MSBuildExtensionsPath)\\$(MSBuildToolsVersion)\\Microsoft.Common.props')\" />\n  <PropertyGroup>\n    <Configuration Condition=\" '$(Configuration)' == '' \">Debug</Configuration>\n    <Platform Condition=\" '$(Platform)' == '' \">AnyCPU</Platform>\n    <ProjectGuid>{0F4D2D6F-801A-49A5-8B17-1E188CA0C6F8}</ProjectGuid>\n    <OutputType>Library</OutputType>\n    <AppDesignerFolder>Properties</AppDesignerFolder>\n    <RootNamespace>Abp</RootNamespace>\n    <AssemblyName>Abplus.MqMessages.RedisStoreMessageTracker</AssemblyName>\n    <TargetFrameworkVersion>v4.6.1</TargetFrameworkVersion>\n    <FileAlignment>512</FileAlignment>\n    <NuGetPackageImportStamp>\n    </NuGetPackageImportStamp>\n  </PropertyGroup>\n  <PropertyGroup Condition=\" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' \">\n    <DebugSymbols>true</DebugSymbols>\n    <DebugType>full</DebugType>\n    <Optimize>false</Optimize>\n    <OutputPath>bin\\Debug\\</OutputPath>\n    <DefineConstants>DEBUG;TRACE</DefineConstants>\n    <ErrorReport>prompt</ErrorReport>\n    <WarningLevel>4</WarningLevel>\n  </PropertyGroup>\n  <PropertyGroup Condition=\" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' \">\n    <DebugType>pdbonly</DebugType>\n    <Optimize>true</Optimize>\n    <OutputPath>bin\\Release\\</OutputPath>\n    <DefineConstants>TRACE</DefineConstants>\n    <ErrorReport>prompt</ErrorReport>\n    <WarningLevel>4</WarningLevel>\n  </PropertyGroup>\n  <ItemGroup>\n    <Reference Include=\"Abp, Version=3.7.2.0, Culture=neutral, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\packages\\Abp.3.7.2\\lib\\netstandard2.0\\Abp.dll</HintPath>\n    </Reference>\n    <Reference Include=\"Abp.RedisCache, Version=3.7.2.0, Culture=neutral, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\packages\\Abp.RedisCache.3.7.2\\lib\\netstandard2.0\\Abp.RedisCache.dll</HintPath>\n    </Reference>\n    <Reference Include=\"Castle.Core, Version=4.0.0.0, Culture=neutral, PublicKeyToken=407dd0808d44fbdc, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\packages\\Castle.Core.4.3.1\\lib\\net45\\Castle.Core.dll</HintPath>\n    </Reference>\n    <Reference Include=\"Castle.Facilities.Logging, Version=4.0.0.0, Culture=neutral, PublicKeyToken=407dd0808d44fbdc, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\packages\\Castle.LoggingFacility.4.1.0\\lib\\net45\\Castle.Facilities.Logging.dll</HintPath>\n    </Reference>\n    <Reference Include=\"Castle.Windsor, Version=4.0.0.0, Culture=neutral, PublicKeyToken=407dd0808d44fbdc, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\packages\\Castle.Windsor.4.1.0\\lib\\net45\\Castle.Windsor.dll</HintPath>\n    </Reference>\n    <Reference Include=\"JetBrains.Annotations, Version=11.1.0.0, Culture=neutral, PublicKeyToken=1010a0d8d6380325, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\packages\\JetBrains.Annotations.11.1.0\\lib\\net20\\JetBrains.Annotations.dll</HintPath>\n    </Reference>\n    <Reference Include=\"Microsoft.Extensions.Caching.Abstractions, Version=2.1.0.0, Culture=neutral, PublicKeyToken=adb9793829ddae60, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\packages\\Microsoft.Extensions.Caching.Abstractions.2.1.0\\lib\\netstandard2.0\\Microsoft.Extensions.Caching.Abstractions.dll</HintPath>\n    </Reference>\n    <Reference Include=\"Microsoft.Extensions.Caching.Memory, Version=2.1.0.0, Culture=neutral, PublicKeyToken=adb9793829ddae60, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\packages\\Microsoft.Extensions.Caching.Memory.2.1.0\\lib\\netstandard2.0\\Microsoft.Extensions.Caching.Memory.dll</HintPath>\n    </Reference>\n    <Reference Include=\"Microsoft.Extensions.DependencyInjection.Abstractions, Version=2.1.0.0, Culture=neutral, PublicKeyToken=adb9793829ddae60, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\packages\\Microsoft.Extensions.DependencyInjection.Abstractions.2.1.0\\lib\\netstandard2.0\\Microsoft.Extensions.DependencyInjection.Abstractions.dll</HintPath>\n    </Reference>\n    <Reference Include=\"Microsoft.Extensions.Options, Version=2.1.0.0, Culture=neutral, PublicKeyToken=adb9793829ddae60, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\packages\\Microsoft.Extensions.Options.2.1.0\\lib\\netstandard2.0\\Microsoft.Extensions.Options.dll</HintPath>\n    </Reference>\n    <Reference Include=\"Microsoft.Extensions.Primitives, Version=2.1.0.0, Culture=neutral, PublicKeyToken=adb9793829ddae60, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\packages\\Microsoft.Extensions.Primitives.2.1.0\\lib\\netstandard2.0\\Microsoft.Extensions.Primitives.dll</HintPath>\n    </Reference>\n    <Reference Include=\"Microsoft.Threading.Tasks, Version=1.0.12.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\packages\\Microsoft.Bcl.Async.1.0.168\\lib\\net40\\Microsoft.Threading.Tasks.dll</HintPath>\n      <Private>True</Private>\n    </Reference>\n    <Reference Include=\"Microsoft.Threading.Tasks.Extensions, Version=1.0.12.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\packages\\Microsoft.Bcl.Async.1.0.168\\lib\\net40\\Microsoft.Threading.Tasks.Extensions.dll</HintPath>\n      <Private>True</Private>\n    </Reference>\n    <Reference Include=\"Microsoft.Threading.Tasks.Extensions.Desktop, Version=1.0.168.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\packages\\Microsoft.Bcl.Async.1.0.168\\lib\\net40\\Microsoft.Threading.Tasks.Extensions.Desktop.dll</HintPath>\n      <Private>True</Private>\n    </Reference>\n    <Reference Include=\"Newtonsoft.Json, Version=11.0.0.0, Culture=neutral, PublicKeyToken=30ad4fe6b2a6aeed, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\packages\\Newtonsoft.Json.11.0.2\\lib\\net45\\Newtonsoft.Json.dll</HintPath>\n    </Reference>\n    <Reference Include=\"Nito.AsyncEx, Version=4.0.1.0, Culture=neutral, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\packages\\Nito.AsyncEx.4.0.1\\lib\\net45\\Nito.AsyncEx.dll</HintPath>\n      <Private>True</Private>\n    </Reference>\n    <Reference Include=\"Nito.AsyncEx.Concurrent, Version=4.0.1.0, Culture=neutral, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\packages\\Nito.AsyncEx.4.0.1\\lib\\net45\\Nito.AsyncEx.Concurrent.dll</HintPath>\n      <Private>True</Private>\n    </Reference>\n    <Reference Include=\"Nito.AsyncEx.Context, Version=1.1.0.0, Culture=neutral, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\packages\\Nito.AsyncEx.Context.1.1.0\\lib\\net46\\Nito.AsyncEx.Context.dll</HintPath>\n    </Reference>\n    <Reference Include=\"Nito.AsyncEx.Coordination, Version=1.0.2.0, Culture=neutral, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\packages\\Nito.AsyncEx.Coordination.1.0.2\\lib\\net46\\Nito.AsyncEx.Coordination.dll</HintPath>\n    </Reference>\n    <Reference Include=\"Nito.AsyncEx.Enlightenment, Version=4.0.1.0, Culture=neutral, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\packages\\Nito.AsyncEx.4.0.1\\lib\\net45\\Nito.AsyncEx.Enlightenment.dll</HintPath>\n      <Private>True</Private>\n    </Reference>\n    <Reference Include=\"Nito.AsyncEx.Tasks, Version=1.1.0.0, Culture=neutral, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\packages\\Nito.AsyncEx.Tasks.1.1.0\\lib\\net46\\Nito.AsyncEx.Tasks.dll</HintPath>\n    </Reference>\n    <Reference Include=\"Nito.Collections.Deque, Version=1.0.4.0, Culture=neutral, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\packages\\Nito.Collections.Deque.1.0.4\\lib\\netstandard2.0\\Nito.Collections.Deque.dll</HintPath>\n    </Reference>\n    <Reference Include=\"Nito.Disposables, Version=1.2.3.0, Culture=neutral, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\packages\\Nito.Disposables.1.2.3\\lib\\netstandard2.0\\Nito.Disposables.dll</HintPath>\n    </Reference>\n    <Reference Include=\"StackExchange.Redis, Version=1.2.6.0, Culture=neutral, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\packages\\StackExchange.Redis.1.2.6\\lib\\net46\\StackExchange.Redis.dll</HintPath>\n    </Reference>\n    <Reference Include=\"StackExchange.Redis.StrongName, Version=1.2.6.0, Culture=neutral, PublicKeyToken=c219ff1ca8c2ce46, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\packages\\StackExchange.Redis.StrongName.1.2.6\\lib\\net46\\StackExchange.Redis.StrongName.dll</HintPath>\n    </Reference>\n    <Reference Include=\"System\" />\n    <Reference Include=\"System.Buffers, Version=4.0.2.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\packages\\System.Buffers.4.4.0\\lib\\netstandard2.0\\System.Buffers.dll</HintPath>\n    </Reference>\n    <Reference Include=\"System.Collections.Immutable, Version=1.2.3.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\packages\\System.Collections.Immutable.1.5.0\\lib\\netstandard2.0\\System.Collections.Immutable.dll</HintPath>\n    </Reference>\n    <Reference Include=\"System.ComponentModel.Annotations, Version=4.2.1.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\packages\\System.ComponentModel.Annotations.4.5.0\\lib\\net461\\System.ComponentModel.Annotations.dll</HintPath>\n    </Reference>\n    <Reference Include=\"System.ComponentModel.DataAnnotations\" />\n    <Reference Include=\"System.Configuration\" />\n    <Reference Include=\"System.Configuration.ConfigurationManager, Version=4.0.1.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\packages\\System.Configuration.ConfigurationManager.4.5.0\\lib\\net461\\System.Configuration.ConfigurationManager.dll</HintPath>\n    </Reference>\n    <Reference Include=\"System.Core\" />\n    <Reference Include=\"System.Data.Common, Version=4.1.1.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\packages\\System.Data.Common.4.3.0\\lib\\net451\\System.Data.Common.dll</HintPath>\n      <Private>True</Private>\n    </Reference>\n    <Reference Include=\"System.Data.OracleClient\" />\n    <Reference Include=\"System.Drawing\" />\n    <Reference Include=\"System.IO.Compression\" />\n    <Reference Include=\"System.Linq.Dynamic, Version=1.0.6132.35681, Culture=neutral, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\packages\\System.Linq.Dynamic.1.0.7\\lib\\net40\\System.Linq.Dynamic.dll</HintPath>\n      <Private>True</Private>\n    </Reference>\n    <Reference Include=\"System.Linq.Dynamic.Core, Version=0.0.0.0, Culture=neutral, PublicKeyToken=0f07ec44de6ac832, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\packages\\System.Linq.Dynamic.Core.1.0.8.9\\lib\\net46\\System.Linq.Dynamic.Core.dll</HintPath>\n    </Reference>\n    <Reference Include=\"System.Memory, Version=4.0.1.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\packages\\System.Memory.4.5.0\\lib\\netstandard2.0\\System.Memory.dll</HintPath>\n    </Reference>\n    <Reference Include=\"System.Net\" />\n    <Reference Include=\"System.Numerics\" />\n    <Reference Include=\"System.Numerics.Vectors, Version=4.1.3.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\packages\\System.Numerics.Vectors.4.4.0\\lib\\net46\\System.Numerics.Vectors.dll</HintPath>\n    </Reference>\n    <Reference Include=\"System.Runtime.Caching\" />\n    <Reference Include=\"System.Runtime.CompilerServices.Unsafe, Version=4.0.4.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\packages\\System.Runtime.CompilerServices.Unsafe.4.5.0\\lib\\netstandard2.0\\System.Runtime.CompilerServices.Unsafe.dll</HintPath>\n    </Reference>\n    <Reference Include=\"System.Runtime.InteropServices.RuntimeInformation, Version=4.0.1.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\packages\\System.Runtime.InteropServices.RuntimeInformation.4.3.0\\lib\\net45\\System.Runtime.InteropServices.RuntimeInformation.dll</HintPath>\n      <Private>True</Private>\n    </Reference>\n    <Reference Include=\"System.Runtime.Remoting\" />\n    <Reference Include=\"System.Runtime.Serialization\" />\n    <Reference Include=\"System.Runtime.Serialization.Formatters, Version=4.0.1.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\packages\\System.Runtime.Serialization.Formatters.4.3.0\\lib\\net46\\System.Runtime.Serialization.Formatters.dll</HintPath>\n      <Private>True</Private>\n    </Reference>\n    <Reference Include=\"System.Runtime.Serialization.Primitives, Version=4.1.2.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\packages\\System.Runtime.Serialization.Primitives.4.3.0\\lib\\net46\\System.Runtime.Serialization.Primitives.dll</HintPath>\n      <Private>True</Private>\n    </Reference>\n    <Reference Include=\"System.Security.AccessControl, Version=4.1.1.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\packages\\System.Security.AccessControl.4.5.0\\lib\\net461\\System.Security.AccessControl.dll</HintPath>\n    </Reference>\n    <Reference Include=\"System.Security.Claims, Version=4.0.2.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\packages\\System.Security.Claims.4.3.0\\lib\\net46\\System.Security.Claims.dll</HintPath>\n      <Private>True</Private>\n    </Reference>\n    <Reference Include=\"System.Security.Permissions, Version=4.0.1.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\packages\\System.Security.Permissions.4.5.0\\lib\\net461\\System.Security.Permissions.dll</HintPath>\n    </Reference>\n    <Reference Include=\"System.Security.Principal.Windows, Version=4.1.1.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\packages\\System.Security.Principal.Windows.4.5.0\\lib\\net461\\System.Security.Principal.Windows.dll</HintPath>\n    </Reference>\n    <Reference Include=\"System.ServiceProcess\" />\n    <Reference Include=\"System.Transactions\" />\n    <Reference Include=\"System.Web\" />\n    <Reference Include=\"System.Xml.Linq\" />\n    <Reference Include=\"System.Data.DataSetExtensions\" />\n    <Reference Include=\"Microsoft.CSharp\" />\n    <Reference Include=\"System.Data\" />\n    <Reference Include=\"System.Net.Http\" />\n    <Reference Include=\"System.Xml\" />\n    <Reference Include=\"System.Xml.XmlDocument, Version=4.0.2.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\packages\\System.Xml.XmlDocument.4.3.0\\lib\\net46\\System.Xml.XmlDocument.dll</HintPath>\n      <Private>True</Private>\n    </Reference>\n    <Reference Include=\"System.Xml.XPath, Version=4.0.2.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\packages\\System.Xml.XPath.4.3.0\\lib\\net46\\System.Xml.XPath.dll</HintPath>\n      <Private>True</Private>\n    </Reference>\n    <Reference Include=\"System.Xml.XPath.XmlDocument, Version=4.0.2.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\packages\\System.Xml.XPath.XmlDocument.4.3.0\\lib\\net46\\System.Xml.XPath.XmlDocument.dll</HintPath>\n    </Reference>\n    <Reference Include=\"TimeZoneConverter, Version=2.4.1.0, Culture=neutral, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\packages\\TimeZoneConverter.2.4.1\\lib\\net45\\TimeZoneConverter.dll</HintPath>\n    </Reference>\n  </ItemGroup>\n  <ItemGroup>\n    <Compile Include=\"MqMessages\\MessageTrackers\\RedisStoreMessageTracker.cs\" />\n    <Compile Include=\"MqMessages\\MessageTrackers\\RedisStoreMessageTrackerModule.cs\" />\n    <Compile Include=\"Properties\\AssemblyInfo.cs\" />\n  </ItemGroup>\n  <ItemGroup>\n    <ProjectReference Include=\"..\\Abplus\\Abplus.csproj\">\n      <Project>{1de8d8d1-987d-4a9c-aec5-ff0a9914bbd4}</Project>\n      <Name>Abplus</Name>\n    </ProjectReference>\n  </ItemGroup>\n  <ItemGroup>\n    <None Include=\"Abplus.MqMessages.RedisStoreMessageTracker.nuspec\" />\n    <None Include=\"app.config\" />\n    <None Include=\"packages.config\" />\n  </ItemGroup>\n  <Import Project=\"$(MSBuildToolsPath)\\Microsoft.CSharp.targets\" />\n  <Import Project=\"..\\..\\packages\\Microsoft.Bcl.Build.1.0.21\\build\\Microsoft.Bcl.Build.targets\" Condition=\"Exists('..\\..\\packages\\Microsoft.Bcl.Build.1.0.21\\build\\Microsoft.Bcl.Build.targets')\" />\n  <Target Name=\"EnsureNuGetPackageBuildImports\" BeforeTargets=\"PrepareForBuild\">\n    <PropertyGroup>\n      <ErrorText>这台计算机上缺少此项目引用的 NuGet 程序包。使用“NuGet 程序包还原”可下载这些程序包。有关更多信息，请参见 http://go.microsoft.com/fwlink/?LinkID=322105。缺少的文件是 {0}。</ErrorText>\n    </PropertyGroup>\n    <Error Condition=\"!Exists('..\\..\\packages\\Microsoft.Bcl.Build.1.0.21\\build\\Microsoft.Bcl.Build.targets')\" Text=\"$([System.String]::Format('$(ErrorText)', '..\\..\\packages\\Microsoft.Bcl.Build.1.0.21\\build\\Microsoft.Bcl.Build.targets'))\" />\n  </Target>\n  <!-- To modify your build process, add your task inside one of the targets below and uncomment it. \n       Other similar extension points exist, see Microsoft.Common.targets.\n  <Target Name=\"BeforeBuild\">\n  </Target>\n  <Target Name=\"AfterBuild\">\n  </Target>\n  -->\n</Project>"
  },
  {
    "path": "src2/Abplus.MqMessages.RedisStoreMessageTracker/Abplus.MqMessages.RedisStoreMessageTracker.nuspec",
    "content": "<?xml version=\"1.0\"?>\n<package >\n  <metadata>\n    <id>$id$</id>\n    <version>$version$</version>\n    <title>$title$</title>\n    <authors>personball</authors>\n    <owners>personball</owners>\n    <licenseUrl>https://raw.githubusercontent.com/personball/abplus/master/LICENSE</licenseUrl>\n    <projectUrl>https://github.com/personball/abplus</projectUrl>\n    <iconUrl>https://raw.githubusercontent.com/personball/abplus/master/abplus_icon.png</iconUrl>\n    <requireLicenseAcceptance>false</requireLicenseAcceptance>\n    <description>Abp plus, an extension for Abp Framework. </description>\n    <releaseNotes></releaseNotes>\n    <copyright>Copyright 2017</copyright>\n    <tags></tags>\n    <dependencies>\n      <dependency id=\"Abp\" version=\"1.4.2\" />\n      <dependency id=\"Abp.RedisCache\" version=\"1.4.2\"/>\n    </dependencies>\n  </metadata>\n</package>"
  },
  {
    "path": "src2/Abplus.MqMessages.RedisStoreMessageTracker/MqMessages/MessageTrackers/RedisStoreMessageTracker.cs",
    "content": "﻿using System;\nusing System.Threading.Tasks;\nusing Abp.Extensions;\nusing Abp.Runtime.Caching;\n\nnamespace Abp.MqMessages.MessageTrackers\n{\n    public class RedisStoreMessageTracker : IMessageTracker\n    {\n        private const string CacheKey = \"Abplus.MqMessages.MessageTrackers.RedisStoreMessageTracker\";\n        private readonly ICacheManager _cacheManager;\n\n        public RedisStoreMessageTracker(ICacheManager cacheManager)\n        {\n            _cacheManager = cacheManager;\n        }\n\n        public async Task<bool> HasProcessed(string processId)\n        {\n            var value = await _cacheManager.GetCache<string, string>(CacheKey).GetOrDefaultAsync(processId);\n            return !value.IsNullOrWhiteSpace();\n        }\n\n        public async Task MarkAsProcessed(string processId)\n        {\n            await _cacheManager.GetCache<string, string>(CacheKey).SetAsync(processId, \"1\", TimeSpan.FromDays(30));\n        }\n    }\n}\n"
  },
  {
    "path": "src2/Abplus.MqMessages.RedisStoreMessageTracker/MqMessages/MessageTrackers/RedisStoreMessageTrackerModule.cs",
    "content": "﻿using Abp.Modules;\nusing Abp.Runtime.Caching.Redis;\n\nnamespace Abp.MqMessages.MessageTrackers\n{\n    [DependsOn(typeof(AbpRedisCacheModule))]\n    public class RedisStoreMessageTrackerModule : AbpModule\n    {\n        public override void PreInitialize()\n        {\n            IocManager.Register<IMessageTracker, RedisStoreMessageTracker>();\n        }\n\n        public override void Initialize()\n        {\n            //IocManager.RegisterIfNot<ISerializer, NewtonsoftSerializer>(DependencyLifeStyle.Singleton);\n            //IocManager.RegisterIfNot<ICacheClient, StackExchangeRedisCacheClient>(DependencyLifeStyle.Singleton);\n        }\n    }\n}\n"
  },
  {
    "path": "src2/Abplus.MqMessages.RedisStoreMessageTracker/Properties/AssemblyInfo.cs",
    "content": "﻿using System.Reflection;\nusing System.Runtime.CompilerServices;\nusing System.Runtime.InteropServices;\n\n// 有关程序集的一般信息由以下\n// 控制。更改这些特性值可修改\n// 与程序集关联的信息。\n[assembly: AssemblyTitle(\"Abplus.MqMessages.RedisStoreMessageTracker\")]\n[assembly: AssemblyDescription(\"\")]\n[assembly: AssemblyConfiguration(\"\")]\n[assembly: AssemblyCompany(\"\")]\n[assembly: AssemblyProduct(\"Abplus.MqMessages.RedisStoreMessageTracker\")]\n[assembly: AssemblyCopyright(\"Copyright ©  2017\")]\n[assembly: AssemblyTrademark(\"\")]\n[assembly: AssemblyCulture(\"\")]\n\n//将 ComVisible 设置为 false 将使此程序集中的类型\n//对 COM 组件不可见。  如果需要从 COM 访问此程序集中的类型，\n//请将此类型的 ComVisible 特性设置为 true。\n[assembly: ComVisible(false)]\n\n// 如果此项目向 COM 公开，则下列 GUID 用于类型库的 ID\n[assembly: Guid(\"0f4d2d6f-801a-49a5-8b17-1e188ca0c6f8\")]\n\n// 程序集的版本信息由下列四个值组成: \n//\n//      主版本\n//      次版本\n//      生成号\n//      修订号\n//\n//可以指定所有这些值，也可以使用“生成号”和“修订号”的默认值，\n// 方法是按如下所示使用“*”: :\n// [assembly: AssemblyVersion(\"1.0.*\")]\n[assembly: AssemblyVersion(\"1.0.0.0\")]\n[assembly: AssemblyFileVersion(\"1.0.0.0\")]\n"
  },
  {
    "path": "src2/Abplus.MqMessages.RedisStoreMessageTracker/app.config",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<configuration>\n  <runtime>\n    <assemblyBinding xmlns=\"urn:schemas-microsoft-com:asm.v1\">\n      <dependentAssembly>\n        <assemblyIdentity name=\"Newtonsoft.Json\" publicKeyToken=\"30ad4fe6b2a6aeed\" culture=\"neutral\" />\n        <bindingRedirect oldVersion=\"0.0.0.0-11.0.0.0\" newVersion=\"11.0.0.0\" />\n      </dependentAssembly>\n      <dependentAssembly>\n        <assemblyIdentity name=\"Microsoft.Extensions.Caching.Abstractions\" publicKeyToken=\"adb9793829ddae60\" culture=\"neutral\" />\n        <bindingRedirect oldVersion=\"0.0.0.0-2.0.1.0\" newVersion=\"2.0.1.0\" />\n      </dependentAssembly>\n      <dependentAssembly>\n        <assemblyIdentity name=\"Microsoft.Extensions.Caching.Memory\" publicKeyToken=\"adb9793829ddae60\" culture=\"neutral\" />\n        <bindingRedirect oldVersion=\"0.0.0.0-2.0.1.0\" newVersion=\"2.0.1.0\" />\n      </dependentAssembly>\n      <dependentAssembly>\n        <assemblyIdentity name=\"Microsoft.Extensions.Options\" publicKeyToken=\"adb9793829ddae60\" culture=\"neutral\" />\n        <bindingRedirect oldVersion=\"0.0.0.0-2.0.1.0\" newVersion=\"2.0.1.0\" />\n      </dependentAssembly>\n      <dependentAssembly>\n        <assemblyIdentity name=\"System.Runtime.InteropServices.RuntimeInformation\" publicKeyToken=\"b03f5f7f11d50a3a\" culture=\"neutral\" />\n        <bindingRedirect oldVersion=\"0.0.0.0-4.0.2.0\" newVersion=\"4.0.2.0\" />\n      </dependentAssembly>\n      <dependentAssembly>\n        <assemblyIdentity name=\"System.Configuration.ConfigurationManager\" publicKeyToken=\"cc7b13ffcd2ddd51\" culture=\"neutral\" />\n        <bindingRedirect oldVersion=\"0.0.0.0-4.0.1.0\" newVersion=\"4.0.1.0\" />\n      </dependentAssembly>\n      <dependentAssembly>\n        <assemblyIdentity name=\"System.Collections.Immutable\" publicKeyToken=\"b03f5f7f11d50a3a\" culture=\"neutral\" />\n        <bindingRedirect oldVersion=\"0.0.0.0-1.2.3.0\" newVersion=\"1.2.3.0\" />\n      </dependentAssembly>\n      <dependentAssembly>\n        <assemblyIdentity name=\"System.ComponentModel.Annotations\" publicKeyToken=\"b03f5f7f11d50a3a\" culture=\"neutral\" />\n        <bindingRedirect oldVersion=\"0.0.0.0-4.2.1.0\" newVersion=\"4.2.1.0\" />\n      </dependentAssembly>\n    </assemblyBinding>\n  </runtime>\n</configuration>"
  },
  {
    "path": "src2/Abplus.MqMessages.RedisStoreMessageTracker/packages.config",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<packages>\n  <package id=\"Abp\" version=\"3.7.2\" targetFramework=\"net461\" />\n  <package id=\"Abp.RedisCache\" version=\"3.7.2\" targetFramework=\"net461\" />\n  <package id=\"Castle.Core\" version=\"4.3.1\" targetFramework=\"net461\" />\n  <package id=\"Castle.LoggingFacility\" version=\"4.1.0\" targetFramework=\"net461\" />\n  <package id=\"Castle.Windsor\" version=\"4.1.0\" targetFramework=\"net461\" />\n  <package id=\"JetBrains.Annotations\" version=\"11.1.0\" targetFramework=\"net461\" />\n  <package id=\"Microsoft.Bcl\" version=\"1.1.10\" targetFramework=\"net461\" />\n  <package id=\"Microsoft.Bcl.Async\" version=\"1.0.168\" targetFramework=\"net461\" />\n  <package id=\"Microsoft.Bcl.Build\" version=\"1.0.21\" targetFramework=\"net461\" />\n  <package id=\"Microsoft.Extensions.Caching.Abstractions\" version=\"2.1.0\" targetFramework=\"net461\" />\n  <package id=\"Microsoft.Extensions.Caching.Memory\" version=\"2.1.0\" targetFramework=\"net461\" />\n  <package id=\"Microsoft.Extensions.DependencyInjection.Abstractions\" version=\"2.1.0\" targetFramework=\"net461\" />\n  <package id=\"Microsoft.Extensions.Options\" version=\"2.1.0\" targetFramework=\"net461\" />\n  <package id=\"Microsoft.Extensions.Primitives\" version=\"2.1.0\" targetFramework=\"net461\" />\n  <package id=\"Newtonsoft.Json\" version=\"11.0.2\" targetFramework=\"net461\" />\n  <package id=\"Nito.AsyncEx\" version=\"4.0.1\" targetFramework=\"net461\" />\n  <package id=\"Nito.AsyncEx.Context\" version=\"1.1.0\" targetFramework=\"net461\" />\n  <package id=\"Nito.AsyncEx.Coordination\" version=\"1.0.2\" targetFramework=\"net461\" />\n  <package id=\"Nito.AsyncEx.Tasks\" version=\"1.1.0\" targetFramework=\"net461\" />\n  <package id=\"Nito.Collections.Deque\" version=\"1.0.4\" targetFramework=\"net461\" />\n  <package id=\"Nito.Disposables\" version=\"1.2.3\" targetFramework=\"net461\" />\n  <package id=\"StackExchange.Redis\" version=\"1.2.6\" targetFramework=\"net461\" />\n  <package id=\"StackExchange.Redis.StrongName\" version=\"1.2.6\" targetFramework=\"net461\" />\n  <package id=\"System.Buffers\" version=\"4.4.0\" targetFramework=\"net461\" />\n  <package id=\"System.Collections.Immutable\" version=\"1.5.0\" targetFramework=\"net461\" />\n  <package id=\"System.ComponentModel.Annotations\" version=\"4.5.0\" targetFramework=\"net461\" />\n  <package id=\"System.Configuration.ConfigurationManager\" version=\"4.5.0\" targetFramework=\"net461\" />\n  <package id=\"System.Data.Common\" version=\"4.3.0\" targetFramework=\"net461\" />\n  <package id=\"System.Linq.Dynamic\" version=\"1.0.7\" targetFramework=\"net461\" />\n  <package id=\"System.Linq.Dynamic.Core\" version=\"1.0.8.9\" targetFramework=\"net461\" />\n  <package id=\"System.Linq.Queryable\" version=\"4.3.0\" targetFramework=\"net461\" />\n  <package id=\"System.Memory\" version=\"4.5.0\" targetFramework=\"net461\" />\n  <package id=\"System.Numerics.Vectors\" version=\"4.4.0\" targetFramework=\"net461\" />\n  <package id=\"System.Runtime.CompilerServices.Unsafe\" version=\"4.5.0\" targetFramework=\"net461\" />\n  <package id=\"System.Runtime.InteropServices.RuntimeInformation\" version=\"4.3.0\" targetFramework=\"net461\" />\n  <package id=\"System.Runtime.Serialization.Formatters\" version=\"4.3.0\" targetFramework=\"net461\" />\n  <package id=\"System.Runtime.Serialization.Primitives\" version=\"4.3.0\" targetFramework=\"net461\" />\n  <package id=\"System.Security.AccessControl\" version=\"4.5.0\" targetFramework=\"net461\" />\n  <package id=\"System.Security.Claims\" version=\"4.3.0\" targetFramework=\"net461\" />\n  <package id=\"System.Security.Permissions\" version=\"4.5.0\" targetFramework=\"net461\" />\n  <package id=\"System.Security.Principal.Windows\" version=\"4.5.0\" targetFramework=\"net461\" />\n  <package id=\"System.Threading\" version=\"4.3.0\" targetFramework=\"net461\" />\n  <package id=\"System.Xml.XmlDocument\" version=\"4.3.0\" targetFramework=\"net461\" />\n  <package id=\"System.Xml.XPath\" version=\"4.3.0\" targetFramework=\"net461\" />\n  <package id=\"System.Xml.XPath.XmlDocument\" version=\"4.3.0\" targetFramework=\"net461\" />\n  <package id=\"TimeZoneConverter\" version=\"2.4.1\" targetFramework=\"net461\" />\n</packages>"
  },
  {
    "path": "src2/Abplus.RebusRabbitmqConsumer/Abplus.RebusRabbitmqConsumer.csproj",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<Project ToolsVersion=\"14.0\" DefaultTargets=\"Build\" xmlns=\"http://schemas.microsoft.com/developer/msbuild/2003\">\n  <Import Project=\"$(MSBuildExtensionsPath)\\$(MSBuildToolsVersion)\\Microsoft.Common.props\" Condition=\"Exists('$(MSBuildExtensionsPath)\\$(MSBuildToolsVersion)\\Microsoft.Common.props')\" />\n  <PropertyGroup>\n    <Configuration Condition=\" '$(Configuration)' == '' \">Debug</Configuration>\n    <Platform Condition=\" '$(Platform)' == '' \">AnyCPU</Platform>\n    <ProjectGuid>{32E6558A-DCDB-434C-B683-0EC88F1CEEAD}</ProjectGuid>\n    <OutputType>Library</OutputType>\n    <AppDesignerFolder>Properties</AppDesignerFolder>\n    <RootNamespace>Abp</RootNamespace>\n    <AssemblyName>Abplus.RebusRabbitmqConsumer</AssemblyName>\n    <TargetFrameworkVersion>v4.6.1</TargetFrameworkVersion>\n    <FileAlignment>512</FileAlignment>\n    <NuGetPackageImportStamp>\n    </NuGetPackageImportStamp>\n  </PropertyGroup>\n  <PropertyGroup Condition=\" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' \">\n    <DebugSymbols>true</DebugSymbols>\n    <DebugType>full</DebugType>\n    <Optimize>false</Optimize>\n    <OutputPath>bin\\Debug\\</OutputPath>\n    <DefineConstants>DEBUG;TRACE</DefineConstants>\n    <ErrorReport>prompt</ErrorReport>\n    <WarningLevel>4</WarningLevel>\n  </PropertyGroup>\n  <PropertyGroup Condition=\" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' \">\n    <DebugType>pdbonly</DebugType>\n    <Optimize>true</Optimize>\n    <OutputPath>bin\\Release\\</OutputPath>\n    <DefineConstants>TRACE</DefineConstants>\n    <ErrorReport>prompt</ErrorReport>\n    <WarningLevel>4</WarningLevel>\n    <DocumentationFile>bin\\Release\\Abplus.RebusRabbitmqConsumer.XML</DocumentationFile>\n  </PropertyGroup>\n  <ItemGroup>\n    <Reference Include=\"Abp, Version=1.4.2.0, Culture=neutral, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\packages\\Abp.1.4.2.0\\lib\\net452\\Abp.dll</HintPath>\n      <Private>True</Private>\n    </Reference>\n    <Reference Include=\"Castle.Core, Version=3.3.0.0, Culture=neutral, PublicKeyToken=407dd0808d44fbdc, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\packages\\Castle.Core.3.3.3\\lib\\net45\\Castle.Core.dll</HintPath>\n      <Private>True</Private>\n    </Reference>\n    <Reference Include=\"Castle.Facilities.Logging, Version=3.4.0.0, Culture=neutral, PublicKeyToken=407dd0808d44fbdc, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\packages\\Castle.LoggingFacility.3.4.0\\lib\\net45\\Castle.Facilities.Logging.dll</HintPath>\n      <Private>True</Private>\n    </Reference>\n    <Reference Include=\"Castle.Windsor, Version=3.4.0.0, Culture=neutral, PublicKeyToken=407dd0808d44fbdc, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\packages\\Castle.Windsor.3.4.0\\lib\\net45\\Castle.Windsor.dll</HintPath>\n      <Private>True</Private>\n    </Reference>\n    <Reference Include=\"Microsoft.Threading.Tasks, Version=1.0.12.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\packages\\Microsoft.Bcl.Async.1.0.168\\lib\\net40\\Microsoft.Threading.Tasks.dll</HintPath>\n      <Private>True</Private>\n    </Reference>\n    <Reference Include=\"Microsoft.Threading.Tasks.Extensions, Version=1.0.12.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\packages\\Microsoft.Bcl.Async.1.0.168\\lib\\net40\\Microsoft.Threading.Tasks.Extensions.dll</HintPath>\n      <Private>True</Private>\n    </Reference>\n    <Reference Include=\"Microsoft.Threading.Tasks.Extensions.Desktop, Version=1.0.168.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\packages\\Microsoft.Bcl.Async.1.0.168\\lib\\net40\\Microsoft.Threading.Tasks.Extensions.Desktop.dll</HintPath>\n      <Private>True</Private>\n    </Reference>\n    <Reference Include=\"Newtonsoft.Json, Version=9.0.0.0, Culture=neutral, PublicKeyToken=30ad4fe6b2a6aeed, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\packages\\Newtonsoft.Json.9.0.1\\lib\\net45\\Newtonsoft.Json.dll</HintPath>\n      <Private>True</Private>\n    </Reference>\n    <Reference Include=\"Nito.AsyncEx, Version=4.0.1.0, Culture=neutral, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\packages\\Nito.AsyncEx.4.0.1\\lib\\net45\\Nito.AsyncEx.dll</HintPath>\n      <Private>True</Private>\n    </Reference>\n    <Reference Include=\"Nito.AsyncEx.Concurrent, Version=4.0.1.0, Culture=neutral, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\packages\\Nito.AsyncEx.4.0.1\\lib\\net45\\Nito.AsyncEx.Concurrent.dll</HintPath>\n      <Private>True</Private>\n    </Reference>\n    <Reference Include=\"Nito.AsyncEx.Enlightenment, Version=4.0.1.0, Culture=neutral, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\packages\\Nito.AsyncEx.4.0.1\\lib\\net45\\Nito.AsyncEx.Enlightenment.dll</HintPath>\n      <Private>True</Private>\n    </Reference>\n    <Reference Include=\"RabbitMQ.Client, Version=4.0.0.0, Culture=neutral, PublicKeyToken=89e7d7c5feba84ce, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\packages\\RabbitMQ.Client.4.1.1\\lib\\net451\\RabbitMQ.Client.dll</HintPath>\n      <Private>True</Private>\n    </Reference>\n    <Reference Include=\"Rebus, Version=2.1.6.0, Culture=neutral, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\packages\\Rebus.2.1.6\\lib\\NET45\\Rebus.dll</HintPath>\n      <Private>True</Private>\n    </Reference>\n    <Reference Include=\"Rebus.RabbitMq, Version=2.0.0.0, Culture=neutral, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\packages\\Rebus.RabbitMq.2.0.0\\lib\\NET452\\Rebus.RabbitMq.dll</HintPath>\n      <Private>True</Private>\n    </Reference>\n    <Reference Include=\"System\" />\n    <Reference Include=\"System.Collections.Immutable, Version=1.2.1.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\packages\\System.Collections.Immutable.1.3.1\\lib\\portable-net45+win8+wp8+wpa81\\System.Collections.Immutable.dll</HintPath>\n      <Private>True</Private>\n    </Reference>\n    <Reference Include=\"System.ComponentModel.DataAnnotations\" />\n    <Reference Include=\"System.Configuration\" />\n    <Reference Include=\"System.Core\" />\n    <Reference Include=\"System.Linq.Dynamic, Version=1.0.6132.35681, Culture=neutral, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\packages\\System.Linq.Dynamic.1.0.7\\lib\\net40\\System.Linq.Dynamic.dll</HintPath>\n      <Private>True</Private>\n    </Reference>\n    <Reference Include=\"System.Net\" />\n    <Reference Include=\"System.Runtime.Caching\" />\n    <Reference Include=\"System.Transactions\" />\n    <Reference Include=\"System.Xml.Linq\" />\n    <Reference Include=\"System.Data.DataSetExtensions\" />\n    <Reference Include=\"Microsoft.CSharp\" />\n    <Reference Include=\"System.Data\" />\n    <Reference Include=\"System.Net.Http\" />\n    <Reference Include=\"System.Xml\" />\n  </ItemGroup>\n  <ItemGroup>\n    <Compile Include=\"Configuration\\Startup\\AbpRebusRabbitMqConsumerConfigurationExtensions.cs\" />\n    <Compile Include=\"Events\\Consumer\\RebusRabbitMq\\AbpRebusRabbitMqConsumerModule.cs\" />\n    <Compile Include=\"Events\\Consumer\\RebusRabbitMq\\AbpRebusRabbitMqConsumerModuleConfig.cs\" />\n    <Compile Include=\"Events\\Consumer\\RebusRabbitMq\\IAbpRebusRabbitMqConsumerModuleConfig.cs\" />\n    <Compile Include=\"Properties\\AssemblyInfo.cs\" />\n  </ItemGroup>\n  <ItemGroup>\n    <None Include=\"Abplus.RebusRabbitmqConsumer.nuspec\" />\n    <None Include=\"packages.config\" />\n  </ItemGroup>\n  <ItemGroup>\n    <ProjectReference Include=\"..\\Abplus\\Abplus.csproj\">\n      <Project>{1de8d8d1-987d-4a9c-aec5-ff0a9914bbd4}</Project>\n      <Name>Abplus</Name>\n    </ProjectReference>\n  </ItemGroup>\n  <Import Project=\"$(MSBuildToolsPath)\\Microsoft.CSharp.targets\" />\n  <Import Project=\"..\\..\\packages\\Microsoft.Bcl.Build.1.0.21\\build\\Microsoft.Bcl.Build.targets\" Condition=\"Exists('..\\..\\packages\\Microsoft.Bcl.Build.1.0.21\\build\\Microsoft.Bcl.Build.targets')\" />\n  <Target Name=\"EnsureNuGetPackageBuildImports\" BeforeTargets=\"PrepareForBuild\">\n    <PropertyGroup>\n      <ErrorText>这台计算机上缺少此项目引用的 NuGet 程序包。使用“NuGet 程序包还原”可下载这些程序包。有关更多信息，请参见 http://go.microsoft.com/fwlink/?LinkID=322105。缺少的文件是 {0}。</ErrorText>\n    </PropertyGroup>\n    <Error Condition=\"!Exists('..\\..\\packages\\Microsoft.Bcl.Build.1.0.21\\build\\Microsoft.Bcl.Build.targets')\" Text=\"$([System.String]::Format('$(ErrorText)', '..\\..\\packages\\Microsoft.Bcl.Build.1.0.21\\build\\Microsoft.Bcl.Build.targets'))\" />\n  </Target>\n  <!-- To modify your build process, add your task inside one of the targets below and uncomment it. \n       Other similar extension points exist, see Microsoft.Common.targets.\n  <Target Name=\"BeforeBuild\">\n  </Target>\n  <Target Name=\"AfterBuild\">\n  </Target>\n  -->\n</Project>"
  },
  {
    "path": "src2/Abplus.RebusRabbitmqConsumer/Abplus.RebusRabbitmqConsumer.nuspec",
    "content": "<?xml version=\"1.0\"?>\n<package >\n  <metadata>\n    <id>$id$</id>\n    <version>$version$</version>\n    <title>$title$</title>\n    <authors>personball</authors>\n    <owners>personball</owners>\n    <licenseUrl>https://raw.githubusercontent.com/personball/abplus/master/LICENSE</licenseUrl>\n    <projectUrl>https://github.com/personball/abplus</projectUrl>\n    <iconUrl>https://raw.githubusercontent.com/personball/abplus/master/abplus_icon.png</iconUrl>\n    <requireLicenseAcceptance>false</requireLicenseAcceptance>\n    <description>Abp plus, an extension for Abp Framework. </description>\n    <releaseNotes></releaseNotes>\n    <copyright>Copyright 2017</copyright>\n    <tags></tags>\n  </metadata>\n</package>"
  },
  {
    "path": "src2/Abplus.RebusRabbitmqConsumer/Configuration/Startup/AbpRebusRabbitMqConsumerConfigurationExtensions.cs",
    "content": "﻿using Abp.Events.Consumer.RebusRabbitMq;\n\nnamespace Abp.Configuration.Startup\n{\n    public static class AbpRebusRabbitMqConsumerConfigurationExtensions\n    {\n        public static IAbpRebusRabbitMqConsumerModuleConfig AbpRebusRabbitMqConsumer(this IModuleConfigurations configurations)\n        {\n            return configurations.AbpConfiguration.GetOrCreate(\"Modules.Abp.RebusRabbitMqConsumer\", () => configurations.AbpConfiguration.IocManager.Resolve<IAbpRebusRabbitMqConsumerModuleConfig>());\n        }\n    }\n}\n"
  },
  {
    "path": "src2/Abplus.RebusRabbitmqConsumer/Events/Consumer/RebusRabbitMq/AbpRebusRabbitMqConsumerModule.cs",
    "content": "﻿using System;\nusing System.Reflection;\nusing Abp.Modules;\nusing Rebus.Activation;\nusing Rebus.Auditing.Messages;\nusing Rebus.Config;\nusing Rebus.RabbitMq;\n\nnamespace Abp.Events.Consumer.RebusRabbitMq\n{\n    [DependsOn(typeof(AbpKernelModule))]\n    public class AbpRebusRabbitMqConsumerModule : AbpModule\n    {\n        public Action<BuiltinHandlerActivator> RegisterHandlers;\n        public Action<BuiltinHandlerActivator> SubscribeEvents;\n\n        public Action<RebusConfigurer> RebusConfigAppend;\n\n        private BuiltinHandlerActivator _activator;\n\n        public AbpRebusRabbitMqConsumerModule()\n        {\n            _activator = new BuiltinHandlerActivator();\n        }\n\n        public override void PreInitialize()\n        {\n            IocManager.Register<IAbpRebusRabbitMqConsumerModuleConfig, AbpRebusRabbitMqConsumerModuleConfig>();\n        }\n\n        public override void Initialize()\n        {\n            IocManager.RegisterAssemblyByConvention(Assembly.GetExecutingAssembly());\n        }\n\n        public override void PostInitialize()\n        {\n            var config = IocManager.Resolve<IAbpRebusRabbitMqConsumerModuleConfig>();\n\n            RegisterHandlers(_activator);\n\n            var rebusConfig = Configure.With(_activator);\n\n            rebusConfig.Options(o => o.SetNumberOfWorkers(config.NumberOfWorkers));\n            rebusConfig.Options(o => o.SetMaxParallelism(config.MaxParallelism));\n\n            if (config.MessageAuditingEnabled)\n            {\n                rebusConfig.Options(o => o.EnableMessageAuditing(config.MessageAuditingQueueName));\n            }\n\n            if (config.RebusLoggingConfig != null)\n            {\n                rebusConfig.Logging(config.RebusLoggingConfig);\n            }\n\n            RebusConfigAppend?.Invoke(rebusConfig);\n\n            rebusConfig.Transport(t => t.UseRabbitMq(config.ConnectionString, config.QueueName))\n                .Start();\n\n            SubscribeEvents(_activator);\n        }\n\n        public override void Shutdown()\n        {\n            //base.Shutdown();\n            _activator.Bus.Dispose();\n            _activator.Dispose();\n        }\n\n    }\n}\n"
  },
  {
    "path": "src2/Abplus.RebusRabbitmqConsumer/Events/Consumer/RebusRabbitMq/AbpRebusRabbitMqConsumerModuleConfig.cs",
    "content": "﻿\nusing System;\nusing Rebus.Config;\nnamespace Abp.Events.Consumer.RebusRabbitMq\n{\n    public class AbpRebusRabbitMqConsumerModuleConfig : IAbpRebusRabbitMqConsumerModuleConfig\n    {\n        public string ConnectionString { get; private set; }\n\n        public string QueueName { get; private set; }\n\n        public int NumberOfWorkers { get; private set; }\n        public int MaxParallelism { get; private set; }\n\n        public bool MessageAuditingEnabled { get; private set; }\n        public string MessageAuditingQueueName { get; private set; }\n\n        public Action<RebusLoggingConfigurer> RebusLoggingConfig { get; private set; }\n\n        public AbpRebusRabbitMqConsumerModuleConfig()\n        {\n            NumberOfWorkers = 1;\n            MaxParallelism = 1;\n            MessageAuditingEnabled = false;\n            MessageAuditingQueueName = \"Audit\";\n        }\n\n        public IAbpRebusRabbitMqConsumerModuleConfig Connect(string connectString)\n        {\n            ConnectionString = connectString;\n            return this;\n        }\n\n        public IAbpRebusRabbitMqConsumerModuleConfig UseQueue(string queueName)\n        {\n            QueueName = queueName;\n            return this;\n        }\n\n        public IAbpRebusRabbitMqConsumerModuleConfig SetNumberOfWorkers(int num)\n        {\n            NumberOfWorkers = num;\n            return this;\n        }\n        public IAbpRebusRabbitMqConsumerModuleConfig SetMaxParallelism(int num)\n        {\n            MaxParallelism = num;\n            return this;\n        }\n\n        public IAbpRebusRabbitMqConsumerModuleConfig EnableMessageAuditing()\n        {\n            MessageAuditingEnabled = true;\n            return this;\n        }\n\n        public IAbpRebusRabbitMqConsumerModuleConfig SetMessageAuditingQueueName(string queueName)\n        {\n            MessageAuditingQueueName = queueName;\n            return this;\n        }\n\n        public IAbpRebusRabbitMqConsumerModuleConfig SetRebusLoggingConfigurer(Action<RebusLoggingConfigurer> loggingConfigurer)\n        {\n            RebusLoggingConfig = loggingConfigurer;\n            return this;\n        }\n    }\n}\n"
  },
  {
    "path": "src2/Abplus.RebusRabbitmqConsumer/Events/Consumer/RebusRabbitMq/IAbpRebusRabbitMqConsumerModuleConfig.cs",
    "content": "﻿\nusing System;\nusing Rebus.Config;\nnamespace Abp.Events.Consumer.RebusRabbitMq\n{\n    public interface IAbpRebusRabbitMqConsumerModuleConfig\n    {\n        string ConnectionString { get; }\n        string QueueName { get; }\n        int NumberOfWorkers { get; }\n        int MaxParallelism { get; }\n\n        bool MessageAuditingEnabled { get; }\n        string MessageAuditingQueueName { get; }\n        Action<RebusLoggingConfigurer> RebusLoggingConfig { get; }\n\n        IAbpRebusRabbitMqConsumerModuleConfig Connect(string connectString);\n        IAbpRebusRabbitMqConsumerModuleConfig UseQueue(string queueName);\n        IAbpRebusRabbitMqConsumerModuleConfig SetNumberOfWorkers(int num);\n        IAbpRebusRabbitMqConsumerModuleConfig SetMaxParallelism(int num);\n        IAbpRebusRabbitMqConsumerModuleConfig EnableMessageAuditing();\n        IAbpRebusRabbitMqConsumerModuleConfig SetMessageAuditingQueueName(string queueName);\n\n        IAbpRebusRabbitMqConsumerModuleConfig SetRebusLoggingConfigurer(Action<RebusLoggingConfigurer> loggingConfigurer);\n    }\n}\n"
  },
  {
    "path": "src2/Abplus.RebusRabbitmqConsumer/Properties/AssemblyInfo.cs",
    "content": "﻿using System.Reflection;\nusing System.Runtime.CompilerServices;\nusing System.Runtime.InteropServices;\nusing Abp;\n\n// 有关程序集的一般信息由以下\n// 控制。更改这些特性值可修改\n// 与程序集关联的信息。\n[assembly: AssemblyTitle(\"Abplus.RebusRabbitmqConsumer\")]\n[assembly: AssemblyDescription(\"\")]\n[assembly: AssemblyConfiguration(\"\")]\n[assembly: AssemblyCompany(\"\")]\n[assembly: AssemblyProduct(\"Abplus.RebusRabbitmqConsumer\")]\n[assembly: AssemblyCopyright(\"Copyright ©  2016\")]\n[assembly: AssemblyTrademark(\"\")]\n[assembly: AssemblyCulture(\"\")]\n\n//将 ComVisible 设置为 false 将使此程序集中的类型\n//对 COM 组件不可见。  如果需要从 COM 访问此程序集中的类型，\n//请将此类型的 ComVisible 特性设置为 true。\n[assembly: ComVisible(false)]\n\n// 如果此项目向 COM 公开，则下列 GUID 用于类型库的 ID\n[assembly: Guid(\"32e6558a-dcdb-434c-b683-0ec88f1ceead\")]\n\n// 程序集的版本信息由下列四个值组成: \n//\n//      主版本\n//      次版本\n//      生成号\n//      修订号\n//\n//可以指定所有这些值，也可以使用“生成号”和“修订号”的默认值，\n// 方法是按如下所示使用“*”: :\n// [assembly: AssemblyVersion(\"1.0.*\")]\n[assembly: AssemblyVersion(AbplusConsts.CurrentVersion)]\n[assembly: AssemblyFileVersion(AbplusConsts.CurrentVersion)]\n"
  },
  {
    "path": "src2/Abplus.RebusRabbitmqConsumer/packages.config",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<packages>\n  <package id=\"Abp\" version=\"1.4.2.0\" targetFramework=\"net461\" />\n  <package id=\"Castle.Core\" version=\"3.3.3\" targetFramework=\"net461\" />\n  <package id=\"Castle.LoggingFacility\" version=\"3.4.0\" targetFramework=\"net461\" />\n  <package id=\"Castle.Windsor\" version=\"3.4.0\" targetFramework=\"net461\" />\n  <package id=\"Microsoft.Bcl\" version=\"1.1.10\" targetFramework=\"net461\" />\n  <package id=\"Microsoft.Bcl.Async\" version=\"1.0.168\" targetFramework=\"net461\" />\n  <package id=\"Microsoft.Bcl.Build\" version=\"1.0.21\" targetFramework=\"net461\" />\n  <package id=\"Newtonsoft.Json\" version=\"9.0.1\" targetFramework=\"net461\" />\n  <package id=\"Nito.AsyncEx\" version=\"4.0.1\" targetFramework=\"net461\" />\n  <package id=\"RabbitMQ.Client\" version=\"4.1.1\" targetFramework=\"net461\" />\n  <package id=\"Rebus\" version=\"2.1.6\" targetFramework=\"net461\" />\n  <package id=\"Rebus.RabbitMq\" version=\"2.0.0\" targetFramework=\"net461\" />\n  <package id=\"System.Collections.Immutable\" version=\"1.3.1\" targetFramework=\"net461\" />\n  <package id=\"System.Linq.Dynamic\" version=\"1.0.7\" targetFramework=\"net461\" />\n</packages>"
  },
  {
    "path": "src2/Abplus.RebusRabbitmqProducer/Abplus.RebusRabbitmqProducer.csproj",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<Project ToolsVersion=\"14.0\" DefaultTargets=\"Build\" xmlns=\"http://schemas.microsoft.com/developer/msbuild/2003\">\n  <Import Project=\"$(MSBuildExtensionsPath)\\$(MSBuildToolsVersion)\\Microsoft.Common.props\" Condition=\"Exists('$(MSBuildExtensionsPath)\\$(MSBuildToolsVersion)\\Microsoft.Common.props')\" />\n  <PropertyGroup>\n    <Configuration Condition=\" '$(Configuration)' == '' \">Debug</Configuration>\n    <Platform Condition=\" '$(Platform)' == '' \">AnyCPU</Platform>\n    <ProjectGuid>{17DC37E5-6756-4462-AF34-674738762F0B}</ProjectGuid>\n    <OutputType>Library</OutputType>\n    <AppDesignerFolder>Properties</AppDesignerFolder>\n    <RootNamespace>Abp</RootNamespace>\n    <AssemblyName>Abplus.RebusRabbitmqProducer</AssemblyName>\n    <TargetFrameworkVersion>v4.6.1</TargetFrameworkVersion>\n    <FileAlignment>512</FileAlignment>\n    <NuGetPackageImportStamp>\n    </NuGetPackageImportStamp>\n  </PropertyGroup>\n  <PropertyGroup Condition=\" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' \">\n    <DebugSymbols>true</DebugSymbols>\n    <DebugType>full</DebugType>\n    <Optimize>false</Optimize>\n    <OutputPath>bin\\Debug\\</OutputPath>\n    <DefineConstants>DEBUG;TRACE</DefineConstants>\n    <ErrorReport>prompt</ErrorReport>\n    <WarningLevel>4</WarningLevel>\n  </PropertyGroup>\n  <PropertyGroup Condition=\" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' \">\n    <DebugType>pdbonly</DebugType>\n    <Optimize>true</Optimize>\n    <OutputPath>bin\\Release\\</OutputPath>\n    <DefineConstants>TRACE</DefineConstants>\n    <ErrorReport>prompt</ErrorReport>\n    <WarningLevel>4</WarningLevel>\n    <DocumentationFile>bin\\Release\\Abplus.RebusRabbitmqProducer.XML</DocumentationFile>\n  </PropertyGroup>\n  <ItemGroup>\n    <Reference Include=\"Abp, Version=1.4.2.0, Culture=neutral, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\packages\\Abp.1.4.2.0\\lib\\net452\\Abp.dll</HintPath>\n      <Private>True</Private>\n    </Reference>\n    <Reference Include=\"Castle.Core, Version=3.3.0.0, Culture=neutral, PublicKeyToken=407dd0808d44fbdc, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\packages\\Castle.Core.3.3.3\\lib\\net45\\Castle.Core.dll</HintPath>\n      <Private>True</Private>\n    </Reference>\n    <Reference Include=\"Castle.Facilities.Logging, Version=3.4.0.0, Culture=neutral, PublicKeyToken=407dd0808d44fbdc, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\packages\\Castle.LoggingFacility.3.4.0\\lib\\net45\\Castle.Facilities.Logging.dll</HintPath>\n      <Private>True</Private>\n    </Reference>\n    <Reference Include=\"Castle.Windsor, Version=3.4.0.0, Culture=neutral, PublicKeyToken=407dd0808d44fbdc, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\packages\\Castle.Windsor.3.4.0\\lib\\net45\\Castle.Windsor.dll</HintPath>\n      <Private>True</Private>\n    </Reference>\n    <Reference Include=\"Microsoft.Threading.Tasks, Version=1.0.12.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\packages\\Microsoft.Bcl.Async.1.0.168\\lib\\net40\\Microsoft.Threading.Tasks.dll</HintPath>\n      <Private>True</Private>\n    </Reference>\n    <Reference Include=\"Microsoft.Threading.Tasks.Extensions, Version=1.0.12.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\packages\\Microsoft.Bcl.Async.1.0.168\\lib\\net40\\Microsoft.Threading.Tasks.Extensions.dll</HintPath>\n      <Private>True</Private>\n    </Reference>\n    <Reference Include=\"Microsoft.Threading.Tasks.Extensions.Desktop, Version=1.0.168.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\packages\\Microsoft.Bcl.Async.1.0.168\\lib\\net40\\Microsoft.Threading.Tasks.Extensions.Desktop.dll</HintPath>\n      <Private>True</Private>\n    </Reference>\n    <Reference Include=\"Newtonsoft.Json, Version=9.0.0.0, Culture=neutral, PublicKeyToken=30ad4fe6b2a6aeed, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\packages\\Newtonsoft.Json.9.0.1\\lib\\net45\\Newtonsoft.Json.dll</HintPath>\n      <Private>True</Private>\n    </Reference>\n    <Reference Include=\"Nito.AsyncEx, Version=4.0.1.0, Culture=neutral, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\packages\\Nito.AsyncEx.4.0.1\\lib\\net45\\Nito.AsyncEx.dll</HintPath>\n      <Private>True</Private>\n    </Reference>\n    <Reference Include=\"Nito.AsyncEx.Concurrent, Version=4.0.1.0, Culture=neutral, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\packages\\Nito.AsyncEx.4.0.1\\lib\\net45\\Nito.AsyncEx.Concurrent.dll</HintPath>\n      <Private>True</Private>\n    </Reference>\n    <Reference Include=\"Nito.AsyncEx.Enlightenment, Version=4.0.1.0, Culture=neutral, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\packages\\Nito.AsyncEx.4.0.1\\lib\\net45\\Nito.AsyncEx.Enlightenment.dll</HintPath>\n      <Private>True</Private>\n    </Reference>\n    <Reference Include=\"RabbitMQ.Client, Version=4.0.0.0, Culture=neutral, PublicKeyToken=89e7d7c5feba84ce, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\packages\\RabbitMQ.Client.4.1.1\\lib\\net451\\RabbitMQ.Client.dll</HintPath>\n      <Private>True</Private>\n    </Reference>\n    <Reference Include=\"Rebus, Version=2.1.6.0, Culture=neutral, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\packages\\Rebus.2.1.6\\lib\\NET45\\Rebus.dll</HintPath>\n      <Private>True</Private>\n    </Reference>\n    <Reference Include=\"Rebus.CastleWindsor, Version=2.0.1.0, Culture=neutral, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\packages\\Rebus.Castle.Windsor.2.0.1\\lib\\NET45\\Rebus.CastleWindsor.dll</HintPath>\n      <Private>True</Private>\n    </Reference>\n    <Reference Include=\"Rebus.RabbitMq, Version=2.0.0.0, Culture=neutral, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\packages\\Rebus.RabbitMq.2.0.0\\lib\\NET452\\Rebus.RabbitMq.dll</HintPath>\n      <Private>True</Private>\n    </Reference>\n    <Reference Include=\"System\" />\n    <Reference Include=\"System.Collections.Immutable, Version=1.2.1.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\packages\\System.Collections.Immutable.1.3.1\\lib\\portable-net45+win8+wp8+wpa81\\System.Collections.Immutable.dll</HintPath>\n      <Private>True</Private>\n    </Reference>\n    <Reference Include=\"System.ComponentModel.DataAnnotations\" />\n    <Reference Include=\"System.Configuration\" />\n    <Reference Include=\"System.Core\" />\n    <Reference Include=\"System.Linq.Dynamic, Version=1.0.6132.35681, Culture=neutral, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\packages\\System.Linq.Dynamic.1.0.7\\lib\\net40\\System.Linq.Dynamic.dll</HintPath>\n      <Private>True</Private>\n    </Reference>\n    <Reference Include=\"System.Net\" />\n    <Reference Include=\"System.Runtime.Caching\" />\n    <Reference Include=\"System.Transactions\" />\n    <Reference Include=\"System.Xml.Linq\" />\n    <Reference Include=\"System.Data.DataSetExtensions\" />\n    <Reference Include=\"Microsoft.CSharp\" />\n    <Reference Include=\"System.Data\" />\n    <Reference Include=\"System.Net.Http\" />\n    <Reference Include=\"System.Xml\" />\n  </ItemGroup>\n  <ItemGroup>\n    <Compile Include=\"Configuration\\Startup\\AbpRebusRabbitMqProducerConfigurationExtensions.cs\" />\n    <Compile Include=\"Events\\Producer\\RebusRabbitMq\\AbpRebusRabbitMqProducerModule.cs\" />\n    <Compile Include=\"Events\\Producer\\RebusRabbitMq\\AbpRebusRabbitMqProducerModuleConfig.cs\" />\n    <Compile Include=\"Events\\Producer\\RebusRabbitMq\\IAbpRebusRabbitMqProducerModuleConfig.cs\" />\n    <Compile Include=\"Events\\Producer\\RebusRabbitMq\\RebusRabbitMqProducer.cs\" />\n    <Compile Include=\"Properties\\AssemblyInfo.cs\" />\n  </ItemGroup>\n  <ItemGroup>\n    <None Include=\"Abplus.RebusRabbitmqProducer.nuspec\" />\n    <None Include=\"app.config\" />\n    <None Include=\"packages.config\" />\n  </ItemGroup>\n  <ItemGroup>\n    <ProjectReference Include=\"..\\Abplus.Events.Producer\\Abplus.Events.Producer.csproj\">\n      <Project>{e9957d88-655d-4411-98c3-c7d6009ba13c}</Project>\n      <Name>Abplus.Events.Producer</Name>\n    </ProjectReference>\n    <ProjectReference Include=\"..\\Abplus\\Abplus.csproj\">\n      <Project>{1de8d8d1-987d-4a9c-aec5-ff0a9914bbd4}</Project>\n      <Name>Abplus</Name>\n    </ProjectReference>\n  </ItemGroup>\n  <Import Project=\"$(MSBuildToolsPath)\\Microsoft.CSharp.targets\" />\n  <Import Project=\"..\\..\\packages\\Microsoft.Bcl.Build.1.0.21\\build\\Microsoft.Bcl.Build.targets\" Condition=\"Exists('..\\..\\packages\\Microsoft.Bcl.Build.1.0.21\\build\\Microsoft.Bcl.Build.targets')\" />\n  <Target Name=\"EnsureNuGetPackageBuildImports\" BeforeTargets=\"PrepareForBuild\">\n    <PropertyGroup>\n      <ErrorText>这台计算机上缺少此项目引用的 NuGet 程序包。使用“NuGet 程序包还原”可下载这些程序包。有关更多信息，请参见 http://go.microsoft.com/fwlink/?LinkID=322105。缺少的文件是 {0}。</ErrorText>\n    </PropertyGroup>\n    <Error Condition=\"!Exists('..\\..\\packages\\Microsoft.Bcl.Build.1.0.21\\build\\Microsoft.Bcl.Build.targets')\" Text=\"$([System.String]::Format('$(ErrorText)', '..\\..\\packages\\Microsoft.Bcl.Build.1.0.21\\build\\Microsoft.Bcl.Build.targets'))\" />\n  </Target>\n  <!-- To modify your build process, add your task inside one of the targets below and uncomment it. \n       Other similar extension points exist, see Microsoft.Common.targets.\n  <Target Name=\"BeforeBuild\">\n  </Target>\n  <Target Name=\"AfterBuild\">\n  </Target>\n  -->\n</Project>"
  },
  {
    "path": "src2/Abplus.RebusRabbitmqProducer/Abplus.RebusRabbitmqProducer.nuspec",
    "content": "<?xml version=\"1.0\"?>\n<package >\n  <metadata>\n    <id>$id$</id>\n    <version>$version$</version>\n    <title>$title$</title>\n    <authors>personball</authors>\n    <owners>personball</owners>\n    <licenseUrl>https://raw.githubusercontent.com/personball/abplus/master/LICENSE</licenseUrl>\n    <projectUrl>https://github.com/personball/abplus</projectUrl>\n    <iconUrl>https://raw.githubusercontent.com/personball/abplus/master/abplus_icon.png</iconUrl>\n    <requireLicenseAcceptance>false</requireLicenseAcceptance>\n    <description>Abp plus, an extension for Abp Framework. </description>\n    <releaseNotes></releaseNotes>\n    <copyright>Copyright 2017</copyright>\n    <tags></tags>\n  </metadata>\n</package>"
  },
  {
    "path": "src2/Abplus.RebusRabbitmqProducer/Configuration/Startup/AbpRebusRabbitMqProducerConfigurationExtensions.cs",
    "content": "﻿using Abp.Events.Producer.RebusRabbitMq;\n\nnamespace Abp.Configuration.Startup\n{\n    public static class AbpRebusRabbitMqProducerConfigurationExtensions\n    {\n        public static IAbpRebusRabbitMqProducerModuleConfig AbpRebusRabbitMqProducer(this IModuleConfigurations configurations)\n        {\n            return configurations.AbpConfiguration.GetOrCreate(\"Modules.Abp.RebusRabbitMqProducer\", () => configurations.AbpConfiguration.IocManager.Resolve<IAbpRebusRabbitMqProducerModuleConfig>());\n        }\n    }\n}\n"
  },
  {
    "path": "src2/Abplus.RebusRabbitmqProducer/Events/Producer/RebusRabbitMq/AbpRebusRabbitMqProducerModule.cs",
    "content": "﻿using System.Reflection;\nusing Abp.Modules;\nusing Rebus.Bus;\nusing Rebus.CastleWindsor;\nusing Rebus.Config;\nusing Rebus.RabbitMq;\nusing Rebus.Auditing.Messages;\n\nnamespace Abp.Events.Producer.RebusRabbitMq\n{\n    [DependsOn(typeof(AbpEventsProducerModule))]\n    public class AbpRebusRabbitMqProducerModule : AbpModule\n    {\n        private IBus _bus;\n        public override void PreInitialize()\n        {\n            IocManager.Register<IAbpRebusRabbitMqProducerModuleConfig, AbpRebusRabbitMqProducerModuleConfig>();\n            IocManager.Register<IProducer, RebusRabbitMqProducer>();\n        }\n\n        public override void Initialize()\n        {\n            IocManager.RegisterAssemblyByConvention(Assembly.GetExecutingAssembly());\n        }\n\n        public override void PostInitialize()\n        {\n            var config = IocManager.Resolve<IAbpRebusRabbitMqProducerModuleConfig>();\n            if (config.Enabled)\n            {\n                var container = IocManager.IocContainer;\n                var adapter = new CastleWindsorContainerAdapter(container);\n\n                var rebusConfig = Configure.With(adapter);\n                if (config.MessageAuditingEnabled)\n                {\n                    rebusConfig.Options(o => o.EnableMessageAuditing(config.MessageAuditingQueueName));\n                }\n\n                rebusConfig.Logging(config.RebusLoggingConfig);\n\n                _bus = rebusConfig.Transport(t => t.UseRabbitMqAsOneWayClient(config.ConnectionString))\n                    .Start();\n            }\n        }\n        public override void Shutdown()\n        {\n            if (_bus != null)\n            {\n                _bus.Dispose();\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "src2/Abplus.RebusRabbitmqProducer/Events/Producer/RebusRabbitMq/AbpRebusRabbitMqProducerModuleConfig.cs",
    "content": "﻿using System;\nusing Rebus.Config;\n\nnamespace Abp.Events.Producer.RebusRabbitMq\n{\n    internal class AbpRebusRabbitMqProducerModuleConfig : IAbpRebusRabbitMqProducerModuleConfig\n    {\n        public string ConnectionString { get; private set; }\n\n        public bool Enabled { get; private set; }\n\n        public bool MessageAuditingEnabled { get; private set; }\n        public string MessageAuditingQueueName { get; private set; }\n\n        public Action<RebusLoggingConfigurer> RebusLoggingConfig { get; private set; }\n\n        public IAbpRebusRabbitMqProducerModuleConfig EnableMessageAuditing()\n        {\n            MessageAuditingEnabled = true;\n            return this;\n        }\n\n        public IAbpRebusRabbitMqProducerModuleConfig SetMessageAuditingQueueName(string queueName)\n        {\n            MessageAuditingQueueName = queueName;\n            return this;\n        }\n\n        public IAbpRebusRabbitMqProducerModuleConfig SetRebusLoggingConfigurer(Action<RebusLoggingConfigurer> loggingConfigurer)\n        {\n            RebusLoggingConfig = loggingConfigurer;\n            return this;\n        }\n\n        public IAbpRebusRabbitMqProducerModuleConfig Enable()\n        {\n            Enabled = true;\n            return this;\n        }\n\n        public IAbpRebusRabbitMqProducerModuleConfig Connect(string connectionString)\n        {\n            ConnectionString = connectionString;\n            return this;\n        }\n    }\n}\n"
  },
  {
    "path": "src2/Abplus.RebusRabbitmqProducer/Events/Producer/RebusRabbitMq/IAbpRebusRabbitMqProducerModuleConfig.cs",
    "content": "﻿using System;\nusing Rebus.Config;\n\nnamespace Abp.Events.Producer.RebusRabbitMq\n{\n    public interface IAbpRebusRabbitMqProducerModuleConfig\n    {\n        string ConnectionString { get; }\n        bool Enabled { get; }\n        bool MessageAuditingEnabled { get; }\n        string MessageAuditingQueueName { get; }\n        Action<RebusLoggingConfigurer> RebusLoggingConfig { get; }\n        IAbpRebusRabbitMqProducerModuleConfig EnableMessageAuditing();\n        IAbpRebusRabbitMqProducerModuleConfig SetMessageAuditingQueueName(string queueName);\n\n        IAbpRebusRabbitMqProducerModuleConfig SetRebusLoggingConfigurer(Action<RebusLoggingConfigurer> loggingConfigurer);\n        IAbpRebusRabbitMqProducerModuleConfig Enable();\n        IAbpRebusRabbitMqProducerModuleConfig Connect(string connectionString);\n    }\n}\n"
  },
  {
    "path": "src2/Abplus.RebusRabbitmqProducer/Events/Producer/RebusRabbitMq/RebusRabbitMqProducer.cs",
    "content": "﻿using Rebus.Bus;\n\nnamespace Abp.Events.Producer.RebusRabbitMq\n{\n    public class RebusRabbitMqProducer : IProducer\n    {\n        private IBus _bus;\n        private IAbpRebusRabbitMqProducerModuleConfig _config;\n\n        public RebusRabbitMqProducer(IBus bus, IAbpRebusRabbitMqProducerModuleConfig config)\n        {\n            _bus = bus;\n            _config = config;\n        }\n\n        public void Publish(object events)\n        {\n            if (_config.Enabled)\n            {\n                _bus.Publish(events);\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "src2/Abplus.RebusRabbitmqProducer/Properties/AssemblyInfo.cs",
    "content": "﻿using System.Reflection;\nusing System.Runtime.CompilerServices;\nusing System.Runtime.InteropServices;\nusing Abp;\n\n// 有关程序集的一般信息由以下\n// 控制。更改这些特性值可修改\n// 与程序集关联的信息。\n[assembly: AssemblyTitle(\"Abplus.RebusRabbitmqProducer\")]\n[assembly: AssemblyDescription(\"\")]\n[assembly: AssemblyConfiguration(\"\")]\n[assembly: AssemblyCompany(\"\")]\n[assembly: AssemblyProduct(\"Abplus.RebusRabbitmqProducer\")]\n[assembly: AssemblyCopyright(\"Copyright ©  2016\")]\n[assembly: AssemblyTrademark(\"\")]\n[assembly: AssemblyCulture(\"\")]\n\n//将 ComVisible 设置为 false 将使此程序集中的类型\n//对 COM 组件不可见。  如果需要从 COM 访问此程序集中的类型，\n//请将此类型的 ComVisible 特性设置为 true。\n[assembly: ComVisible(false)]\n\n// 如果此项目向 COM 公开，则下列 GUID 用于类型库的 ID\n[assembly: Guid(\"17dc37e5-6756-4462-af34-674738762f0b\")]\n\n// 程序集的版本信息由下列四个值组成: \n//\n//      主版本\n//      次版本\n//      生成号\n//      修订号\n//\n//可以指定所有这些值，也可以使用“生成号”和“修订号”的默认值，\n// 方法是按如下所示使用“*”: :\n// [assembly: AssemblyVersion(\"1.0.*\")]\n[assembly: AssemblyVersion(AbplusConsts.CurrentVersion)]\n[assembly: AssemblyFileVersion(AbplusConsts.CurrentVersion)]\n"
  },
  {
    "path": "src2/Abplus.RebusRabbitmqProducer/app.config",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<configuration>\n  <runtime>\n    <assemblyBinding xmlns=\"urn:schemas-microsoft-com:asm.v1\">\n      <dependentAssembly>\n        <assemblyIdentity name=\"Castle.Windsor\" publicKeyToken=\"407dd0808d44fbdc\" culture=\"neutral\" />\n        <bindingRedirect oldVersion=\"0.0.0.0-3.4.0.0\" newVersion=\"3.4.0.0\" />\n      </dependentAssembly>\n    </assemblyBinding>\n  </runtime>\n</configuration>"
  },
  {
    "path": "src2/Abplus.RebusRabbitmqProducer/packages.config",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<packages>\n  <package id=\"Abp\" version=\"1.4.2.0\" targetFramework=\"net461\" />\n  <package id=\"Castle.Core\" version=\"3.3.3\" targetFramework=\"net461\" />\n  <package id=\"Castle.LoggingFacility\" version=\"3.4.0\" targetFramework=\"net461\" />\n  <package id=\"Castle.Windsor\" version=\"3.4.0\" targetFramework=\"net461\" />\n  <package id=\"Microsoft.Bcl\" version=\"1.1.10\" targetFramework=\"net461\" />\n  <package id=\"Microsoft.Bcl.Async\" version=\"1.0.168\" targetFramework=\"net461\" />\n  <package id=\"Microsoft.Bcl.Build\" version=\"1.0.21\" targetFramework=\"net461\" />\n  <package id=\"Newtonsoft.Json\" version=\"9.0.1\" targetFramework=\"net461\" />\n  <package id=\"Nito.AsyncEx\" version=\"4.0.1\" targetFramework=\"net461\" />\n  <package id=\"RabbitMQ.Client\" version=\"4.1.1\" targetFramework=\"net461\" />\n  <package id=\"Rebus\" version=\"2.1.6\" targetFramework=\"net461\" />\n  <package id=\"Rebus.Castle.Windsor\" version=\"2.0.1\" targetFramework=\"net461\" />\n  <package id=\"Rebus.RabbitMq\" version=\"2.0.0\" targetFramework=\"net461\" />\n  <package id=\"System.Collections.Immutable\" version=\"1.3.1\" targetFramework=\"net461\" />\n  <package id=\"System.Linq.Dynamic\" version=\"1.0.7\" targetFramework=\"net461\" />\n</packages>"
  },
  {
    "path": "src2/Abplus.T4.PermissionsFromJson/Abplus.T4.PermissionsFromJson.csproj",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<Project ToolsVersion=\"14.0\" DefaultTargets=\"Build\" xmlns=\"http://schemas.microsoft.com/developer/msbuild/2003\">\n  <Import Project=\"$(MSBuildExtensionsPath)\\$(MSBuildToolsVersion)\\Microsoft.Common.props\" Condition=\"Exists('$(MSBuildExtensionsPath)\\$(MSBuildToolsVersion)\\Microsoft.Common.props')\" />\n  <PropertyGroup>\n    <Configuration Condition=\" '$(Configuration)' == '' \">Debug</Configuration>\n    <Platform Condition=\" '$(Platform)' == '' \">AnyCPU</Platform>\n    <ProjectGuid>{84127C3A-3C37-4BB1-BCCD-AB62C3E2FE3E}</ProjectGuid>\n    <OutputType>Library</OutputType>\n    <AppDesignerFolder>Properties</AppDesignerFolder>\n    <RootNamespace>Abplus.T4.PermissionsFromJson</RootNamespace>\n    <AssemblyName>Abplus.T4.PermissionsFromJson</AssemblyName>\n    <TargetFrameworkVersion>v4.6.1</TargetFrameworkVersion>\n    <FileAlignment>512</FileAlignment>\n  </PropertyGroup>\n  <PropertyGroup Condition=\" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' \">\n    <DebugSymbols>true</DebugSymbols>\n    <DebugType>full</DebugType>\n    <Optimize>false</Optimize>\n    <OutputPath>bin\\Debug\\</OutputPath>\n    <DefineConstants>DEBUG;TRACE</DefineConstants>\n    <ErrorReport>prompt</ErrorReport>\n    <WarningLevel>4</WarningLevel>\n  </PropertyGroup>\n  <PropertyGroup Condition=\" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' \">\n    <DebugType>pdbonly</DebugType>\n    <Optimize>true</Optimize>\n    <OutputPath>bin\\Release\\</OutputPath>\n    <DefineConstants>TRACE</DefineConstants>\n    <ErrorReport>prompt</ErrorReport>\n    <WarningLevel>4</WarningLevel>\n  </PropertyGroup>\n  <ItemGroup>\n    <Reference Include=\"System\" />\n    <Reference Include=\"System.Core\" />\n    <Reference Include=\"Microsoft.CSharp\" />\n  </ItemGroup>\n  <ItemGroup>\n    <Content Include=\"Authorization\\Builders\\BuilderUtils.cs\" />\n    <Content Include=\"Authorization\\Builders\\Permissions\\Sample.json\" />\n    <Content Include=\"Authorization\\Builders\\T4MultipleOutputManager.ttinclude\" />\n    <Compile Include=\"Authorization\\Builders\\PermissionBuilder.cs\">\n      <AutoGen>True</AutoGen>\n      <DesignTime>True</DesignTime>\n      <DependentUpon>PermissionBuilder.tt</DependentUpon>\n    </Compile>\n    <Compile Include=\"Properties\\AssemblyInfo.cs\" />\n  </ItemGroup>\n  <ItemGroup>\n    <None Include=\"Abplus.T4.PermissionsFromJson.nuspec\" />\n  </ItemGroup>\n  <ItemGroup>\n    <Content Include=\"Authorization\\Builders\\PermissionBuilder.tt\">\n      <Generator>TextTemplatingFileGenerator</Generator>\n      <LastGenOutput>PermissionBuilder.cs</LastGenOutput>\n    </Content>\n  </ItemGroup>\n  <Import Project=\"$(MSBuildToolsPath)\\Microsoft.CSharp.targets\" />\n  <!-- To modify your build process, add your task inside one of the targets below and uncomment it. \n       Other similar extension points exist, see Microsoft.Common.targets.\n  <Target Name=\"BeforeBuild\">\n  </Target>\n  <Target Name=\"AfterBuild\">\n  </Target>\n  -->\n</Project>"
  },
  {
    "path": "src2/Abplus.T4.PermissionsFromJson/Abplus.T4.PermissionsFromJson.nuspec",
    "content": "<?xml version=\"1.0\"?>\n<package >\n  <metadata>\n    <id>$id$</id>\n    <version>$version$</version>\n    <title>$title$</title>\n    <authors>personball</authors>\n    <owners>personball</owners>\n    <licenseUrl>https://raw.githubusercontent.com/personball/abplus/master/LICENSE</licenseUrl>\n    <projectUrl>https://github.com/personball/abplus</projectUrl>\n    <iconUrl>https://raw.githubusercontent.com/personball/abplus/master/abplus_icon.png</iconUrl>\n    <requireLicenseAcceptance>false</requireLicenseAcceptance>\n    <description>Abp plus, an extension for Abp Framework. </description>\n    <releaseNotes></releaseNotes>\n    <copyright>Copyright 2017</copyright>\n    <tags></tags>\n    <contentFiles>\n      <files include=\"Authorization\\Builders\\Permissions\\Sample.json\" buildAction=\"EmbeddedResource\" />\n      <files include=\"Authorization\\Builders\\BuilderUtils.cs\" />\n      <files include=\"Authorization\\Builders\\PermissionBuilder.tt\" />\n      <files include=\"Authorization\\Builders\\T4MultipleOutputManager.ttinclude\" />\n    </contentFiles>\n    </metadata>\n</package>"
  },
  {
    "path": "src2/Abplus.T4.PermissionsFromJson/Authorization/Builders/BuilderUtils.cs",
    "content": "﻿using System.Collections.Generic;\nusing System.Globalization;\nusing System.IO;\nusing System.Linq;\nusing System.Linq.Dynamic;\nusing System.Reflection;\nusing Abp.Authorization;\nusing Abp.Localization;\nusing Abp.MultiTenancy;\nusing Newtonsoft.Json;\n\nnamespace 【YourCompany.YourProject】.Authorization\n{\n    public static class BuilderUtils\n    {\n        public static void Build(IPermissionDefinitionContext context, string name)\n        {\n            var asm = Assembly.GetExecutingAssembly();//读取嵌入式资源\n            var sm = asm.GetManifestResourceStream(\"【YourCompany.YourProject】.Authorization.Builders.Permissions.\" + name + \".json\");\n            var list = GetPermissionJson(sm);\n            foreach (var item in list)\n            {\n                var module = context.CreatePermission(\n                    item.Name, \n                    new FixedLocalizableString(item.DisplayName), \n                    multiTenancySides: item.GetMultiTenancySides());\n\n                var children = item.GetChildren();\n                BuildChildrenPermission(children, module, item.Name);\n            }\n        }\n\n        //供t4调用\n        public static Dictionary<string, List<PermissionConst>> GeneratePermission()\n        {\n            var dic = new Dictionary<string, List<PermissionConst>>();\n            var asm = Assembly.GetExecutingAssembly();//读取嵌入式资源\n            var jsons =\n                asm.GetManifestResourceNames()\n                    .Where(c => c.StartsWith(\"【YourCompany.YourProject】.Authorization.Builders.Permissions\") && c.EndsWith(\".json\"));\n            foreach (var item in jsons)\n            {\n                var name =\n                    item.Replace(\"【YourCompany.YourProject】.Authorization.Builders.Permissions.\", \"\")\n                        .Replace(\".json\", \"\");\n                var sm = asm.GetManifestResourceStream(item);\n                var list = BuildPermissionConst(GetPermissionJson(sm));\n                dic.Add(name, list);\n            }\n            return dic;\n        }\n\n        private static List<PermissionJson> GetPermissionJson(Stream sm)\n        {\n            using (var reader = new StreamReader(sm))\n            {\n                string text = reader.ReadToEnd();\n                var json = JsonConvert.DeserializeObject<List<PermissionJson>>(text).OrderBy(c => c.Order).ToList();\n                return json;\n            }\n        }\n\n        private static void BuildChildrenPermission(List<PermissionJson> children, Permission module, string parentName)\n        {\n            foreach (var item in children)\n            {\n                var name = $\"{parentName}.{item.Name}\";\n                var itemModule = module.CreateChildPermission(name,\n                    new FixedLocalizableString(item.DisplayName),\n                    multiTenancySides: item.GetMultiTenancySides());\n                var itemchildren = item.GetChildren();\n                if (itemchildren.Any())\n                {\n                    BuildChildrenPermission(itemchildren, itemModule, name);\n                }\n            }\n        }\n\n        private static List<PermissionConst> BuildPermissionConst(List<PermissionJson> permissionJsons, string name = null, string value = null, string summary = null, List<PermissionConst> permissionConsts = null)\n        {\n            permissionConsts = permissionConsts ?? new List<PermissionConst>();\n            foreach (var item in permissionJsons)\n            {\n                var permissionConst = new PermissionConst\n                {\n                    Summary = $\"{summary}_{item.DisplayName}\".Trim('_'),\n                    Name = $\"{name}_{item.Name}\".Trim('_').Replace('.', '_'),\n                    Value = $\"{value}.{item.Name}\".Trim('.').Replace('_', '.')\n                };\n                permissionConsts.Add(permissionConst);\n                var children = item.GetChildren();\n                if (children.Any())\n                {\n                    BuildPermissionConst(children, permissionConst.Name, permissionConst.Value, permissionConst.Summary,\n                        permissionConsts);\n                }\n            }\n            return permissionConsts;\n        }\n    }\n\n    public class PermissionJson\n    {\n        public PermissionJson()\n        {\n            Order = 100;\n        }\n\n        public string Name { get; set; }\n        public string DisplayName { get; set; }\n        public string Description { get; set; }\n        [JsonProperty(PropertyName = \"multiTenancySides\")]\n        public MultiTenancySides? MultiTenancySide { private get; set; }\n        public bool DefaultPermission { private get; set; }\n        public List<PermissionJson> Children { private get; set; }\n        public int Order { get; set; }\n        public List<int> DisableOrder { get; set; }\n\n        public List<PermissionJson> GetChildren()\n        {\n            Children = Children ?? new List<PermissionJson>();\n            DisableOrder = DisableOrder ?? new List<int>();\n            if (DefaultPermission)\n            {\n                Children.Add(new PermissionJson\n                {\n                    Name = \"Create\",\n                    DisplayName = \"新增\",\n                    Order = 10,\n                    DefaultPermission = false\n                });\n                Children.Add(new PermissionJson\n                {\n                    Name = \"Edit\",\n                    DisplayName = \"编辑\",\n                    Order = 20,\n                    DefaultPermission = false\n                });\n                Children.Add(new PermissionJson\n                {\n                    Name = \"Delete\",\n                    DisplayName = \"删除\",\n                    Order = 30,\n                    DefaultPermission = false\n                });\n            }\n            if (MultiTenancySide.HasValue)\n            {\n                Children.ForEach(c =>\n                {\n                    c.MultiTenancySide = MultiTenancySide.Value;\n                });\n            }\n            return Children.OrderBy(c => c.Order).Where(c => !DisableOrder.Contains(c.Order)).ToList();\n        }\n\n        public MultiTenancySides GetMultiTenancySides()\n        {\n            if (MultiTenancySide.HasValue)\n            {\n                return MultiTenancySide.Value;\n            }\n            return MultiTenancySides.Tenant | MultiTenancySides.Host;\n        }\n    }\n\n    public class PermissionConst\n    {\n        public string Summary { get; set; }\n        public string Name { get; set; }\n        public string Value { get; set; }\n    }\n}"
  },
  {
    "path": "src2/Abplus.T4.PermissionsFromJson/Authorization/Builders/PermissionBuilder.cs",
    "content": ""
  },
  {
    "path": "src2/Abplus.T4.PermissionsFromJson/Authorization/Builders/PermissionBuilder.tt",
    "content": "﻿<#@ template debug=\"false\" hostspecific=\"true\" language=\"C#\" #>\n\n<#@ include file=\"T4MultipleOutputManager.ttinclude\" #>\n\n<#@ assembly name=\"System.Core\" #>\n<#@ assembly name=\"System.IO\" #>\n<#@ assembly name=\"$(SolutionDir)packages\\Newtonsoft.Json.9.0.1\\lib\\net45\\Newtonsoft.Json.dll\" #>\n<#@ assembly name=\"$(ProjectDir)bin\\$(ConfigurationName)\\【YourCompany.YourProject】.Core.dll\" #>\n<#@ import namespace=\"System.Linq\" #>\n<#@ import namespace=\"System.Text\" #>\n<#@ import namespace=\"System.Collections.Generic\" #>\n<#@ import namespace=\"Newtonsoft.Json\" #>\n<#@ import namespace=\"Newtonsoft.Json.Linq\" #>\n<#@ import namespace=\"System.Globalization\" #>\n<#@ import namespace=\"【YourCompany.YourProject】.Authorization\" #>\n\n<#@ output extension=\".cs\" #>\n\n\n<#\n\t\t\t\tvar tempateManager = Manager.Create(Host,GenerationEnvironment);\n\t\t\t\tstring solutionsPath = Host.ResolveAssemblyReference(\"$(SolutionDir)\");  \n\t\t\t\tstring projectPath = Host.ResolveAssemblyReference(\"$(ProjectDir)\");\n                \n\t\t\t\tvar dic = BuilderUtils.GeneratePermission();\n\t\t\t\t\n\t\t\t\tforeach(var item in dic)\n\t\t\t\t{\t\n\t\t\t\t\t var list= item.Value;\n\t\t\t\t\t tempateManager.StartNewFile(item.Key+\"Permissions.cs\");\n\t\t\t\t\n\t\t\t\t#>\nnamespace 【YourCompany.YourProject】.Authorization\n{\n    /// <summary>\n    /// Permissions definition\n    /// </summary>\n    public static class <#=item.Key #>Permissions\n    {\n<# \n\t\t\t\t\t\t\t\tforeach(var item1 in list){\n#>\n\t\t/// <summary>\n\t\t/// <#=item1.Summary #>\n\t\t/// </summary>\n\t\tpublic const string <#=item1.Name #> = \"<#=item1.Value #>\";\n\n<# \n\t}\n#>\n}\n}\n<#\n}\n\ttempateManager.EndBlock();\n\ttempateManager.Process(true); \n#>\n\n\n"
  },
  {
    "path": "src2/Abplus.T4.PermissionsFromJson/Authorization/Builders/Permissions/Sample.json",
    "content": "﻿[\n  {\n    \"name\": \"User\",\n    \"displayName\": \"用户中心\",\n    \"children\": [\n      {\n        \"name\": \"UserInfo\",\n        \"displayName\": \"用户管理\",\n        \"defaultPermission\": false\n      },\n      {\n        \"name\": \"UserIdCard\",\n        \"displayName\": \"身份信息管理\",\n        \"defaultPermission\": false,\n        \"children\": [\n          {\n            \"name\": \"Reviewed\",\n            \"displayName\": \"审核/编辑\"\n          }\n        ]\n      }\n    ]\n  }\n]\n"
  },
  {
    "path": "src2/Abplus.T4.PermissionsFromJson/Authorization/Builders/T4MultipleOutputManager.ttinclude",
    "content": "<#@ assembly name=\"System.Core\"\n#><#@ assembly name=\"System.Data.Linq\"\n#><#@ assembly name=\"EnvDTE\"\n#><#@ assembly name=\"System.Xml\"\n#><#@ assembly name=\"System.Xml.Linq\"\n#><#@ import namespace=\"System.Collections.Generic\"\n#><#@ import namespace=\"System.IO\"\n#><#@ import namespace=\"System.Text\"\n#><#@ import namespace=\"Microsoft.VisualStudio.TextTemplating\"\n#><#+\n// https://raw.github.com/damieng/DamienGKit\n// http://damieng.com/blog/2009/11/06/multiple-outputs-from-t4-made-easy-revisited\n\n// Manager class records the various blocks so it can split them up\nclass Manager {\n    private class Block {\n        public String Name;\n        public int Start, Length;\n        public bool IncludeInDefault;\n    }\n\n    private Block currentBlock;\n    private readonly List<Block> files = new List<Block>();\n    private readonly Block footer = new Block();\n    private readonly Block header = new Block();\n    private readonly ITextTemplatingEngineHost host;\n    private readonly StringBuilder template;\n    protected readonly List<String> generatedFileNames = new List<String>();\n\n    public static Manager Create(ITextTemplatingEngineHost host, StringBuilder template) {\n        return (host is IServiceProvider) ? new VSManager(host, template) : new Manager(host, template);\n    }\n\n    public void StartNewFile(String name) {\n        if (name == null)\n            throw new ArgumentNullException(\"name\");\n        CurrentBlock = new Block { Name = name };\n    }\n\n    public void StartFooter(bool includeInDefault=true) {\n        CurrentBlock = footer;\n        footer.IncludeInDefault = includeInDefault;\n    }\n\n    public void StartHeader(bool includeInDefault=true) {\n        CurrentBlock = header;\n        header.IncludeInDefault = includeInDefault;\n    }\n\n    public void EndBlock() {\n        if (CurrentBlock == null)\n            return;\n        CurrentBlock.Length = template.Length - CurrentBlock.Start;\n        if (CurrentBlock != header && CurrentBlock != footer)\n            files.Add(CurrentBlock);\n        currentBlock = null;\n    }\n\n    public virtual void Process(bool split, bool sync =true) {\n        if (split) {\n            EndBlock();\n            String headerText = template.ToString(header.Start, header.Length);\n            String footerText = template.ToString(footer.Start, footer.Length);\n            String outputPath = Path.GetDirectoryName(host.TemplateFile);\n            files.Reverse();\n            if (!footer.IncludeInDefault)\n                template.Remove(footer.Start, footer.Length);\n            foreach(Block block in files) {\n                String fileName = Path.Combine(outputPath, block.Name);\n                String content = headerText + template.ToString(block.Start, block.Length) + footerText;\n                generatedFileNames.Add(fileName);\n                CreateFile(fileName, content);\n                template.Remove(block.Start, block.Length);\n            }\n            if (!header.IncludeInDefault)\n                template.Remove(header.Start, header.Length);\n        }\n    }\n\n    protected virtual void CreateFile(String fileName, String content) {\n        if (IsFileContentDifferent(fileName, content))\n            File.WriteAllText(fileName, content);\n    }\n\n    public virtual String GetCustomToolNamespace(String fileName) {\n        return null;\n    }\n\n    public virtual String DefaultProjectNamespace {\n        get { return null; }\n    }\n\n    protected bool IsFileContentDifferent(String fileName, String newContent) {\n        return !(File.Exists(fileName) && File.ReadAllText(fileName) == newContent);\n    }\n\n    private Manager(ITextTemplatingEngineHost host, StringBuilder template) {\n        this.host = host;\n        this.template = template;\n    }\n\n    private Block CurrentBlock {\n        get { return currentBlock; }\n        set {\n            if (CurrentBlock != null)\n                EndBlock();\n            if (value != null)\n                value.Start = template.Length;\n            currentBlock = value;\n        }\n    }\n\n    private class VSManager: Manager {\n        private readonly EnvDTE.ProjectItem templateProjectItem;\n        private readonly EnvDTE.DTE dte;\n        private readonly Action<String> checkOutAction;\n        private readonly Action<List<String>> projectSyncAction;\n\n        public override String DefaultProjectNamespace {\n            get {\n                return templateProjectItem.ContainingProject.Properties.Item(\"DefaultNamespace\").Value.ToString();\n            }\n        }\n\n        public override String GetCustomToolNamespace(string fileName) {\n            return dte.Solution.FindProjectItem(fileName).Properties.Item(\"CustomToolNamespace\").Value.ToString();\n        }\n\n        public override void Process(bool split, bool sync) {\n            if (templateProjectItem.ProjectItems == null)\n                return;\n            base.Process(split, sync);\n            if (sync)\n                projectSyncAction.EndInvoke(projectSyncAction.BeginInvoke(generatedFileNames, null, null));\n        }\n\n        protected override void CreateFile(String fileName, String content) {\n            if (IsFileContentDifferent(fileName, content)) {\n                CheckoutFileIfRequired(fileName);\n                File.WriteAllText(fileName, content);\n            }\n        }\n\n        internal VSManager(ITextTemplatingEngineHost host, StringBuilder template)\n            : base(host, template) {\n            var hostServiceProvider = (IServiceProvider)host;\n            if (hostServiceProvider == null)\n                throw new ArgumentNullException(\"Could not obtain IServiceProvider\");\n            dte = (EnvDTE.DTE) hostServiceProvider.GetService(typeof(EnvDTE.DTE));\n            if (dte == null)\n                throw new ArgumentNullException(\"Could not obtain DTE from host\");\n            templateProjectItem = dte.Solution.FindProjectItem(host.TemplateFile);\n            checkOutAction = fileName => dte.SourceControl.CheckOutItem(fileName);\n            projectSyncAction = keepFileNames => ProjectSync(templateProjectItem, keepFileNames);\n        }\n\n        private static void ProjectSync(EnvDTE.ProjectItem templateProjectItem, List<String> keepFileNames) {\n            var keepFileNameSet = new HashSet<String>(keepFileNames);\n            var projectFiles = new Dictionary<String, EnvDTE.ProjectItem>();\n            var originalFilePrefix = Path.GetFileNameWithoutExtension(templateProjectItem.FileNames[0]) + \".\";\n            foreach (EnvDTE.ProjectItem projectItem in templateProjectItem.ProjectItems)\n                projectFiles.Add(projectItem.FileNames[0], projectItem);\n\n            // Remove unused items from the project\n            foreach (var pair in projectFiles)\n                if (!keepFileNames.Contains(pair.Key) && !(Path.GetFileNameWithoutExtension(pair.Key) + \".\").StartsWith(originalFilePrefix))\n                    pair.Value.Delete();\n\n            // Add missing files to the project\n            foreach(String fileName in keepFileNameSet)\n                if (!projectFiles.ContainsKey(fileName))\n                    templateProjectItem.ProjectItems.AddFromFile(fileName);\n        }\n\n        private void CheckoutFileIfRequired(String fileName) {\n            var sc = dte.SourceControl;\n            if (sc != null && sc.IsItemUnderSCC(fileName) && !sc.IsItemCheckedOut(fileName))\n                checkOutAction.EndInvoke(checkOutAction.BeginInvoke(fileName, null, null));\n        }\n    }\n} #>"
  },
  {
    "path": "src2/Abplus.T4.PermissionsFromJson/Properties/AssemblyInfo.cs",
    "content": "﻿using System.Reflection;\nusing System.Runtime.CompilerServices;\nusing System.Runtime.InteropServices;\n\n// 有关程序集的一般信息由以下\n// 控制。更改这些特性值可修改\n// 与程序集关联的信息。\n[assembly: AssemblyTitle(\"Abplus.T4.PermissionsFromJson\")]\n[assembly: AssemblyDescription(\"\")]\n[assembly: AssemblyConfiguration(\"\")]\n[assembly: AssemblyCompany(\"\")]\n[assembly: AssemblyProduct(\"Abplus.T4.PermissionsFromJson\")]\n[assembly: AssemblyCopyright(\"Copyright ©  2017\")]\n[assembly: AssemblyTrademark(\"\")]\n[assembly: AssemblyCulture(\"\")]\n\n//将 ComVisible 设置为 false 将使此程序集中的类型\n//对 COM 组件不可见。  如果需要从 COM 访问此程序集中的类型，\n//请将此类型的 ComVisible 特性设置为 true。\n[assembly: ComVisible(false)]\n\n// 如果此项目向 COM 公开，则下列 GUID 用于类型库的 ID\n[assembly: Guid(\"84127c3a-3c37-4bb1-bccd-ab62c3e2fe3e\")]\n\n// 程序集的版本信息由下列四个值组成: \n//\n//      主版本\n//      次版本\n//      生成号\n//      修订号\n//\n//可以指定所有这些值，也可以使用“生成号”和“修订号”的默认值，\n// 方法是按如下所示使用“*”: :\n// [assembly: AssemblyVersion(\"1.0.*\")]\n[assembly: AssemblyVersion(\"1.0.0.1\")]\n[assembly: AssemblyFileVersion(\"1.0.0.1\")]\n"
  },
  {
    "path": "src2/Abplus.Web.Api/Abplus.Web.Api.csproj",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<Project ToolsVersion=\"14.0\" DefaultTargets=\"Build\" xmlns=\"http://schemas.microsoft.com/developer/msbuild/2003\">\n  <Import Project=\"$(MSBuildExtensionsPath)\\$(MSBuildToolsVersion)\\Microsoft.Common.props\" Condition=\"Exists('$(MSBuildExtensionsPath)\\$(MSBuildToolsVersion)\\Microsoft.Common.props')\" />\n  <PropertyGroup>\n    <Configuration Condition=\" '$(Configuration)' == '' \">Debug</Configuration>\n    <Platform Condition=\" '$(Platform)' == '' \">AnyCPU</Platform>\n    <ProjectGuid>{84D80055-6A95-4DE3-B1E7-68B88838F2BE}</ProjectGuid>\n    <OutputType>Library</OutputType>\n    <AppDesignerFolder>Properties</AppDesignerFolder>\n    <RootNamespace>Abp</RootNamespace>\n    <AssemblyName>Abplus.Web.Api</AssemblyName>\n    <TargetFrameworkVersion>v4.6.1</TargetFrameworkVersion>\n    <FileAlignment>512</FileAlignment>\n    <NuGetPackageImportStamp>\n    </NuGetPackageImportStamp>\n  </PropertyGroup>\n  <PropertyGroup Condition=\" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' \">\n    <DebugSymbols>true</DebugSymbols>\n    <DebugType>full</DebugType>\n    <Optimize>false</Optimize>\n    <OutputPath>bin\\Debug\\</OutputPath>\n    <DefineConstants>DEBUG;TRACE</DefineConstants>\n    <ErrorReport>prompt</ErrorReport>\n    <WarningLevel>4</WarningLevel>\n  </PropertyGroup>\n  <PropertyGroup Condition=\" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' \">\n    <DebugType>pdbonly</DebugType>\n    <Optimize>true</Optimize>\n    <OutputPath>bin\\Release\\</OutputPath>\n    <DefineConstants>TRACE</DefineConstants>\n    <ErrorReport>prompt</ErrorReport>\n    <WarningLevel>4</WarningLevel>\n    <DocumentationFile>bin\\Release\\Abplus.Web.Api.XML</DocumentationFile>\n  </PropertyGroup>\n  <ItemGroup>\n    <Reference Include=\"Abp, Version=3.7.2.0, Culture=neutral, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\packages\\Abp.3.7.2\\lib\\netstandard2.0\\Abp.dll</HintPath>\n    </Reference>\n    <Reference Include=\"Castle.Core, Version=4.0.0.0, Culture=neutral, PublicKeyToken=407dd0808d44fbdc, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\packages\\Castle.Core.4.3.1\\lib\\net45\\Castle.Core.dll</HintPath>\n    </Reference>\n    <Reference Include=\"Castle.Facilities.Logging, Version=4.0.0.0, Culture=neutral, PublicKeyToken=407dd0808d44fbdc, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\packages\\Castle.LoggingFacility.4.1.0\\lib\\net45\\Castle.Facilities.Logging.dll</HintPath>\n    </Reference>\n    <Reference Include=\"Castle.Windsor, Version=4.0.0.0, Culture=neutral, PublicKeyToken=407dd0808d44fbdc, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\packages\\Castle.Windsor.4.1.0\\lib\\net45\\Castle.Windsor.dll</HintPath>\n    </Reference>\n    <Reference Include=\"JetBrains.Annotations, Version=11.1.0.0, Culture=neutral, PublicKeyToken=1010a0d8d6380325, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\packages\\JetBrains.Annotations.11.1.0\\lib\\net20\\JetBrains.Annotations.dll</HintPath>\n    </Reference>\n    <Reference Include=\"Microsoft.Extensions.Caching.Abstractions, Version=2.1.0.0, Culture=neutral, PublicKeyToken=adb9793829ddae60, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\packages\\Microsoft.Extensions.Caching.Abstractions.2.1.0\\lib\\netstandard2.0\\Microsoft.Extensions.Caching.Abstractions.dll</HintPath>\n    </Reference>\n    <Reference Include=\"Microsoft.Extensions.Caching.Memory, Version=2.1.0.0, Culture=neutral, PublicKeyToken=adb9793829ddae60, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\packages\\Microsoft.Extensions.Caching.Memory.2.1.0\\lib\\netstandard2.0\\Microsoft.Extensions.Caching.Memory.dll</HintPath>\n    </Reference>\n    <Reference Include=\"Microsoft.Extensions.DependencyInjection.Abstractions, Version=2.1.0.0, Culture=neutral, PublicKeyToken=adb9793829ddae60, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\packages\\Microsoft.Extensions.DependencyInjection.Abstractions.2.1.0\\lib\\netstandard2.0\\Microsoft.Extensions.DependencyInjection.Abstractions.dll</HintPath>\n    </Reference>\n    <Reference Include=\"Microsoft.Extensions.Options, Version=2.1.0.0, Culture=neutral, PublicKeyToken=adb9793829ddae60, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\packages\\Microsoft.Extensions.Options.2.1.0\\lib\\netstandard2.0\\Microsoft.Extensions.Options.dll</HintPath>\n    </Reference>\n    <Reference Include=\"Microsoft.Extensions.Primitives, Version=2.1.0.0, Culture=neutral, PublicKeyToken=adb9793829ddae60, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\packages\\Microsoft.Extensions.Primitives.2.1.0\\lib\\netstandard2.0\\Microsoft.Extensions.Primitives.dll</HintPath>\n    </Reference>\n    <Reference Include=\"Microsoft.Threading.Tasks, Version=1.0.12.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\packages\\Microsoft.Bcl.Async.1.0.168\\lib\\net40\\Microsoft.Threading.Tasks.dll</HintPath>\n      <Private>True</Private>\n    </Reference>\n    <Reference Include=\"Microsoft.Threading.Tasks.Extensions, Version=1.0.12.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\packages\\Microsoft.Bcl.Async.1.0.168\\lib\\net40\\Microsoft.Threading.Tasks.Extensions.dll</HintPath>\n      <Private>True</Private>\n    </Reference>\n    <Reference Include=\"Microsoft.Threading.Tasks.Extensions.Desktop, Version=1.0.168.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\packages\\Microsoft.Bcl.Async.1.0.168\\lib\\net40\\Microsoft.Threading.Tasks.Extensions.Desktop.dll</HintPath>\n      <Private>True</Private>\n    </Reference>\n    <Reference Include=\"Newtonsoft.Json, Version=11.0.0.0, Culture=neutral, PublicKeyToken=30ad4fe6b2a6aeed, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\packages\\Newtonsoft.Json.11.0.2\\lib\\net45\\Newtonsoft.Json.dll</HintPath>\n    </Reference>\n    <Reference Include=\"Nito.AsyncEx, Version=4.0.1.0, Culture=neutral, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\packages\\Nito.AsyncEx.4.0.1\\lib\\net45\\Nito.AsyncEx.dll</HintPath>\n      <Private>True</Private>\n    </Reference>\n    <Reference Include=\"Nito.AsyncEx.Concurrent, Version=4.0.1.0, Culture=neutral, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\packages\\Nito.AsyncEx.4.0.1\\lib\\net45\\Nito.AsyncEx.Concurrent.dll</HintPath>\n      <Private>True</Private>\n    </Reference>\n    <Reference Include=\"Nito.AsyncEx.Context, Version=1.1.0.0, Culture=neutral, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\packages\\Nito.AsyncEx.Context.1.1.0\\lib\\net46\\Nito.AsyncEx.Context.dll</HintPath>\n    </Reference>\n    <Reference Include=\"Nito.AsyncEx.Coordination, Version=1.0.2.0, Culture=neutral, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\packages\\Nito.AsyncEx.Coordination.1.0.2\\lib\\net46\\Nito.AsyncEx.Coordination.dll</HintPath>\n    </Reference>\n    <Reference Include=\"Nito.AsyncEx.Enlightenment, Version=4.0.1.0, Culture=neutral, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\packages\\Nito.AsyncEx.4.0.1\\lib\\net45\\Nito.AsyncEx.Enlightenment.dll</HintPath>\n      <Private>True</Private>\n    </Reference>\n    <Reference Include=\"Nito.AsyncEx.Tasks, Version=1.1.0.0, Culture=neutral, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\packages\\Nito.AsyncEx.Tasks.1.1.0\\lib\\net46\\Nito.AsyncEx.Tasks.dll</HintPath>\n    </Reference>\n    <Reference Include=\"Nito.Collections.Deque, Version=1.0.4.0, Culture=neutral, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\packages\\Nito.Collections.Deque.1.0.4\\lib\\netstandard2.0\\Nito.Collections.Deque.dll</HintPath>\n    </Reference>\n    <Reference Include=\"Nito.Disposables, Version=1.2.3.0, Culture=neutral, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\packages\\Nito.Disposables.1.2.3\\lib\\netstandard2.0\\Nito.Disposables.dll</HintPath>\n    </Reference>\n    <Reference Include=\"System\" />\n    <Reference Include=\"System.Buffers, Version=4.0.2.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\packages\\System.Buffers.4.4.0\\lib\\netstandard2.0\\System.Buffers.dll</HintPath>\n    </Reference>\n    <Reference Include=\"System.Collections.Immutable, Version=1.2.3.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\packages\\System.Collections.Immutable.1.5.0\\lib\\netstandard2.0\\System.Collections.Immutable.dll</HintPath>\n    </Reference>\n    <Reference Include=\"System.ComponentModel.Annotations, Version=4.2.1.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\packages\\System.ComponentModel.Annotations.4.5.0\\lib\\net461\\System.ComponentModel.Annotations.dll</HintPath>\n    </Reference>\n    <Reference Include=\"System.ComponentModel.DataAnnotations\" />\n    <Reference Include=\"System.Configuration\" />\n    <Reference Include=\"System.Configuration.ConfigurationManager, Version=4.0.1.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\packages\\System.Configuration.ConfigurationManager.4.5.0\\lib\\net461\\System.Configuration.ConfigurationManager.dll</HintPath>\n    </Reference>\n    <Reference Include=\"System.Core\" />\n    <Reference Include=\"System.Data.Common, Version=4.1.1.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\packages\\System.Data.Common.4.3.0\\lib\\net451\\System.Data.Common.dll</HintPath>\n      <Private>True</Private>\n    </Reference>\n    <Reference Include=\"System.Data.OracleClient\" />\n    <Reference Include=\"System.Drawing\" />\n    <Reference Include=\"System.Linq.Dynamic, Version=1.0.6132.35681, Culture=neutral, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\packages\\System.Linq.Dynamic.1.0.7\\lib\\net40\\System.Linq.Dynamic.dll</HintPath>\n      <Private>True</Private>\n    </Reference>\n    <Reference Include=\"System.Linq.Dynamic.Core, Version=0.0.0.0, Culture=neutral, PublicKeyToken=0f07ec44de6ac832, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\packages\\System.Linq.Dynamic.Core.1.0.8.9\\lib\\net46\\System.Linq.Dynamic.Core.dll</HintPath>\n    </Reference>\n    <Reference Include=\"System.Memory, Version=4.0.1.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\packages\\System.Memory.4.5.0\\lib\\netstandard2.0\\System.Memory.dll</HintPath>\n    </Reference>\n    <Reference Include=\"System.Net\" />\n    <Reference Include=\"System.Net.Http.Formatting, Version=5.2.4.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\packages\\Microsoft.AspNet.WebApi.Client.5.2.4\\lib\\net45\\System.Net.Http.Formatting.dll</HintPath>\n    </Reference>\n    <Reference Include=\"System.Numerics\" />\n    <Reference Include=\"System.Numerics.Vectors, Version=4.1.3.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\packages\\System.Numerics.Vectors.4.4.0\\lib\\net46\\System.Numerics.Vectors.dll</HintPath>\n    </Reference>\n    <Reference Include=\"System.Runtime.Caching\" />\n    <Reference Include=\"System.Runtime.CompilerServices.Unsafe, Version=4.0.4.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\packages\\System.Runtime.CompilerServices.Unsafe.4.5.0\\lib\\netstandard2.0\\System.Runtime.CompilerServices.Unsafe.dll</HintPath>\n    </Reference>\n    <Reference Include=\"System.Runtime.InteropServices.RuntimeInformation, Version=4.0.1.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\packages\\System.Runtime.InteropServices.RuntimeInformation.4.3.0\\lib\\net45\\System.Runtime.InteropServices.RuntimeInformation.dll</HintPath>\n      <Private>True</Private>\n    </Reference>\n    <Reference Include=\"System.Runtime.Remoting\" />\n    <Reference Include=\"System.Runtime.Serialization\" />\n    <Reference Include=\"System.Runtime.Serialization.Formatters, Version=4.0.1.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\packages\\System.Runtime.Serialization.Formatters.4.3.0\\lib\\net46\\System.Runtime.Serialization.Formatters.dll</HintPath>\n      <Private>True</Private>\n    </Reference>\n    <Reference Include=\"System.Runtime.Serialization.Primitives, Version=4.1.2.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\packages\\System.Runtime.Serialization.Primitives.4.3.0\\lib\\net46\\System.Runtime.Serialization.Primitives.dll</HintPath>\n      <Private>True</Private>\n    </Reference>\n    <Reference Include=\"System.Security.AccessControl, Version=4.1.1.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\packages\\System.Security.AccessControl.4.5.0\\lib\\net461\\System.Security.AccessControl.dll</HintPath>\n    </Reference>\n    <Reference Include=\"System.Security.Claims, Version=4.0.2.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\packages\\System.Security.Claims.4.3.0\\lib\\net46\\System.Security.Claims.dll</HintPath>\n      <Private>True</Private>\n    </Reference>\n    <Reference Include=\"System.Security.Permissions, Version=4.0.1.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\packages\\System.Security.Permissions.4.5.0\\lib\\net461\\System.Security.Permissions.dll</HintPath>\n    </Reference>\n    <Reference Include=\"System.Security.Principal.Windows, Version=4.1.1.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\packages\\System.Security.Principal.Windows.4.5.0\\lib\\net461\\System.Security.Principal.Windows.dll</HintPath>\n    </Reference>\n    <Reference Include=\"System.ServiceProcess\" />\n    <Reference Include=\"System.Transactions\" />\n    <Reference Include=\"System.Web\" />\n    <Reference Include=\"System.Web.Http, Version=5.2.4.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\packages\\Microsoft.AspNet.WebApi.Core.5.2.4\\lib\\net45\\System.Web.Http.dll</HintPath>\n    </Reference>\n    <Reference Include=\"System.Xml.Linq\" />\n    <Reference Include=\"System.Data.DataSetExtensions\" />\n    <Reference Include=\"Microsoft.CSharp\" />\n    <Reference Include=\"System.Data\" />\n    <Reference Include=\"System.Net.Http\" />\n    <Reference Include=\"System.Xml\" />\n    <Reference Include=\"System.Xml.XmlDocument, Version=4.0.2.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\packages\\System.Xml.XmlDocument.4.3.0\\lib\\net46\\System.Xml.XmlDocument.dll</HintPath>\n      <Private>True</Private>\n    </Reference>\n    <Reference Include=\"System.Xml.XPath, Version=4.0.2.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\packages\\System.Xml.XPath.4.3.0\\lib\\net46\\System.Xml.XPath.dll</HintPath>\n      <Private>True</Private>\n    </Reference>\n    <Reference Include=\"System.Xml.XPath.XmlDocument, Version=4.0.2.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\packages\\System.Xml.XPath.XmlDocument.4.3.0\\lib\\net46\\System.Xml.XPath.XmlDocument.dll</HintPath>\n    </Reference>\n    <Reference Include=\"TimeZoneConverter, Version=2.4.1.0, Culture=neutral, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\packages\\TimeZoneConverter.2.4.1\\lib\\net45\\TimeZoneConverter.dll</HintPath>\n    </Reference>\n  </ItemGroup>\n  <ItemGroup>\n    <Compile Include=\"Properties\\AssemblyInfo.cs\" />\n    <Compile Include=\"WebApiVersionRoute\\RoutingConstraints\\VersionConstraint.cs\" />\n    <Compile Include=\"WebApiVersionRoute\\RoutingConstraints\\VersionedRoute.cs\" />\n    <Compile Include=\"WebApiVersionRoute\\SysCode.cs\" />\n    <Compile Include=\"WebApiVersionRoute\\Version.cs\" />\n    <Compile Include=\"WebApiVersionRoute\\VersionConsts.cs\" />\n    <Compile Include=\"WebApiVersionRoute\\VersionRange.cs\" />\n    <Compile Include=\"WebApi\\JsonMediaTypeFormatterExtension.cs\" />\n  </ItemGroup>\n  <ItemGroup>\n    <ProjectReference Include=\"..\\Abplus\\Abplus.csproj\">\n      <Project>{1de8d8d1-987d-4a9c-aec5-ff0a9914bbd4}</Project>\n      <Name>Abplus</Name>\n    </ProjectReference>\n  </ItemGroup>\n  <ItemGroup />\n  <ItemGroup>\n    <None Include=\"Abplus.Web.Api.nuspec\" />\n    <None Include=\"app.config\" />\n    <None Include=\"packages.config\" />\n  </ItemGroup>\n  <Import Project=\"$(MSBuildToolsPath)\\Microsoft.CSharp.targets\" />\n  <Import Project=\"..\\..\\packages\\Microsoft.Bcl.Build.1.0.21\\build\\Microsoft.Bcl.Build.targets\" Condition=\"Exists('..\\..\\packages\\Microsoft.Bcl.Build.1.0.21\\build\\Microsoft.Bcl.Build.targets')\" />\n  <Target Name=\"EnsureNuGetPackageBuildImports\" BeforeTargets=\"PrepareForBuild\">\n    <PropertyGroup>\n      <ErrorText>这台计算机上缺少此项目引用的 NuGet 程序包。使用“NuGet 程序包还原”可下载这些程序包。有关更多信息，请参见 http://go.microsoft.com/fwlink/?LinkID=322105。缺少的文件是 {0}。</ErrorText>\n    </PropertyGroup>\n    <Error Condition=\"!Exists('..\\..\\packages\\Microsoft.Bcl.Build.1.0.21\\build\\Microsoft.Bcl.Build.targets')\" Text=\"$([System.String]::Format('$(ErrorText)', '..\\..\\packages\\Microsoft.Bcl.Build.1.0.21\\build\\Microsoft.Bcl.Build.targets'))\" />\n  </Target>\n  <!-- To modify your build process, add your task inside one of the targets below and uncomment it. \n       Other similar extension points exist, see Microsoft.Common.targets.\n  <Target Name=\"BeforeBuild\">\n  </Target>\n  <Target Name=\"AfterBuild\">\n  </Target>\n  -->\n</Project>"
  },
  {
    "path": "src2/Abplus.Web.Api/Abplus.Web.Api.nuspec",
    "content": "<?xml version=\"1.0\"?>\n<package >\n  <metadata>\n    <id>$id$</id>\n    <version>$version$</version>\n    <title>$title$</title>\n    <authors>personball</authors>\n    <owners>personball</owners>\n    <licenseUrl>https://raw.githubusercontent.com/personball/abplus/master/LICENSE</licenseUrl>\n    <projectUrl>https://github.com/personball/abplus</projectUrl>\n    <iconUrl>https://raw.githubusercontent.com/personball/abplus/master/abplus_icon.png</iconUrl>\n    <requireLicenseAcceptance>false</requireLicenseAcceptance>\n    <description>Abp plus, an extension for Abp Framework. </description>\n    <releaseNotes></releaseNotes>\n    <copyright>Copyright 2017</copyright>\n    <tags></tags>\n    <dependencies>\n      <dependency id=\"Abplus\" version=\"$version$\" />\n    </dependencies>\n  </metadata>\n</package>"
  },
  {
    "path": "src2/Abplus.Web.Api/Properties/AssemblyInfo.cs",
    "content": "﻿using System.Reflection;\nusing System.Runtime.InteropServices;\nusing Abp;\n\n// 有关程序集的一般信息由以下\n// 控制。更改这些特性值可修改\n// 与程序集关联的信息。\n[assembly: AssemblyTitle(\"Abplus.Web.Api\")]\n[assembly: AssemblyDescription(\"\")]\n[assembly: AssemblyConfiguration(\"\")]\n[assembly: AssemblyCompany(\"\")]\n[assembly: AssemblyProduct(\"Abplus.Web.Api\")]\n[assembly: AssemblyCopyright(\"Copyright ©  2016\")]\n[assembly: AssemblyTrademark(\"\")]\n[assembly: AssemblyCulture(\"\")]\n\n//将 ComVisible 设置为 false 将使此程序集中的类型\n//对 COM 组件不可见。  如果需要从 COM 访问此程序集中的类型，\n//请将此类型的 ComVisible 特性设置为 true。\n[assembly: ComVisible(false)]\n\n// 如果此项目向 COM 公开，则下列 GUID 用于类型库的 ID\n[assembly: Guid(\"84d80055-6a95-4de3-b1e7-68b88838f2be\")]\n\n// 程序集的版本信息由下列四个值组成: \n//\n//      主版本\n//      次版本\n//      生成号\n//      修订号\n//\n//可以指定所有这些值，也可以使用“生成号”和“修订号”的默认值，\n// 方法是按如下所示使用“*”: :\n// [assembly: AssemblyVersion(\"1.0.*\")]\n[assembly: AssemblyVersion(AbplusConsts.CurrentVersion)]\n[assembly: AssemblyFileVersion(AbplusConsts.CurrentVersion)]\n"
  },
  {
    "path": "src2/Abplus.Web.Api/WebApi/JsonMediaTypeFormatterExtension.cs",
    "content": "﻿using System.Net.Http.Formatting;\nusing Abp.Json;\n\nnamespace Abp.WebApi\n{\n    public static class JsonMediaTypeFormatterExtension\n    {\n        public static void SetCustomDateFormatString(this JsonMediaTypeFormatter formatter, string dateTimeFormat)\n        {\n            var converters = formatter.SerializerSettings.Converters;\n            foreach (var converter in converters)\n            {\n                if (converter is AbpDateTimeConverter)\n                {\n                    var tmpConverter = converter as AbpDateTimeConverter;\n                    tmpConverter.DateTimeFormat = dateTimeFormat;\n                }\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "src2/Abplus.Web.Api/WebApiVersionRoute/RoutingConstraints/VersionConstraint.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Net.Http;\nusing System.Web.Http.Routing;\n\nnamespace Abplus.WebApiVersionRoute.RoutingConstraints\n{\n    public class VersionConstraint : IHttpRouteConstraint\n    {\n        public static Version DefaultClientMinVersion = new Version(VersionConsts.DefaultClientMinVersionString);\n\n        public static Version DefaultClientMaxVersion = new Version(VersionConsts.DefaultClientMaxVersionString);\n\n        private static SysCode DefaultSysCode = SysCode.H5;//请求端未声明SysCode时，默认为H5\n\n        public VersionConstraint(int allowedVersion, SysCode allowedSysCode, List<VersionRange> allowedClientVersionRangeList)\n        {\n            AllowedVersion = allowedVersion;\n            AllowedSysCode = allowedSysCode;\n            AllowedClientVersionRangeList = allowedClientVersionRangeList;\n        }\n\n        public List<VersionRange> AllowedClientVersionRangeList\n        {\n            get;\n            private set;\n        }\n\n        public int AllowedVersion\n        {\n            get;\n            private set;\n        }\n\n        public SysCode AllowedSysCode\n        {\n            get;\n            private set;\n        }\n\n        public bool Match(HttpRequestMessage request, IHttpRoute route, string parameterName, IDictionary<string, object> values, HttpRouteDirection routeDirection)\n        {\n            return MatchClientVersion(request, routeDirection)\n                && MatchApiVersion(request, routeDirection)\n                && MatchSysCode(request, routeDirection);\n        }\n\n        private bool MatchSysCode(HttpRequestMessage request, HttpRouteDirection routeDirection)\n        {\n            if (routeDirection == HttpRouteDirection.UriResolution)\n            {\n                var sysCode = GetSysCodeHeader(request) ?? DefaultSysCode;//请求方未声明则默认为H5\n                return (sysCode & AllowedSysCode) == sysCode;\n            }\n\n            return false;\n        }\n\n        private bool MatchApiVersion(HttpRequestMessage request, HttpRouteDirection routeDirection)\n        {\n            if (routeDirection == HttpRouteDirection.UriResolution)\n            {\n                int apiVersion = GetApiVersionHeader(request) ?? VersionConsts.DefaultApiMinVersion;//请求方未声明，则为1\n\n                return (apiVersion == AllowedVersion);\n            }\n\n            return false;\n        }\n\n        private bool MatchClientVersion(HttpRequestMessage request, HttpRouteDirection routeDirection)\n        {\n            if (routeDirection == HttpRouteDirection.UriResolution)\n            {\n                if (!AllowedClientVersionRangeList.Any())\n                {\n                    throw new Exception(\"AllowedClientVersionRange is empty!\");\n                }\n\n                Version clientVersion = GetClientVersionHeader(request) ?? DefaultClientMinVersion;//请求方未声明，则为1.0.0\n                if (clientVersion == null)\n                {\n                    clientVersion = DefaultClientMinVersion;\n                }\n\n                foreach (var range in AllowedClientVersionRangeList)\n                {\n                    if (range.MinVersion.CompareTo(clientVersion) <= 0 && range.MaxVersion.CompareTo(clientVersion) >= 0)\n                    {\n                        return true;\n                    }\n                }\n\n                return false;\n            }\n\n            return false;\n        }\n\n        private Version GetClientVersionHeader(HttpRequestMessage request)\n        {\n            string clientVersionAsString;\n            IEnumerable<string> headerValue;\n            if (request.Headers.TryGetValues(VersionConsts.ClientVersionHeaderName, out headerValue) && headerValue.Count() == 1)\n            {\n                clientVersionAsString = headerValue.First();\n            }\n            else\n            {\n                return null;\n            }\n\n            if (string.IsNullOrWhiteSpace(clientVersionAsString))\n            {\n                return null;\n            }\n\n            return new Version(clientVersionAsString);\n        }\n\n        private SysCode? GetSysCodeHeader(HttpRequestMessage request)\n        {\n            string sysCodeAsString;\n            IEnumerable<string> headerValue;\n            if (request.Headers.TryGetValues(VersionConsts.SysCodeHeaderName, out headerValue) && headerValue.Count() == 1)\n            {\n                sysCodeAsString = headerValue.First();\n            }\n            else\n            {\n                return null;\n            }\n\n            SysCode tag;\n            if (sysCodeAsString != null && Enum.TryParse<SysCode>(sysCodeAsString, out tag))\n            {\n                return tag;\n            }\n\n            return null;\n        }\n\n        private int? GetApiVersionHeader(HttpRequestMessage request)\n        {\n            string apiVersionAsString;\n            IEnumerable<string> headerValues;\n            if (request.Headers.TryGetValues(VersionConsts.VersionHeaderName, out headerValues) && headerValues.Count() == 1)\n            {\n                apiVersionAsString = headerValues.First();\n            }\n            else\n            {\n                return null;\n            }\n\n            int version;\n            if (apiVersionAsString != null && Int32.TryParse(apiVersionAsString, out version))\n            {\n                return version;\n            }\n\n            return null;\n        }\n    }\n}"
  },
  {
    "path": "src2/Abplus.Web.Api/WebApiVersionRoute/RoutingConstraints/VersionedRoute.cs",
    "content": "﻿using System.Collections.Generic;\nusing System.Web.Http.Routing;\n\nnamespace Abplus.WebApiVersionRoute.RoutingConstraints\n{\n    public class VersionedRoute : RouteFactoryAttribute\n    {\n        private static string DefaultAllowedClientVersionRange = VersionConsts.DefaultClientMinVersionString + \"-\" + VersionConsts.DefaultClientMaxVersionString;\n        private static SysCode DefaultAllowedSysCode = SysCode.H5 | SysCode.IPhone | SysCode.Android;\n        private const int DefaultAllowedApiVersion = 1;\n\n        #region 构造函数\n\n        #region 单参构造\n        public VersionedRoute(string template)\n            : this(template, DefaultAllowedApiVersion)\n        {\n        }\n        #endregion\n\n        #region 双参构造\n        public VersionedRoute(string template, int apiVersion)\n            : this(template, apiVersion, DefaultAllowedSysCode)\n        {\n        }\n\n        public VersionedRoute(string template, SysCode allowedTags)\n            : this(template, DefaultAllowedApiVersion, allowedTags)\n        {\n        }\n\n        #endregion\n\n        #region 三参构造\n        public VersionedRoute(string template, int apiVersion, SysCode allowedTags)\n            : this(template, apiVersion, allowedTags, DefaultAllowedClientVersionRange)\n        {\n        }\n        \n        public VersionedRoute(string template, int apiVersion, params string[] allowedClientVersionRangeString)\n            : this(template, apiVersion, DefaultAllowedSysCode, allowedClientVersionRangeString)\n        {\n        }\n\n        public VersionedRoute(string template, SysCode allowedTags, params string[] allowedClientVersionRangeString)\n            : this(template, DefaultAllowedApiVersion, DefaultAllowedSysCode, allowedClientVersionRangeString)\n        {\n        }\n        #endregion\n\n        public VersionedRoute(string template, int apiVersion, SysCode allowedTags, params string[] allowedClientVersionRangeString)\n            : base(template)\n        {\n            AllowedClientVersionRangeList = new List<VersionRange>();\n\n            foreach (var rangeString in allowedClientVersionRangeString)\n            {\n                AllowedClientVersionRangeList.Add(VersionRange.CreateVersionRangeFromString(rangeString));\n            }\n\n            AllowedTags = allowedTags;\n            ApiVersion = apiVersion;\n        }\n\n        #endregion\n\n        public List<VersionRange> AllowedClientVersionRangeList\n        {\n            get;\n            private set;\n        }\n\n        /// <summary>\n        /// 接口的版本号\n        /// </summary>\n        public int ApiVersion\n        {\n            get;\n            private set;\n        }\n\n        /// <summary>\n        /// 接口的设备区分标签\n        /// </summary>\n        public SysCode AllowedTags\n        {\n            get;\n            private set;\n        }\n\n        public override IDictionary<string, object> Constraints\n        {\n            get\n            {\n                var constraints = new HttpRouteValueDictionary();\n                constraints.Add(\"version\", new VersionConstraint(ApiVersion, AllowedTags, AllowedClientVersionRangeList));\n                return constraints;\n            }\n        }\n    }\n\n}"
  },
  {
    "path": "src2/Abplus.Web.Api/WebApiVersionRoute/SysCode.cs",
    "content": "﻿using System;\n\nnamespace Abplus.WebApiVersionRoute\n{\n    [Flags]\n    public enum SysCode : long\n    {\n        H5 = 0x1 << 0,\n\n        Android = 0x1 << 1,\n\n        IPhone = 0x1 << 2\n    }\n}"
  },
  {
    "path": "src2/Abplus.Web.Api/WebApiVersionRoute/Version.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.Linq;\n\nnamespace Abplus.WebApiVersionRoute\n{\n    public class Version : IComparable<Version>\n    {\n        public Version(string version)\n        {\n            VersionNumberList = new List<int>();\n            version.Split(new string[] { \".\" }, StringSplitOptions.None).ToList()\n                .ForEach((s) =>\n                {\n                    VersionNumberList.Add(int.Parse(s));\n                });\n        }\n\n        public List<int> VersionNumberList { get; private set; }\n\n        public int CompareTo(Version other)\n        {\n            if (this.VersionNumberList.Count == other.VersionNumberList.Count)\n            {\n                for (int i = 0; i < this.VersionNumberList.Count; i++)\n                {\n                    var thisVersionNumber = this.VersionNumberList[i];\n                    var otherVersionNumber = other.VersionNumberList[i];\n\n                    if (thisVersionNumber == otherVersionNumber)\n                    {\n                        continue;\n                    }\n\n                    if (thisVersionNumber < otherVersionNumber)\n                    {\n                        return -1;\n                    }\n\n                    if (thisVersionNumber > otherVersionNumber)\n                    {\n                        return 1;\n                    }\n                }\n\n                return 0;\n            }\n            else\n            {\n                throw new Exception(\"version format not same!\");\n            }\n        }\n    }\n}"
  },
  {
    "path": "src2/Abplus.Web.Api/WebApiVersionRoute/VersionConsts.cs",
    "content": "﻿namespace Abplus.WebApiVersionRoute\n{\n    public class VersionConsts\n    {\n        public const string ClientVersionHeaderName = \"Abplus-ClientVersion\";\n        public const string VersionHeaderName = \"Abplus-ApiVersion\";\n        public const string SysCodeHeaderName = \"Abplus-SysCode\";\n\n        public const string DefaultClientMinVersionString = \"1.0.0\";\n        public const string DefaultClientMaxVersionString = \"9999.9999.9999\";\n\n        public const int DefaultApiMinVersion = 1;\n    }\n}\n"
  },
  {
    "path": "src2/Abplus.Web.Api/WebApiVersionRoute/VersionRange.cs",
    "content": "﻿using System;\nusing System.Linq;\n\nnamespace Abplus.WebApiVersionRoute\n{\n    public class VersionRange\n    {\n        public VersionRange(string minVersionString, string maxVersionString)\n            : this(new Version(minVersionString), new Version(maxVersionString))\n        {\n        }\n\n        public VersionRange(Version min, Version max)\n        {\n            if (min == null)\n            {\n                throw new ArgumentNullException(\"min is null!\");\n            }\n\n            if (max == null)\n            {\n                throw new ArgumentNullException(\"max is null!\");\n            }\n\n            MinVersion = min;\n            MaxVersion = max;\n\n            ThrowIfMaxVersionLessThenMinVersion();\n        }\n\n        private void ThrowIfMaxVersionLessThenMinVersion()\n        {\n            if (MaxVersion.CompareTo(MinVersion) < 0)\n            {\n                throw new Exception(\"MaxVersion < MinVersion !\");\n            }\n        }\n\n        public Version MinVersion { get; private set; }\n\n        public Version MaxVersion { get; private set; }\n\n        public static VersionRange CreateVersionRangeFromString(string versionRangeString)\n        {\n            var minVersion = CreateMinVersionFromString(versionRangeString);\n\n            var maxVersion = CreateMaxVersionFromString(versionRangeString);\n\n            return new VersionRange(minVersion, maxVersion);\n        }\n\n        public static Version CreateMinVersionFromString(string versionRangeString)\n        {\n            if (string.IsNullOrWhiteSpace(versionRangeString))\n            {\n                throw new ArgumentNullException(\"versionRangeString is empty!\");\n            }\n\n            var versionFirstToken = versionRangeString.Split('-').First();\n            if (versionFirstToken == \"*\")\n            {\n                versionFirstToken = VersionConsts.DefaultClientMinVersionString;\n            }\n\n            return new Version(versionFirstToken);\n        }\n\n        public static Version CreateMaxVersionFromString(string versionRangeString)\n        {\n            if (string.IsNullOrWhiteSpace(versionRangeString))\n            {\n                throw new ArgumentNullException(\"versionRangeString is empty!\");\n            }\n\n            var versionTokens = versionRangeString.Split('-');\n\n            if (versionTokens.Length > 1)\n            {\n                if (versionTokens[1] == \"*\")\n                {\n                    return new Version(VersionConsts.DefaultClientMaxVersionString);\n                }\n                else\n                {\n                    return new Version(versionTokens[1]);\n                }\n            }\n            else\n            {\n                return new Version(versionTokens[0]);\n            }\n        }\n    }\n}"
  },
  {
    "path": "src2/Abplus.Web.Api/app.config",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<configuration>\n  <runtime>\n    <assemblyBinding xmlns=\"urn:schemas-microsoft-com:asm.v1\">\n      <dependentAssembly>\n        <assemblyIdentity name=\"Newtonsoft.Json\" publicKeyToken=\"30ad4fe6b2a6aeed\" culture=\"neutral\" />\n        <bindingRedirect oldVersion=\"0.0.0.0-11.0.0.0\" newVersion=\"11.0.0.0\" />\n      </dependentAssembly>\n      <dependentAssembly>\n        <assemblyIdentity name=\"Microsoft.Extensions.Caching.Abstractions\" publicKeyToken=\"adb9793829ddae60\" culture=\"neutral\" />\n        <bindingRedirect oldVersion=\"0.0.0.0-2.0.1.0\" newVersion=\"2.0.1.0\" />\n      </dependentAssembly>\n      <dependentAssembly>\n        <assemblyIdentity name=\"Microsoft.Extensions.Caching.Memory\" publicKeyToken=\"adb9793829ddae60\" culture=\"neutral\" />\n        <bindingRedirect oldVersion=\"0.0.0.0-2.0.1.0\" newVersion=\"2.0.1.0\" />\n      </dependentAssembly>\n      <dependentAssembly>\n        <assemblyIdentity name=\"Microsoft.Extensions.Options\" publicKeyToken=\"adb9793829ddae60\" culture=\"neutral\" />\n        <bindingRedirect oldVersion=\"0.0.0.0-2.0.1.0\" newVersion=\"2.0.1.0\" />\n      </dependentAssembly>\n      <dependentAssembly>\n        <assemblyIdentity name=\"System.Runtime.InteropServices.RuntimeInformation\" publicKeyToken=\"b03f5f7f11d50a3a\" culture=\"neutral\" />\n        <bindingRedirect oldVersion=\"0.0.0.0-4.0.2.0\" newVersion=\"4.0.2.0\" />\n      </dependentAssembly>\n      <dependentAssembly>\n        <assemblyIdentity name=\"System.Collections.Immutable\" publicKeyToken=\"b03f5f7f11d50a3a\" culture=\"neutral\" />\n        <bindingRedirect oldVersion=\"0.0.0.0-1.2.3.0\" newVersion=\"1.2.3.0\" />\n      </dependentAssembly>\n      <dependentAssembly>\n        <assemblyIdentity name=\"System.ComponentModel.Annotations\" publicKeyToken=\"b03f5f7f11d50a3a\" culture=\"neutral\" />\n        <bindingRedirect oldVersion=\"0.0.0.0-4.2.1.0\" newVersion=\"4.2.1.0\" />\n      </dependentAssembly>\n    </assemblyBinding>\n  </runtime>\n</configuration>"
  },
  {
    "path": "src2/Abplus.Web.Api/packages.config",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<packages>\n  <package id=\"Abp\" version=\"3.7.2\" targetFramework=\"net461\" />\n  <package id=\"Castle.Core\" version=\"4.3.1\" targetFramework=\"net461\" />\n  <package id=\"Castle.LoggingFacility\" version=\"4.1.0\" targetFramework=\"net461\" />\n  <package id=\"Castle.Windsor\" version=\"4.1.0\" targetFramework=\"net461\" />\n  <package id=\"JetBrains.Annotations\" version=\"11.1.0\" targetFramework=\"net461\" />\n  <package id=\"Microsoft.AspNet.WebApi.Client\" version=\"5.2.4\" targetFramework=\"net461\" />\n  <package id=\"Microsoft.AspNet.WebApi.Core\" version=\"5.2.4\" targetFramework=\"net461\" />\n  <package id=\"Microsoft.Bcl\" version=\"1.1.10\" targetFramework=\"net461\" />\n  <package id=\"Microsoft.Bcl.Async\" version=\"1.0.168\" targetFramework=\"net461\" />\n  <package id=\"Microsoft.Bcl.Build\" version=\"1.0.21\" targetFramework=\"net461\" />\n  <package id=\"Microsoft.Extensions.Caching.Abstractions\" version=\"2.1.0\" targetFramework=\"net461\" />\n  <package id=\"Microsoft.Extensions.Caching.Memory\" version=\"2.1.0\" targetFramework=\"net461\" />\n  <package id=\"Microsoft.Extensions.DependencyInjection.Abstractions\" version=\"2.1.0\" targetFramework=\"net461\" />\n  <package id=\"Microsoft.Extensions.Options\" version=\"2.1.0\" targetFramework=\"net461\" />\n  <package id=\"Microsoft.Extensions.Primitives\" version=\"2.1.0\" targetFramework=\"net461\" />\n  <package id=\"Newtonsoft.Json\" version=\"11.0.2\" targetFramework=\"net461\" />\n  <package id=\"Nito.AsyncEx\" version=\"4.0.1\" targetFramework=\"net461\" />\n  <package id=\"Nito.AsyncEx.Context\" version=\"1.1.0\" targetFramework=\"net461\" />\n  <package id=\"Nito.AsyncEx.Coordination\" version=\"1.0.2\" targetFramework=\"net461\" />\n  <package id=\"Nito.AsyncEx.Tasks\" version=\"1.1.0\" targetFramework=\"net461\" />\n  <package id=\"Nito.Collections.Deque\" version=\"1.0.4\" targetFramework=\"net461\" />\n  <package id=\"Nito.Disposables\" version=\"1.2.3\" targetFramework=\"net461\" />\n  <package id=\"System.Buffers\" version=\"4.4.0\" targetFramework=\"net461\" />\n  <package id=\"System.Collections.Immutable\" version=\"1.5.0\" targetFramework=\"net461\" />\n  <package id=\"System.ComponentModel.Annotations\" version=\"4.5.0\" targetFramework=\"net461\" />\n  <package id=\"System.Configuration.ConfigurationManager\" version=\"4.5.0\" targetFramework=\"net461\" />\n  <package id=\"System.Data.Common\" version=\"4.3.0\" targetFramework=\"net461\" />\n  <package id=\"System.Linq.Dynamic\" version=\"1.0.7\" targetFramework=\"net461\" />\n  <package id=\"System.Linq.Dynamic.Core\" version=\"1.0.8.9\" targetFramework=\"net461\" />\n  <package id=\"System.Linq.Queryable\" version=\"4.3.0\" targetFramework=\"net461\" />\n  <package id=\"System.Memory\" version=\"4.5.0\" targetFramework=\"net461\" />\n  <package id=\"System.Numerics.Vectors\" version=\"4.4.0\" targetFramework=\"net461\" />\n  <package id=\"System.Runtime.CompilerServices.Unsafe\" version=\"4.5.0\" targetFramework=\"net461\" />\n  <package id=\"System.Runtime.InteropServices.RuntimeInformation\" version=\"4.3.0\" targetFramework=\"net461\" />\n  <package id=\"System.Runtime.Serialization.Formatters\" version=\"4.3.0\" targetFramework=\"net461\" />\n  <package id=\"System.Runtime.Serialization.Primitives\" version=\"4.3.0\" targetFramework=\"net461\" />\n  <package id=\"System.Security.AccessControl\" version=\"4.5.0\" targetFramework=\"net461\" />\n  <package id=\"System.Security.Claims\" version=\"4.3.0\" targetFramework=\"net461\" />\n  <package id=\"System.Security.Permissions\" version=\"4.5.0\" targetFramework=\"net461\" />\n  <package id=\"System.Security.Principal.Windows\" version=\"4.5.0\" targetFramework=\"net461\" />\n  <package id=\"System.Threading\" version=\"4.3.0\" targetFramework=\"net461\" />\n  <package id=\"System.Xml.XmlDocument\" version=\"4.3.0\" targetFramework=\"net461\" />\n  <package id=\"System.Xml.XPath\" version=\"4.3.0\" targetFramework=\"net461\" />\n  <package id=\"System.Xml.XPath.XmlDocument\" version=\"4.3.0\" targetFramework=\"net461\" />\n  <package id=\"TimeZoneConverter\" version=\"2.4.1\" targetFramework=\"net461\" />\n</packages>"
  },
  {
    "path": "src2/Abplus.Web.PlugIns/Abplus.Web.PlugIns.csproj",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<Project ToolsVersion=\"14.0\" DefaultTargets=\"Build\" xmlns=\"http://schemas.microsoft.com/developer/msbuild/2003\">\n  <Import Project=\"$(MSBuildExtensionsPath)\\$(MSBuildToolsVersion)\\Microsoft.Common.props\" Condition=\"Exists('$(MSBuildExtensionsPath)\\$(MSBuildToolsVersion)\\Microsoft.Common.props')\" />\n  <PropertyGroup>\n    <Configuration Condition=\" '$(Configuration)' == '' \">Debug</Configuration>\n    <Platform Condition=\" '$(Platform)' == '' \">AnyCPU</Platform>\n    <ProjectGuid>{E834592D-71F9-49A4-A4FB-017A83712255}</ProjectGuid>\n    <OutputType>Library</OutputType>\n    <AppDesignerFolder>Properties</AppDesignerFolder>\n    <RootNamespace>Abp</RootNamespace>\n    <AssemblyName>Abplus.Web.PlugIns</AssemblyName>\n    <TargetFrameworkVersion>v4.6.1</TargetFrameworkVersion>\n    <FileAlignment>512</FileAlignment>\n    <NuGetPackageImportStamp>\n    </NuGetPackageImportStamp>\n  </PropertyGroup>\n  <PropertyGroup Condition=\" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' \">\n    <DebugSymbols>true</DebugSymbols>\n    <DebugType>full</DebugType>\n    <Optimize>false</Optimize>\n    <OutputPath>bin\\Debug\\</OutputPath>\n    <DefineConstants>DEBUG;TRACE</DefineConstants>\n    <ErrorReport>prompt</ErrorReport>\n    <WarningLevel>4</WarningLevel>\n  </PropertyGroup>\n  <PropertyGroup Condition=\" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' \">\n    <DebugType>pdbonly</DebugType>\n    <Optimize>true</Optimize>\n    <OutputPath>bin\\Release\\</OutputPath>\n    <DefineConstants>TRACE</DefineConstants>\n    <ErrorReport>prompt</ErrorReport>\n    <WarningLevel>4</WarningLevel>\n  </PropertyGroup>\n  <ItemGroup>\n    <Reference Include=\"Abp, Version=1.4.2.0, Culture=neutral, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\packages\\Abp.1.4.2.0\\lib\\net452\\Abp.dll</HintPath>\n      <Private>True</Private>\n    </Reference>\n    <Reference Include=\"Abp.Web, Version=1.4.2.0, Culture=neutral, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\packages\\Abp.Web.1.4.2.0\\lib\\net452\\Abp.Web.dll</HintPath>\n      <Private>True</Private>\n    </Reference>\n    <Reference Include=\"Abp.Web.Common, Version=1.4.2.0, Culture=neutral, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\packages\\Abp.Web.Common.1.4.2.0\\lib\\net452\\Abp.Web.Common.dll</HintPath>\n      <Private>True</Private>\n    </Reference>\n    <Reference Include=\"Abp.Web.Mvc, Version=1.4.2.0, Culture=neutral, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\packages\\Abp.Web.Mvc.1.4.2.0\\lib\\net452\\Abp.Web.Mvc.dll</HintPath>\n      <Private>True</Private>\n    </Reference>\n    <Reference Include=\"Castle.Core, Version=3.3.0.0, Culture=neutral, PublicKeyToken=407dd0808d44fbdc, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\packages\\Castle.Core.3.3.0\\lib\\net45\\Castle.Core.dll</HintPath>\n      <Private>True</Private>\n    </Reference>\n    <Reference Include=\"Castle.Facilities.Logging, Version=3.4.0.0, Culture=neutral, PublicKeyToken=407dd0808d44fbdc, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\packages\\Castle.LoggingFacility.3.4.0\\lib\\net45\\Castle.Facilities.Logging.dll</HintPath>\n      <Private>True</Private>\n    </Reference>\n    <Reference Include=\"Castle.Windsor, Version=3.4.0.0, Culture=neutral, PublicKeyToken=407dd0808d44fbdc, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\packages\\Castle.Windsor.3.4.0\\lib\\net45\\Castle.Windsor.dll</HintPath>\n      <Private>True</Private>\n    </Reference>\n    <Reference Include=\"Microsoft.Threading.Tasks, Version=1.0.12.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\packages\\Microsoft.Bcl.Async.1.0.168\\lib\\net40\\Microsoft.Threading.Tasks.dll</HintPath>\n      <Private>True</Private>\n    </Reference>\n    <Reference Include=\"Microsoft.Threading.Tasks.Extensions, Version=1.0.12.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\packages\\Microsoft.Bcl.Async.1.0.168\\lib\\net40\\Microsoft.Threading.Tasks.Extensions.dll</HintPath>\n      <Private>True</Private>\n    </Reference>\n    <Reference Include=\"Microsoft.Threading.Tasks.Extensions.Desktop, Version=1.0.168.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\packages\\Microsoft.Bcl.Async.1.0.168\\lib\\net40\\Microsoft.Threading.Tasks.Extensions.Desktop.dll</HintPath>\n      <Private>True</Private>\n    </Reference>\n    <Reference Include=\"Microsoft.Web.Infrastructure, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\packages\\Microsoft.Web.Infrastructure.1.0.0.0\\lib\\net40\\Microsoft.Web.Infrastructure.dll</HintPath>\n      <Private>True</Private>\n    </Reference>\n    <Reference Include=\"Newtonsoft.Json, Version=9.0.0.0, Culture=neutral, PublicKeyToken=30ad4fe6b2a6aeed, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\packages\\Newtonsoft.Json.9.0.1\\lib\\net45\\Newtonsoft.Json.dll</HintPath>\n      <Private>True</Private>\n    </Reference>\n    <Reference Include=\"Nito.AsyncEx, Version=4.0.1.0, Culture=neutral, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\packages\\Nito.AsyncEx.4.0.1\\lib\\net45\\Nito.AsyncEx.dll</HintPath>\n      <Private>True</Private>\n    </Reference>\n    <Reference Include=\"Nito.AsyncEx.Concurrent, Version=4.0.1.0, Culture=neutral, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\packages\\Nito.AsyncEx.4.0.1\\lib\\net45\\Nito.AsyncEx.Concurrent.dll</HintPath>\n      <Private>True</Private>\n    </Reference>\n    <Reference Include=\"Nito.AsyncEx.Enlightenment, Version=4.0.1.0, Culture=neutral, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\packages\\Nito.AsyncEx.4.0.1\\lib\\net45\\Nito.AsyncEx.Enlightenment.dll</HintPath>\n      <Private>True</Private>\n    </Reference>\n    <Reference Include=\"System\" />\n    <Reference Include=\"System.Collections.Immutable, Version=1.2.1.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\packages\\System.Collections.Immutable.1.3.1\\lib\\portable-net45+win8+wp8+wpa81\\System.Collections.Immutable.dll</HintPath>\n      <Private>True</Private>\n    </Reference>\n    <Reference Include=\"System.ComponentModel.DataAnnotations\" />\n    <Reference Include=\"System.Configuration\" />\n    <Reference Include=\"System.Core\" />\n    <Reference Include=\"System.Linq.Dynamic, Version=1.0.6132.35681, Culture=neutral, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\packages\\System.Linq.Dynamic.1.0.7\\lib\\net40\\System.Linq.Dynamic.dll</HintPath>\n      <Private>True</Private>\n    </Reference>\n    <Reference Include=\"System.Net\" />\n    <Reference Include=\"System.Runtime.Caching\" />\n    <Reference Include=\"System.Transactions\" />\n    <Reference Include=\"System.Web\" />\n    <Reference Include=\"System.Web.Helpers, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\packages\\Microsoft.AspNet.WebPages.3.2.3\\lib\\net45\\System.Web.Helpers.dll</HintPath>\n      <Private>True</Private>\n    </Reference>\n    <Reference Include=\"System.Web.Mvc, Version=5.2.3.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\packages\\Microsoft.AspNet.Mvc.5.2.3\\lib\\net45\\System.Web.Mvc.dll</HintPath>\n      <Private>True</Private>\n    </Reference>\n    <Reference Include=\"System.Web.Razor, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\packages\\Microsoft.AspNet.Razor.3.2.3\\lib\\net45\\System.Web.Razor.dll</HintPath>\n      <Private>True</Private>\n    </Reference>\n    <Reference Include=\"System.Web.WebPages, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\packages\\Microsoft.AspNet.WebPages.3.2.3\\lib\\net45\\System.Web.WebPages.dll</HintPath>\n      <Private>True</Private>\n    </Reference>\n    <Reference Include=\"System.Web.WebPages.Deployment, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\packages\\Microsoft.AspNet.WebPages.3.2.3\\lib\\net45\\System.Web.WebPages.Deployment.dll</HintPath>\n      <Private>True</Private>\n    </Reference>\n    <Reference Include=\"System.Web.WebPages.Razor, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\packages\\Microsoft.AspNet.WebPages.3.2.3\\lib\\net45\\System.Web.WebPages.Razor.dll</HintPath>\n      <Private>True</Private>\n    </Reference>\n    <Reference Include=\"System.Xml.Linq\" />\n    <Reference Include=\"System.Data.DataSetExtensions\" />\n    <Reference Include=\"Microsoft.CSharp\" />\n    <Reference Include=\"System.Data\" />\n    <Reference Include=\"System.Net.Http\" />\n    <Reference Include=\"System.Xml\" />\n  </ItemGroup>\n  <ItemGroup>\n    <Compile Include=\"Properties\\AssemblyInfo.cs\" />\n    <Compile Include=\"Web\\Mvc\\AbpWebPlugInModule.cs\" />\n    <Compile Include=\"Web\\Mvc\\Controllers\\PlugInWindsorControllerFactory.cs\" />\n  </ItemGroup>\n  <ItemGroup />\n  <ItemGroup>\n    <None Include=\"Abplus.Web.PlugIns.csproj.nuspec\" />\n    <None Include=\"packages.config\" />\n  </ItemGroup>\n  <ItemGroup>\n    <ProjectReference Include=\"..\\Abplus\\Abplus.csproj\">\n      <Project>{1de8d8d1-987d-4a9c-aec5-ff0a9914bbd4}</Project>\n      <Name>Abplus</Name>\n    </ProjectReference>\n  </ItemGroup>\n  <Import Project=\"$(MSBuildToolsPath)\\Microsoft.CSharp.targets\" />\n  <Import Project=\"..\\..\\packages\\Microsoft.Bcl.Build.1.0.21\\build\\Microsoft.Bcl.Build.targets\" Condition=\"Exists('..\\..\\packages\\Microsoft.Bcl.Build.1.0.21\\build\\Microsoft.Bcl.Build.targets')\" />\n  <Target Name=\"EnsureNuGetPackageBuildImports\" BeforeTargets=\"PrepareForBuild\">\n    <PropertyGroup>\n      <ErrorText>这台计算机上缺少此项目引用的 NuGet 程序包。使用“NuGet 程序包还原”可下载这些程序包。有关更多信息，请参见 http://go.microsoft.com/fwlink/?LinkID=322105。缺少的文件是 {0}。</ErrorText>\n    </PropertyGroup>\n    <Error Condition=\"!Exists('..\\..\\packages\\Microsoft.Bcl.Build.1.0.21\\build\\Microsoft.Bcl.Build.targets')\" Text=\"$([System.String]::Format('$(ErrorText)', '..\\..\\packages\\Microsoft.Bcl.Build.1.0.21\\build\\Microsoft.Bcl.Build.targets'))\" />\n  </Target>\n  <!-- To modify your build process, add your task inside one of the targets below and uncomment it. \n       Other similar extension points exist, see Microsoft.Common.targets.\n  <Target Name=\"BeforeBuild\">\n  </Target>\n  <Target Name=\"AfterBuild\">\n  </Target>\n  -->\n</Project>"
  },
  {
    "path": "src2/Abplus.Web.PlugIns/Abplus.Web.PlugIns.csproj.nuspec",
    "content": "<?xml version=\"1.0\"?>\n<package >\n  <metadata>\n    <id>$id$</id>\n    <version>$version$</version>\n    <title>$title$</title>\n    <authors>personball</authors>\n    <owners>personball</owners>\n    <licenseUrl>https://raw.githubusercontent.com/personball/abplus/master/LICENSE</licenseUrl>\n    <projectUrl>https://github.com/personball/abplus</projectUrl>\n    <iconUrl>https://raw.githubusercontent.com/personball/abplus/master/abplus_icon.png</iconUrl>\n    <requireLicenseAcceptance>false</requireLicenseAcceptance>\n    <description>Abp plus, an extension for Abp Framework. </description>\n    <releaseNotes></releaseNotes>\n    <copyright>Copyright 2017</copyright>\n    <tags></tags>\n    <dependencies>\n      <dependency id=\"Abplus\" version=\"$version$\" />\n    </dependencies>\n  </metadata>\n</package>"
  },
  {
    "path": "src2/Abplus.Web.PlugIns/Properties/AssemblyInfo.cs",
    "content": "﻿using System.Reflection;\nusing System.Runtime.CompilerServices;\nusing System.Runtime.InteropServices;\n\n// 有关程序集的一般信息由以下\n// 控制。更改这些特性值可修改\n// 与程序集关联的信息。\n[assembly: AssemblyTitle(\"Abplus.Web.PlugIns\")]\n[assembly: AssemblyDescription(\"\")]\n[assembly: AssemblyConfiguration(\"\")]\n[assembly: AssemblyCompany(\"\")]\n[assembly: AssemblyProduct(\"Abplus.Web.PlugIns\")]\n[assembly: AssemblyCopyright(\"Copyright ©  2017\")]\n[assembly: AssemblyTrademark(\"\")]\n[assembly: AssemblyCulture(\"\")]\n\n//将 ComVisible 设置为 false 将使此程序集中的类型\n//对 COM 组件不可见。  如果需要从 COM 访问此程序集中的类型，\n//请将此类型的 ComVisible 特性设置为 true。\n[assembly: ComVisible(false)]\n\n// 如果此项目向 COM 公开，则下列 GUID 用于类型库的 ID\n[assembly: Guid(\"e834592d-71f9-49a4-a4fb-017a83712255\")]\n\n// 程序集的版本信息由下列四个值组成: \n//\n//      主版本\n//      次版本\n//      生成号\n//      修订号\n//\n//可以指定所有这些值，也可以使用“生成号”和“修订号”的默认值，\n// 方法是按如下所示使用“*”: :\n// [assembly: AssemblyVersion(\"1.0.*\")]\n[assembly: AssemblyVersion(Abp.AbplusConsts.CurrentVersion)]\n[assembly: AssemblyFileVersion(Abp.AbplusConsts.CurrentVersion)]\n"
  },
  {
    "path": "src2/Abplus.Web.PlugIns/Web/Mvc/AbpWebPlugInModule.cs",
    "content": "﻿using System;\nusing System.Linq;\nusing System.Web.Mvc;\nusing System.Web.Routing;\nusing Abp.Extensions;\nusing Abp.Modules;\nusing Abp.PlugIns;\nusing Abp.Web.Mvc.Controllers;\n\nnamespace Abp.Web.Mvc\n{\n    /// <summary>\n    /// If web host enable plugins, you should place code:\n    /// AbpBootstrapper.PlugInSources.Add(new FolderPlugInSource($\"{AppDomain.CurrentDomain.BaseDirectory.EnsureEndsWith('\\\\')}Plugins\", System.IO.SearchOption.AllDirectories));\n    /// before\n    /// base.Application_Start(sender, e);\n    /// in global.asax\n    /// </summary>\n    [DependsOn(typeof(AbpWebMvcModule))]\n    public class AbpWebPlugInModule : AbpModule\n    {\n        private readonly IAbpPlugInManager _abpPlugInManager;\n\n        public AbpWebPlugInModule(IAbpPlugInManager abpPlugInManager)\n        {\n            _abpPlugInManager = abpPlugInManager;\n        }\n\n        public override void PreInitialize()\n        {\n            var autoLoadTypes = _abpPlugInManager.PlugInSources.GetAllModules().Select(m => m.Assembly).Distinct().ToList()\n                .SelectMany(a => a.GetTypes())\n                .Where(t => t != null && t.IsPublic && !t.IsAbstract\n                && (typeof(IPlugInAreaRegistration).IsAssignableFrom(t)\n                   || typeof(IPlugInAuthorizationProvider).IsAssignableFrom(t)\n                   || typeof(IPlugInNavigationProvider).IsAssignableFrom(t))\n                ).ToList();\n\n            //Auto Load IPlugInAreaRegistration\n            foreach (var item in autoLoadTypes.Where(t => typeof(IPlugInAreaRegistration).IsAssignableFrom(t)))\n            {\n                if (!typeof(AreaRegistration).IsAssignableFrom(item))\n                {\n                    throw new AbpException($\"{item.FullName} should inherits from {typeof(AreaRegistration).FullName}\");\n                }\n\n                var instance = (AreaRegistration)Activator.CreateInstance(item);\n\n                AreaRegistrationContext context = new AreaRegistrationContext(instance.AreaName, RouteTable.Routes, null);\n\n                if (!item.Namespace.IsNullOrWhiteSpace())\n                {\n                    context.Namespaces.Add(item.Namespace + \".*\");\n                }\n\n                instance.RegisterArea(context);\n            }\n\n            //Auto Load IPlugInAuthorizationProvider\n            foreach (var item in autoLoadTypes.Where(t => typeof(IPlugInAuthorizationProvider).IsAssignableFrom(t)))\n            {\n                Configuration.Authorization.Providers.Add(item);\n            }\n\n            //Auto Load IPlugInNavigationProvider\n            foreach (var item in autoLoadTypes.Where(t => typeof(IPlugInNavigationProvider).IsAssignableFrom(t)))\n            {\n                Configuration.Navigation.Providers.Add(item);\n            }\n        }\n\n        public override void PostInitialize()\n        {\n            ControllerBuilder.Current.SetControllerFactory(new PlugInWindsorControllerFactory(IocManager, IocManager.Resolve<IAbpPlugInManager>()));\n        }\n    }\n}\n"
  },
  {
    "path": "src2/Abplus.Web.PlugIns/Web/Mvc/Controllers/PlugInWindsorControllerFactory.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Web.Mvc;\nusing System.Web.Routing;\nusing Abp.Dependency;\nusing Abp.PlugIns;\n\nnamespace Abp.Web.Mvc.Controllers\n{\n    public class PlugInWindsorControllerFactory : WindsorControllerFactory\n    {\n        private readonly IAbpPlugInManager _plugInManager;\n\n        private readonly object _locker = new object();\n        private volatile Dictionary<string, ILookup<string, Type>> _plugInControllerTypesCache;\n\n        public PlugInWindsorControllerFactory(IIocResolver iocManager, IAbpPlugInManager plugInManager) : base(iocManager)\n        {\n            _plugInManager = plugInManager;\n        }\n        protected override Type GetControllerType(RequestContext requestContext, string controllerName)\n        {\n            var controllerType = base.GetControllerType(requestContext, controllerName);\n\n            if (controllerType == null)\n            {\n                //TODO@personball Maybe it's better to search controllerType in IoC Container?\n                controllerType = GetControllerTypeFromPlugIns(requestContext, controllerName);\n            }\n\n            return controllerType;\n        }\n        \n        private Type GetControllerTypeFromPlugIns(RequestContext requestContext, string controllerName)\n        {\n            InitPlugInControllerTypesCache();\n\n            HashSet<Type> matchingTypes = new HashSet<Type>();\n\n            ILookup<string, Type> namespaceLookup;\n            if (_plugInControllerTypesCache.TryGetValue(controllerName, out namespaceLookup))\n            {\n                //TODO@personball Should deal with namespace.\n\n                // this friendly name was located in the cache, now cycle through namespaces\n                //if (namespaces != null)\n                //{\n                //    foreach (string requestedNamespace in namespaces)\n                //    {\n                //        foreach (var targetNamespaceGrouping in namespaceLookup)\n                //        {\n                //            if (IsNamespaceMatch(requestedNamespace, targetNamespaceGrouping.Key))\n                //            {\n                //                matchingTypes.UnionWith(targetNamespaceGrouping);\n                //            }\n                //        }\n                //    }\n                //}\n                //else\n                //{\n                // if the namespaces parameter is null, search *every* namespace\n                foreach (var namespaceGroup in namespaceLookup)\n                {\n                    matchingTypes.UnionWith(namespaceGroup);\n                }\n                //}\n            }\n\n            switch (matchingTypes.Count)\n            {\n                case 0: return null;\n                case 1: return matchingTypes.First();\n                default:\n                    throw new InvalidOperationException(\"AmbiguousControllerTypeFromPlugIns\");\n            }\n        }\n\n        private void InitPlugInControllerTypesCache()\n        {\n            if (_plugInControllerTypesCache == null)\n            {\n                lock (_locker)\n                {\n                    if (_plugInControllerTypesCache == null)\n                    {\n                        var controllerTypes = _plugInManager.PlugInSources\n                                .GetAllModules().Select(m => m.Assembly).Distinct().ToList()\n                                .SelectMany(a => a.GetTypes())\n                                .Where(t =>\n                                t != null && t.IsPublic && !t.IsAbstract\n                                && typeof(IController).IsAssignableFrom(t)\n                                && t.Name.EndsWith(\"Controller\", StringComparison.OrdinalIgnoreCase))\n                                .ToList();\n\n                        var groupedByName = controllerTypes.GroupBy(\n                          t => t.Name.Substring(0, t.Name.Length - \"Controller\".Length),\n                          StringComparer.OrdinalIgnoreCase);\n                        _plugInControllerTypesCache = groupedByName.ToDictionary(\n                            g => g.Key,\n                            g => g.ToLookup(t => t.Namespace ?? String.Empty, StringComparer.OrdinalIgnoreCase),\n                            StringComparer.OrdinalIgnoreCase);\n                    }\n                }\n            }\n        }\n\n    }\n}\n"
  },
  {
    "path": "src2/Abplus.Web.PlugIns/packages.config",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<packages>\n  <package id=\"Abp\" version=\"1.4.2.0\" targetFramework=\"net461\" />\n  <package id=\"Abp.Web\" version=\"1.4.2.0\" targetFramework=\"net461\" />\n  <package id=\"Abp.Web.Common\" version=\"1.4.2.0\" targetFramework=\"net461\" />\n  <package id=\"Abp.Web.Mvc\" version=\"1.4.2.0\" targetFramework=\"net461\" />\n  <package id=\"Castle.Core\" version=\"3.3.0\" targetFramework=\"net461\" />\n  <package id=\"Castle.LoggingFacility\" version=\"3.4.0\" targetFramework=\"net461\" />\n  <package id=\"Castle.Windsor\" version=\"3.4.0\" targetFramework=\"net461\" />\n  <package id=\"Microsoft.AspNet.Mvc\" version=\"5.2.3\" targetFramework=\"net461\" />\n  <package id=\"Microsoft.AspNet.Razor\" version=\"3.2.3\" targetFramework=\"net461\" />\n  <package id=\"Microsoft.AspNet.WebPages\" version=\"3.2.3\" targetFramework=\"net461\" />\n  <package id=\"Microsoft.Bcl\" version=\"1.1.10\" targetFramework=\"net461\" />\n  <package id=\"Microsoft.Bcl.Async\" version=\"1.0.168\" targetFramework=\"net461\" />\n  <package id=\"Microsoft.Bcl.Build\" version=\"1.0.21\" targetFramework=\"net461\" />\n  <package id=\"Microsoft.Web.Infrastructure\" version=\"1.0.0.0\" targetFramework=\"net461\" />\n  <package id=\"Newtonsoft.Json\" version=\"9.0.1\" targetFramework=\"net461\" />\n  <package id=\"Nito.AsyncEx\" version=\"4.0.1\" targetFramework=\"net461\" />\n  <package id=\"System.Collections.Immutable\" version=\"1.3.1\" targetFramework=\"net461\" />\n  <package id=\"System.Linq.Dynamic\" version=\"1.0.7\" targetFramework=\"net461\" />\n</packages>"
  },
  {
    "path": "src2/Abplus.Web.SignalR/Abplus.Web.SignalR.csproj",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<Project ToolsVersion=\"14.0\" DefaultTargets=\"Build\" xmlns=\"http://schemas.microsoft.com/developer/msbuild/2003\">\n  <Import Project=\"$(MSBuildExtensionsPath)\\$(MSBuildToolsVersion)\\Microsoft.Common.props\" Condition=\"Exists('$(MSBuildExtensionsPath)\\$(MSBuildToolsVersion)\\Microsoft.Common.props')\" />\n  <PropertyGroup>\n    <Configuration Condition=\" '$(Configuration)' == '' \">Debug</Configuration>\n    <Platform Condition=\" '$(Platform)' == '' \">AnyCPU</Platform>\n    <ProjectGuid>{27F80F3E-AEC9-47BC-8FF0-2FE9197A2293}</ProjectGuid>\n    <OutputType>Library</OutputType>\n    <AppDesignerFolder>Properties</AppDesignerFolder>\n    <RootNamespace>Abp</RootNamespace>\n    <AssemblyName>Abplus.Web.SignalR</AssemblyName>\n    <TargetFrameworkVersion>v4.6.1</TargetFrameworkVersion>\n    <FileAlignment>512</FileAlignment>\n    <NuGetPackageImportStamp>\n    </NuGetPackageImportStamp>\n  </PropertyGroup>\n  <PropertyGroup Condition=\" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' \">\n    <DebugSymbols>true</DebugSymbols>\n    <DebugType>full</DebugType>\n    <Optimize>false</Optimize>\n    <OutputPath>bin\\Debug\\</OutputPath>\n    <DefineConstants>DEBUG;TRACE</DefineConstants>\n    <ErrorReport>prompt</ErrorReport>\n    <WarningLevel>4</WarningLevel>\n  </PropertyGroup>\n  <PropertyGroup Condition=\" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' \">\n    <DebugType>pdbonly</DebugType>\n    <Optimize>true</Optimize>\n    <OutputPath>bin\\Release\\</OutputPath>\n    <DefineConstants>TRACE</DefineConstants>\n    <ErrorReport>prompt</ErrorReport>\n    <WarningLevel>4</WarningLevel>\n    <DocumentationFile>bin\\Release\\Abplus.Web.SignalR.XML</DocumentationFile>\n  </PropertyGroup>\n  <ItemGroup>\n    <Reference Include=\"Abp, Version=3.7.2.0, Culture=neutral, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\packages\\Abp.3.7.2\\lib\\netstandard2.0\\Abp.dll</HintPath>\n    </Reference>\n    <Reference Include=\"Abp.Web.SignalR, Version=3.7.2.0, Culture=neutral, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\packages\\Abp.Web.SignalR.3.7.2\\lib\\net461\\Abp.Web.SignalR.dll</HintPath>\n    </Reference>\n    <Reference Include=\"Castle.Core, Version=4.0.0.0, Culture=neutral, PublicKeyToken=407dd0808d44fbdc, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\packages\\Castle.Core.4.3.1\\lib\\net45\\Castle.Core.dll</HintPath>\n    </Reference>\n    <Reference Include=\"Castle.Facilities.Logging, Version=4.0.0.0, Culture=neutral, PublicKeyToken=407dd0808d44fbdc, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\packages\\Castle.LoggingFacility.4.1.0\\lib\\net45\\Castle.Facilities.Logging.dll</HintPath>\n    </Reference>\n    <Reference Include=\"Castle.Windsor, Version=4.0.0.0, Culture=neutral, PublicKeyToken=407dd0808d44fbdc, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\packages\\Castle.Windsor.4.1.0\\lib\\net45\\Castle.Windsor.dll</HintPath>\n    </Reference>\n    <Reference Include=\"JetBrains.Annotations, Version=11.1.0.0, Culture=neutral, PublicKeyToken=1010a0d8d6380325, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\packages\\JetBrains.Annotations.11.1.0\\lib\\net20\\JetBrains.Annotations.dll</HintPath>\n    </Reference>\n    <Reference Include=\"Microsoft.AspNet.SignalR.Core, Version=2.2.3.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\packages\\Microsoft.AspNet.SignalR.Core.2.2.3\\lib\\net45\\Microsoft.AspNet.SignalR.Core.dll</HintPath>\n    </Reference>\n    <Reference Include=\"Microsoft.Extensions.Caching.Abstractions, Version=2.1.0.0, Culture=neutral, PublicKeyToken=adb9793829ddae60, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\packages\\Microsoft.Extensions.Caching.Abstractions.2.1.0\\lib\\netstandard2.0\\Microsoft.Extensions.Caching.Abstractions.dll</HintPath>\n    </Reference>\n    <Reference Include=\"Microsoft.Extensions.Caching.Memory, Version=2.1.0.0, Culture=neutral, PublicKeyToken=adb9793829ddae60, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\packages\\Microsoft.Extensions.Caching.Memory.2.1.0\\lib\\netstandard2.0\\Microsoft.Extensions.Caching.Memory.dll</HintPath>\n    </Reference>\n    <Reference Include=\"Microsoft.Extensions.DependencyInjection.Abstractions, Version=2.1.0.0, Culture=neutral, PublicKeyToken=adb9793829ddae60, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\packages\\Microsoft.Extensions.DependencyInjection.Abstractions.2.1.0\\lib\\netstandard2.0\\Microsoft.Extensions.DependencyInjection.Abstractions.dll</HintPath>\n    </Reference>\n    <Reference Include=\"Microsoft.Extensions.Options, Version=2.1.0.0, Culture=neutral, PublicKeyToken=adb9793829ddae60, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\packages\\Microsoft.Extensions.Options.2.1.0\\lib\\netstandard2.0\\Microsoft.Extensions.Options.dll</HintPath>\n    </Reference>\n    <Reference Include=\"Microsoft.Extensions.Primitives, Version=2.1.0.0, Culture=neutral, PublicKeyToken=adb9793829ddae60, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\packages\\Microsoft.Extensions.Primitives.2.1.0\\lib\\netstandard2.0\\Microsoft.Extensions.Primitives.dll</HintPath>\n    </Reference>\n    <Reference Include=\"Microsoft.Owin, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\packages\\Microsoft.Owin.4.0.0\\lib\\net451\\Microsoft.Owin.dll</HintPath>\n    </Reference>\n    <Reference Include=\"Microsoft.Owin.Security, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\packages\\Microsoft.Owin.Security.4.0.0\\lib\\net451\\Microsoft.Owin.Security.dll</HintPath>\n    </Reference>\n    <Reference Include=\"Microsoft.Threading.Tasks, Version=1.0.12.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\packages\\Microsoft.Bcl.Async.1.0.168\\lib\\net40\\Microsoft.Threading.Tasks.dll</HintPath>\n      <Private>True</Private>\n    </Reference>\n    <Reference Include=\"Microsoft.Threading.Tasks.Extensions, Version=1.0.12.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\packages\\Microsoft.Bcl.Async.1.0.168\\lib\\net40\\Microsoft.Threading.Tasks.Extensions.dll</HintPath>\n      <Private>True</Private>\n    </Reference>\n    <Reference Include=\"Microsoft.Threading.Tasks.Extensions.Desktop, Version=1.0.168.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\packages\\Microsoft.Bcl.Async.1.0.168\\lib\\net40\\Microsoft.Threading.Tasks.Extensions.Desktop.dll</HintPath>\n      <Private>True</Private>\n    </Reference>\n    <Reference Include=\"Newtonsoft.Json, Version=11.0.0.0, Culture=neutral, PublicKeyToken=30ad4fe6b2a6aeed, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\packages\\Newtonsoft.Json.11.0.2\\lib\\net45\\Newtonsoft.Json.dll</HintPath>\n    </Reference>\n    <Reference Include=\"Nito.AsyncEx, Version=4.0.1.0, Culture=neutral, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\packages\\Nito.AsyncEx.4.0.1\\lib\\net45\\Nito.AsyncEx.dll</HintPath>\n      <Private>True</Private>\n    </Reference>\n    <Reference Include=\"Nito.AsyncEx.Concurrent, Version=4.0.1.0, Culture=neutral, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\packages\\Nito.AsyncEx.4.0.1\\lib\\net45\\Nito.AsyncEx.Concurrent.dll</HintPath>\n      <Private>True</Private>\n    </Reference>\n    <Reference Include=\"Nito.AsyncEx.Context, Version=1.1.0.0, Culture=neutral, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\packages\\Nito.AsyncEx.Context.1.1.0\\lib\\net46\\Nito.AsyncEx.Context.dll</HintPath>\n    </Reference>\n    <Reference Include=\"Nito.AsyncEx.Coordination, Version=1.0.2.0, Culture=neutral, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\packages\\Nito.AsyncEx.Coordination.1.0.2\\lib\\net46\\Nito.AsyncEx.Coordination.dll</HintPath>\n    </Reference>\n    <Reference Include=\"Nito.AsyncEx.Enlightenment, Version=4.0.1.0, Culture=neutral, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\packages\\Nito.AsyncEx.4.0.1\\lib\\net45\\Nito.AsyncEx.Enlightenment.dll</HintPath>\n      <Private>True</Private>\n    </Reference>\n    <Reference Include=\"Nito.AsyncEx.Tasks, Version=1.1.0.0, Culture=neutral, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\packages\\Nito.AsyncEx.Tasks.1.1.0\\lib\\net46\\Nito.AsyncEx.Tasks.dll</HintPath>\n    </Reference>\n    <Reference Include=\"Nito.Collections.Deque, Version=1.0.4.0, Culture=neutral, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\packages\\Nito.Collections.Deque.1.0.4\\lib\\netstandard2.0\\Nito.Collections.Deque.dll</HintPath>\n    </Reference>\n    <Reference Include=\"Nito.Disposables, Version=1.2.3.0, Culture=neutral, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\packages\\Nito.Disposables.1.2.3\\lib\\netstandard2.0\\Nito.Disposables.dll</HintPath>\n    </Reference>\n    <Reference Include=\"Owin, Version=1.0.0.0, Culture=neutral, PublicKeyToken=f0ebd12fd5e55cc5, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\packages\\Owin.1.0\\lib\\net40\\Owin.dll</HintPath>\n      <Private>True</Private>\n    </Reference>\n    <Reference Include=\"StackExchange.Redis, Version=1.2.6.0, Culture=neutral, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\packages\\StackExchange.Redis.1.2.6\\lib\\net46\\StackExchange.Redis.dll</HintPath>\n    </Reference>\n    <Reference Include=\"System\" />\n    <Reference Include=\"System.Buffers, Version=4.0.2.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\packages\\System.Buffers.4.4.0\\lib\\netstandard2.0\\System.Buffers.dll</HintPath>\n    </Reference>\n    <Reference Include=\"System.Collections.Immutable, Version=1.2.3.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\packages\\System.Collections.Immutable.1.5.0\\lib\\netstandard2.0\\System.Collections.Immutable.dll</HintPath>\n    </Reference>\n    <Reference Include=\"System.ComponentModel.Annotations, Version=4.2.1.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\packages\\System.ComponentModel.Annotations.4.5.0\\lib\\net461\\System.ComponentModel.Annotations.dll</HintPath>\n    </Reference>\n    <Reference Include=\"System.ComponentModel.DataAnnotations\" />\n    <Reference Include=\"System.Configuration\" />\n    <Reference Include=\"System.Configuration.ConfigurationManager, Version=4.0.1.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\packages\\System.Configuration.ConfigurationManager.4.5.0\\lib\\net461\\System.Configuration.ConfigurationManager.dll</HintPath>\n    </Reference>\n    <Reference Include=\"System.Core\" />\n    <Reference Include=\"System.Data.Common, Version=4.1.1.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\packages\\System.Data.Common.4.3.0\\lib\\net451\\System.Data.Common.dll</HintPath>\n      <Private>True</Private>\n    </Reference>\n    <Reference Include=\"System.Data.OracleClient\" />\n    <Reference Include=\"System.Drawing\" />\n    <Reference Include=\"System.IO.Compression\" />\n    <Reference Include=\"System.Linq.Dynamic, Version=1.0.6132.35681, Culture=neutral, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\packages\\System.Linq.Dynamic.1.0.7\\lib\\net40\\System.Linq.Dynamic.dll</HintPath>\n      <Private>True</Private>\n    </Reference>\n    <Reference Include=\"System.Linq.Dynamic.Core, Version=0.0.0.0, Culture=neutral, PublicKeyToken=0f07ec44de6ac832, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\packages\\System.Linq.Dynamic.Core.1.0.8.9\\lib\\net46\\System.Linq.Dynamic.Core.dll</HintPath>\n    </Reference>\n    <Reference Include=\"System.Memory, Version=4.0.1.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\packages\\System.Memory.4.5.0\\lib\\netstandard2.0\\System.Memory.dll</HintPath>\n    </Reference>\n    <Reference Include=\"System.Net\" />\n    <Reference Include=\"System.Numerics\" />\n    <Reference Include=\"System.Numerics.Vectors, Version=4.1.3.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\packages\\System.Numerics.Vectors.4.4.0\\lib\\net46\\System.Numerics.Vectors.dll</HintPath>\n    </Reference>\n    <Reference Include=\"System.Runtime.Caching\" />\n    <Reference Include=\"System.Runtime.CompilerServices.Unsafe, Version=4.0.4.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\packages\\System.Runtime.CompilerServices.Unsafe.4.5.0\\lib\\netstandard2.0\\System.Runtime.CompilerServices.Unsafe.dll</HintPath>\n    </Reference>\n    <Reference Include=\"System.Runtime.InteropServices.RuntimeInformation, Version=4.0.1.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\packages\\System.Runtime.InteropServices.RuntimeInformation.4.3.0\\lib\\net45\\System.Runtime.InteropServices.RuntimeInformation.dll</HintPath>\n      <Private>True</Private>\n    </Reference>\n    <Reference Include=\"System.Runtime.Remoting\" />\n    <Reference Include=\"System.Runtime.Serialization\" />\n    <Reference Include=\"System.Runtime.Serialization.Formatters, Version=4.0.1.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\packages\\System.Runtime.Serialization.Formatters.4.3.0\\lib\\net46\\System.Runtime.Serialization.Formatters.dll</HintPath>\n      <Private>True</Private>\n    </Reference>\n    <Reference Include=\"System.Runtime.Serialization.Primitives, Version=4.1.2.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\packages\\System.Runtime.Serialization.Primitives.4.3.0\\lib\\net46\\System.Runtime.Serialization.Primitives.dll</HintPath>\n      <Private>True</Private>\n    </Reference>\n    <Reference Include=\"System.Security.AccessControl, Version=4.1.1.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\packages\\System.Security.AccessControl.4.5.0\\lib\\net461\\System.Security.AccessControl.dll</HintPath>\n    </Reference>\n    <Reference Include=\"System.Security.Claims, Version=4.0.2.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\packages\\System.Security.Claims.4.3.0\\lib\\net46\\System.Security.Claims.dll</HintPath>\n      <Private>True</Private>\n    </Reference>\n    <Reference Include=\"System.Security.Permissions, Version=4.0.1.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\packages\\System.Security.Permissions.4.5.0\\lib\\net461\\System.Security.Permissions.dll</HintPath>\n    </Reference>\n    <Reference Include=\"System.Security.Principal.Windows, Version=4.1.1.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\packages\\System.Security.Principal.Windows.4.5.0\\lib\\net461\\System.Security.Principal.Windows.dll</HintPath>\n    </Reference>\n    <Reference Include=\"System.ServiceProcess\" />\n    <Reference Include=\"System.Transactions\" />\n    <Reference Include=\"System.Web\" />\n    <Reference Include=\"System.Xml.Linq\" />\n    <Reference Include=\"System.Data.DataSetExtensions\" />\n    <Reference Include=\"Microsoft.CSharp\" />\n    <Reference Include=\"System.Data\" />\n    <Reference Include=\"System.Net.Http\" />\n    <Reference Include=\"System.Xml\" />\n    <Reference Include=\"System.Xml.XmlDocument, Version=4.0.2.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\packages\\System.Xml.XmlDocument.4.3.0\\lib\\net46\\System.Xml.XmlDocument.dll</HintPath>\n      <Private>True</Private>\n    </Reference>\n    <Reference Include=\"System.Xml.XPath, Version=4.0.2.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\packages\\System.Xml.XPath.4.3.0\\lib\\net46\\System.Xml.XPath.dll</HintPath>\n      <Private>True</Private>\n    </Reference>\n    <Reference Include=\"System.Xml.XPath.XmlDocument, Version=4.0.2.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\packages\\System.Xml.XPath.XmlDocument.4.3.0\\lib\\net46\\System.Xml.XPath.XmlDocument.dll</HintPath>\n    </Reference>\n    <Reference Include=\"TimeZoneConverter, Version=2.4.1.0, Culture=neutral, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\packages\\TimeZoneConverter.2.4.1\\lib\\net45\\TimeZoneConverter.dll</HintPath>\n    </Reference>\n  </ItemGroup>\n  <ItemGroup>\n    <Compile Include=\"Configuration\\Startup\\RedisOnlineClientManagerConfiguationExtensions.cs\" />\n    <Compile Include=\"Properties\\AssemblyInfo.cs\" />\n    <Compile Include=\"RealTime\\IRedisOnlineClientManagerModuleConfig.cs\" />\n    <Compile Include=\"RealTime\\RedisOnlineClientManager.cs\" />\n    <Compile Include=\"RealTime\\RedisOnlineClientManagerModule.cs\" />\n    <Compile Include=\"RealTime\\RedisOnlineClientManagerModuleConfig.cs\" />\n    <Compile Include=\"Web\\SignalR\\QrScan\\SignalRQrCodeScannedRealTimeNotifier.cs\" />\n    <Compile Include=\"Web\\SignalR\\QrScan\\SignalRQrCodeScannedRealTimeNotifierModule.cs\" />\n  </ItemGroup>\n  <ItemGroup>\n    <None Include=\"Abplus.Web.SignalR.nuspec\" />\n    <None Include=\"app.config\" />\n    <None Include=\"packages.config\" />\n  </ItemGroup>\n  <ItemGroup>\n    <ProjectReference Include=\"..\\Abplus\\Abplus.csproj\">\n      <Project>{1de8d8d1-987d-4a9c-aec5-ff0a9914bbd4}</Project>\n      <Name>Abplus</Name>\n    </ProjectReference>\n  </ItemGroup>\n  <Import Project=\"$(MSBuildToolsPath)\\Microsoft.CSharp.targets\" />\n  <Import Project=\"..\\..\\packages\\Microsoft.Bcl.Build.1.0.21\\build\\Microsoft.Bcl.Build.targets\" Condition=\"Exists('..\\..\\packages\\Microsoft.Bcl.Build.1.0.21\\build\\Microsoft.Bcl.Build.targets')\" />\n  <Target Name=\"EnsureNuGetPackageBuildImports\" BeforeTargets=\"PrepareForBuild\">\n    <PropertyGroup>\n      <ErrorText>这台计算机上缺少此项目引用的 NuGet 程序包。使用“NuGet 程序包还原”可下载这些程序包。有关更多信息，请参见 http://go.microsoft.com/fwlink/?LinkID=322105。缺少的文件是 {0}。</ErrorText>\n    </PropertyGroup>\n    <Error Condition=\"!Exists('..\\..\\packages\\Microsoft.Bcl.Build.1.0.21\\build\\Microsoft.Bcl.Build.targets')\" Text=\"$([System.String]::Format('$(ErrorText)', '..\\..\\packages\\Microsoft.Bcl.Build.1.0.21\\build\\Microsoft.Bcl.Build.targets'))\" />\n  </Target>\n  <!-- To modify your build process, add your task inside one of the targets below and uncomment it. \n       Other similar extension points exist, see Microsoft.Common.targets.\n  <Target Name=\"BeforeBuild\">\n  </Target>\n  <Target Name=\"AfterBuild\">\n  </Target>\n  -->\n</Project>"
  },
  {
    "path": "src2/Abplus.Web.SignalR/Abplus.Web.SignalR.nuspec",
    "content": "<?xml version=\"1.0\"?>\n<package>\n  <metadata>\n    <id>$id$</id>\n    <version>$version$</version>\n    <title>$title$</title>\n    <authors>personball</authors>\n    <owners>personball</owners>\n    <licenseUrl>https://raw.githubusercontent.com/personball/abplus/master/LICENSE</licenseUrl>\n    <projectUrl>https://github.com/personball/abplus</projectUrl>\n    <iconUrl>https://raw.githubusercontent.com/personball/abplus/master/abplus_icon.png</iconUrl>\n    <requireLicenseAcceptance>false</requireLicenseAcceptance>\n    <description>Abp plus, an extension for Abp Framework. </description>\n    <releaseNotes></releaseNotes>\n    <copyright>Copyright 2017</copyright>\n    <tags></tags>\n    <dependencies>\n      <dependency id=\"Abplus\" version=\"$version$\" />\n    </dependencies>\n  </metadata>\n</package>"
  },
  {
    "path": "src2/Abplus.Web.SignalR/Configuration/Startup/RedisOnlineClientManagerConfiguationExtensions.cs",
    "content": "﻿using Abp.Configuration.Startup;\nusing Abp.RealTime;\n\nnamespace Abp.Configuration.Startup\n{\n    public static class RedisOnlineClientManagerConfiguationExtensions\n    {\n        public static IRedisOnlineClientManagerModuleConfig UseRedisOnlineClientManager(this IModuleConfigurations configurations)\n        {\n            return configurations.AbpConfiguration.GetOrCreate(\"Modules.Abplus.RedisOnlineClientManager\", () => configurations.AbpConfiguration.IocManager.Resolve<IRedisOnlineClientManagerModuleConfig>());\n        }\n    }\n}\n"
  },
  {
    "path": "src2/Abplus.Web.SignalR/Properties/AssemblyInfo.cs",
    "content": "﻿using System.Reflection;\nusing System.Runtime.CompilerServices;\nusing System.Runtime.InteropServices;\nusing Abp;\n\n// 有关程序集的一般信息由以下\n// 控制。更改这些特性值可修改\n// 与程序集关联的信息。\n[assembly: AssemblyTitle(\"Abplus.Web.SignalR\")]\n[assembly: AssemblyDescription(\"\")]\n[assembly: AssemblyConfiguration(\"\")]\n[assembly: AssemblyCompany(\"\")]\n[assembly: AssemblyProduct(\"Abplus.Web.SignalR\")]\n[assembly: AssemblyCopyright(\"Copyright ©  2016\")]\n[assembly: AssemblyTrademark(\"\")]\n[assembly: AssemblyCulture(\"\")]\n\n//将 ComVisible 设置为 false 将使此程序集中的类型\n//对 COM 组件不可见。  如果需要从 COM 访问此程序集中的类型，\n//请将此类型的 ComVisible 特性设置为 true。\n[assembly: ComVisible(false)]\n\n// 如果此项目向 COM 公开，则下列 GUID 用于类型库的 ID\n[assembly: Guid(\"27f80f3e-aec9-47bc-8ff0-2fe9197a2293\")]\n\n// 程序集的版本信息由下列四个值组成: \n//\n//      主版本\n//      次版本\n//      生成号\n//      修订号\n//\n//可以指定所有这些值，也可以使用“生成号”和“修订号”的默认值，\n// 方法是按如下所示使用“*”: :\n// [assembly: AssemblyVersion(\"1.0.*\")]\n[assembly: AssemblyVersion(AbplusConsts.CurrentVersion)]\n[assembly: AssemblyFileVersion(AbplusConsts.CurrentVersion)]\n"
  },
  {
    "path": "src2/Abplus.Web.SignalR/RealTime/IRedisOnlineClientManagerModuleConfig.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Text;\nusing System.Threading.Tasks;\n\nnamespace Abp.RealTime\n{\n    public interface IRedisOnlineClientManagerModuleConfig\n    {\n        /// <summary>\n        /// Redis连接字符串\n        /// </summary>\n        string ConnectionString { get;  }\n\n        /// <summary>\n        /// 在线状态列表存储的键名\n        /// </summary>\n        string StoreKey { get; }\n\n\n        IRedisOnlineClientManagerModuleConfig ConnectTo(string connectionString);\n\n        IRedisOnlineClientManagerModuleConfig WithStoreKey(string storeKey);\n    }\n}\n"
  },
  {
    "path": "src2/Abplus.Web.SignalR/RealTime/RedisOnlineClientManager.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.Collections.Immutable;\nusing Abp.Dependency;\nusing Abp.Extensions;\nusing Abp.Json;\nusing Castle.Core.Logging;\nusing Newtonsoft.Json;\nusing StackExchange.Redis;\n\nnamespace Abp.RealTime\n{\n    /// <summary>\n    /// 基于Redis的OnlineClientManager\n    /// </summary>\n    public class RedisOnlineClientManager : IOnlineClientManager\n    {\n        /// <summary>\n        /// Client 连接成功时\n        /// </summary>\n        public event EventHandler<OnlineClientEventArgs> ClientConnected;\n        /// <summary>\n        /// Client断开连接时\n        /// </summary>\n        public event EventHandler<OnlineClientEventArgs> ClientDisconnected;\n        /// <summary>\n        /// 用户连接成功时\n        /// </summary>\n        public event EventHandler<OnlineUserEventArgs> UserConnected;\n        /// <summary>\n        /// 用户断开连接时\n        /// </summary>\n        public event EventHandler<OnlineUserEventArgs> UserDisconnected;\n\n        private readonly string _connectionString;\n        private readonly string _storeKey;\n        private readonly string _clientStoreKey;\n        private readonly string _userStoreKey;\n\n        private readonly Lazy<ConnectionMultiplexer> _connectionMultiplexer;\n\n        private readonly object _syncObj = new object();\n\n        /// <summary>\n        /// 日志\n        /// </summary>\n        public ILogger Logger { get; set; }\n\n        /// <summary>\n        /// ctor\n        /// </summary>\n        public RedisOnlineClientManager()\n        {\n            var config = IocManager.Instance.Resolve<IRedisOnlineClientManagerModuleConfig>();\n            if (config == null || config.ConnectionString.IsNullOrWhiteSpace() || config.StoreKey.IsNullOrWhiteSpace())\n            {\n                throw new Exception(\"RedisOnlineClientManagerModuleConfig is invalid!\");\n            }\n\n            _connectionString = config.ConnectionString;\n            _storeKey = config.StoreKey;\n            _clientStoreKey = _storeKey + \".Clients\";\n            _userStoreKey = _storeKey + \".Users\";\n            Logger = NullLogger.Instance;\n\n            _connectionMultiplexer = new Lazy<ConnectionMultiplexer>(CreateConnectionMultiplexer);\n        }\n\n        private ConnectionMultiplexer CreateConnectionMultiplexer()\n        {\n            return ConnectionMultiplexer.Connect(_connectionString);\n        }\n\n        /// <summary>\n        /// 获取Redis Database\n        /// </summary>\n        /// <returns></returns>\n        protected IDatabase GetDatabase()\n        {\n            return _connectionMultiplexer.Value.GetDatabase();\n        }\n\n        /// <summary>\n        /// 添加Client\n        /// </summary>\n        /// <param name=\"client\"></param>\n        public void Add(IOnlineClient client)\n        {\n            lock (_syncObj)\n            {\n                var userWasAlreadyOnline = false;\n                var user = client.ToUserIdentifierOrNull();\n\n                if (user != null)\n                {\n                    userWasAlreadyOnline = IsUserOnline(user);\n                }\n\n                AddClientToRedisStore(client);\n\n                ClientConnected.InvokeSafely(this, new OnlineClientEventArgs(client));\n\n                if (user != null && !userWasAlreadyOnline)\n                {\n                    UserConnected.InvokeSafely(this, new OnlineUserEventArgs(user, client));\n                }\n            }\n        }\n\n        private bool IsUserOnline(UserIdentifier user)\n        {\n            var _database = GetDatabase();\n            return _database.HashExists(_userStoreKey, user.ToUserIdentifierString());\n        }\n\n        private void AddClientToRedisStore(IOnlineClient client)\n        {\n            var _database = GetDatabase();\n            _database.HashSet(_clientStoreKey, new HashEntry[] { new HashEntry(client.ConnectionId, client.ToString()) });\n            var userId = client.ToUserIdentifierOrNull();\n            if (userId == null)\n            {\n                return;\n            }\n\n            var userClients = new List<string>();\n            var userClientsValue = _database.HashGet(_userStoreKey, userId.ToUserIdentifierString());\n            if (userClientsValue.HasValue)\n            {\n                userClients = JsonConvert.DeserializeObject<List<string>>(userClientsValue);\n            }\n\n            if (userClients.Contains(client.ConnectionId))\n            {\n                return;\n            }\n\n            userClients.Add(client.ConnectionId);\n            _database.HashSet(_userStoreKey, new HashEntry[] { new HashEntry(userId.ToUserIdentifierString(), userClients.ToJsonString()) });\n        }\n\n        /// <summary>\n        /// 获取所有Clients\n        /// </summary>\n        /// <returns></returns>\n        public IReadOnlyList<IOnlineClient> GetAllClients()\n        {\n            lock (_syncObj)\n            {\n                var _database = GetDatabase();\n                var clientsEntries = _database.HashGetAll(_clientStoreKey);\n                var clients = new List<IOnlineClient>();\n                foreach (var entry in clientsEntries)\n                {\n                    clients.Add(JsonConvert.DeserializeObject<OnlineClient>(entry.Value));\n                }\n\n                return clients.ToImmutableList();\n            }\n        }\n\n        /// <summary>\n        /// 根据连接id获取client\n        /// </summary>\n        /// <param name=\"connectionId\"></param>\n        /// <returns></returns>\n        public IOnlineClient GetByConnectionIdOrNull(string connectionId)\n        {\n            lock (_syncObj)\n            {\n                var _database = GetDatabase();\n                var clientValue = _database.HashGet(_clientStoreKey, connectionId);\n                if (clientValue.IsNullOrEmpty)\n                {\n                    return null;\n                }\n\n                return JsonConvert.DeserializeObject<OnlineClient>(clientValue);\n            }\n        }\n\n        /// <summary>\n        /// 移除Client\n        /// </summary>\n        /// <param name=\"connectionId\"></param>\n        /// <returns></returns>\n        public bool Remove(string connectionId)\n        {\n            lock (_syncObj)\n            {\n                var _database = GetDatabase();\n                var clientValue = _database.HashGet(_clientStoreKey, connectionId);\n                if (clientValue.IsNullOrEmpty)\n                {\n                    return true;\n                }\n\n                var client = JsonConvert.DeserializeObject<OnlineClient>(clientValue);\n                var user = client.ToUserIdentifierOrNull();\n                if (user != null)\n                {\n                    //从_userStoreKey中移除一个client\n                    var userClientsValue = _database.HashGet(_userStoreKey, user.ToUserIdentifierString());\n                    if (userClientsValue.HasValue)\n                    {\n                        var userClients = JsonConvert.DeserializeObject<List<string>>(userClientsValue);\n                        userClients.Remove(connectionId);\n                        if (userClients.Count > 0)\n                        {\n                            //更新\n                            _database.HashSet(_userStoreKey, new HashEntry[] { new HashEntry(user.ToUserIdentifierString(), userClients.ToJsonString()) });\n                        }\n                        else\n                        {\n                            //删除\n                            _database.HashDelete(_userStoreKey, user.ToUserIdentifierString());\n                        }\n                    }\n\n                    _database.HashDelete(_clientStoreKey, connectionId);\n\n                    if (!IsUserOnline(user))\n                    {\n                        UserDisconnected.InvokeSafely(this, new OnlineUserEventArgs(user, client));\n                    }\n                }\n\n                ClientDisconnected.InvokeSafely(this, new OnlineClientEventArgs(client));\n                return true;\n            }\n        }\n\n        /// <summary>\n        /// 获取指定user的所有clients\n        /// </summary>\n        /// <param name=\"user\"></param>\n        /// <returns></returns>\n        public IReadOnlyList<IOnlineClient> GetAllByUserId(IUserIdentifier user)\n        {\n            var clients = new List<OnlineClient>();\n\n            var userIdentifier = new UserIdentifier(user.TenantId, user.UserId);\n            if (!IsUserOnline(userIdentifier))\n            {\n                return clients;\n            }\n\n            lock (_syncObj)\n            {\n                var _database = GetDatabase();\n\n                var userClients = new List<string>();\n                var userClientsValue = _database.HashGet(_userStoreKey, userIdentifier.ToUserIdentifierString());\n                if (userClientsValue.HasValue)\n                {\n                    userClients = JsonConvert.DeserializeObject<List<string>>(userClientsValue);\n                    foreach (var connectionId in userClients)\n                    {\n                        var clientValue = _database.HashGet(_clientStoreKey, connectionId);\n                        if (clientValue.IsNullOrEmpty)\n                        {\n                            continue;\n                        }\n\n                        clients.Add(JsonConvert.DeserializeObject<OnlineClient>(clientValue));\n                    }\n                }\n            }\n\n            return clients;\n        }\n    }\n}\n"
  },
  {
    "path": "src2/Abplus.Web.SignalR/RealTime/RedisOnlineClientManagerModule.cs",
    "content": "﻿using System.Reflection;\nusing Abp.Dependency;\nusing Abp.Modules;\n\nnamespace Abp.RealTime\n{\n    public class RedisOnlineClientManagerModule : AbpModule\n    {\n        public override void PreInitialize()\n        {\n            //base.PreInitialize();\n            IocManager.Register<IRedisOnlineClientManagerModuleConfig, RedisOnlineClientManagerModuleConfig>();\n            IocManager.Register<IOnlineClientManager, RedisOnlineClientManager>(DependencyLifeStyle.Singleton);\n        }\n\n        public override void Initialize()\n        {\n            //base.Initialize();\n            IocManager.RegisterAssemblyByConvention(Assembly.GetExecutingAssembly());\n        }\n    }\n\n}\n"
  },
  {
    "path": "src2/Abplus.Web.SignalR/RealTime/RedisOnlineClientManagerModuleConfig.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Text;\nusing System.Threading.Tasks;\n\nnamespace Abp.RealTime\n{\n    public class RedisOnlineClientManagerModuleConfig : IRedisOnlineClientManagerModuleConfig\n    {\n        public string ConnectionString { get; private set; }\n\n        public string StoreKey { get; private set; }\n\n        public RedisOnlineClientManagerModuleConfig()\n        {\n            ConnectionString = string.Empty;\n            StoreKey = \"Abplus.RealTime.OnlineClients\";\n        }\n\n        public IRedisOnlineClientManagerModuleConfig ConnectTo(string connectionString)\n        {\n            ConnectionString = connectionString;\n            return this;\n        }\n\n        public IRedisOnlineClientManagerModuleConfig WithStoreKey(string storeKey)\n        {\n            StoreKey = storeKey;\n            return this;\n        }\n    }\n}\n"
  },
  {
    "path": "src2/Abplus.Web.SignalR/Web/SignalR/QrScan/SignalRQrCodeScannedRealTimeNotifier.cs",
    "content": "﻿using System;\nusing System.Threading.Tasks;\nusing Abp.QrCode;\nusing Abp.Web.SignalR.Hubs;\nusing Castle.Core.Logging;\nusing Microsoft.AspNet.SignalR;\n\nnamespace Abp.Web.SignalR.QrScan\n{\n    public class SignalRQrCodeScannedRealTimeNotifier : IQrCodeScannedRealTimeNotifier\n    {\n        /// <summary>\n        /// Reference to the logger.\n        /// </summary>\n        public ILogger Logger { get; set; }\n\n        private static IHubContext CommonHub\n        {\n            get\n            {\n                return GlobalHost.ConnectionManager.GetHubContext<AbpCommonHub>();\n            }\n        }\n\n        /// <summary>\n        /// Initializes a new instance of the <see cref=\"SignalRRealTimeNotifier\"/> class.\n        /// </summary>\n        public SignalRQrCodeScannedRealTimeNotifier()\n        {\n            Logger = NullLogger.Instance;\n        }\n\n        public Task Notify(string scannerId, string connectionId, object properties = null)\n        {\n            try\n            {\n                var signalRClient = CommonHub.Clients.Client(connectionId);\n                if (signalRClient == null)\n                {\n                    throw new Exception($\"Can not find the client with connectionId:{connectionId}\");\n                }\n\n                signalRClient.qrScanned(scannerId, properties);\n            }\n            catch (Exception ex)\n            {\n                Logger.Warn(ex.ToString(), ex);\n            }\n\n            return Task.FromResult(0);\n        }\n    }\n}\n"
  },
  {
    "path": "src2/Abplus.Web.SignalR/Web/SignalR/QrScan/SignalRQrCodeScannedRealTimeNotifierModule.cs",
    "content": "﻿using Abp.Modules;\nusing Abp.QrCode;\n\nnamespace Abp.Web.SignalR.QrScan\n{\n    public class SignalRQrCodeScannedRealTimeNotifierModule : AbpModule\n    {\n        public override void PreInitialize()\n        {\n            //base.PreInitialize();\n            IocManager.Register<IQrCodeScannedRealTimeNotifier, SignalRQrCodeScannedRealTimeNotifier>();\n        }\n    }\n}\n"
  },
  {
    "path": "src2/Abplus.Web.SignalR/app.config",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<configuration>\n  <runtime>\n    <assemblyBinding xmlns=\"urn:schemas-microsoft-com:asm.v1\">\n      <dependentAssembly>\n        <assemblyIdentity name=\"Newtonsoft.Json\" publicKeyToken=\"30ad4fe6b2a6aeed\" culture=\"neutral\" />\n        <bindingRedirect oldVersion=\"0.0.0.0-11.0.0.0\" newVersion=\"11.0.0.0\" />\n      </dependentAssembly>\n      <dependentAssembly>\n        <assemblyIdentity name=\"Castle.Windsor\" publicKeyToken=\"407dd0808d44fbdc\" culture=\"neutral\" />\n        <bindingRedirect oldVersion=\"0.0.0.0-4.0.0.0\" newVersion=\"4.0.0.0\" />\n      </dependentAssembly>\n      <dependentAssembly>\n        <assemblyIdentity name=\"Castle.Core\" publicKeyToken=\"407dd0808d44fbdc\" culture=\"neutral\" />\n        <bindingRedirect oldVersion=\"0.0.0.0-4.0.0.0\" newVersion=\"4.0.0.0\" />\n      </dependentAssembly>\n      <dependentAssembly>\n        <assemblyIdentity name=\"Microsoft.Extensions.Caching.Abstractions\" publicKeyToken=\"adb9793829ddae60\" culture=\"neutral\" />\n        <bindingRedirect oldVersion=\"0.0.0.0-2.0.1.0\" newVersion=\"2.0.1.0\" />\n      </dependentAssembly>\n      <dependentAssembly>\n        <assemblyIdentity name=\"Microsoft.Extensions.Caching.Memory\" publicKeyToken=\"adb9793829ddae60\" culture=\"neutral\" />\n        <bindingRedirect oldVersion=\"0.0.0.0-2.0.1.0\" newVersion=\"2.0.1.0\" />\n      </dependentAssembly>\n      <dependentAssembly>\n        <assemblyIdentity name=\"Microsoft.Extensions.Options\" publicKeyToken=\"adb9793829ddae60\" culture=\"neutral\" />\n        <bindingRedirect oldVersion=\"0.0.0.0-2.0.1.0\" newVersion=\"2.0.1.0\" />\n      </dependentAssembly>\n      <dependentAssembly>\n        <assemblyIdentity name=\"System.Runtime.InteropServices.RuntimeInformation\" publicKeyToken=\"b03f5f7f11d50a3a\" culture=\"neutral\" />\n        <bindingRedirect oldVersion=\"0.0.0.0-4.0.2.0\" newVersion=\"4.0.2.0\" />\n      </dependentAssembly>\n      <dependentAssembly>\n        <assemblyIdentity name=\"Microsoft.AspNet.SignalR.Core\" publicKeyToken=\"31bf3856ad364e35\" culture=\"neutral\" />\n        <bindingRedirect oldVersion=\"0.0.0.0-2.2.3.0\" newVersion=\"2.2.3.0\" />\n      </dependentAssembly>\n      <dependentAssembly>\n        <assemblyIdentity name=\"Microsoft.Owin.Security\" publicKeyToken=\"31bf3856ad364e35\" culture=\"neutral\" />\n        <bindingRedirect oldVersion=\"0.0.0.0-4.0.0.0\" newVersion=\"4.0.0.0\" />\n      </dependentAssembly>\n      <dependentAssembly>\n        <assemblyIdentity name=\"Microsoft.Owin\" publicKeyToken=\"31bf3856ad364e35\" culture=\"neutral\" />\n        <bindingRedirect oldVersion=\"0.0.0.0-4.0.0.0\" newVersion=\"4.0.0.0\" />\n      </dependentAssembly>\n      <dependentAssembly>\n        <assemblyIdentity name=\"System.Collections.Immutable\" publicKeyToken=\"b03f5f7f11d50a3a\" culture=\"neutral\" />\n        <bindingRedirect oldVersion=\"0.0.0.0-1.2.3.0\" newVersion=\"1.2.3.0\" />\n      </dependentAssembly>\n      <dependentAssembly>\n        <assemblyIdentity name=\"System.ComponentModel.Annotations\" publicKeyToken=\"b03f5f7f11d50a3a\" culture=\"neutral\" />\n        <bindingRedirect oldVersion=\"0.0.0.0-4.2.1.0\" newVersion=\"4.2.1.0\" />\n      </dependentAssembly>\n    </assemblyBinding>\n  </runtime>\n</configuration>"
  },
  {
    "path": "src2/Abplus.Web.SignalR/packages.config",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<packages>\n  <package id=\"Abp\" version=\"3.7.2\" targetFramework=\"net461\" />\n  <package id=\"Abp.Web.SignalR\" version=\"3.7.2\" targetFramework=\"net461\" />\n  <package id=\"Castle.Core\" version=\"4.3.1\" targetFramework=\"net461\" />\n  <package id=\"Castle.LoggingFacility\" version=\"4.1.0\" targetFramework=\"net461\" />\n  <package id=\"Castle.Windsor\" version=\"4.1.0\" targetFramework=\"net461\" />\n  <package id=\"JetBrains.Annotations\" version=\"11.1.0\" targetFramework=\"net461\" />\n  <package id=\"Microsoft.AspNet.SignalR.Core\" version=\"2.2.3\" targetFramework=\"net461\" />\n  <package id=\"Microsoft.Bcl\" version=\"1.1.10\" targetFramework=\"net461\" />\n  <package id=\"Microsoft.Bcl.Async\" version=\"1.0.168\" targetFramework=\"net461\" />\n  <package id=\"Microsoft.Bcl.Build\" version=\"1.0.21\" targetFramework=\"net461\" />\n  <package id=\"Microsoft.Extensions.Caching.Abstractions\" version=\"2.1.0\" targetFramework=\"net461\" />\n  <package id=\"Microsoft.Extensions.Caching.Memory\" version=\"2.1.0\" targetFramework=\"net461\" />\n  <package id=\"Microsoft.Extensions.DependencyInjection.Abstractions\" version=\"2.1.0\" targetFramework=\"net461\" />\n  <package id=\"Microsoft.Extensions.Options\" version=\"2.1.0\" targetFramework=\"net461\" />\n  <package id=\"Microsoft.Extensions.Primitives\" version=\"2.1.0\" targetFramework=\"net461\" />\n  <package id=\"Microsoft.Owin\" version=\"4.0.0\" targetFramework=\"net461\" />\n  <package id=\"Microsoft.Owin.Security\" version=\"4.0.0\" targetFramework=\"net461\" />\n  <package id=\"Newtonsoft.Json\" version=\"11.0.2\" targetFramework=\"net461\" />\n  <package id=\"Nito.AsyncEx\" version=\"4.0.1\" targetFramework=\"net461\" />\n  <package id=\"Nito.AsyncEx.Context\" version=\"1.1.0\" targetFramework=\"net461\" />\n  <package id=\"Nito.AsyncEx.Coordination\" version=\"1.0.2\" targetFramework=\"net461\" />\n  <package id=\"Nito.AsyncEx.Tasks\" version=\"1.1.0\" targetFramework=\"net461\" />\n  <package id=\"Nito.Collections.Deque\" version=\"1.0.4\" targetFramework=\"net461\" />\n  <package id=\"Nito.Disposables\" version=\"1.2.3\" targetFramework=\"net461\" />\n  <package id=\"Owin\" version=\"1.0\" targetFramework=\"net461\" />\n  <package id=\"StackExchange.Redis\" version=\"1.2.6\" targetFramework=\"net461\" />\n  <package id=\"System.Buffers\" version=\"4.4.0\" targetFramework=\"net461\" />\n  <package id=\"System.Collections.Immutable\" version=\"1.5.0\" targetFramework=\"net461\" />\n  <package id=\"System.ComponentModel.Annotations\" version=\"4.5.0\" targetFramework=\"net461\" />\n  <package id=\"System.Configuration.ConfigurationManager\" version=\"4.5.0\" targetFramework=\"net461\" />\n  <package id=\"System.Data.Common\" version=\"4.3.0\" targetFramework=\"net461\" />\n  <package id=\"System.Linq.Dynamic\" version=\"1.0.7\" targetFramework=\"net461\" />\n  <package id=\"System.Linq.Dynamic.Core\" version=\"1.0.8.9\" targetFramework=\"net461\" />\n  <package id=\"System.Linq.Queryable\" version=\"4.3.0\" targetFramework=\"net461\" />\n  <package id=\"System.Memory\" version=\"4.5.0\" targetFramework=\"net461\" />\n  <package id=\"System.Numerics.Vectors\" version=\"4.4.0\" targetFramework=\"net461\" />\n  <package id=\"System.Runtime.CompilerServices.Unsafe\" version=\"4.5.0\" targetFramework=\"net461\" />\n  <package id=\"System.Runtime.InteropServices.RuntimeInformation\" version=\"4.3.0\" targetFramework=\"net461\" />\n  <package id=\"System.Runtime.Serialization.Formatters\" version=\"4.3.0\" targetFramework=\"net461\" />\n  <package id=\"System.Runtime.Serialization.Primitives\" version=\"4.3.0\" targetFramework=\"net461\" />\n  <package id=\"System.Security.AccessControl\" version=\"4.5.0\" targetFramework=\"net461\" />\n  <package id=\"System.Security.Claims\" version=\"4.3.0\" targetFramework=\"net461\" />\n  <package id=\"System.Security.Permissions\" version=\"4.5.0\" targetFramework=\"net461\" />\n  <package id=\"System.Security.Principal.Windows\" version=\"4.5.0\" targetFramework=\"net461\" />\n  <package id=\"System.Threading\" version=\"4.3.0\" targetFramework=\"net461\" />\n  <package id=\"System.Xml.XmlDocument\" version=\"4.3.0\" targetFramework=\"net461\" />\n  <package id=\"System.Xml.XPath\" version=\"4.3.0\" targetFramework=\"net461\" />\n  <package id=\"System.Xml.XPath.XmlDocument\" version=\"4.3.0\" targetFramework=\"net461\" />\n  <package id=\"TimeZoneConverter\" version=\"2.4.1\" targetFramework=\"net461\" />\n</packages>"
  },
  {
    "path": "src2/Abplus.Web.SimpleCaptcha/Abplus.Web.SimpleCaptcha.csproj",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<Project ToolsVersion=\"14.0\" DefaultTargets=\"Build\" xmlns=\"http://schemas.microsoft.com/developer/msbuild/2003\">\n  <Import Project=\"$(MSBuildExtensionsPath)\\$(MSBuildToolsVersion)\\Microsoft.Common.props\" Condition=\"Exists('$(MSBuildExtensionsPath)\\$(MSBuildToolsVersion)\\Microsoft.Common.props')\" />\n  <PropertyGroup>\n    <Configuration Condition=\" '$(Configuration)' == '' \">Debug</Configuration>\n    <Platform Condition=\" '$(Platform)' == '' \">AnyCPU</Platform>\n    <ProjectGuid>{2AEA2117-3019-41B0-94F9-2B071B4FDEE4}</ProjectGuid>\n    <OutputType>Library</OutputType>\n    <AppDesignerFolder>Properties</AppDesignerFolder>\n    <RootNamespace>Abp</RootNamespace>\n    <AssemblyName>Abplus.Web.SimpleCaptcha</AssemblyName>\n    <TargetFrameworkVersion>v4.6.1</TargetFrameworkVersion>\n    <FileAlignment>512</FileAlignment>\n    <NuGetPackageImportStamp>\n    </NuGetPackageImportStamp>\n  </PropertyGroup>\n  <PropertyGroup Condition=\" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' \">\n    <DebugSymbols>true</DebugSymbols>\n    <DebugType>full</DebugType>\n    <Optimize>false</Optimize>\n    <OutputPath>bin\\Debug\\</OutputPath>\n    <DefineConstants>DEBUG;TRACE</DefineConstants>\n    <ErrorReport>prompt</ErrorReport>\n    <WarningLevel>4</WarningLevel>\n  </PropertyGroup>\n  <PropertyGroup Condition=\" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' \">\n    <DebugType>pdbonly</DebugType>\n    <Optimize>true</Optimize>\n    <OutputPath>bin\\Release\\</OutputPath>\n    <DefineConstants>TRACE</DefineConstants>\n    <ErrorReport>prompt</ErrorReport>\n    <WarningLevel>4</WarningLevel>\n    <DocumentationFile>bin\\Release\\Abplus.Web.SimpleCaptcha.XML</DocumentationFile>\n  </PropertyGroup>\n  <ItemGroup>\n    <Reference Include=\"Abp, Version=3.7.2.0, Culture=neutral, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\packages\\Abp.3.7.2\\lib\\netstandard2.0\\Abp.dll</HintPath>\n    </Reference>\n    <Reference Include=\"Castle.Core, Version=4.0.0.0, Culture=neutral, PublicKeyToken=407dd0808d44fbdc, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\packages\\Castle.Core.4.3.1\\lib\\net45\\Castle.Core.dll</HintPath>\n    </Reference>\n    <Reference Include=\"Castle.Facilities.Logging, Version=4.0.0.0, Culture=neutral, PublicKeyToken=407dd0808d44fbdc, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\packages\\Castle.LoggingFacility.4.1.0\\lib\\net45\\Castle.Facilities.Logging.dll</HintPath>\n    </Reference>\n    <Reference Include=\"Castle.Windsor, Version=4.0.0.0, Culture=neutral, PublicKeyToken=407dd0808d44fbdc, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\packages\\Castle.Windsor.4.1.0\\lib\\net45\\Castle.Windsor.dll</HintPath>\n    </Reference>\n    <Reference Include=\"JetBrains.Annotations, Version=11.1.0.0, Culture=neutral, PublicKeyToken=1010a0d8d6380325, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\packages\\JetBrains.Annotations.11.1.0\\lib\\net20\\JetBrains.Annotations.dll</HintPath>\n    </Reference>\n    <Reference Include=\"Microsoft.Extensions.Caching.Abstractions, Version=2.1.0.0, Culture=neutral, PublicKeyToken=adb9793829ddae60, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\packages\\Microsoft.Extensions.Caching.Abstractions.2.1.0\\lib\\netstandard2.0\\Microsoft.Extensions.Caching.Abstractions.dll</HintPath>\n    </Reference>\n    <Reference Include=\"Microsoft.Extensions.Caching.Memory, Version=2.1.0.0, Culture=neutral, PublicKeyToken=adb9793829ddae60, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\packages\\Microsoft.Extensions.Caching.Memory.2.1.0\\lib\\netstandard2.0\\Microsoft.Extensions.Caching.Memory.dll</HintPath>\n    </Reference>\n    <Reference Include=\"Microsoft.Extensions.DependencyInjection.Abstractions, Version=2.1.0.0, Culture=neutral, PublicKeyToken=adb9793829ddae60, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\packages\\Microsoft.Extensions.DependencyInjection.Abstractions.2.1.0\\lib\\netstandard2.0\\Microsoft.Extensions.DependencyInjection.Abstractions.dll</HintPath>\n    </Reference>\n    <Reference Include=\"Microsoft.Extensions.Options, Version=2.1.0.0, Culture=neutral, PublicKeyToken=adb9793829ddae60, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\packages\\Microsoft.Extensions.Options.2.1.0\\lib\\netstandard2.0\\Microsoft.Extensions.Options.dll</HintPath>\n    </Reference>\n    <Reference Include=\"Microsoft.Extensions.Primitives, Version=2.1.0.0, Culture=neutral, PublicKeyToken=adb9793829ddae60, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\packages\\Microsoft.Extensions.Primitives.2.1.0\\lib\\netstandard2.0\\Microsoft.Extensions.Primitives.dll</HintPath>\n    </Reference>\n    <Reference Include=\"Microsoft.Threading.Tasks, Version=1.0.12.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\packages\\Microsoft.Bcl.Async.1.0.168\\lib\\net40\\Microsoft.Threading.Tasks.dll</HintPath>\n      <Private>True</Private>\n    </Reference>\n    <Reference Include=\"Microsoft.Threading.Tasks.Extensions, Version=1.0.12.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\packages\\Microsoft.Bcl.Async.1.0.168\\lib\\net40\\Microsoft.Threading.Tasks.Extensions.dll</HintPath>\n      <Private>True</Private>\n    </Reference>\n    <Reference Include=\"Microsoft.Threading.Tasks.Extensions.Desktop, Version=1.0.168.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\packages\\Microsoft.Bcl.Async.1.0.168\\lib\\net40\\Microsoft.Threading.Tasks.Extensions.Desktop.dll</HintPath>\n      <Private>True</Private>\n    </Reference>\n    <Reference Include=\"Newtonsoft.Json, Version=11.0.0.0, Culture=neutral, PublicKeyToken=30ad4fe6b2a6aeed, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\packages\\Newtonsoft.Json.11.0.2\\lib\\net45\\Newtonsoft.Json.dll</HintPath>\n    </Reference>\n    <Reference Include=\"Nito.AsyncEx, Version=4.0.1.0, Culture=neutral, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\packages\\Nito.AsyncEx.4.0.1\\lib\\net45\\Nito.AsyncEx.dll</HintPath>\n      <Private>True</Private>\n    </Reference>\n    <Reference Include=\"Nito.AsyncEx.Concurrent, Version=4.0.1.0, Culture=neutral, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\packages\\Nito.AsyncEx.4.0.1\\lib\\net45\\Nito.AsyncEx.Concurrent.dll</HintPath>\n      <Private>True</Private>\n    </Reference>\n    <Reference Include=\"Nito.AsyncEx.Context, Version=1.1.0.0, Culture=neutral, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\packages\\Nito.AsyncEx.Context.1.1.0\\lib\\net46\\Nito.AsyncEx.Context.dll</HintPath>\n    </Reference>\n    <Reference Include=\"Nito.AsyncEx.Coordination, Version=1.0.2.0, Culture=neutral, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\packages\\Nito.AsyncEx.Coordination.1.0.2\\lib\\net46\\Nito.AsyncEx.Coordination.dll</HintPath>\n    </Reference>\n    <Reference Include=\"Nito.AsyncEx.Enlightenment, Version=4.0.1.0, Culture=neutral, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\packages\\Nito.AsyncEx.4.0.1\\lib\\net45\\Nito.AsyncEx.Enlightenment.dll</HintPath>\n      <Private>True</Private>\n    </Reference>\n    <Reference Include=\"Nito.AsyncEx.Tasks, Version=1.1.0.0, Culture=neutral, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\packages\\Nito.AsyncEx.Tasks.1.1.0\\lib\\net46\\Nito.AsyncEx.Tasks.dll</HintPath>\n    </Reference>\n    <Reference Include=\"Nito.Collections.Deque, Version=1.0.4.0, Culture=neutral, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\packages\\Nito.Collections.Deque.1.0.4\\lib\\netstandard2.0\\Nito.Collections.Deque.dll</HintPath>\n    </Reference>\n    <Reference Include=\"Nito.Disposables, Version=1.2.3.0, Culture=neutral, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\packages\\Nito.Disposables.1.2.3\\lib\\netstandard2.0\\Nito.Disposables.dll</HintPath>\n    </Reference>\n    <Reference Include=\"System\" />\n    <Reference Include=\"System.Buffers, Version=4.0.2.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\packages\\System.Buffers.4.4.0\\lib\\netstandard2.0\\System.Buffers.dll</HintPath>\n    </Reference>\n    <Reference Include=\"System.Collections.Immutable, Version=1.2.3.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\packages\\System.Collections.Immutable.1.5.0\\lib\\netstandard2.0\\System.Collections.Immutable.dll</HintPath>\n    </Reference>\n    <Reference Include=\"System.ComponentModel.Annotations, Version=4.2.1.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\packages\\System.ComponentModel.Annotations.4.5.0\\lib\\net461\\System.ComponentModel.Annotations.dll</HintPath>\n    </Reference>\n    <Reference Include=\"System.ComponentModel.DataAnnotations\" />\n    <Reference Include=\"System.Configuration\" />\n    <Reference Include=\"System.Configuration.ConfigurationManager, Version=4.0.1.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\packages\\System.Configuration.ConfigurationManager.4.5.0\\lib\\net461\\System.Configuration.ConfigurationManager.dll</HintPath>\n    </Reference>\n    <Reference Include=\"System.Core\" />\n    <Reference Include=\"System.Data.Common, Version=4.1.1.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\packages\\System.Data.Common.4.3.0\\lib\\net451\\System.Data.Common.dll</HintPath>\n      <Private>True</Private>\n    </Reference>\n    <Reference Include=\"System.Data.OracleClient\" />\n    <Reference Include=\"System.Drawing\" />\n    <Reference Include=\"System.Linq.Dynamic, Version=1.0.6132.35681, Culture=neutral, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\packages\\System.Linq.Dynamic.1.0.7\\lib\\net40\\System.Linq.Dynamic.dll</HintPath>\n      <Private>True</Private>\n    </Reference>\n    <Reference Include=\"System.Linq.Dynamic.Core, Version=0.0.0.0, Culture=neutral, PublicKeyToken=0f07ec44de6ac832, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\packages\\System.Linq.Dynamic.Core.1.0.8.9\\lib\\net46\\System.Linq.Dynamic.Core.dll</HintPath>\n    </Reference>\n    <Reference Include=\"System.Memory, Version=4.0.1.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\packages\\System.Memory.4.5.0\\lib\\netstandard2.0\\System.Memory.dll</HintPath>\n    </Reference>\n    <Reference Include=\"System.Net\" />\n    <Reference Include=\"System.Numerics\" />\n    <Reference Include=\"System.Numerics.Vectors, Version=4.1.3.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\packages\\System.Numerics.Vectors.4.4.0\\lib\\net46\\System.Numerics.Vectors.dll</HintPath>\n    </Reference>\n    <Reference Include=\"System.Runtime.Caching\" />\n    <Reference Include=\"System.Runtime.CompilerServices.Unsafe, Version=4.0.4.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\packages\\System.Runtime.CompilerServices.Unsafe.4.5.0\\lib\\netstandard2.0\\System.Runtime.CompilerServices.Unsafe.dll</HintPath>\n    </Reference>\n    <Reference Include=\"System.Runtime.InteropServices.RuntimeInformation, Version=4.0.1.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\packages\\System.Runtime.InteropServices.RuntimeInformation.4.3.0\\lib\\net45\\System.Runtime.InteropServices.RuntimeInformation.dll</HintPath>\n      <Private>True</Private>\n    </Reference>\n    <Reference Include=\"System.Runtime.Remoting\" />\n    <Reference Include=\"System.Runtime.Serialization\" />\n    <Reference Include=\"System.Runtime.Serialization.Formatters, Version=4.0.1.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\packages\\System.Runtime.Serialization.Formatters.4.3.0\\lib\\net46\\System.Runtime.Serialization.Formatters.dll</HintPath>\n      <Private>True</Private>\n    </Reference>\n    <Reference Include=\"System.Runtime.Serialization.Primitives, Version=4.1.2.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\packages\\System.Runtime.Serialization.Primitives.4.3.0\\lib\\net46\\System.Runtime.Serialization.Primitives.dll</HintPath>\n      <Private>True</Private>\n    </Reference>\n    <Reference Include=\"System.Security.AccessControl, Version=4.1.1.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\packages\\System.Security.AccessControl.4.5.0\\lib\\net461\\System.Security.AccessControl.dll</HintPath>\n    </Reference>\n    <Reference Include=\"System.Security.Claims, Version=4.0.2.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\packages\\System.Security.Claims.4.3.0\\lib\\net46\\System.Security.Claims.dll</HintPath>\n      <Private>True</Private>\n    </Reference>\n    <Reference Include=\"System.Security.Permissions, Version=4.0.1.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\packages\\System.Security.Permissions.4.5.0\\lib\\net461\\System.Security.Permissions.dll</HintPath>\n    </Reference>\n    <Reference Include=\"System.Security.Principal.Windows, Version=4.1.1.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\packages\\System.Security.Principal.Windows.4.5.0\\lib\\net461\\System.Security.Principal.Windows.dll</HintPath>\n    </Reference>\n    <Reference Include=\"System.ServiceProcess\" />\n    <Reference Include=\"System.Transactions\" />\n    <Reference Include=\"System.Web\" />\n    <Reference Include=\"System.Xml.Linq\" />\n    <Reference Include=\"System.Data.DataSetExtensions\" />\n    <Reference Include=\"Microsoft.CSharp\" />\n    <Reference Include=\"System.Data\" />\n    <Reference Include=\"System.Net.Http\" />\n    <Reference Include=\"System.Xml\" />\n    <Reference Include=\"System.Xml.XmlDocument, Version=4.0.2.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\packages\\System.Xml.XmlDocument.4.3.0\\lib\\net46\\System.Xml.XmlDocument.dll</HintPath>\n      <Private>True</Private>\n    </Reference>\n    <Reference Include=\"System.Xml.XPath, Version=4.0.2.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\packages\\System.Xml.XPath.4.3.0\\lib\\net46\\System.Xml.XPath.dll</HintPath>\n      <Private>True</Private>\n    </Reference>\n    <Reference Include=\"System.Xml.XPath.XmlDocument, Version=4.0.2.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\packages\\System.Xml.XPath.XmlDocument.4.3.0\\lib\\net46\\System.Xml.XPath.XmlDocument.dll</HintPath>\n    </Reference>\n    <Reference Include=\"TimeZoneConverter, Version=2.4.1.0, Culture=neutral, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\packages\\TimeZoneConverter.2.4.1\\lib\\net45\\TimeZoneConverter.dll</HintPath>\n    </Reference>\n  </ItemGroup>\n  <ItemGroup>\n    <Compile Include=\"Configuration\\Startup\\SimpleCaptchaManagerConfigurationExtension.cs\" />\n    <Compile Include=\"Properties\\AssemblyInfo.cs\" />\n    <Compile Include=\"Web\\SimpleCaptcha\\ISimpleCaptchaModuleConfig.cs\" />\n    <Compile Include=\"Web\\SimpleCaptcha\\IVerificationCodeStore.cs\" />\n    <Compile Include=\"Web\\SimpleCaptcha\\SimpleCaptchaManager.cs\" />\n    <Compile Include=\"Web\\SimpleCaptcha\\SimpleCaptchaModule.cs\" />\n    <Compile Include=\"Web\\SimpleCaptcha\\SimpleCaptchaModuleConfig.cs\" />\n    <Compile Include=\"Web\\SimpleCaptcha\\VerificationCodeStores\\CacheVerificationCodeStore.cs\" />\n    <Compile Include=\"Web\\SimpleCaptcha\\VerificationCodeStores\\CookieVerificationCodeStore.cs\" />\n    <Compile Include=\"Web\\SimpleCaptcha\\VerificationCodeStores\\SessionVerificationCodeStore.cs\" />\n  </ItemGroup>\n  <ItemGroup />\n  <ItemGroup>\n    <None Include=\"Abplus.Web.SimpleCaptcha.nuspec\" />\n    <None Include=\"app.config\" />\n    <None Include=\"packages.config\" />\n  </ItemGroup>\n  <Import Project=\"$(MSBuildToolsPath)\\Microsoft.CSharp.targets\" />\n  <Import Project=\"..\\..\\packages\\Microsoft.Bcl.Build.1.0.21\\build\\Microsoft.Bcl.Build.targets\" Condition=\"Exists('..\\..\\packages\\Microsoft.Bcl.Build.1.0.21\\build\\Microsoft.Bcl.Build.targets')\" />\n  <Target Name=\"EnsureNuGetPackageBuildImports\" BeforeTargets=\"PrepareForBuild\">\n    <PropertyGroup>\n      <ErrorText>这台计算机上缺少此项目引用的 NuGet 程序包。使用“NuGet 程序包还原”可下载这些程序包。有关更多信息，请参见 http://go.microsoft.com/fwlink/?LinkID=322105。缺少的文件是 {0}。</ErrorText>\n    </PropertyGroup>\n    <Error Condition=\"!Exists('..\\..\\packages\\Microsoft.Bcl.Build.1.0.21\\build\\Microsoft.Bcl.Build.targets')\" Text=\"$([System.String]::Format('$(ErrorText)', '..\\..\\packages\\Microsoft.Bcl.Build.1.0.21\\build\\Microsoft.Bcl.Build.targets'))\" />\n  </Target>\n  <!-- To modify your build process, add your task inside one of the targets below and uncomment it. \n       Other similar extension points exist, see Microsoft.Common.targets.\n  <Target Name=\"BeforeBuild\">\n  </Target>\n  <Target Name=\"AfterBuild\">\n  </Target>\n  -->\n</Project>"
  },
  {
    "path": "src2/Abplus.Web.SimpleCaptcha/Abplus.Web.SimpleCaptcha.nuspec",
    "content": "<?xml version=\"1.0\"?>\n<package >\n  <metadata>\n    <id>$id$</id>\n    <version>$version$</version>\n    <title>$title$</title>\n    <authors>personball</authors>\n    <owners>personball</owners>\n    <licenseUrl>https://raw.githubusercontent.com/personball/abplus/master/LICENSE</licenseUrl>\n    <projectUrl>https://github.com/personball/abplus</projectUrl>\n    <iconUrl>https://raw.githubusercontent.com/personball/abplus/master/abplus_icon.png</iconUrl>\n    <requireLicenseAcceptance>false</requireLicenseAcceptance>\n    <description>Abp plus, an extension for Abp Framework. </description>\n    <releaseNotes></releaseNotes>\n    <copyright>Copyright 2017</copyright>\n    <tags></tags>\n    <dependencies>\n      <dependency id=\"Abp\" version=\"1.4.2\" />\n    </dependencies>\n  </metadata>\n</package>"
  },
  {
    "path": "src2/Abplus.Web.SimpleCaptcha/Configuration/Startup/SimpleCaptchaManagerConfigurationExtension.cs",
    "content": "﻿using Abp.Web.SimpleCaptcha;\n\nnamespace Abp.Configuration.Startup\n{\n    public static class SimpleCaptchaManagerConfigurationExtension\n    {\n        public static ISimpleCaptchaModuleConfig UseSimpleCaptchaModule(this IModuleConfigurations configurations)\n        {\n            return configurations.AbpConfiguration.GetOrCreate(\"Modules.Abplus.Web.SimpleCaptcha.ISimpleCaptchaModuleConfig\",\n                () => configurations.AbpConfiguration.IocManager.Resolve<ISimpleCaptchaModuleConfig>());\n        }\n    }\n}\n"
  },
  {
    "path": "src2/Abplus.Web.SimpleCaptcha/Properties/AssemblyInfo.cs",
    "content": "﻿using System.Reflection;\nusing System.Runtime.CompilerServices;\nusing System.Runtime.InteropServices;\n\n// 有关程序集的一般信息由以下\n// 控制。更改这些特性值可修改\n// 与程序集关联的信息。\n[assembly: AssemblyTitle(\"Abplus.Web.SimpleCaptcha\")]\n[assembly: AssemblyDescription(\"\")]\n[assembly: AssemblyConfiguration(\"\")]\n[assembly: AssemblyCompany(\"\")]\n[assembly: AssemblyProduct(\"Abplus.Web.SimpleCaptcha\")]\n[assembly: AssemblyCopyright(\"Copyright ©  2017\")]\n[assembly: AssemblyTrademark(\"\")]\n[assembly: AssemblyCulture(\"\")]\n\n//将 ComVisible 设置为 false 将使此程序集中的类型\n//对 COM 组件不可见。  如果需要从 COM 访问此程序集中的类型，\n//请将此类型的 ComVisible 特性设置为 true。\n[assembly: ComVisible(false)]\n\n// 如果此项目向 COM 公开，则下列 GUID 用于类型库的 ID\n[assembly: Guid(\"2aea2117-3019-41b0-94f9-2b071b4fdee4\")]\n\n// 程序集的版本信息由下列四个值组成: \n//\n//      主版本\n//      次版本\n//      生成号\n//      修订号\n//\n//可以指定所有这些值，也可以使用“生成号”和“修订号”的默认值，\n// 方法是按如下所示使用“*”: :\n// [assembly: AssemblyVersion(\"1.0.*\")]\n[assembly: AssemblyVersion(\"1.1.1.0\")]\n[assembly: AssemblyFileVersion(\"1.1.1.0\")]\n"
  },
  {
    "path": "src2/Abplus.Web.SimpleCaptcha/Web/SimpleCaptcha/ISimpleCaptchaModuleConfig.cs",
    "content": "﻿using Abp.Dependency;\n\nnamespace Abp.Web.SimpleCaptcha\n{\n    public interface ISimpleCaptchaModuleConfig : ITransientDependency\n    {\n        #region Properties\n\n        /// <summary>\n        /// 使用cookie存储验证码时，必须提供16位加密密钥\n        /// </summary>\n        string CookieCodeStoreSecretKey { get; }\n\n        /// <summary>\n        /// 验证码有效期，单位：分钟\n        /// </summary>\n        int CodeExpiredInMinutes { get; }\n\n        /// <summary>\n        /// 验证码是否可重复使用，默认false\n        /// </summary>\n        bool CodeReusable { get; }\n\n        /// <summary>\n        /// 是否扭曲，默认不扭曲\n        /// </summary>\n        bool TwistEnabled { get; }\n\n        /// <summary>\n        /// 随机线条，默认启用\n        /// </summary>\n        bool RandomLineEnabled { get; }\n\n        /// <summary>\n        /// 随机线条数量，默认1\n        /// </summary>\n        int RandomLineCount { get; }\n\n        /// <summary>\n        /// 是否大小写敏感, 默认false\n        /// </summary>\n        bool CaseSensitive { get; }\n\n        /// <summary>\n        /// 字符集是否包含小写字母，默认false\n        /// </summary>\n        bool CharSetIncludeLowercases { get; }\n\n        /// <summary>\n        /// 字符集是否包含大写字母，默认true\n        /// </summary>\n        bool CharSetIncludeUppercases { get; }\n\n        /// <summary>\n        /// 字符集是否包含数字，默认true\n        /// </summary>\n        bool CharSetIncludeNumbers { get; }\n\n        /// <summary>\n        /// 排除易混淆字符，默认\"01IOlo\"\n        /// </summary>\n        string CharSetExcluded { get; }\n\n        #endregion\n\n        #region Methods\n\n        /// <summary>\n        /// 设置验证码过期时长，默认20分钟\n        /// </summary>\n        /// <param name=\"minutes\"></param>\n        /// <returns></returns>\n        ISimpleCaptchaModuleConfig SetMinutesCodeExpiredIn(int minutes);\n\n        /// <summary>\n        /// 验证码是否可多次使用，默认false，一旦验证通过立即清除\n        /// </summary>\n        /// <param name=\"enabled\"></param>\n        /// <returns></returns>\n        ISimpleCaptchaModuleConfig EnableCodeReusable(bool enabled);\n\n        /// <summary>\n        /// 是否启用图片扭曲，默认不启用\n        /// </summary>\n        /// <returns></returns>\n        ISimpleCaptchaModuleConfig EnableTwist(bool enabled);\n\n        /// <summary>\n        /// 是否启用随机线条，默认启用\n        /// </summary>\n        ISimpleCaptchaModuleConfig EnableRandomLine(bool enabled);\n\n        /// <summary>\n        /// 设置随机线条数量，默认1\n        /// </summary>\n        ISimpleCaptchaModuleConfig SetRandomLineCount(int count);\n\n        /// <summary>\n        /// 是否大小写敏感, 默认false\n        /// </summary>\n        ISimpleCaptchaModuleConfig EnableCaseSensitive(bool caseSensitive);\n\n        /// <summary>\n        /// 字符集是否包含小写字母，默认false\n        /// </summary>\n        ISimpleCaptchaModuleConfig IncludeCharSetLowercases(bool included);\n\n        /// <summary>\n        /// 字符集是否包含大写字母，默认true\n        /// </summary>\n        ISimpleCaptchaModuleConfig IncludeCharSetUppercases(bool included);\n\n        /// <summary>\n        /// 字符集是否包含数字，默认true\n        /// </summary>\n        ISimpleCaptchaModuleConfig IncludeCharSetNumbers(bool included);\n\n        /// <summary>\n        /// 排除易混淆字符，默认\"01IOlo\"\n        /// </summary>\n        ISimpleCaptchaModuleConfig ExcludeCharSet(params char[] excludedChars);\n\n        /// <summary>\n        /// 使用cookie存储验证码时，必须提供16位加密密钥\n        /// </summary>\n        /// <param name=\"secretKey\"></param>\n        /// <returns></returns>\n        ISimpleCaptchaModuleConfig SetCookieCodeStoreSecretKey(string secretKey);\n\n        /// <summary>\n        /// 使用Cookie存储验证码，默认使用Session\n        /// 注意使用Cookie存储验证码时，必须提供长度为16位的加密密钥以对验证码值进行加密解密\n        /// </summary>\n        /// <param name=\"secretKey\"></param>\n        /// <returns></returns>\n        ISimpleCaptchaModuleConfig UseCookieCodeStore(string secretKey);\n\n        /// <summary>\n        /// 使用缓存存储验证码，默认使用session\n        /// 注意使用缓存存储验证码时，验证码存储的StoreKey必须包含用户会话标识，\n        /// 建议读取Key为ASP.NET_SessionId的Cookie值作为StoreKey的一部分。\n        /// </summary>\n        /// <returns></returns>\n        ISimpleCaptchaModuleConfig UseCacheCodeStore();\n\n        /// <summary>\n        /// 使用session存储验证码\n        /// </summary>\n        /// <returns></returns>\n        ISimpleCaptchaModuleConfig UseSessionCodeStore();\n\n        #endregion\n    }\n}\n"
  },
  {
    "path": "src2/Abplus.Web.SimpleCaptcha/Web/SimpleCaptcha/IVerificationCodeStore.cs",
    "content": "﻿namespace Abp.Web.SimpleCaptcha\n{\n    /// <summary>\n    /// 验证码存储介质\n    /// </summary>\n    public interface IVerificationCodeStore\n    {\n        void Save(string storeKey, string verificationCode);\n\n        string Find(string storeKey);\n\n        void Clear(string storeKey);\n    }\n}\n"
  },
  {
    "path": "src2/Abplus.Web.SimpleCaptcha/Web/SimpleCaptcha/SimpleCaptchaManager.cs",
    "content": "﻿using System;\nusing System.Drawing;\nusing System.Drawing.Drawing2D;\nusing System.Drawing.Imaging;\nusing System.IO;\nusing System.Web;\nusing Abp.Dependency;\nusing Abp.Extensions;\nusing Abp.UI;\n\nnamespace Abp.Web.SimpleCaptcha\n{\n    public class SimpleCaptchaManager : ITransientDependency\n    {\n        public const string DefaultCharSetNumbers = \"0123456789\";\n        public const string DefaultCharSetUpperCases = \"ABCDEFGHIJKLMNOPQRSTUVWXYZ\";\n        public const string DefaultCharSetLowerCases = \"abcdefghijklmnopqrstuvwxyz\";\n\n        private readonly IVerificationCodeStore _codeStore;\n        private readonly ISimpleCaptchaModuleConfig _config;\n\n        public SimpleCaptchaManager(\n            IVerificationCodeStore codeStore,\n            ISimpleCaptchaModuleConfig config\n            )\n        {\n            _codeStore = codeStore;\n            _config = config;\n        }\n\n        public virtual void DisableHttpResponseCache()\n        {\n            //禁止图片缓存 \n            HttpContext.Current.Response.Cache.SetCacheability(HttpCacheability.NoCache);\n        }\n\n        public virtual void ClearHttpResponseAndSetContentType()\n        {\n            HttpContext.Current.Response.Clear();\n            HttpContext.Current.Response.ContentType = \"image/pjpeg\";\n        }\n\n        /// <summary>\n        /// 输出验证码图片\n        /// </summary>\n        /// <param name=\"storeKey\">验证码字串存储的键名</param>\n        /// <param name=\"ImgWidth\">图片宽，必须大于CodeNum*17</param>\n        /// <param name=\"ImgHeight\">图片高，必须大于20</param>\n        /// <param name=\"CodeNum\">字符数量</param>\n        public void ImageRefresher(Stream outputStream, string storeKey, int ImgWidth, int ImgHeight, int CodeNum)\n        {\n            if (ImgWidth <= CodeNum * 17)\n            {\n                ImgWidth = CodeNum * 17 + 1;\n            }\n\n            if (ImgHeight <= 20)\n            {\n                ImgHeight = 21;\n            }\n\n            DisableHttpResponseCache();\n\n            //设置字符集\n            string charSetString = string.Empty;//增大字符集\n            if (_config.CharSetIncludeNumbers)\n            {\n                charSetString += DefaultCharSetNumbers;\n            }\n\n            if (_config.CharSetIncludeLowercases)\n            {\n                charSetString += DefaultCharSetLowerCases;\n            }\n\n            if (_config.CharSetIncludeUppercases)\n            {\n                charSetString += DefaultCharSetUpperCases;\n            }\n\n            if (!_config.CharSetExcluded.IsNullOrWhiteSpace())\n            {\n                var units = _config.CharSetExcluded.ToCharArray();\n                foreach (var unit in units)\n                {\n                    charSetString = charSetString.Replace(unit.ToString(), \"\");\n                }\n            }\n\n            int ccslength = charSetString.Length;\n\n            //设置字体集合\n            Font[] fonts = new Font[] {\n                new Font(\"宋体\", 15, FontStyle.Bold|FontStyle.Regular),\n                new Font(\"宋体\", 16, FontStyle.Bold|FontStyle.Italic),\n                new Font(\"宋体\", 17, FontStyle.Bold|FontStyle.Strikeout),\n                new Font(\"宋体\", 16, FontStyle.Bold|FontStyle.Underline),\n                new Font(\"宋体\", 15, FontStyle.Bold|FontStyle.Italic|FontStyle.Strikeout),\n                new Font(\"宋体\", 16, FontStyle.Bold|FontStyle.Italic|FontStyle.Underline)\n            };\n\n            //设置画笔\n            Brush brush = null;\n            Color brushColor = new Color();\n\n            //验证码字串\n            string valiCode = string.Empty;\n            string codeUnit = string.Empty;\n\n            Bitmap image = new Bitmap(ImgWidth, ImgHeight);//图片规格\n            //范围\n            int yOffset = (image.Height - 17) / 2;//字符垂直偏移度\n            int[] offSetFixArr = new int[] { -4, -3, -2, -1, 0, 1, 2, 3, 4 };\n\n            Graphics g = Graphics.FromImage(image);//画布\n            g.Clear(Color.White);//初始化画布\n\n            int startOffset = (image.Width - CodeNum * 17) / 2;\n            int startX = startOffset;\n            Random random = new Random();\n            string tmpcode = \"\";\n            for (int i = 0; i < CodeNum; i++)\n            {\n                int rNum1 = random.Next(ccslength, DateTime.Now.Millisecond + ccslength);\n                int rNum2 = random.Next(fonts.Length, DateTime.Now.Millisecond + fonts.Length);\n                int rNum3 = random.Next(offSetFixArr.Length, DateTime.Now.Millisecond + offSetFixArr.Length);\n\n                codeUnit = charSetString.Substring(rNum1 % ccslength, 1);//随机提取字符\n                if (codeUnit == tmpcode)\n                {\n                    codeUnit = charSetString.Substring((rNum1 + 1) % ccslength, 1);//与上一字符重复时，再次提取字符\n                }\n\n                valiCode = valiCode + codeUnit;//记录提取的字符\n                tmpcode = codeUnit;\n\n                //调整画笔以及写入坐标，实现验证码粘连、倾斜\n                Font font = fonts[rNum2 % fonts.Length];//选择字体\n                brushColor = Color.FromArgb(random.Next(255), random.Next(80), random.Next(255));//设置随机颜色\n                brush = new SolidBrush(brushColor);\n                int offSetFix = offSetFixArr[rNum3 % offSetFixArr.Length];\n\n                g.DrawString(codeUnit, font, brush, startX, yOffset + offSetFix);\n                startX += 13 + offSetFix;\n            }\n\n            //随机产生的线条\n            if (_config.RandomLineEnabled)\n            {\n                LinearGradientBrush lgb = new LinearGradientBrush(new Rectangle(0, 0, image.Width, image.Height), Color.Blue, Color.Red, 1.2f, true);\n                for (int i = 0; i < _config.RandomLineCount; i++)\n                {\n                    int x1 = random.Next(image.Width);\n                    int x2 = random.Next(image.Width);\n                    int y1 = random.Next(image.Height);\n                    int y2 = random.Next(image.Height);\n                    g.DrawLine(new Pen(Color.Black), x1, y1, x2, y2);\n                }\n            }\n\n            //背景随机点\n            for (int i = 0; i < 100; i++)\n            {\n                int x1 = random.Next(image.Width);\n                int y1 = random.Next(image.Height);\n                image.SetPixel(x1, y1, Color.FromArgb(random.Next(255), random.Next(255), random.Next(255)));\n            }\n\n            int rNum4 = random.Next(0, 6);\n            //扭曲\n            if (_config.TwistEnabled)\n            {\n                image = TwistImage(image, true, 3, rNum4);\n            }\n\n            ClearHttpResponseAndSetContentType();\n\n            image.Save(outputStream, ImageFormat.Jpeg);\n            _codeStore.Save(storeKey, valiCode);\n\n            image.Dispose();\n        }\n\n        #region 产生波形滤镜效果\n\n        private const double PI = 3.1415926535897932384626433832795;\n        private const double PI2 = 6.283185307179586476925286766559;\n\n        /// <summary>\n        /// 正弦曲线Wave扭曲图片\n        /// </summary>\n        /// <param name=\"srcBmp\">图片路径</param>\n        /// <param name=\"bXDir\">如果扭曲则选择为True</param>\n        /// <param name=\"dMultValue\">波形的幅度倍数，越大扭曲的程度越高，一般为3</param>\n        /// <param name=\"dPhase\">波形的起始相位，取值区间[0-2*PI)</param>\n        /// <returns></returns>\n        private Bitmap TwistImage(Bitmap srcBmp, bool bXDir, double dMultValue, double dPhase)\n        {\n            Bitmap destBmp = new Bitmap(srcBmp.Width, srcBmp.Height);\n\n            // 将位图背景填充为白色\n            Graphics graph = Graphics.FromImage(destBmp);\n            graph.FillRectangle(new SolidBrush(Color.White), 0, 0, destBmp.Width, destBmp.Height);\n\n            double dBaseAxisLen = bXDir ? (double)destBmp.Height : (double)destBmp.Width;\n\n            for (int i = 0; i < destBmp.Width; i++)\n            {\n                for (int j = 0; j < destBmp.Height; j++)\n                {\n                    double dx = 0;\n                    dx = bXDir ? (PI2 * (double)j) / dBaseAxisLen : (PI2 * (double)i) / dBaseAxisLen;\n                    dx += dPhase;\n                    double dy = Math.Sin(dx);\n\n                    // 取得当前点的颜色\n                    int nOldX = 0, nOldY = 0;\n                    nOldX = bXDir ? i + (int)(dy * dMultValue) : i;\n                    nOldY = bXDir ? j : j + (int)(dy * dMultValue);\n\n                    Color color = srcBmp.GetPixel(i, j);\n                    if (nOldX >= 0 && nOldX < destBmp.Width\n                     && nOldY >= 0 && nOldY < destBmp.Height)\n                    {\n                        destBmp.SetPixel(nOldX, nOldY, color);\n                    }\n                }\n            }\n\n            graph.DrawRectangle(new Pen(Color.Silver), 0, 0, destBmp.Width - 1, destBmp.Height - 1);\n            graph.Dispose();\n            return destBmp;\n        }\n        #endregion\n\n        public bool Verify(string storeKey, string codeToBeVerified)\n        {\n            var codeStored = _codeStore.Find(storeKey);\n            if (codeStored.IsNullOrWhiteSpace())\n            {\n                throw new UserFriendlyException(\"VerificationCode Expired!\");\n            }\n\n            var matched = false;\n            if (_config.CaseSensitive)\n            {\n                matched = (codeStored == codeToBeVerified);\n            }\n            else\n            {\n                matched = (codeStored.ToLower() == codeToBeVerified.ToLower());\n            }\n\n            if (matched && !_config.CodeReusable)\n            {\n                _codeStore.Clear(storeKey);\n            }\n\n            return matched;\n        }\n    }\n}\n"
  },
  {
    "path": "src2/Abplus.Web.SimpleCaptcha/Web/SimpleCaptcha/SimpleCaptchaModule.cs",
    "content": "﻿using System.Reflection;\nusing Abp.Dependency;\nusing Abp.Modules;\nusing Abp.Web.SimpleCaptcha.VerificationCodeStores;\n\nnamespace Abp.Web.SimpleCaptcha\n{\n    public class SimpleCaptchaModule : AbpModule\n    {\n        public override void PreInitialize()\n        {\n            IocManager.Register<ISimpleCaptchaModuleConfig, SimpleCaptchaModuleConfig>();\n        }\n\n        public override void Initialize()\n        {\n            IocManager.RegisterIfNot<IVerificationCodeStore, SessionVerificationCodeStore>();\n            IocManager.RegisterAssemblyByConvention(Assembly.GetExecutingAssembly());\n        }\n    }\n}\n"
  },
  {
    "path": "src2/Abplus.Web.SimpleCaptcha/Web/SimpleCaptcha/SimpleCaptchaModuleConfig.cs",
    "content": "﻿using System;\nusing System.Linq;\nusing Abp.Dependency;\nusing Abp.Web.SimpleCaptcha.VerificationCodeStores;\nnamespace Abp.Web.SimpleCaptcha\n{\n    public class SimpleCaptchaModuleConfig : ISimpleCaptchaModuleConfig\n    {\n        public SimpleCaptchaModuleConfig()\n        {\n            CookieCodeStoreSecretKey = string.Empty;\n            CodeExpiredInMinutes = 20;\n            CodeReusable = false;\n            TwistEnabled = false;\n            RandomLineEnabled = true;\n            RandomLineCount = 1;\n            CaseSensitive = false;\n            CharSetIncludeNumbers = true;\n            CharSetIncludeUppercases = true;\n            CharSetIncludeLowercases = false;\n            CharSetExcluded = \"01IOlo\";\n        }\n\n        /// <summary>\n        /// 是否扭曲，默认不扭曲\n        /// </summary>\n        public bool TwistEnabled { get; private set; }\n\n        /// <summary>\n        /// 随机线条，默认启用\n        /// </summary>\n        public bool RandomLineEnabled { get; private set; }\n\n        /// <summary>\n        /// 随机线条数量，默认1\n        /// </summary>\n        public int RandomLineCount { get; private set; }\n\n        /// <summary>\n        /// 是否大小写敏感, 默认false\n        /// </summary>\n        public bool CaseSensitive { get; private set; }\n\n        /// <summary>\n        /// 字符集是否包含小写字母，默认false\n        /// </summary>\n        public bool CharSetIncludeLowercases { get; private set; }\n\n        /// <summary>\n        /// 字符集是否包含大写字母，默认true\n        /// </summary>\n        public bool CharSetIncludeUppercases { get; private set; }\n\n        /// <summary>\n        /// 字符集是否包含数字，默认true\n        /// </summary>\n        public bool CharSetIncludeNumbers { get; private set; }\n\n        /// <summary>\n        /// 排除易混淆字符，默认\"01IOlo\"\n        /// </summary>\n        public string CharSetExcluded { get; private set; }\n\n        /// <summary>\n        /// 验证码是否可重复使用，默认false\n        /// </summary>\n        public bool CodeReusable { get; private set; }\n\n        /// <summary>\n        /// 验证码过期时长\n        /// </summary>\n        public int CodeExpiredInMinutes { get; private set; }\n\n        /// <summary>\n        /// 验证码存于cookie时，需配置16位加密密钥\n        /// </summary>\n        public string CookieCodeStoreSecretKey { get; private set; }\n\n        public ISimpleCaptchaModuleConfig EnableCodeReusable(bool enabled)\n        {\n            CodeReusable = enabled;\n            return this;\n        }\n\n        public ISimpleCaptchaModuleConfig EnableTwist(bool enabled)\n        {\n            TwistEnabled = enabled;\n            return this;\n        }\n\n        public ISimpleCaptchaModuleConfig EnableRandomLine(bool enabled)\n        {\n            RandomLineEnabled = enabled;\n            return this;\n        }\n\n        public ISimpleCaptchaModuleConfig SetRandomLineCount(int count)\n        {\n            if (count < 1)\n            {\n                throw new ArgumentOutOfRangeException(nameof(count), $\"{nameof(count)} should greater than 0!\");\n            }\n\n            RandomLineCount = count;\n            return this;\n        }\n\n        public ISimpleCaptchaModuleConfig EnableCaseSensitive(bool caseSensitive)\n        {\n            CaseSensitive = caseSensitive;\n            return this;\n        }\n\n        public ISimpleCaptchaModuleConfig IncludeCharSetLowercases(bool included)\n        {\n            CharSetIncludeLowercases = included;\n            return this;\n        }\n\n        public ISimpleCaptchaModuleConfig IncludeCharSetUppercases(bool included)\n        {\n            CharSetIncludeUppercases = included;\n            return this;\n        }\n\n        public ISimpleCaptchaModuleConfig IncludeCharSetNumbers(bool included)\n        {\n            CharSetIncludeNumbers = included;\n            return this;\n        }\n\n        public ISimpleCaptchaModuleConfig ExcludeCharSet(params char[] excludedChars)\n        {\n            if (!excludedChars.Any())\n            {\n                CharSetExcluded = string.Empty;\n            }\n\n            CharSetExcluded = string.Join(\"\", excludedChars);\n\n            return this;\n        }\n\n        public ISimpleCaptchaModuleConfig SetMinutesCodeExpiredIn(int minutes)\n        {\n            if (minutes < 1)\n            {\n                minutes = 1;\n            }\n\n            CodeExpiredInMinutes = minutes;\n            return this;\n        }\n\n        public ISimpleCaptchaModuleConfig SetCookieCodeStoreSecretKey(string secretKey)\n        {\n            Check.NotNullOrWhiteSpace(secretKey, nameof(secretKey));\n\n            if (secretKey.Length != 16)\n            {\n                throw new ArgumentException(\"请提供长度为16位的加密密钥！\", nameof(secretKey));\n            }\n\n            CookieCodeStoreSecretKey = secretKey;\n\n            return this;\n        }\n\n        public ISimpleCaptchaModuleConfig UseCookieCodeStore(string secretKey)\n        {\n            IocManager.Instance.Register<IVerificationCodeStore, CookieVerificationCodeStore>();\n            return SetCookieCodeStoreSecretKey(secretKey);\n        }\n\n        public ISimpleCaptchaModuleConfig UseCacheCodeStore()\n        {\n            IocManager.Instance.Register<IVerificationCodeStore, CacheVerificationCodeStore>();\n            return this;\n        }\n\n        public ISimpleCaptchaModuleConfig UseSessionCodeStore()\n        {\n            IocManager.Instance.Register<IVerificationCodeStore, SessionVerificationCodeStore>();\n            return this;\n        }\n    }\n}\n"
  },
  {
    "path": "src2/Abplus.Web.SimpleCaptcha/Web/SimpleCaptcha/VerificationCodeStores/CacheVerificationCodeStore.cs",
    "content": "﻿using System;\nusing Abp.Extensions;\nusing Abp.Runtime.Caching;\nusing Castle.Core.Logging;\n\nnamespace Abp.Web.SimpleCaptcha.VerificationCodeStores\n{\n    public class CacheVerificationCodeStore : IVerificationCodeStore\n    {\n        private readonly ICacheManager _cacheManager;\n        private const string DefaultCacheName = \"CacheVerificationCodeStore\";\n\n        public ILogger Logger { get; set; }\n\n        public CacheVerificationCodeStore(ICacheManager cacheManager)\n        {\n            Logger = NullLogger.Instance;\n            _cacheManager = cacheManager;\n        }\n\n        public void Clear(string storeKey)\n        {\n            Check.NotNullOrWhiteSpace(storeKey, nameof(storeKey));\n            try\n            {\n                _cacheManager.GetCache(DefaultCacheName).Remove(storeKey);\n            }\n            catch (Exception ex)\n            {\n                Logger.Warn(ex.Message, ex);\n            }\n        }\n\n        public string Find(string storeKey)\n        {\n            Check.NotNullOrWhiteSpace(storeKey, nameof(storeKey));\n\n            var code = _cacheManager.GetCache(DefaultCacheName).GetOrDefault<string, string>(storeKey);\n\n            if (code.IsNullOrWhiteSpace())\n            {\n                return string.Empty;\n            }\n\n            return code;\n        }\n\n        public void Save(string storeKey, string verificationCode)\n        {\n            Check.NotNullOrWhiteSpace(storeKey, nameof(storeKey));\n            Check.NotNullOrWhiteSpace(verificationCode, nameof(verificationCode));\n\n            _cacheManager.GetCache(DefaultCacheName).Set(storeKey, verificationCode, null, TimeSpan.FromMinutes(20));\n        }\n    }\n}\n"
  },
  {
    "path": "src2/Abplus.Web.SimpleCaptcha/Web/SimpleCaptcha/VerificationCodeStores/CookieVerificationCodeStore.cs",
    "content": "﻿using System;\nusing System.Web;\nusing Abp.Runtime.Security;\nusing Abp.Extensions;\n\nnamespace Abp.Web.SimpleCaptcha.VerificationCodeStores\n{\n    public class CookieVerificationCodeStore : IVerificationCodeStore\n    {\n        private readonly ISimpleCaptchaModuleConfig _config;\n        public CookieVerificationCodeStore(ISimpleCaptchaModuleConfig config)\n        {\n            _config = config;\n        }\n\n        public void Clear(string storeKey)\n        {\n            Check.NotNullOrWhiteSpace(storeKey, nameof(storeKey));\n\n            var valiCodeCookie = HttpContext.Current.Request.Cookies[storeKey];\n            if (valiCodeCookie == null || valiCodeCookie.Value.IsNullOrWhiteSpace())\n            {\n                return;\n            }\n\n            valiCodeCookie.Expires = DateTime.UtcNow.AddDays(-1).ToLocalTime();\n            HttpContext.Current.Response.Cookies.Add(valiCodeCookie);\n        }\n\n        public string Find(string storeKey)\n        {\n            var valiCodeCookie = HttpContext.Current.Request.Cookies[storeKey];\n            if (valiCodeCookie == null || valiCodeCookie.Value.IsNullOrWhiteSpace())\n            {\n                return string.Empty;\n            }\n\n            if (_config.CookieCodeStoreSecretKey.IsNullOrWhiteSpace())\n            {\n                return valiCodeCookie.Value;\n            }\n\n            return SimpleStringCipher.Instance.Decrypt(valiCodeCookie.Value, _config.CookieCodeStoreSecretKey);\n        }\n\n        public void Save(string storeKey, string verificationCode)\n        {\n            var cookieValue = verificationCode;\n\n            if (!_config.CookieCodeStoreSecretKey.IsNullOrWhiteSpace())\n            {\n                cookieValue = SimpleStringCipher.Instance.Encrypt(verificationCode, _config.CookieCodeStoreSecretKey);\n            }\n\n            var codeCookie = new HttpCookie(storeKey, cookieValue);\n            codeCookie.Path = \"/\";\n            codeCookie.HttpOnly = true;\n            codeCookie.Expires = DateTime.UtcNow.AddMinutes(5).ToLocalTime();\n            HttpContext.Current.Response.Cookies.Add(codeCookie);\n        }\n    }\n}\n"
  },
  {
    "path": "src2/Abplus.Web.SimpleCaptcha/Web/SimpleCaptcha/VerificationCodeStores/SessionVerificationCodeStore.cs",
    "content": "﻿using System.Web;\nusing Abp.UI;\n\nnamespace Abp.Web.SimpleCaptcha.VerificationCodeStores\n{\n    public class SessionVerificationCodeStore : IVerificationCodeStore\n    {\n        public void Clear(string storeKey)\n        {\n            Check.NotNullOrWhiteSpace(storeKey, nameof(storeKey));\n\n            if (HttpContext.Current.Session == null)\n            {\n                return;\n            }\n\n            HttpContext.Current.Session.Remove(storeKey);\n        }\n\n        public string Find(string storeKey)\n        {\n            Check.NotNullOrWhiteSpace(storeKey, nameof(storeKey));\n\n            if (HttpContext.Current.Session == null)\n            {\n                throw new UserFriendlyException(\"HttpContext.Current.Session is null! \");\n            }\n\n            if (HttpContext.Current.Session[storeKey] == null)\n            {\n                return string.Empty;\n            }\n\n            return HttpContext.Current.Session[storeKey].ToString();\n        }\n\n        public void Save(string storeKey, string verificationCode)\n        {\n            Check.NotNullOrWhiteSpace(storeKey, nameof(storeKey));\n            Check.NotNullOrWhiteSpace(verificationCode, nameof(verificationCode));\n\n            if (HttpContext.Current.Session == null)\n            {\n                throw new UserFriendlyException(\"HttpContext.Current.Session is null! \");\n            }\n\n            HttpContext.Current.Session[storeKey] = verificationCode;\n        }\n    }\n}\n"
  },
  {
    "path": "src2/Abplus.Web.SimpleCaptcha/app.config",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<configuration>\n  <runtime>\n    <assemblyBinding xmlns=\"urn:schemas-microsoft-com:asm.v1\">\n      <dependentAssembly>\n        <assemblyIdentity name=\"Newtonsoft.Json\" publicKeyToken=\"30ad4fe6b2a6aeed\" culture=\"neutral\" />\n        <bindingRedirect oldVersion=\"0.0.0.0-11.0.0.0\" newVersion=\"11.0.0.0\" />\n      </dependentAssembly>\n      <dependentAssembly>\n        <assemblyIdentity name=\"Microsoft.Extensions.Caching.Abstractions\" publicKeyToken=\"adb9793829ddae60\" culture=\"neutral\" />\n        <bindingRedirect oldVersion=\"0.0.0.0-2.0.1.0\" newVersion=\"2.0.1.0\" />\n      </dependentAssembly>\n      <dependentAssembly>\n        <assemblyIdentity name=\"Microsoft.Extensions.Caching.Memory\" publicKeyToken=\"adb9793829ddae60\" culture=\"neutral\" />\n        <bindingRedirect oldVersion=\"0.0.0.0-2.0.1.0\" newVersion=\"2.0.1.0\" />\n      </dependentAssembly>\n      <dependentAssembly>\n        <assemblyIdentity name=\"Microsoft.Extensions.Options\" publicKeyToken=\"adb9793829ddae60\" culture=\"neutral\" />\n        <bindingRedirect oldVersion=\"0.0.0.0-2.0.1.0\" newVersion=\"2.0.1.0\" />\n      </dependentAssembly>\n      <dependentAssembly>\n        <assemblyIdentity name=\"System.Runtime.InteropServices.RuntimeInformation\" publicKeyToken=\"b03f5f7f11d50a3a\" culture=\"neutral\" />\n        <bindingRedirect oldVersion=\"0.0.0.0-4.0.2.0\" newVersion=\"4.0.2.0\" />\n      </dependentAssembly>\n      <dependentAssembly>\n        <assemblyIdentity name=\"System.Collections.Immutable\" publicKeyToken=\"b03f5f7f11d50a3a\" culture=\"neutral\" />\n        <bindingRedirect oldVersion=\"0.0.0.0-1.2.3.0\" newVersion=\"1.2.3.0\" />\n      </dependentAssembly>\n      <dependentAssembly>\n        <assemblyIdentity name=\"System.ComponentModel.Annotations\" publicKeyToken=\"b03f5f7f11d50a3a\" culture=\"neutral\" />\n        <bindingRedirect oldVersion=\"0.0.0.0-4.2.1.0\" newVersion=\"4.2.1.0\" />\n      </dependentAssembly>\n    </assemblyBinding>\n  </runtime>\n</configuration>"
  },
  {
    "path": "src2/Abplus.Web.SimpleCaptcha/packages.config",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<packages>\n  <package id=\"Abp\" version=\"3.7.2\" targetFramework=\"net461\" />\n  <package id=\"Castle.Core\" version=\"4.3.1\" targetFramework=\"net461\" />\n  <package id=\"Castle.LoggingFacility\" version=\"4.1.0\" targetFramework=\"net461\" />\n  <package id=\"Castle.Windsor\" version=\"4.1.0\" targetFramework=\"net461\" />\n  <package id=\"JetBrains.Annotations\" version=\"11.1.0\" targetFramework=\"net461\" />\n  <package id=\"Microsoft.Bcl\" version=\"1.1.10\" targetFramework=\"net461\" />\n  <package id=\"Microsoft.Bcl.Async\" version=\"1.0.168\" targetFramework=\"net461\" />\n  <package id=\"Microsoft.Bcl.Build\" version=\"1.0.21\" targetFramework=\"net461\" />\n  <package id=\"Microsoft.Extensions.Caching.Abstractions\" version=\"2.1.0\" targetFramework=\"net461\" />\n  <package id=\"Microsoft.Extensions.Caching.Memory\" version=\"2.1.0\" targetFramework=\"net461\" />\n  <package id=\"Microsoft.Extensions.DependencyInjection.Abstractions\" version=\"2.1.0\" targetFramework=\"net461\" />\n  <package id=\"Microsoft.Extensions.Options\" version=\"2.1.0\" targetFramework=\"net461\" />\n  <package id=\"Microsoft.Extensions.Primitives\" version=\"2.1.0\" targetFramework=\"net461\" />\n  <package id=\"Newtonsoft.Json\" version=\"11.0.2\" targetFramework=\"net461\" />\n  <package id=\"Nito.AsyncEx\" version=\"4.0.1\" targetFramework=\"net461\" />\n  <package id=\"Nito.AsyncEx.Context\" version=\"1.1.0\" targetFramework=\"net461\" />\n  <package id=\"Nito.AsyncEx.Coordination\" version=\"1.0.2\" targetFramework=\"net461\" />\n  <package id=\"Nito.AsyncEx.Tasks\" version=\"1.1.0\" targetFramework=\"net461\" />\n  <package id=\"Nito.Collections.Deque\" version=\"1.0.4\" targetFramework=\"net461\" />\n  <package id=\"Nito.Disposables\" version=\"1.2.3\" targetFramework=\"net461\" />\n  <package id=\"System.Buffers\" version=\"4.4.0\" targetFramework=\"net461\" />\n  <package id=\"System.Collections.Immutable\" version=\"1.5.0\" targetFramework=\"net461\" />\n  <package id=\"System.ComponentModel.Annotations\" version=\"4.5.0\" targetFramework=\"net461\" />\n  <package id=\"System.Configuration.ConfigurationManager\" version=\"4.5.0\" targetFramework=\"net461\" />\n  <package id=\"System.Data.Common\" version=\"4.3.0\" targetFramework=\"net461\" />\n  <package id=\"System.Linq.Dynamic\" version=\"1.0.7\" targetFramework=\"net461\" />\n  <package id=\"System.Linq.Dynamic.Core\" version=\"1.0.8.9\" targetFramework=\"net461\" />\n  <package id=\"System.Linq.Queryable\" version=\"4.3.0\" targetFramework=\"net461\" />\n  <package id=\"System.Memory\" version=\"4.5.0\" targetFramework=\"net461\" />\n  <package id=\"System.Numerics.Vectors\" version=\"4.4.0\" targetFramework=\"net461\" />\n  <package id=\"System.Runtime.CompilerServices.Unsafe\" version=\"4.5.0\" targetFramework=\"net461\" />\n  <package id=\"System.Runtime.InteropServices.RuntimeInformation\" version=\"4.3.0\" targetFramework=\"net461\" />\n  <package id=\"System.Runtime.Serialization.Formatters\" version=\"4.3.0\" targetFramework=\"net461\" />\n  <package id=\"System.Runtime.Serialization.Primitives\" version=\"4.3.0\" targetFramework=\"net461\" />\n  <package id=\"System.Security.AccessControl\" version=\"4.5.0\" targetFramework=\"net461\" />\n  <package id=\"System.Security.Claims\" version=\"4.3.0\" targetFramework=\"net461\" />\n  <package id=\"System.Security.Permissions\" version=\"4.5.0\" targetFramework=\"net461\" />\n  <package id=\"System.Security.Principal.Windows\" version=\"4.5.0\" targetFramework=\"net461\" />\n  <package id=\"System.Threading\" version=\"4.3.0\" targetFramework=\"net461\" />\n  <package id=\"System.Xml.XmlDocument\" version=\"4.3.0\" targetFramework=\"net461\" />\n  <package id=\"System.Xml.XPath\" version=\"4.3.0\" targetFramework=\"net461\" />\n  <package id=\"System.Xml.XPath.XmlDocument\" version=\"4.3.0\" targetFramework=\"net461\" />\n  <package id=\"TimeZoneConverter\" version=\"2.4.1\" targetFramework=\"net461\" />\n</packages>"
  },
  {
    "path": "src2/Abplus.WebApiClient/Abplus.WebApiClient.csproj",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<Project ToolsVersion=\"14.0\" DefaultTargets=\"Build\" xmlns=\"http://schemas.microsoft.com/developer/msbuild/2003\">\n  <Import Project=\"$(MSBuildExtensionsPath)\\$(MSBuildToolsVersion)\\Microsoft.Common.props\" Condition=\"Exists('$(MSBuildExtensionsPath)\\$(MSBuildToolsVersion)\\Microsoft.Common.props')\" />\n  <PropertyGroup>\n    <Configuration Condition=\" '$(Configuration)' == '' \">Debug</Configuration>\n    <Platform Condition=\" '$(Platform)' == '' \">AnyCPU</Platform>\n    <ProjectGuid>{548FB369-D982-466A-B53E-18D6CA0298D8}</ProjectGuid>\n    <OutputType>Library</OutputType>\n    <AppDesignerFolder>Properties</AppDesignerFolder>\n    <RootNamespace>Abp</RootNamespace>\n    <AssemblyName>Abplus.WebApiClient</AssemblyName>\n    <TargetFrameworkVersion>v4.6.1</TargetFrameworkVersion>\n    <FileAlignment>512</FileAlignment>\n    <NuGetPackageImportStamp>\n    </NuGetPackageImportStamp>\n  </PropertyGroup>\n  <PropertyGroup Condition=\" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' \">\n    <DebugSymbols>true</DebugSymbols>\n    <DebugType>full</DebugType>\n    <Optimize>false</Optimize>\n    <OutputPath>bin\\Debug\\</OutputPath>\n    <DefineConstants>DEBUG;TRACE</DefineConstants>\n    <ErrorReport>prompt</ErrorReport>\n    <WarningLevel>4</WarningLevel>\n  </PropertyGroup>\n  <PropertyGroup Condition=\" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' \">\n    <DebugType>pdbonly</DebugType>\n    <Optimize>true</Optimize>\n    <OutputPath>bin\\Release\\</OutputPath>\n    <DefineConstants>TRACE</DefineConstants>\n    <ErrorReport>prompt</ErrorReport>\n    <WarningLevel>4</WarningLevel>\n    <DocumentationFile>bin\\Release\\Abplus.WebApiClient.XML</DocumentationFile>\n  </PropertyGroup>\n  <ItemGroup>\n    <Reference Include=\"Abp, Version=3.7.2.0, Culture=neutral, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\packages\\Abp.3.7.2\\lib\\netstandard2.0\\Abp.dll</HintPath>\n    </Reference>\n    <Reference Include=\"Abp.Web, Version=3.7.2.0, Culture=neutral, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\packages\\Abp.Web.3.7.2\\lib\\net461\\Abp.Web.dll</HintPath>\n    </Reference>\n    <Reference Include=\"Abp.Web.Api, Version=3.7.2.0, Culture=neutral, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\packages\\Abp.Web.Api.3.7.2\\lib\\net461\\Abp.Web.Api.dll</HintPath>\n    </Reference>\n    <Reference Include=\"Abp.Web.Common, Version=3.7.2.0, Culture=neutral, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\packages\\Abp.Web.Common.3.7.2\\lib\\netstandard2.0\\Abp.Web.Common.dll</HintPath>\n    </Reference>\n    <Reference Include=\"Castle.Core, Version=4.0.0.0, Culture=neutral, PublicKeyToken=407dd0808d44fbdc, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\packages\\Castle.Core.4.3.1\\lib\\net45\\Castle.Core.dll</HintPath>\n    </Reference>\n    <Reference Include=\"Castle.Facilities.Logging, Version=4.0.0.0, Culture=neutral, PublicKeyToken=407dd0808d44fbdc, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\packages\\Castle.LoggingFacility.4.1.0\\lib\\net45\\Castle.Facilities.Logging.dll</HintPath>\n    </Reference>\n    <Reference Include=\"Castle.Windsor, Version=4.0.0.0, Culture=neutral, PublicKeyToken=407dd0808d44fbdc, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\packages\\Castle.Windsor.4.1.0\\lib\\net45\\Castle.Windsor.dll</HintPath>\n    </Reference>\n    <Reference Include=\"JetBrains.Annotations, Version=11.1.0.0, Culture=neutral, PublicKeyToken=1010a0d8d6380325, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\packages\\JetBrains.Annotations.11.1.0\\lib\\net20\\JetBrains.Annotations.dll</HintPath>\n    </Reference>\n    <Reference Include=\"Microsoft.Extensions.Caching.Abstractions, Version=2.1.0.0, Culture=neutral, PublicKeyToken=adb9793829ddae60, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\packages\\Microsoft.Extensions.Caching.Abstractions.2.1.0\\lib\\netstandard2.0\\Microsoft.Extensions.Caching.Abstractions.dll</HintPath>\n    </Reference>\n    <Reference Include=\"Microsoft.Extensions.Caching.Memory, Version=2.1.0.0, Culture=neutral, PublicKeyToken=adb9793829ddae60, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\packages\\Microsoft.Extensions.Caching.Memory.2.1.0\\lib\\netstandard2.0\\Microsoft.Extensions.Caching.Memory.dll</HintPath>\n    </Reference>\n    <Reference Include=\"Microsoft.Extensions.DependencyInjection.Abstractions, Version=2.1.0.0, Culture=neutral, PublicKeyToken=adb9793829ddae60, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\packages\\Microsoft.Extensions.DependencyInjection.Abstractions.2.1.0\\lib\\netstandard2.0\\Microsoft.Extensions.DependencyInjection.Abstractions.dll</HintPath>\n    </Reference>\n    <Reference Include=\"Microsoft.Extensions.Options, Version=2.1.0.0, Culture=neutral, PublicKeyToken=adb9793829ddae60, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\packages\\Microsoft.Extensions.Options.2.1.0\\lib\\netstandard2.0\\Microsoft.Extensions.Options.dll</HintPath>\n    </Reference>\n    <Reference Include=\"Microsoft.Extensions.Primitives, Version=2.1.0.0, Culture=neutral, PublicKeyToken=adb9793829ddae60, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\packages\\Microsoft.Extensions.Primitives.2.1.0\\lib\\netstandard2.0\\Microsoft.Extensions.Primitives.dll</HintPath>\n    </Reference>\n    <Reference Include=\"Microsoft.Threading.Tasks, Version=1.0.12.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\packages\\Microsoft.Bcl.Async.1.0.168\\lib\\net40\\Microsoft.Threading.Tasks.dll</HintPath>\n      <Private>True</Private>\n    </Reference>\n    <Reference Include=\"Microsoft.Threading.Tasks.Extensions, Version=1.0.12.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\packages\\Microsoft.Bcl.Async.1.0.168\\lib\\net40\\Microsoft.Threading.Tasks.Extensions.dll</HintPath>\n      <Private>True</Private>\n    </Reference>\n    <Reference Include=\"Microsoft.Threading.Tasks.Extensions.Desktop, Version=1.0.168.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\packages\\Microsoft.Bcl.Async.1.0.168\\lib\\net40\\Microsoft.Threading.Tasks.Extensions.Desktop.dll</HintPath>\n      <Private>True</Private>\n    </Reference>\n    <Reference Include=\"Newtonsoft.Json, Version=11.0.0.0, Culture=neutral, PublicKeyToken=30ad4fe6b2a6aeed, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\packages\\Newtonsoft.Json.11.0.2\\lib\\net45\\Newtonsoft.Json.dll</HintPath>\n    </Reference>\n    <Reference Include=\"Nito.AsyncEx, Version=4.0.1.0, Culture=neutral, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\packages\\Nito.AsyncEx.4.0.1\\lib\\net45\\Nito.AsyncEx.dll</HintPath>\n      <Private>True</Private>\n    </Reference>\n    <Reference Include=\"Nito.AsyncEx.Concurrent, Version=4.0.1.0, Culture=neutral, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\packages\\Nito.AsyncEx.4.0.1\\lib\\net45\\Nito.AsyncEx.Concurrent.dll</HintPath>\n      <Private>True</Private>\n    </Reference>\n    <Reference Include=\"Nito.AsyncEx.Context, Version=1.1.0.0, Culture=neutral, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\packages\\Nito.AsyncEx.Context.1.1.0\\lib\\net46\\Nito.AsyncEx.Context.dll</HintPath>\n    </Reference>\n    <Reference Include=\"Nito.AsyncEx.Coordination, Version=1.0.2.0, Culture=neutral, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\packages\\Nito.AsyncEx.Coordination.1.0.2\\lib\\net46\\Nito.AsyncEx.Coordination.dll</HintPath>\n    </Reference>\n    <Reference Include=\"Nito.AsyncEx.Enlightenment, Version=4.0.1.0, Culture=neutral, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\packages\\Nito.AsyncEx.4.0.1\\lib\\net45\\Nito.AsyncEx.Enlightenment.dll</HintPath>\n      <Private>True</Private>\n    </Reference>\n    <Reference Include=\"Nito.AsyncEx.Tasks, Version=1.1.0.0, Culture=neutral, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\packages\\Nito.AsyncEx.Tasks.1.1.0\\lib\\net46\\Nito.AsyncEx.Tasks.dll</HintPath>\n    </Reference>\n    <Reference Include=\"Nito.Collections.Deque, Version=1.0.4.0, Culture=neutral, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\packages\\Nito.Collections.Deque.1.0.4\\lib\\netstandard2.0\\Nito.Collections.Deque.dll</HintPath>\n    </Reference>\n    <Reference Include=\"Nito.Disposables, Version=1.2.3.0, Culture=neutral, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\packages\\Nito.Disposables.1.2.3\\lib\\netstandard2.0\\Nito.Disposables.dll</HintPath>\n    </Reference>\n    <Reference Include=\"System\" />\n    <Reference Include=\"System.Buffers, Version=4.0.2.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\packages\\System.Buffers.4.4.0\\lib\\netstandard2.0\\System.Buffers.dll</HintPath>\n    </Reference>\n    <Reference Include=\"System.Collections.Immutable, Version=1.2.3.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\packages\\System.Collections.Immutable.1.5.0\\lib\\netstandard2.0\\System.Collections.Immutable.dll</HintPath>\n    </Reference>\n    <Reference Include=\"System.ComponentModel.Annotations, Version=4.2.1.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\packages\\System.ComponentModel.Annotations.4.5.0\\lib\\net461\\System.ComponentModel.Annotations.dll</HintPath>\n    </Reference>\n    <Reference Include=\"System.ComponentModel.DataAnnotations\" />\n    <Reference Include=\"System.Configuration\" />\n    <Reference Include=\"System.Configuration.ConfigurationManager, Version=4.0.1.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\packages\\System.Configuration.ConfigurationManager.4.5.0\\lib\\net461\\System.Configuration.ConfigurationManager.dll</HintPath>\n    </Reference>\n    <Reference Include=\"System.Core\" />\n    <Reference Include=\"System.Data.Common, Version=4.1.1.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\packages\\System.Data.Common.4.3.0\\lib\\net451\\System.Data.Common.dll</HintPath>\n      <Private>True</Private>\n    </Reference>\n    <Reference Include=\"System.Data.OracleClient\" />\n    <Reference Include=\"System.Drawing\" />\n    <Reference Include=\"System.Linq.Dynamic, Version=1.0.6132.35681, Culture=neutral, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\packages\\System.Linq.Dynamic.1.0.7\\lib\\net40\\System.Linq.Dynamic.dll</HintPath>\n      <Private>True</Private>\n    </Reference>\n    <Reference Include=\"System.Linq.Dynamic.Core, Version=0.0.0.0, Culture=neutral, PublicKeyToken=0f07ec44de6ac832, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\packages\\System.Linq.Dynamic.Core.1.0.8.9\\lib\\net46\\System.Linq.Dynamic.Core.dll</HintPath>\n    </Reference>\n    <Reference Include=\"System.Memory, Version=4.0.1.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\packages\\System.Memory.4.5.0\\lib\\netstandard2.0\\System.Memory.dll</HintPath>\n    </Reference>\n    <Reference Include=\"System.Net\" />\n    <Reference Include=\"System.Net.Http.Formatting, Version=5.2.6.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\packages\\Microsoft.AspNet.WebApi.Client.5.2.6\\lib\\net45\\System.Net.Http.Formatting.dll</HintPath>\n    </Reference>\n    <Reference Include=\"System.Numerics\" />\n    <Reference Include=\"System.Numerics.Vectors, Version=4.1.3.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\packages\\System.Numerics.Vectors.4.4.0\\lib\\net46\\System.Numerics.Vectors.dll</HintPath>\n    </Reference>\n    <Reference Include=\"System.Runtime.Caching\" />\n    <Reference Include=\"System.Runtime.CompilerServices.Unsafe, Version=4.0.4.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\packages\\System.Runtime.CompilerServices.Unsafe.4.5.0\\lib\\netstandard2.0\\System.Runtime.CompilerServices.Unsafe.dll</HintPath>\n    </Reference>\n    <Reference Include=\"System.Runtime.InteropServices.RuntimeInformation, Version=4.0.1.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\packages\\System.Runtime.InteropServices.RuntimeInformation.4.3.0\\lib\\net45\\System.Runtime.InteropServices.RuntimeInformation.dll</HintPath>\n      <Private>True</Private>\n    </Reference>\n    <Reference Include=\"System.Runtime.Remoting\" />\n    <Reference Include=\"System.Runtime.Serialization\" />\n    <Reference Include=\"System.Runtime.Serialization.Formatters, Version=4.0.1.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\packages\\System.Runtime.Serialization.Formatters.4.3.0\\lib\\net46\\System.Runtime.Serialization.Formatters.dll</HintPath>\n      <Private>True</Private>\n    </Reference>\n    <Reference Include=\"System.Runtime.Serialization.Primitives, Version=4.1.2.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\packages\\System.Runtime.Serialization.Primitives.4.3.0\\lib\\net46\\System.Runtime.Serialization.Primitives.dll</HintPath>\n      <Private>True</Private>\n    </Reference>\n    <Reference Include=\"System.Security.AccessControl, Version=4.1.1.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\packages\\System.Security.AccessControl.4.5.0\\lib\\net461\\System.Security.AccessControl.dll</HintPath>\n    </Reference>\n    <Reference Include=\"System.Security.Claims, Version=4.0.2.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\packages\\System.Security.Claims.4.3.0\\lib\\net46\\System.Security.Claims.dll</HintPath>\n      <Private>True</Private>\n    </Reference>\n    <Reference Include=\"System.Security.Permissions, Version=4.0.1.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\packages\\System.Security.Permissions.4.5.0\\lib\\net461\\System.Security.Permissions.dll</HintPath>\n    </Reference>\n    <Reference Include=\"System.Security.Principal.Windows, Version=4.1.1.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\packages\\System.Security.Principal.Windows.4.5.0\\lib\\net461\\System.Security.Principal.Windows.dll</HintPath>\n    </Reference>\n    <Reference Include=\"System.ServiceProcess\" />\n    <Reference Include=\"System.Transactions\" />\n    <Reference Include=\"System.Web\" />\n    <Reference Include=\"System.Web.Http, Version=5.2.6.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\packages\\Microsoft.AspNet.WebApi.Core.5.2.6\\lib\\net45\\System.Web.Http.dll</HintPath>\n    </Reference>\n    <Reference Include=\"System.Web.Http.WebHost, Version=5.2.6.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\packages\\Microsoft.AspNet.WebApi.WebHost.5.2.6\\lib\\net45\\System.Web.Http.WebHost.dll</HintPath>\n    </Reference>\n    <Reference Include=\"System.Xml.Linq\" />\n    <Reference Include=\"System.Data.DataSetExtensions\" />\n    <Reference Include=\"Microsoft.CSharp\" />\n    <Reference Include=\"System.Data\" />\n    <Reference Include=\"System.Net.Http\" />\n    <Reference Include=\"System.Xml\" />\n    <Reference Include=\"System.Xml.XmlDocument, Version=4.0.2.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\packages\\System.Xml.XmlDocument.4.3.0\\lib\\net46\\System.Xml.XmlDocument.dll</HintPath>\n      <Private>True</Private>\n    </Reference>\n    <Reference Include=\"System.Xml.XPath, Version=4.0.2.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\packages\\System.Xml.XPath.4.3.0\\lib\\net46\\System.Xml.XPath.dll</HintPath>\n      <Private>True</Private>\n    </Reference>\n    <Reference Include=\"System.Xml.XPath.XmlDocument, Version=4.0.2.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\packages\\System.Xml.XPath.XmlDocument.4.3.0\\lib\\net46\\System.Xml.XPath.XmlDocument.dll</HintPath>\n    </Reference>\n    <Reference Include=\"TimeZoneConverter, Version=2.4.1.0, Culture=neutral, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\packages\\TimeZoneConverter.2.4.1\\lib\\net45\\TimeZoneConverter.dll</HintPath>\n    </Reference>\n  </ItemGroup>\n  <ItemGroup>\n    <Compile Include=\"Properties\\AssemblyInfo.cs\" />\n    <Compile Include=\"WebApiClient\\AbplusWebApiClient.cs\" />\n    <Compile Include=\"WebApiClient\\AbplusWebApiClientModule.cs\" />\n    <Compile Include=\"WebApiClient\\AbplusWebApiClientRemoteCallException.cs\" />\n    <Compile Include=\"WebApiClient\\IAbplusWebApiClient.cs\" />\n  </ItemGroup>\n  <ItemGroup>\n    <None Include=\"Abplus.WebApiClient.nuspec\" />\n    <None Include=\"app.config\" />\n    <None Include=\"packages.config\" />\n  </ItemGroup>\n  <ItemGroup />\n  <ItemGroup>\n    <ProjectReference Include=\"..\\Abplus\\Abplus.csproj\">\n      <Project>{1de8d8d1-987d-4a9c-aec5-ff0a9914bbd4}</Project>\n      <Name>Abplus</Name>\n    </ProjectReference>\n  </ItemGroup>\n  <Import Project=\"$(MSBuildToolsPath)\\Microsoft.CSharp.targets\" />\n  <Import Project=\"..\\..\\packages\\Microsoft.Bcl.Build.1.0.21\\build\\Microsoft.Bcl.Build.targets\" Condition=\"Exists('..\\..\\packages\\Microsoft.Bcl.Build.1.0.21\\build\\Microsoft.Bcl.Build.targets')\" />\n  <Target Name=\"EnsureNuGetPackageBuildImports\" BeforeTargets=\"PrepareForBuild\">\n    <PropertyGroup>\n      <ErrorText>这台计算机上缺少此项目引用的 NuGet 程序包。使用“NuGet 程序包还原”可下载这些程序包。有关更多信息，请参见 http://go.microsoft.com/fwlink/?LinkID=322105。缺少的文件是 {0}。</ErrorText>\n    </PropertyGroup>\n    <Error Condition=\"!Exists('..\\..\\packages\\Microsoft.Bcl.Build.1.0.21\\build\\Microsoft.Bcl.Build.targets')\" Text=\"$([System.String]::Format('$(ErrorText)', '..\\..\\packages\\Microsoft.Bcl.Build.1.0.21\\build\\Microsoft.Bcl.Build.targets'))\" />\n  </Target>\n  <!-- To modify your build process, add your task inside one of the targets below and uncomment it. \n       Other similar extension points exist, see Microsoft.Common.targets.\n  <Target Name=\"BeforeBuild\">\n  </Target>\n  <Target Name=\"AfterBuild\">\n  </Target>\n  -->\n</Project>"
  },
  {
    "path": "src2/Abplus.WebApiClient/Abplus.WebApiClient.nuspec",
    "content": "<?xml version=\"1.0\"?>\n<package >\n  <metadata>\n    <id>$id$</id>\n    <version>$version$</version>\n    <title>$title$</title>\n    <authors>personball</authors>\n    <owners>personball</owners>\n    <licenseUrl>https://raw.githubusercontent.com/personball/abplus/master/LICENSE</licenseUrl>\n    <projectUrl>https://github.com/personball/abplus</projectUrl>\n    <iconUrl>https://raw.githubusercontent.com/personball/abplus/master/abplus_icon.png</iconUrl>\n    <requireLicenseAcceptance>false</requireLicenseAcceptance>\n    <description>Abp plus, an extension for Abp Framework. </description>\n    <releaseNotes></releaseNotes>\n    <copyright>Copyright 2017</copyright>\n    <tags></tags>\n    <dependencies>\n      <dependency id=\"Abplus\" version=\"$version$\" />\n    </dependencies>\n  </metadata>\n</package>"
  },
  {
    "path": "src2/Abplus.WebApiClient/Properties/AssemblyInfo.cs",
    "content": "﻿using System.Reflection;\nusing System.Runtime.InteropServices;\nusing Abp;\n\n// 有关程序集的一般信息由以下\n// 控制。更改这些特性值可修改\n// 与程序集关联的信息。\n[assembly: AssemblyTitle(\"Abplus.WebApiClient\")]\n[assembly: AssemblyDescription(\"\")]\n[assembly: AssemblyConfiguration(\"\")]\n[assembly: AssemblyCompany(\"\")]\n[assembly: AssemblyProduct(\"Abplus.WebApiClient\")]\n[assembly: AssemblyCopyright(\"Copyright ©  2017\")]\n[assembly: AssemblyTrademark(\"\")]\n[assembly: AssemblyCulture(\"\")]\n\n//将 ComVisible 设置为 false 将使此程序集中的类型\n//对 COM 组件不可见。  如果需要从 COM 访问此程序集中的类型，\n//请将此类型的 ComVisible 特性设置为 true。\n[assembly: ComVisible(false)]\n\n// 如果此项目向 COM 公开，则下列 GUID 用于类型库的 ID\n[assembly: Guid(\"548fb369-d982-466a-b53e-18d6ca0298d8\")]\n\n// 程序集的版本信息由下列四个值组成: \n//\n//      主版本\n//      次版本\n//      生成号\n//      修订号\n//\n//可以指定所有这些值，也可以使用“生成号”和“修订号”的默认值，\n// 方法是按如下所示使用“*”: :\n// [assembly: AssemblyVersion(\"1.0.*\")]\n[assembly: AssemblyVersion(AbplusConsts.CurrentVersion)]\n[assembly: AssemblyFileVersion(AbplusConsts.CurrentVersion)]\n"
  },
  {
    "path": "src2/Abplus.WebApiClient/WebApiClient/AbplusWebApiClient.cs",
    "content": "﻿using System;\nusing System.Collections.Concurrent;\nusing System.Collections.Generic;\nusing System.Collections.ObjectModel;\nusing System.Net;\nusing System.Net.Http;\nusing System.Net.Http.Headers;\nusing System.Text;\nusing System.Threading.Tasks;\nusing Abp.Dependency;\nusing Abp.Extensions;\nusing Abp.Json;\nusing Castle.Core.Logging;\n\nnamespace Abp.WebApiClient\n{\n    public class AbplusWebApiClient : IAbplusWebApiClient, ITransientDependency\n    {\n        public static ConcurrentDictionary<string, HttpClient> clientDictionary { get; set; }\n\n        public static int DefaultTimeoutInSeconds { get; set; }\n\n        public string BaseUrl { get; set; }\n\n        public TimeSpan Timeout { get; set; }\n\n        public ILogger Logger { get; set; }\n\n        public Collection<Cookie> Cookies { get; private set; }\n\n        public ICollection<NameValue> RequestHeaders { get; private set; }\n\n        public ICollection<NameValue> ResponseHeaders { get; private set; }\n\n        static AbplusWebApiClient()\n        {\n            clientDictionary = new ConcurrentDictionary<string, HttpClient>();\n            DefaultTimeoutInSeconds = 90;\n        }\n\n        public AbplusWebApiClient()\n        {\n            Timeout = TimeSpan.FromSeconds(DefaultTimeoutInSeconds);\n            Logger = NullLogger.Instance;\n        }\n\n        public async Task GetAsync(string url, int? timeout = null)\n        {\n            await GetAsync<object>(url, timeout);\n        }\n\n        public async Task<TResult> GetAsync<TResult>(string url, int? timeout = null, bool? hasErrorCodeIf500 = null)\n        {\n            return await RequestAsync<TResult>(url, null, timeout, HttpRequestMethod.GET, hasErrorCodeIf500);\n        }\n\n        public async Task PostAsync(string url, int? timeout = null)\n        {\n            await PostAsync<object>(url, timeout);\n        }\n\n        public async Task PostAsync(string url, object input, int? timeout = null)\n        {\n            await PostAsync<object>(url, input, timeout);\n        }\n\n        public async Task<TResult> PostAsync<TResult>(string url, int? timeout = null) where TResult : class\n        {\n            return await PostAsync<TResult>(url, null, timeout);\n        }\n\n        public async Task<TResult> PostAsync<TResult>(string url, object input, int? timeout = null) where TResult : class\n        {\n            return await RequestAsync<TResult>(url, input, timeout, HttpRequestMethod.POST, null);\n        }\n\n        public async Task<TResult> PostAsync<TResult>(string url, object input, int? timeout = default(int?), bool? hasErrorCodeIf500 = null)\n        {\n            return await RequestAsync<TResult>(url, input, timeout, HttpRequestMethod.POST, hasErrorCodeIf500);\n        }\n\n        private async Task<TResult> RequestAsync<TResult>(\n            string url,\n            object input,\n            int? timeoutInMilliseconds = null,\n            HttpRequestMethod method = HttpRequestMethod.POST,\n            bool? hasErrorCodeIf500 = null)\n        {\n            if (!hasErrorCodeIf500.HasValue)\n            {\n                hasErrorCodeIf500 = false;\n            }\n\n            //httpclient 实例\n            var uri = new Uri(url);\n            timeoutInMilliseconds = timeoutInMilliseconds.HasValue ? timeoutInMilliseconds : DefaultTimeoutInSeconds * 1000;\n            var dictKey = uri.Scheme + \"|\" + uri.Host + \"|\" + uri.Port + \"|\" + timeoutInMilliseconds;\n            dictKey = dictKey.ToLower();\n            HttpClient client;\n            if (!clientDictionary.Keys.Contains(dictKey) || clientDictionary[dictKey] == null)\n            {\n                client = new HttpClient();\n                client.Timeout = TimeSpan.FromMilliseconds(timeoutInMilliseconds.Value);\n                if (method == HttpRequestMethod.POST)\n                {\n                    //POST\n                    client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue(\"application/json\"));\n                }\n\n                if (clientDictionary.Keys.Contains(dictKey))\n                {\n                    clientDictionary.TryUpdate(dictKey, client, null);\n                }\n                else\n                {\n                    clientDictionary.TryAdd(dictKey, client);\n                }\n\n                var sp = ServicePointManager.FindServicePoint(uri);\n                sp.ConnectionLeaseTimeout = (int)Math.Floor(Timeout.TotalMilliseconds * 2);\n            }\n            else\n            {\n                client = clientDictionary[dictKey];\n            }\n\n            if (input == null)\n            {\n                input = new object();\n            }\n\n            if (method == HttpRequestMethod.GET)\n            {\n                //GET\n                using (var response = await client.GetAsync(url))\n                {\n                    var info = string.Empty;\n                    var strReturn = await response.Content.ReadAsStringAsync();\n\n                    if (!response.IsSuccessStatusCode && !hasErrorCodeIf500.Value)\n                    {\n                        info = string.Format(\"RemoteApiCallFailed\\r\\n GET Url:{0}\\r\\n Response:{1}\", url, strReturn);\n                        Logger.Error(info);\n                        throw new AbplusWebApiClientRemoteCallException(info);\n                    }\n\n                    info = string.Format(\"RemoteApiCallSuccess\\r\\n GET Url:{0}\\r\\n Response:{1}\", url, strReturn);\n                    Logger.Info(info);\n\n                    return strReturn.ToObject<TResult>();\n                }\n            }\n            else\n            {\n                var strInput = input.ToJsonString();\n                using (var requestContent = new StringContent(strInput, Encoding.UTF8, \"application/json\"))\n                {\n                    using (var response = await client.PostAsync(url, requestContent))\n                    {\n                        var info = string.Empty;\n                        var strReturn = await response.Content.ReadAsStringAsync();\n\n                        if (!response.IsSuccessStatusCode && !hasErrorCodeIf500.Value)\n                        {\n                            info = string.Format(\"RemoteApiCallFailed\\r\\n POST Url:{0}\\r\\n,Input:{1}\\r\\n Response:{2}\", url, input.ToJsonString(), strReturn);\n                            throw new AbplusWebApiClientRemoteCallException(info);\n                        }\n\n                        info = info = string.Format(\"RemoteApiCallSuccess\\r\\n POST Url:{0}\\r\\n,Input:{1}\\r\\n Response:{2}\", url, input.ToJsonString(), strReturn);\n                        Logger.Info(info);\n\n                        return strReturn.ToObject<TResult>();\n                    }\n                }\n            }\n        }\n        \n        /// <summary>\n        /// \n        /// </summary>\n        public enum HttpRequestMethod\n        {\n            /// <summary>\n            /// HttpPost\n            /// </summary>\n            POST = 0,\n            /// <summary>\n            ///  HttpGET\n            /// </summary>\n            GET = 1\n        }\n    }\n}\n"
  },
  {
    "path": "src2/Abplus.WebApiClient/WebApiClient/AbplusWebApiClientModule.cs",
    "content": "﻿using System.Reflection;\nusing Abp.Modules;\n\nnamespace Abp.WebApiClient\n{\n    public class AbplusWebApiClientModule : AbpModule\n    {\n        public override void Initialize()\n        {\n            IocManager.RegisterAssemblyByConvention(Assembly.GetExecutingAssembly());\n        }\n    }\n}\n"
  },
  {
    "path": "src2/Abplus.WebApiClient/WebApiClient/AbplusWebApiClientRemoteCallException.cs",
    "content": "﻿using System;\nusing System.Runtime.Serialization;\n\nnamespace Abp.WebApiClient\n{\n    /// <summary>\n    /// \n    /// </summary>\n    public class AbplusWebApiClientRemoteCallException : AbpException\n    {\n        /// <summary>\n        /// Creates a new <see cref=\"AbpException\"/> object.\n        /// </summary>\n        public AbplusWebApiClientRemoteCallException()\n        {\n\n        }\n\n        /// <summary>\n        /// Creates a new <see cref=\"AbpException\"/> object.\n        /// </summary>\n        public AbplusWebApiClientRemoteCallException(SerializationInfo serializationInfo, StreamingContext context)\n            : base(serializationInfo, context)\n        {\n\n        }\n\n        /// <summary>\n        /// Creates a new <see cref=\"AbpException\"/> object.\n        /// </summary>\n        /// <param name=\"message\"></param>\n        public AbplusWebApiClientRemoteCallException(string message)\n            : base(message)\n        {\n\n        }\n\n        /// <summary>\n        /// \n        /// </summary>\n        /// <param name=\"message\"></param>\n        /// <param name=\"ex\"></param>\n        public AbplusWebApiClientRemoteCallException(string message, Exception ex)\n            : base(message, ex)\n        {\n\n        }\n    }\n}\n"
  },
  {
    "path": "src2/Abplus.WebApiClient/WebApiClient/IAbplusWebApiClient.cs",
    "content": "﻿using System.Threading.Tasks;\nusing Abp.WebApi.Client;\n\nnamespace Abp.WebApiClient\n{\n    /// <summary>\n    /// 扩展IAbpWebApiClient\n    /// </summary>\n    public interface IAbplusWebApiClient : IAbpWebApiClient\n    {\n        Task GetAsync(string url, int? timeout = null);\n\n        Task<TResult> GetAsync<TResult>(string url, int? timeout = null, bool? hasErrorCodeIf500 = null);\n\n        Task<TResult> PostAsync<TResult>(string url, object input, int? timeout = null, bool? hasErrorCodeIf500 = null);\n    }\n}\n"
  },
  {
    "path": "src2/Abplus.WebApiClient/app.config",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<configuration>\n  <runtime>\n    <assemblyBinding xmlns=\"urn:schemas-microsoft-com:asm.v1\">\n      <dependentAssembly>\n        <assemblyIdentity name=\"Newtonsoft.Json\" publicKeyToken=\"30ad4fe6b2a6aeed\" culture=\"neutral\" />\n        <bindingRedirect oldVersion=\"0.0.0.0-11.0.0.0\" newVersion=\"11.0.0.0\" />\n      </dependentAssembly>\n      <dependentAssembly>\n        <assemblyIdentity name=\"Castle.Core\" publicKeyToken=\"407dd0808d44fbdc\" culture=\"neutral\" />\n        <bindingRedirect oldVersion=\"0.0.0.0-4.0.0.0\" newVersion=\"4.0.0.0\" />\n      </dependentAssembly>\n      <dependentAssembly>\n        <assemblyIdentity name=\"Castle.Windsor\" publicKeyToken=\"407dd0808d44fbdc\" culture=\"neutral\" />\n        <bindingRedirect oldVersion=\"0.0.0.0-4.0.0.0\" newVersion=\"4.0.0.0\" />\n      </dependentAssembly>\n      <dependentAssembly>\n        <assemblyIdentity name=\"System.Collections.Immutable\" publicKeyToken=\"b03f5f7f11d50a3a\" culture=\"neutral\" />\n        <bindingRedirect oldVersion=\"0.0.0.0-1.2.3.0\" newVersion=\"1.2.3.0\" />\n      </dependentAssembly>\n      <dependentAssembly>\n        <assemblyIdentity name=\"Microsoft.Extensions.Caching.Abstractions\" publicKeyToken=\"adb9793829ddae60\" culture=\"neutral\" />\n        <bindingRedirect oldVersion=\"0.0.0.0-2.0.1.0\" newVersion=\"2.0.1.0\" />\n      </dependentAssembly>\n      <dependentAssembly>\n        <assemblyIdentity name=\"Microsoft.Extensions.Caching.Memory\" publicKeyToken=\"adb9793829ddae60\" culture=\"neutral\" />\n        <bindingRedirect oldVersion=\"0.0.0.0-2.0.1.0\" newVersion=\"2.0.1.0\" />\n      </dependentAssembly>\n      <dependentAssembly>\n        <assemblyIdentity name=\"Microsoft.Extensions.Options\" publicKeyToken=\"adb9793829ddae60\" culture=\"neutral\" />\n        <bindingRedirect oldVersion=\"0.0.0.0-2.0.1.0\" newVersion=\"2.0.1.0\" />\n      </dependentAssembly>\n      <dependentAssembly>\n        <assemblyIdentity name=\"System.Runtime.InteropServices.RuntimeInformation\" publicKeyToken=\"b03f5f7f11d50a3a\" culture=\"neutral\" />\n        <bindingRedirect oldVersion=\"0.0.0.0-4.0.2.0\" newVersion=\"4.0.2.0\" />\n      </dependentAssembly>\n      <dependentAssembly>\n        <assemblyIdentity name=\"System.ComponentModel.Annotations\" publicKeyToken=\"b03f5f7f11d50a3a\" culture=\"neutral\" />\n        <bindingRedirect oldVersion=\"0.0.0.0-4.2.1.0\" newVersion=\"4.2.1.0\" />\n      </dependentAssembly>\n    </assemblyBinding>\n  </runtime>\n</configuration>"
  },
  {
    "path": "src2/Abplus.WebApiClient/packages.config",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<packages>\n  <package id=\"Abp\" version=\"3.7.2\" targetFramework=\"net461\" />\n  <package id=\"Abp.Web\" version=\"3.7.2\" targetFramework=\"net461\" />\n  <package id=\"Abp.Web.Api\" version=\"3.7.2\" targetFramework=\"net461\" />\n  <package id=\"Abp.Web.Common\" version=\"3.7.2\" targetFramework=\"net461\" />\n  <package id=\"Castle.Core\" version=\"4.3.1\" targetFramework=\"net461\" />\n  <package id=\"Castle.LoggingFacility\" version=\"4.1.0\" targetFramework=\"net461\" />\n  <package id=\"Castle.Windsor\" version=\"4.1.0\" targetFramework=\"net461\" />\n  <package id=\"JetBrains.Annotations\" version=\"11.1.0\" targetFramework=\"net461\" />\n  <package id=\"Microsoft.AspNet.WebApi\" version=\"5.2.6\" targetFramework=\"net461\" />\n  <package id=\"Microsoft.AspNet.WebApi.Client\" version=\"5.2.6\" targetFramework=\"net461\" />\n  <package id=\"Microsoft.AspNet.WebApi.Core\" version=\"5.2.6\" targetFramework=\"net461\" />\n  <package id=\"Microsoft.AspNet.WebApi.WebHost\" version=\"5.2.6\" targetFramework=\"net461\" />\n  <package id=\"Microsoft.Bcl\" version=\"1.1.10\" targetFramework=\"net461\" />\n  <package id=\"Microsoft.Bcl.Async\" version=\"1.0.168\" targetFramework=\"net461\" />\n  <package id=\"Microsoft.Bcl.Build\" version=\"1.0.21\" targetFramework=\"net461\" />\n  <package id=\"Microsoft.Extensions.Caching.Abstractions\" version=\"2.1.0\" targetFramework=\"net461\" />\n  <package id=\"Microsoft.Extensions.Caching.Memory\" version=\"2.1.0\" targetFramework=\"net461\" />\n  <package id=\"Microsoft.Extensions.DependencyInjection.Abstractions\" version=\"2.1.0\" targetFramework=\"net461\" />\n  <package id=\"Microsoft.Extensions.Options\" version=\"2.1.0\" targetFramework=\"net461\" />\n  <package id=\"Microsoft.Extensions.Primitives\" version=\"2.1.0\" targetFramework=\"net461\" />\n  <package id=\"Newtonsoft.Json\" version=\"11.0.2\" targetFramework=\"net461\" />\n  <package id=\"Nito.AsyncEx\" version=\"4.0.1\" targetFramework=\"net461\" />\n  <package id=\"Nito.AsyncEx.Context\" version=\"1.1.0\" targetFramework=\"net461\" />\n  <package id=\"Nito.AsyncEx.Coordination\" version=\"1.0.2\" targetFramework=\"net461\" />\n  <package id=\"Nito.AsyncEx.Tasks\" version=\"1.1.0\" targetFramework=\"net461\" />\n  <package id=\"Nito.Collections.Deque\" version=\"1.0.4\" targetFramework=\"net461\" />\n  <package id=\"Nito.Disposables\" version=\"1.2.3\" targetFramework=\"net461\" />\n  <package id=\"System.Buffers\" version=\"4.4.0\" targetFramework=\"net461\" />\n  <package id=\"System.Collections.Immutable\" version=\"1.5.0\" targetFramework=\"net461\" />\n  <package id=\"System.ComponentModel.Annotations\" version=\"4.5.0\" targetFramework=\"net461\" />\n  <package id=\"System.Configuration.ConfigurationManager\" version=\"4.5.0\" targetFramework=\"net461\" />\n  <package id=\"System.Data.Common\" version=\"4.3.0\" targetFramework=\"net461\" />\n  <package id=\"System.Linq.Dynamic\" version=\"1.0.7\" targetFramework=\"net461\" />\n  <package id=\"System.Linq.Dynamic.Core\" version=\"1.0.8.9\" targetFramework=\"net461\" />\n  <package id=\"System.Linq.Queryable\" version=\"4.3.0\" targetFramework=\"net461\" />\n  <package id=\"System.Memory\" version=\"4.5.0\" targetFramework=\"net461\" />\n  <package id=\"System.Numerics.Vectors\" version=\"4.4.0\" targetFramework=\"net461\" />\n  <package id=\"System.Runtime.CompilerServices.Unsafe\" version=\"4.5.0\" targetFramework=\"net461\" />\n  <package id=\"System.Runtime.InteropServices.RuntimeInformation\" version=\"4.3.0\" targetFramework=\"net461\" />\n  <package id=\"System.Runtime.Serialization.Formatters\" version=\"4.3.0\" targetFramework=\"net461\" />\n  <package id=\"System.Runtime.Serialization.Primitives\" version=\"4.3.0\" targetFramework=\"net461\" />\n  <package id=\"System.Security.AccessControl\" version=\"4.5.0\" targetFramework=\"net461\" />\n  <package id=\"System.Security.Claims\" version=\"4.3.0\" targetFramework=\"net461\" />\n  <package id=\"System.Security.Permissions\" version=\"4.5.0\" targetFramework=\"net461\" />\n  <package id=\"System.Security.Principal.Windows\" version=\"4.5.0\" targetFramework=\"net461\" />\n  <package id=\"System.Threading\" version=\"4.3.0\" targetFramework=\"net461\" />\n  <package id=\"System.Xml.XmlDocument\" version=\"4.3.0\" targetFramework=\"net461\" />\n  <package id=\"System.Xml.XPath\" version=\"4.3.0\" targetFramework=\"net461\" />\n  <package id=\"System.Xml.XPath.XmlDocument\" version=\"4.3.0\" targetFramework=\"net461\" />\n  <package id=\"TimeZoneConverter\" version=\"2.4.1\" targetFramework=\"net461\" />\n</packages>"
  },
  {
    "path": "src2/Samples/Abplus.WebApiVersionRoute.Sample/Abplus.WebApiVersionRoute.Sample.csproj",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<Project ToolsVersion=\"12.0\" DefaultTargets=\"Build\" xmlns=\"http://schemas.microsoft.com/developer/msbuild/2003\">\n  <Import Project=\"..\\..\\..\\packages\\Microsoft.CodeDom.Providers.DotNetCompilerPlatform.1.0.8\\build\\net45\\Microsoft.CodeDom.Providers.DotNetCompilerPlatform.props\" Condition=\"Exists('..\\..\\..\\packages\\Microsoft.CodeDom.Providers.DotNetCompilerPlatform.1.0.8\\build\\net45\\Microsoft.CodeDom.Providers.DotNetCompilerPlatform.props')\" />\n  <Import Project=\"..\\..\\..\\packages\\Microsoft.Net.Compilers.2.7.0\\build\\Microsoft.Net.Compilers.props\" Condition=\"Exists('..\\..\\..\\packages\\Microsoft.Net.Compilers.2.7.0\\build\\Microsoft.Net.Compilers.props')\" />\n  <Import Project=\"$(MSBuildExtensionsPath)\\$(MSBuildToolsVersion)\\Microsoft.Common.props\" Condition=\"Exists('$(MSBuildExtensionsPath)\\$(MSBuildToolsVersion)\\Microsoft.Common.props')\" />\n  <PropertyGroup>\n    <Configuration Condition=\" '$(Configuration)' == '' \">Debug</Configuration>\n    <Platform Condition=\" '$(Platform)' == '' \">AnyCPU</Platform>\n    <ProductVersion>\n    </ProductVersion>\n    <SchemaVersion>2.0</SchemaVersion>\n    <ProjectGuid>{9B3DE552-D101-4449-BFDE-EC8A5C149C2B}</ProjectGuid>\n    <ProjectTypeGuids>{349c5851-65df-11da-9384-00065b846f21};{fae04ec0-301f-11d3-bf4b-00c04f79efbc}</ProjectTypeGuids>\n    <OutputType>Library</OutputType>\n    <AppDesignerFolder>Properties</AppDesignerFolder>\n    <RootNamespace>Abplus.WebApiVersionRoute.Sample</RootNamespace>\n    <AssemblyName>Abplus.WebApiVersionRoute.Sample</AssemblyName>\n    <TargetFrameworkVersion>v4.6.1</TargetFrameworkVersion>\n    <UseIISExpress>true</UseIISExpress>\n    <IISExpressSSLPort />\n    <IISExpressAnonymousAuthentication />\n    <IISExpressWindowsAuthentication />\n    <IISExpressUseClassicPipelineMode />\n    <UseGlobalApplicationHostFile />\n    <NuGetPackageImportStamp>\n    </NuGetPackageImportStamp>\n    <Use64BitIISExpress />\n  </PropertyGroup>\n  <PropertyGroup Condition=\" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' \">\n    <DebugSymbols>true</DebugSymbols>\n    <DebugType>full</DebugType>\n    <Optimize>false</Optimize>\n    <OutputPath>bin\\</OutputPath>\n    <DefineConstants>DEBUG;TRACE</DefineConstants>\n    <ErrorReport>prompt</ErrorReport>\n    <WarningLevel>4</WarningLevel>\n  </PropertyGroup>\n  <PropertyGroup Condition=\" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' \">\n    <DebugType>pdbonly</DebugType>\n    <Optimize>true</Optimize>\n    <OutputPath>bin\\</OutputPath>\n    <DefineConstants>TRACE</DefineConstants>\n    <ErrorReport>prompt</ErrorReport>\n    <WarningLevel>4</WarningLevel>\n  </PropertyGroup>\n  <ItemGroup>\n    <Reference Include=\"Microsoft.CodeDom.Providers.DotNetCompilerPlatform, Version=1.0.8.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\..\\packages\\Microsoft.CodeDom.Providers.DotNetCompilerPlatform.1.0.8\\lib\\net45\\Microsoft.CodeDom.Providers.DotNetCompilerPlatform.dll</HintPath>\n    </Reference>\n    <Reference Include=\"Microsoft.CSharp\" />\n    <Reference Include=\"Newtonsoft.Json, Version=11.0.0.0, Culture=neutral, PublicKeyToken=30ad4fe6b2a6aeed, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\..\\packages\\Newtonsoft.Json.11.0.1\\lib\\net45\\Newtonsoft.Json.dll</HintPath>\n    </Reference>\n    <Reference Include=\"System.Net.Http\" />\n    <Reference Include=\"System.Net.Http.Formatting, Version=5.2.4.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\..\\packages\\Microsoft.AspNet.WebApi.Client.5.2.4\\lib\\net45\\System.Net.Http.Formatting.dll</HintPath>\n    </Reference>\n    <Reference Include=\"System.Web.DynamicData\" />\n    <Reference Include=\"System.Web.Entity\" />\n    <Reference Include=\"System.Web.ApplicationServices\" />\n    <Reference Include=\"System.ComponentModel.DataAnnotations\" />\n    <Reference Include=\"System\" />\n    <Reference Include=\"System.Data\" />\n    <Reference Include=\"System.Core\" />\n    <Reference Include=\"System.Data.DataSetExtensions\" />\n    <Reference Include=\"System.Web.Extensions\" />\n    <Reference Include=\"System.Web.Http, Version=5.2.4.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\..\\packages\\Microsoft.AspNet.WebApi.Core.5.2.4\\lib\\net45\\System.Web.Http.dll</HintPath>\n    </Reference>\n    <Reference Include=\"System.Web.Http.WebHost, Version=5.2.4.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\..\\packages\\Microsoft.AspNet.WebApi.WebHost.5.2.4\\lib\\net45\\System.Web.Http.WebHost.dll</HintPath>\n    </Reference>\n    <Reference Include=\"System.Xml.Linq\" />\n    <Reference Include=\"System.Drawing\" />\n    <Reference Include=\"System.Web\" />\n    <Reference Include=\"System.Xml\" />\n    <Reference Include=\"System.Configuration\" />\n    <Reference Include=\"System.Web.Services\" />\n    <Reference Include=\"System.EnterpriseServices\" />\n  </ItemGroup>\n  <ItemGroup>\n    <Content Include=\"Global.asax\" />\n    <Content Include=\"Web.config\" />\n  </ItemGroup>\n  <ItemGroup>\n    <Compile Include=\"App_Start\\WebApiConfig.cs\" />\n    <Compile Include=\"Controllers\\ValueController.cs\" />\n    <Compile Include=\"Global.asax.cs\">\n      <DependentUpon>Global.asax</DependentUpon>\n    </Compile>\n    <Compile Include=\"Properties\\AssemblyInfo.cs\" />\n  </ItemGroup>\n  <ItemGroup>\n    <Content Include=\"packages.config\" />\n    <None Include=\"Web.Debug.config\">\n      <DependentUpon>Web.config</DependentUpon>\n    </None>\n    <None Include=\"Web.Release.config\">\n      <DependentUpon>Web.config</DependentUpon>\n    </None>\n  </ItemGroup>\n  <ItemGroup>\n    <Folder Include=\"App_Data\\\" />\n    <Folder Include=\"Models\\\" />\n  </ItemGroup>\n  <ItemGroup>\n    <ProjectReference Include=\"..\\..\\Abplus.Web.Api\\Abplus.Web.Api.csproj\">\n      <Project>{84d80055-6a95-4de3-b1e7-68b88838f2be}</Project>\n      <Name>Abplus.Web.Api</Name>\n    </ProjectReference>\n  </ItemGroup>\n  <PropertyGroup>\n    <VisualStudioVersion Condition=\"'$(VisualStudioVersion)' == ''\">10.0</VisualStudioVersion>\n    <VSToolsPath Condition=\"'$(VSToolsPath)' == ''\">$(MSBuildExtensionsPath32)\\Microsoft\\VisualStudio\\v$(VisualStudioVersion)</VSToolsPath>\n  </PropertyGroup>\n  <Import Project=\"$(MSBuildBinPath)\\Microsoft.CSharp.targets\" />\n  <Import Project=\"$(VSToolsPath)\\WebApplications\\Microsoft.WebApplication.targets\" Condition=\"'$(VSToolsPath)' != ''\" />\n  <Import Project=\"$(MSBuildExtensionsPath32)\\Microsoft\\VisualStudio\\v10.0\\WebApplications\\Microsoft.WebApplication.targets\" Condition=\"false\" />\n  <ProjectExtensions>\n    <VisualStudio>\n      <FlavorProperties GUID=\"{349c5851-65df-11da-9384-00065b846f21}\">\n        <WebProjectProperties>\n          <UseIIS>True</UseIIS>\n          <AutoAssignPort>True</AutoAssignPort>\n          <DevelopmentServerPort>22070</DevelopmentServerPort>\n          <DevelopmentServerVPath>/</DevelopmentServerVPath>\n          <IISUrl>http://localhost:22044/</IISUrl>\n          <NTLMAuthentication>False</NTLMAuthentication>\n          <UseCustomServer>False</UseCustomServer>\n          <CustomServerUrl>\n          </CustomServerUrl>\n          <SaveServerSettingsInUserFile>False</SaveServerSettingsInUserFile>\n        </WebProjectProperties>\n      </FlavorProperties>\n    </VisualStudio>\n  </ProjectExtensions>\n  <Target Name=\"EnsureNuGetPackageBuildImports\" BeforeTargets=\"PrepareForBuild\">\n    <PropertyGroup>\n      <ErrorText>这台计算机上缺少此项目引用的 NuGet 程序包。使用“NuGet 程序包还原”可下载这些程序包。有关更多信息，请参见 http://go.microsoft.com/fwlink/?LinkID=322105。缺少的文件是 {0}。</ErrorText>\n    </PropertyGroup>\n    <Error Condition=\"!Exists('..\\..\\..\\packages\\Microsoft.Net.Compilers.2.7.0\\build\\Microsoft.Net.Compilers.props')\" Text=\"$([System.String]::Format('$(ErrorText)', '..\\..\\..\\packages\\Microsoft.Net.Compilers.2.7.0\\build\\Microsoft.Net.Compilers.props'))\" />\n    <Error Condition=\"!Exists('..\\..\\..\\packages\\Microsoft.CodeDom.Providers.DotNetCompilerPlatform.1.0.8\\build\\net45\\Microsoft.CodeDom.Providers.DotNetCompilerPlatform.props')\" Text=\"$([System.String]::Format('$(ErrorText)', '..\\..\\..\\packages\\Microsoft.CodeDom.Providers.DotNetCompilerPlatform.1.0.8\\build\\net45\\Microsoft.CodeDom.Providers.DotNetCompilerPlatform.props'))\" />\n  </Target>\n  <!-- To modify your build process, add your task inside one of the targets below and uncomment it. \n       Other similar extension points exist, see Microsoft.Common.targets.\n  <Target Name=\"BeforeBuild\">\n  </Target>\n  <Target Name=\"AfterBuild\">\n  </Target>\n  -->\n</Project>"
  },
  {
    "path": "src2/Samples/Abplus.WebApiVersionRoute.Sample/App_Start/WebApiConfig.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Web.Http;\n\nnamespace Abplus.WebApiVersionRoute.Sample\n{\n    public static class WebApiConfig\n    {\n        public static void Register(HttpConfiguration config)\n        {\n            // Web API 配置和服务\n\n            // Web API 路由\n            config.MapHttpAttributeRoutes();\n\n            config.Routes.MapHttpRoute(\n                name: \"DefaultApi\",\n                routeTemplate: \"api/{controller}/{id}\",\n                defaults: new { id = RouteParameter.Optional }\n            );\n        }\n    }\n}\n"
  },
  {
    "path": "src2/Samples/Abplus.WebApiVersionRoute.Sample/Controllers/ValueController.cs",
    "content": "﻿using System.Threading.Tasks;\nusing System.Web.Http;\nusing Abplus.WebApiVersionRoute.RoutingConstraints;\n\nnamespace Abplus.WebApiVersionRoute.Sample.Controllers\n{\n    public class ValueController : ApiController\n    {\n        /// <summary>\n        /// Access With HttpHeader \"Abplus-ApiVersion:1\"\n        /// </summary>\n        /// <returns></returns>\n        [HttpGet]\n        [VersionedRoute(\"api/value/byApiVersion\", 1)]\n        public async Task<string> byApiVersion1()\n        {\n            return \"ApiVersion1\";\n        }\n\n        /// <summary>\n        /// Access With HttpHeader \"Abplus-ApiVersion:2\"\n        /// </summary>\n        /// <returns></returns>\n        [HttpGet]\n        [VersionedRoute(\"api/value/byApiVersion\", 2)]\n        public async Task<string> byApiVersion2()\n        {\n            return \"ApiVersion2\";\n        }\n\n        /// <summary>\n        /// Access With HttpHeader \"Abplus-SysCode:H5\"\n        /// </summary>\n        /// <returns></returns>\n        [HttpGet]\n        [VersionedRoute(\"api/value/bySysCode\", 1, SysCode.H5)]\n        public async Task<string> bySysCodeH5()\n        {\n            return \"OnlySysCodeH5\";\n        }\n\n        /// <summary>\n        /// Access With HttpHeader \"Abplus-SysCode:IPhone\" or \"Abplus-SysCode:Andriod\"\n        /// </summary>\n        /// <returns></returns>\n        [HttpGet]\n        [VersionedRoute(\"api/value/bySysCode\", 1, SysCode.IPhone|SysCode.Android)]\n        public async Task<string> bySysCodeNotH5()\n        {\n            return \"SysCode.IPhone|SysCode.Andriod\";\n        }\n\n        /// <summary>\n        /// Access With HttpHeader \"Abplus-ClientVersion:1.1.1\" or \"Abplus-ClientVersion:1.1.0\" (with value less than 1.1.2)\n        /// </summary>\n        /// <returns></returns>\n        [HttpGet]\n        [VersionedRoute(\"api/value/byVersionRangeString\", 1, SysCode.H5,\"*-1.1.1\")]\n        public async Task<string> byVersionRangeStringLessThan112()\n        {\n            return \"byVersionRangeStringLessThan112\";\n        }\n\n        /// <summary>\n        /// Access With HttpHeader \"Abplus-ClientVersion:1.1.3\" (with version between 1.1.2 and 1.9.0)\n        /// </summary>\n        /// <returns></returns>\n        [HttpGet]\n        [VersionedRoute(\"api/value/byVersionRangeString\", 1, SysCode.H5, \"1.1.2-1.9.0\")]\n        public async Task<string> byVersionRangeString112To190()\n        {\n            return \"byVersionRangeString111To222\";\n        }\n\n        /// <summary>\n        /// Access With HttpHeader \"Abplus-ClientVersion:1.9.1\"\n        /// </summary>\n        /// <returns></returns>\n        [HttpGet]\n        [VersionedRoute(\"api/value/byVersionRangeString\", 1, SysCode.H5, \"1.9.1\")]\n        public async Task<string> byVersionRangeStringOnly191()\n        {\n            return \"byVersionRangeStringOnly191\";\n        }\n\n        /// <summary>\n        /// Access With HttpHeader \"Abplus-ClientVersion:1.9.2\" or \"Abplus-ClientVersion:1.9.3\"\n        /// </summary>\n        /// <returns></returns>\n        [HttpGet]\n        [VersionedRoute(\"api/value/byVersionRangeString\", 1, SysCode.H5, \"1.9.2\", \"1.9.3\")]\n        public async Task<string> byVersionRangeString192And193()\n        {\n            return \"byVersionRangeString192And193\";\n        }\n\n        /// <summary>\n        /// Access With HttpHeader \"Abplus-ClientVersion:1.9.4\"  (with version greater than 1.9.4)\n        /// </summary>\n        /// <returns></returns>\n        [HttpGet]\n        [VersionedRoute(\"api/value/byVersionRangeString\", 1, SysCode.H5, \"1.9.4-*\")]\n        public async Task<string> byVersionRangeStringGreaterThan193()\n        {\n            return \"byVersionRangeStringGreaterThan193\";\n        }\n\n        /// <summary>\n        /// Access With HttpHeaders\n        /// \"Abplus-ClientVersion:1.9.4\"\n        /// \"Abplus-SysCode:IPhone\"\n        /// \"Abplus-ApiVersion:2\"\n        /// </summary>\n        /// <returns></returns>\n        [HttpGet]\n        [VersionedRoute(\"api/value/byVersionRangeString\", 2, SysCode.IPhone, \"1.9.4\")]\n        public async Task<string> byApiSysCodeVersionRange()\n        {\n            return \"ApiVersion2-IPhone-194\";\n        }\n    }\n}\n"
  },
  {
    "path": "src2/Samples/Abplus.WebApiVersionRoute.Sample/Global.asax",
    "content": "﻿<%@ Application Codebehind=\"Global.asax.cs\" Inherits=\"Abplus.WebApiVersionRoute.Sample.WebApiApplication\" Language=\"C#\" %>\n"
  },
  {
    "path": "src2/Samples/Abplus.WebApiVersionRoute.Sample/Global.asax.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Web;\nusing System.Web.Http;\nusing System.Web.Routing;\n\nnamespace Abplus.WebApiVersionRoute.Sample\n{\n    public class WebApiApplication : System.Web.HttpApplication\n    {\n        protected void Application_Start()\n        {\n            GlobalConfiguration.Configure(WebApiConfig.Register);\n        }\n    }\n}\n"
  },
  {
    "path": "src2/Samples/Abplus.WebApiVersionRoute.Sample/Properties/AssemblyInfo.cs",
    "content": "﻿using System.Reflection;\nusing System.Runtime.CompilerServices;\nusing System.Runtime.InteropServices;\n\n// 有关程序集的常规信息通过下列特性集\n// 控制。更改这些特性值可修改\n// 与程序集关联的信息。\n[assembly: AssemblyTitle(\"Abplus.WebApiVersionRoute.Sample\")]\n[assembly: AssemblyDescription(\"\")]\n[assembly: AssemblyConfiguration(\"\")]\n[assembly: AssemblyCompany(\"\")]\n[assembly: AssemblyProduct(\"Abplus.WebApiVersionRoute.Sample\")]\n[assembly: AssemblyCopyright(\"Copyright ©  2017\")]\n[assembly: AssemblyTrademark(\"\")]\n[assembly: AssemblyCulture(\"\")]\n\n// 将 ComVisible 设置为 false 会使此程序集中的类型\n// 对 COM 组件不可见。如果需要\n// 从 COM 访问此程序集中的某个类型，请针对该类型将 ComVisible 特性设置为 true。\n[assembly: ComVisible(false)]\n\n// 如果此项目向 COM 公开，则下列 GUID 用于 typelib 的 ID\n[assembly: Guid(\"9b3de552-d101-4449-bfde-ec8a5c149c2b\")]\n\n// 程序集的版本信息由下列四个值组成:\n//\n//      主版本\n//      次版本\n//      内部版本号\n//      修订版本\n//\n// 可以指定所有值，也可以使用“修订号”和“内部版本号”的默认值，\n// 方法是按如下所示使用 \"*\":\n[assembly: AssemblyVersion(\"1.0.0.0\")]\n[assembly: AssemblyFileVersion(\"1.0.0.0\")]\n"
  },
  {
    "path": "src2/Samples/Abplus.WebApiVersionRoute.Sample/Web.Debug.config",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n\n<!-- 有关使用 web.config 转换的详细信息，请访问 http://go.microsoft.com/fwlink/?LinkId=125889 -->\n\n<configuration xmlns:xdt=\"http://schemas.microsoft.com/XML-Document-Transform\">\n  <!--\n    在下例中，“SetAttributes”转换将更改 \n    “connectionString”的值，以仅在“Match”定位器 \n    找到值为“MyDB”的特性“name”时使用“ReleaseSQLServer”。\n    \n    <connectionStrings>\n      <add name=\"MyDB\" \n        connectionString=\"Data Source=ReleaseSQLServer;Initial Catalog=MyReleaseDB;Integrated Security=True\" \n        xdt:Transform=\"SetAttributes\" xdt:Locator=\"Match(name)\"/>\n    </connectionStrings>\n  -->\n  <system.web>\n    <!--\n      \n      在下例中，“Replace”转换将替换 \n      web.config 文件的整个 <customErrors> 节。\n      请注意，由于 \n      在 <system.web> 节点下仅有一个 customErrors 节，因此不需要使用“xdt:Locator”特性。\n      \n      <customErrors defaultRedirect=\"GenericError.htm\"\n        mode=\"RemoteOnly\" xdt:Transform=\"Replace\">\n        <error statusCode=\"500\" redirect=\"InternalError.htm\"/>\n      </customErrors>\n    -->\n  </system.web>\n</configuration>"
  },
  {
    "path": "src2/Samples/Abplus.WebApiVersionRoute.Sample/Web.Release.config",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n\n<!-- 有关使用 web.config 转换的详细信息，请访问 http://go.microsoft.com/fwlink/?LinkId=125889 -->\n\n<configuration xmlns:xdt=\"http://schemas.microsoft.com/XML-Document-Transform\">\n  <!--\n    在下例中，“SetAttributes”转换将更改 \n    “connectionString”的值，以仅在“Match”定位器 \n    找到值为“MyDB”的特性“name”时使用“ReleaseSQLServer”。\n    \n    <connectionStrings>\n      <add name=\"MyDB\" \n        connectionString=\"Data Source=ReleaseSQLServer;Initial Catalog=MyReleaseDB;Integrated Security=True\" \n        xdt:Transform=\"SetAttributes\" xdt:Locator=\"Match(name)\"/>\n    </connectionStrings>\n  -->\n  <system.web>\n    <compilation xdt:Transform=\"RemoveAttributes(debug)\" />\n    <!--\n      \n      在下例中，“Replace”转换将替换 \n      web.config 文件的整个 <customErrors> 节。\n      请注意，由于 \n      在 <system.web> 节点下仅有一个 customErrors 节，因此不需要使用“xdt:Locator”特性。\n      \n      <customErrors defaultRedirect=\"GenericError.htm\"\n        mode=\"RemoteOnly\" xdt:Transform=\"Replace\">\n        <error statusCode=\"500\" redirect=\"InternalError.htm\"/>\n      </customErrors>\n    -->\n  </system.web>\n</configuration>"
  },
  {
    "path": "src2/Samples/Abplus.WebApiVersionRoute.Sample/Web.config",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<!--\n  有关如何配置 ASP.NET 应用程序的详细信息，请访问\n  http://go.microsoft.com/fwlink/?LinkId=301879\n  -->\n<configuration>\n  <appSettings></appSettings>\n  <system.web>\n    <compilation debug=\"true\" targetFramework=\"4.6.1\" />\n    <httpRuntime targetFramework=\"4.6.1\" />\n  </system.web>\n  \n  <runtime>\n    <assemblyBinding xmlns=\"urn:schemas-microsoft-com:asm.v1\">\n      <dependentAssembly>\n        <assemblyIdentity name=\"System.Web.Helpers\" publicKeyToken=\"31bf3856ad364e35\" />\n        <bindingRedirect oldVersion=\"1.0.0.0-3.0.0.0\" newVersion=\"3.0.0.0\" />\n      </dependentAssembly>\n      <dependentAssembly>\n        <assemblyIdentity name=\"System.Web.Mvc\" publicKeyToken=\"31bf3856ad364e35\" />\n        <bindingRedirect oldVersion=\"1.0.0.0-5.2.3.0\" newVersion=\"5.2.3.0\" />\n      </dependentAssembly>\n      <dependentAssembly>\n        <assemblyIdentity name=\"System.Web.WebPages\" publicKeyToken=\"31bf3856ad364e35\" />\n        <bindingRedirect oldVersion=\"1.0.0.0-3.0.0.0\" newVersion=\"3.0.0.0\" />\n      </dependentAssembly>\n      <dependentAssembly>\n        <assemblyIdentity name=\"Newtonsoft.Json\" publicKeyToken=\"30ad4fe6b2a6aeed\" culture=\"neutral\" />\n        <bindingRedirect oldVersion=\"0.0.0.0-11.0.0.0\" newVersion=\"11.0.0.0\" />\n      </dependentAssembly>\n      <dependentAssembly>\n        <assemblyIdentity name=\"Microsoft.Extensions.Caching.Abstractions\" publicKeyToken=\"adb9793829ddae60\" culture=\"neutral\" />\n        <bindingRedirect oldVersion=\"0.0.0.0-2.0.1.0\" newVersion=\"2.0.1.0\" />\n      </dependentAssembly>\n      <dependentAssembly>\n        <assemblyIdentity name=\"Microsoft.Extensions.Caching.Memory\" publicKeyToken=\"adb9793829ddae60\" culture=\"neutral\" />\n        <bindingRedirect oldVersion=\"0.0.0.0-2.0.1.0\" newVersion=\"2.0.1.0\" />\n      </dependentAssembly>\n      <dependentAssembly>\n        <assemblyIdentity name=\"Microsoft.Extensions.Options\" publicKeyToken=\"adb9793829ddae60\" culture=\"neutral\" />\n        <bindingRedirect oldVersion=\"0.0.0.0-2.0.1.0\" newVersion=\"2.0.1.0\" />\n      </dependentAssembly>\n      <dependentAssembly>\n        <assemblyIdentity name=\"System.Runtime.InteropServices.RuntimeInformation\" publicKeyToken=\"b03f5f7f11d50a3a\" culture=\"neutral\" />\n        <bindingRedirect oldVersion=\"0.0.0.0-4.0.2.0\" newVersion=\"4.0.2.0\" />\n      </dependentAssembly>\n      <dependentAssembly>\n        <assemblyIdentity name=\"System.Collections.Immutable\" publicKeyToken=\"b03f5f7f11d50a3a\" culture=\"neutral\" />\n        <bindingRedirect oldVersion=\"0.0.0.0-1.2.3.0\" newVersion=\"1.2.3.0\" />\n      </dependentAssembly>\n      <dependentAssembly>\n        <assemblyIdentity name=\"System.ComponentModel.Annotations\" publicKeyToken=\"b03f5f7f11d50a3a\" culture=\"neutral\" />\n        <bindingRedirect oldVersion=\"0.0.0.0-4.2.1.0\" newVersion=\"4.2.1.0\" />\n      </dependentAssembly>\n    </assemblyBinding>\n  </runtime>\n<system.webServer>\n    <handlers>\n      <remove name=\"ExtensionlessUrlHandler-Integrated-4.0\" />\n      <remove name=\"OPTIONSVerbHandler\" />\n      <remove name=\"TRACEVerbHandler\" />\n      <add name=\"ExtensionlessUrlHandler-Integrated-4.0\" path=\"*.\" verb=\"*\" type=\"System.Web.Handlers.TransferRequestHandler\" preCondition=\"integratedMode,runtimeVersionv4.0\" />\n    </handlers>\n  </system.webServer>\n<system.codedom>\n<compilers>\n<compiler language=\"c#;cs;csharp\" extension=\".cs\" type=\"Microsoft.CodeDom.Providers.DotNetCompilerPlatform.CSharpCodeProvider, Microsoft.CodeDom.Providers.DotNetCompilerPlatform, Version=1.0.8.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35\" warningLevel=\"4\" compilerOptions=\"/langversion:default /nowarn:1659;1699;1701\" />\n<compiler language=\"vb;vbs;visualbasic;vbscript\" extension=\".vb\" type=\"Microsoft.CodeDom.Providers.DotNetCompilerPlatform.VBCodeProvider, Microsoft.CodeDom.Providers.DotNetCompilerPlatform, Version=1.0.8.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35\" warningLevel=\"4\" compilerOptions=\"/langversion:default /nowarn:41008 /define:_MYTYPE=\\&quot;Web\\&quot; /optionInfer+\" />\n</compilers>\n</system.codedom>\n</configuration>\n"
  },
  {
    "path": "src2/Samples/Abplus.WebApiVersionRoute.Sample/packages.config",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<packages>\n  <package id=\"Microsoft.AspNet.WebApi\" version=\"5.2.4\" targetFramework=\"net461\" />\n  <package id=\"Microsoft.AspNet.WebApi.Client\" version=\"5.2.4\" targetFramework=\"net461\" />\n  <package id=\"Microsoft.AspNet.WebApi.Client.zh-Hans\" version=\"5.2.4\" targetFramework=\"net461\" />\n  <package id=\"Microsoft.AspNet.WebApi.Core\" version=\"5.2.4\" targetFramework=\"net461\" />\n  <package id=\"Microsoft.AspNet.WebApi.Core.zh-Hans\" version=\"5.2.4\" targetFramework=\"net461\" />\n  <package id=\"Microsoft.AspNet.WebApi.WebHost\" version=\"5.2.4\" targetFramework=\"net461\" />\n  <package id=\"Microsoft.AspNet.WebApi.WebHost.zh-Hans\" version=\"5.2.4\" targetFramework=\"net461\" />\n  <package id=\"Microsoft.CodeDom.Providers.DotNetCompilerPlatform\" version=\"1.0.8\" targetFramework=\"net461\" />\n  <package id=\"Microsoft.Net.Compilers\" version=\"2.7.0\" targetFramework=\"net461\" developmentDependency=\"true\" />\n  <package id=\"Newtonsoft.Json\" version=\"11.0.1\" targetFramework=\"net461\" />\n</packages>"
  },
  {
    "path": "src2/Samples/Sample.MqMessages/MqMessages/TestMqMessage.cs",
    "content": "﻿using System;\n\nnamespace Sample.MqMessages\n{\n    public class TestMqMessage\n    {\n        public string Name { get; set; }\n        public string Value { get; set; }\n        public DateTime Time { get; set; }\n    }\n}\n"
  },
  {
    "path": "src2/Samples/Sample.MqMessages/Properties/AssemblyInfo.cs",
    "content": "﻿using System.Reflection;\nusing System.Runtime.CompilerServices;\nusing System.Runtime.InteropServices;\n\n// 有关程序集的一般信息由以下\n// 控制。更改这些特性值可修改\n// 与程序集关联的信息。\n[assembly: AssemblyTitle(\"Sample.MqMessages\")]\n[assembly: AssemblyDescription(\"\")]\n[assembly: AssemblyConfiguration(\"\")]\n[assembly: AssemblyCompany(\"\")]\n[assembly: AssemblyProduct(\"Sample.MqMessages\")]\n[assembly: AssemblyCopyright(\"Copyright ©  2017\")]\n[assembly: AssemblyTrademark(\"\")]\n[assembly: AssemblyCulture(\"\")]\n\n//将 ComVisible 设置为 false 将使此程序集中的类型\n//对 COM 组件不可见。  如果需要从 COM 访问此程序集中的类型，\n//请将此类型的 ComVisible 特性设置为 true。\n[assembly: ComVisible(false)]\n\n// 如果此项目向 COM 公开，则下列 GUID 用于类型库的 ID\n[assembly: Guid(\"94e6d468-2d45-4ec7-af1b-aac884db467f\")]\n\n// 程序集的版本信息由下列四个值组成: \n//\n//      主版本\n//      次版本\n//      生成号\n//      修订号\n//\n//可以指定所有这些值，也可以使用“生成号”和“修订号”的默认值，\n// 方法是按如下所示使用“*”: :\n// [assembly: AssemblyVersion(\"1.0.*\")]\n[assembly: AssemblyVersion(\"1.0.0.0\")]\n[assembly: AssemblyFileVersion(\"1.0.0.0\")]\n"
  },
  {
    "path": "src2/Samples/Sample.MqMessages/Sample.MqMessages.csproj",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<Project ToolsVersion=\"14.0\" DefaultTargets=\"Build\" xmlns=\"http://schemas.microsoft.com/developer/msbuild/2003\">\n  <Import Project=\"$(MSBuildExtensionsPath)\\$(MSBuildToolsVersion)\\Microsoft.Common.props\" Condition=\"Exists('$(MSBuildExtensionsPath)\\$(MSBuildToolsVersion)\\Microsoft.Common.props')\" />\n  <PropertyGroup>\n    <Configuration Condition=\" '$(Configuration)' == '' \">Debug</Configuration>\n    <Platform Condition=\" '$(Platform)' == '' \">AnyCPU</Platform>\n    <ProjectGuid>{94E6D468-2D45-4EC7-AF1B-AAC884DB467F}</ProjectGuid>\n    <OutputType>Library</OutputType>\n    <AppDesignerFolder>Properties</AppDesignerFolder>\n    <RootNamespace>Sample</RootNamespace>\n    <AssemblyName>Sample.MqMessages</AssemblyName>\n    <TargetFrameworkVersion>v4.6.1</TargetFrameworkVersion>\n    <FileAlignment>512</FileAlignment>\n  </PropertyGroup>\n  <PropertyGroup Condition=\" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' \">\n    <DebugSymbols>true</DebugSymbols>\n    <DebugType>full</DebugType>\n    <Optimize>false</Optimize>\n    <OutputPath>bin\\Debug\\</OutputPath>\n    <DefineConstants>DEBUG;TRACE</DefineConstants>\n    <ErrorReport>prompt</ErrorReport>\n    <WarningLevel>4</WarningLevel>\n  </PropertyGroup>\n  <PropertyGroup Condition=\" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' \">\n    <DebugType>pdbonly</DebugType>\n    <Optimize>true</Optimize>\n    <OutputPath>bin\\Release\\</OutputPath>\n    <DefineConstants>TRACE</DefineConstants>\n    <ErrorReport>prompt</ErrorReport>\n    <WarningLevel>4</WarningLevel>\n  </PropertyGroup>\n  <ItemGroup>\n    <Reference Include=\"System\" />\n    <Reference Include=\"System.Core\" />\n    <Reference Include=\"System.Xml.Linq\" />\n    <Reference Include=\"System.Data.DataSetExtensions\" />\n    <Reference Include=\"Microsoft.CSharp\" />\n    <Reference Include=\"System.Data\" />\n    <Reference Include=\"System.Net.Http\" />\n    <Reference Include=\"System.Xml\" />\n  </ItemGroup>\n  <ItemGroup>\n    <Compile Include=\"MqMessages\\TestMqMessage.cs\" />\n    <Compile Include=\"Properties\\AssemblyInfo.cs\" />\n  </ItemGroup>\n  <Import Project=\"$(MSBuildToolsPath)\\Microsoft.CSharp.targets\" />\n  <!-- To modify your build process, add your task inside one of the targets below and uncomment it. \n       Other similar extension points exist, see Microsoft.Common.targets.\n  <Target Name=\"BeforeBuild\">\n  </Target>\n  <Target Name=\"AfterBuild\">\n  </Target>\n  -->\n</Project>"
  },
  {
    "path": "src2/Samples/Sample.RebusRabbitMqConsumer/App.config",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<configuration>\n    <startup> \n        <supportedRuntime version=\"v4.0\" sku=\".NETFramework,Version=v4.6.1\" />\n    </startup>\n  <runtime>\n    <assemblyBinding xmlns=\"urn:schemas-microsoft-com:asm.v1\">\n      <dependentAssembly>\n        <assemblyIdentity name=\"NLog\" publicKeyToken=\"5120e14c03d0593c\" culture=\"neutral\" />\n        <bindingRedirect oldVersion=\"0.0.0.0-4.0.0.0\" newVersion=\"4.0.0.0\" />\n      </dependentAssembly>\n      <dependentAssembly>\n        <assemblyIdentity name=\"Castle.Windsor\" publicKeyToken=\"407dd0808d44fbdc\" culture=\"neutral\" />\n        <bindingRedirect oldVersion=\"0.0.0.0-4.0.0.0\" newVersion=\"4.0.0.0\" />\n      </dependentAssembly>\n      <dependentAssembly>\n        <assemblyIdentity name=\"Newtonsoft.Json\" publicKeyToken=\"30ad4fe6b2a6aeed\" culture=\"neutral\" />\n        <bindingRedirect oldVersion=\"0.0.0.0-11.0.0.0\" newVersion=\"11.0.0.0\" />\n      </dependentAssembly>\n      <dependentAssembly>\n        <assemblyIdentity name=\"Castle.Core\" publicKeyToken=\"407dd0808d44fbdc\" culture=\"neutral\" />\n        <bindingRedirect oldVersion=\"0.0.0.0-4.0.0.0\" newVersion=\"4.0.0.0\" />\n      </dependentAssembly>\n      <dependentAssembly>\n        <assemblyIdentity name=\"Microsoft.Extensions.Caching.Abstractions\" publicKeyToken=\"adb9793829ddae60\" culture=\"neutral\" />\n        <bindingRedirect oldVersion=\"0.0.0.0-2.0.1.0\" newVersion=\"2.0.1.0\" />\n      </dependentAssembly>\n      <dependentAssembly>\n        <assemblyIdentity name=\"Microsoft.Extensions.Caching.Memory\" publicKeyToken=\"adb9793829ddae60\" culture=\"neutral\" />\n        <bindingRedirect oldVersion=\"0.0.0.0-2.0.1.0\" newVersion=\"2.0.1.0\" />\n      </dependentAssembly>\n      <dependentAssembly>\n        <assemblyIdentity name=\"Microsoft.Extensions.Options\" publicKeyToken=\"adb9793829ddae60\" culture=\"neutral\" />\n        <bindingRedirect oldVersion=\"0.0.0.0-2.0.1.0\" newVersion=\"2.0.1.0\" />\n      </dependentAssembly>\n      <dependentAssembly>\n        <assemblyIdentity name=\"System.Runtime.InteropServices.RuntimeInformation\" publicKeyToken=\"b03f5f7f11d50a3a\" culture=\"neutral\" />\n        <bindingRedirect oldVersion=\"0.0.0.0-4.0.2.0\" newVersion=\"4.0.2.0\" />\n      </dependentAssembly>\n      <dependentAssembly>\n        <assemblyIdentity name=\"RabbitMQ.Client\" publicKeyToken=\"89e7d7c5feba84ce\" culture=\"neutral\" />\n        <bindingRedirect oldVersion=\"0.0.0.0-5.0.0.0\" newVersion=\"5.0.0.0\" />\n      </dependentAssembly>\n    </assemblyBinding>\n  </runtime>\n</configuration>"
  },
  {
    "path": "src2/Samples/Sample.RebusRabbitMqConsumer/Handlers/TestHandler.cs",
    "content": "﻿using System.Threading.Tasks;\nusing Castle.Core.Logging;\nusing Rebus.Handlers;\nusing Sample.MqMessages;\nusing Abp.MqMessages;\n\nnamespace Sample.Handlers\n{\n    public class TestHandler : IHandleMessages<TestMqMessage>\n    {\n        public ILogger Logger { get; set; }\n        public IMqMessagePublisher Publisher { get; set; }\n        public TestHandler()\n        {\n            Publisher = NullMqMessagePublisher.Instance;\n        }\n\n        public async Task Handle(TestMqMessage message)\n        {\n            var msg = $\"{Logger.GetType()}:{message.Name},{message.Value},{message.Time}\";\n            Logger.Debug(msg);\n            await Publisher.PublishAsync(msg);//send it again!\n        }\n    }\n}\n"
  },
  {
    "path": "src2/Samples/Sample.RebusRabbitMqConsumer/NLog.config",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\" ?>\n<nlog xmlns=\"http://www.nlog-project.org/schemas/NLog.xsd\"\n      xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\"\n      xsi:schemaLocation=\"http://www.nlog-project.org/schemas/NLog.xsd NLog.xsd\"\n      autoReload=\"true\"\n      throwExceptions=\"false\"\n      internalLogLevel=\"Off\" internalLogFile=\"c:\\temp\\nlog-internal.log\">\n\n  <!-- optional, add some variables\n  https://github.com/nlog/NLog/wiki/Configuration-file#variables\n  -->\n  <variable name=\"myvar\" value=\"myvalue\"/>\n\n  <!--\n  See https://github.com/nlog/nlog/wiki/Configuration-file\n  for information on customizing logging rules and outputs.\n   -->\n  <targets>\n\n    <!--\n    add your targets here\n    See https://github.com/nlog/NLog/wiki/Targets for possible targets.\n    See https://github.com/nlog/NLog/wiki/Layout-Renderers for the possible layout renderers.\n    -->\n\n    <!--\n    Write events to a file with the date in the filename.-->\n    <target xsi:type=\"File\" name=\"f\" fileName=\"${basedir}/logs/${shortdate}.log\"\n            layout=\"${longdate} ${uppercase:${level}} ${message}\" />\n    <target xsi:type=\"ColoredConsole\"  name=\"c\" layout=\"${longdate} ${uppercase:${level}} ${message}\" />\n  </targets>\n\n  <rules>\n    <!-- add your logging rules here -->\n\n    <!--\n    Write all events with minimal level of Debug (So Debug, Info, Warn, Error and Fatal, but not Trace)  to \"f\"  -->\n    <logger name=\"*\" minlevel=\"Debug\" writeTo=\"f\" />\n    <logger name=\"*\" minlevel=\"Debug\" writeTo=\"c\" />\n  \n  </rules>\n</nlog>\n"
  },
  {
    "path": "src2/Samples/Sample.RebusRabbitMqConsumer/NLog.xsd",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<xs:schema id=\"NLog\" targetNamespace=\"http://www.nlog-project.org/schemas/NLog.xsd\" elementFormDefault=\"qualified\" xmlns:xs=\"http://www.w3.org/2001/XMLSchema\" xmlns=\"http://www.nlog-project.org/schemas/NLog.xsd\">\n  <xs:element name=\"nlog\" type=\"NLogConfiguration\" />\n  <xs:complexType name=\"NLogConfiguration\">\n    <xs:choice minOccurs=\"0\" maxOccurs=\"unbounded\">\n      <xs:element name=\"extensions\" type=\"NLogExtensions\" />\n      <xs:element name=\"include\" type=\"NLogInclude\" />\n      <xs:element name=\"variable\" type=\"NLogVariable\" />\n      <xs:element name=\"targets\" type=\"NLogTargets\" />\n      <xs:element name=\"rules\" type=\"NLogRules\" />\n      <xs:element name=\"time\" type=\"TimeSource\" />\n    </xs:choice>\n    <xs:attribute name=\"autoReload\" type=\"xs:boolean\">\n      <xs:annotation>\n        <xs:documentation>Watch config file for changes and reload automatically.</xs:documentation>\n      </xs:annotation>\n    </xs:attribute>\n    <xs:attribute name=\"internalLogToConsole\" type=\"xs:boolean\">\n      <xs:annotation>\n        <xs:documentation>Print internal NLog messages to the console. Default value is: false</xs:documentation>\n      </xs:annotation>\n    </xs:attribute>\n    <xs:attribute name=\"internalLogToConsoleError\" type=\"xs:boolean\">\n      <xs:annotation>\n        <xs:documentation>Print internal NLog messages to the console error output. Default value is: false</xs:documentation>\n      </xs:annotation>\n    </xs:attribute>\n    <xs:attribute name=\"internalLogFile\" type=\"xs:string\">\n      <xs:annotation>\n        <xs:documentation>Write internal NLog messages to the specified file.</xs:documentation>\n      </xs:annotation>\n    </xs:attribute>\n    <xs:attribute name=\"internalLogLevel\" type=\"NLogLevel\">\n      <xs:annotation>\n        <xs:documentation>Log level threshold for internal log messages. Default value is: Info.</xs:documentation>\n      </xs:annotation>\n    </xs:attribute>\n    <xs:attribute name=\"globalThreshold\" type=\"NLogLevel\">\n      <xs:annotation>\n        <xs:documentation>Global log level threshold for application log messages. Messages below this level won't be logged..</xs:documentation>\n      </xs:annotation>\n    </xs:attribute>\n    <xs:attribute name=\"throwExceptions\" type=\"xs:boolean\">\n      <xs:annotation>\n        <xs:documentation>Throw an exception when there is an internal error. Default value is: false.</xs:documentation>\n      </xs:annotation>\n    </xs:attribute>\n    <xs:attribute name=\"throwConfigExceptions\" type=\"xs:boolean\">\n      <xs:annotation>\n        <xs:documentation>Throw an exception when there is a configuration error. If not set, determined by throwExceptions.</xs:documentation>\n      </xs:annotation>\n    </xs:attribute>\n    <xs:attribute name=\"keepVariablesOnReload\" type=\"xs:boolean\">\n      <xs:annotation>\n        <xs:documentation>Gets or sets a value indicating whether Variables should be kept on configuration reload. Default value is: false.</xs:documentation>\n      </xs:annotation>\n    </xs:attribute>\n    <xs:attribute name=\"internalLogToTrace\" type=\"xs:boolean\">\n      <xs:annotation>\n        <xs:documentation>Write internal NLog messages to the System.Diagnostics.Trace. Default value is: false.</xs:documentation>\n      </xs:annotation>\n    </xs:attribute>\n    <xs:attribute name=\"internalLogIncludeTimestamp\" type=\"xs:boolean\">\n      <xs:annotation>\n        <xs:documentation>Write timestamps for internal NLog messages. Default value is: true.</xs:documentation>\n      </xs:annotation>\n    </xs:attribute>\n    <xs:attribute name=\"useInvariantCulture\" type=\"xs:boolean\">\n      <xs:annotation>\n        <xs:documentation>Use InvariantCulture as default culture instead of CurrentCulture.  Default value is: false.</xs:documentation>\n      </xs:annotation>\n    </xs:attribute>\n    <xs:attribute name=\"parseMessageTemplates\" type=\"xs:boolean\">\n      <xs:annotation>\n        <xs:documentation>Perform mesage template parsing and formatting of LogEvent messages (true = Always, false = Never, empty = Auto Detect). Default value is: empty.</xs:documentation>\n      </xs:annotation>\n    </xs:attribute>\n  </xs:complexType>\n  <xs:complexType name=\"NLogTargets\">\n    <xs:choice minOccurs=\"0\" maxOccurs=\"unbounded\">\n      <xs:element name=\"default-wrapper\" type=\"WrapperTargetBase\" />\n      <xs:element name=\"default-target-parameters\" type=\"Target\" />\n      <xs:element name=\"target\" type=\"Target\" />\n      <xs:element name=\"wrapper-target\" type=\"WrapperTargetBase\" />\n      <xs:element name=\"compound-target\" type=\"CompoundTargetBase\" />\n    </xs:choice>\n    <xs:attribute name=\"async\" type=\"xs:boolean\">\n      <xs:annotation>\n        <xs:documentation>Make all targets within this section asynchronous (creates additional threads but the calling thread isn't blocked by any target writes).</xs:documentation>\n      </xs:annotation>\n    </xs:attribute>\n  </xs:complexType>\n  <xs:complexType name=\"NLogRules\">\n    <xs:sequence minOccurs=\"0\" maxOccurs=\"unbounded\">\n      <xs:element name=\"logger\" type=\"NLogLoggerRule\" />\n    </xs:sequence>\n  </xs:complexType>\n  <xs:complexType name=\"NLogExtensions\">\n    <xs:choice minOccurs=\"0\" maxOccurs=\"unbounded\">\n      <xs:element name=\"add\" type=\"NLogExtensionsAdd\" />\n    </xs:choice>\n  </xs:complexType>\n  <xs:complexType name=\"NLogExtensionsAdd\">\n    <xs:attribute name=\"prefix\" type=\"xs:string\">\n      <xs:annotation>\n        <xs:documentation>Prefix for targets/layout renderers/filters/conditions loaded from this assembly.</xs:documentation>\n      </xs:annotation>\n    </xs:attribute>\n    <xs:attribute name=\"assemblyFile\" type=\"xs:string\">\n      <xs:annotation>\n        <xs:documentation>Load NLog extensions from the specified file (*.dll)</xs:documentation>\n      </xs:annotation>\n    </xs:attribute>\n    <xs:attribute name=\"assembly\" type=\"xs:string\">\n      <xs:annotation>\n        <xs:documentation>Load NLog extensions from the specified assembly. Assembly name should be fully qualified.</xs:documentation>\n      </xs:annotation>\n    </xs:attribute>\n  </xs:complexType>\n  <xs:complexType name=\"NLogLoggerRule\">\n    <xs:choice minOccurs=\"0\" maxOccurs=\"unbounded\">\n      <xs:element name=\"filters\" type=\"NLogFilters\" />\n    </xs:choice>\n    <xs:attribute name=\"name\" use=\"optional\">\n      <xs:annotation>\n        <xs:documentation>Name of the logger. May include '*' character which acts like a wildcard. Allowed forms are: *, Name, *Name, Name* and *Name*</xs:documentation>\n      </xs:annotation>\n    </xs:attribute>\n    <xs:attribute name=\"levels\" type=\"NLogLevelList\">\n      <xs:annotation>\n        <xs:documentation>Comma separated list of levels that this rule matches.</xs:documentation>\n      </xs:annotation>\n    </xs:attribute>\n    <xs:attribute name=\"minlevel\" type=\"NLogLevel\">\n      <xs:annotation>\n        <xs:documentation>Minimum level that this rule matches.</xs:documentation>\n      </xs:annotation>\n    </xs:attribute>\n    <xs:attribute name=\"maxlevel\" type=\"NLogLevel\">\n      <xs:annotation>\n        <xs:documentation>Maximum level that this rule matches.</xs:documentation>\n      </xs:annotation>\n    </xs:attribute>\n    <xs:attribute name=\"level\" type=\"NLogLevel\">\n      <xs:annotation>\n        <xs:documentation>Level that this rule matches.</xs:documentation>\n      </xs:annotation>\n    </xs:attribute>\n    <xs:attribute name=\"writeTo\" type=\"NLogTargetIDList\">\n      <xs:annotation>\n        <xs:documentation>Comma separated list of target names.</xs:documentation>\n      </xs:annotation>\n    </xs:attribute>\n    <xs:attribute name=\"final\" type=\"xs:boolean\" default=\"false\">\n      <xs:annotation>\n        <xs:documentation>Ignore further rules if this one matches.</xs:documentation>\n      </xs:annotation>\n    </xs:attribute>\n    <xs:attribute name=\"enabled\" type=\"xs:boolean\" default=\"true\">\n      <xs:annotation>\n        <xs:documentation>Enable or disable logging rule. Disabled rules are ignored.</xs:documentation>\n      </xs:annotation>\n    </xs:attribute>\n  </xs:complexType>\n  <xs:complexType name=\"NLogFilters\">\n    <xs:choice minOccurs=\"0\" maxOccurs=\"unbounded\">\n      <xs:element name=\"when\" type=\"when\" />\n      <xs:element name=\"whenContains\" type=\"whenContains\" />\n      <xs:element name=\"whenEqual\" type=\"whenEqual\" />\n      <xs:element name=\"whenNotContains\" type=\"whenNotContains\" />\n      <xs:element name=\"whenNotEqual\" type=\"whenNotEqual\" />\n      <xs:element name=\"whenRepeated\" type=\"whenRepeated\" />\n    </xs:choice>\n  </xs:complexType>\n  <xs:simpleType name=\"NLogLevel\">\n    <xs:restriction base=\"xs:string\">\n      <xs:enumeration value=\"Off\" />\n      <xs:enumeration value=\"Trace\" />\n      <xs:enumeration value=\"Debug\" />\n      <xs:enumeration value=\"Info\" />\n      <xs:enumeration value=\"Warn\" />\n      <xs:enumeration value=\"Error\" />\n      <xs:enumeration value=\"Fatal\" />\n    </xs:restriction>\n  </xs:simpleType>\n  <xs:simpleType name=\"LineEndingMode\">\n    <xs:restriction base=\"xs:string\">\n      <xs:enumeration value=\"Default\" />\n      <xs:enumeration value=\"CRLF\" />\n      <xs:enumeration value=\"CR\" />\n      <xs:enumeration value=\"LF\" />\n      <xs:enumeration value=\"None\" />\n    </xs:restriction>\n  </xs:simpleType>\n  <xs:simpleType name=\"NLogLevelList\">\n    <xs:restriction base=\"xs:string\">\n      <xs:pattern value=\"(|Trace|Debug|Info|Warn|Error|Fatal)(,(Trace|Debug|Info|Warn|Error|Fatal))*\" />\n    </xs:restriction>\n  </xs:simpleType>\n  <xs:complexType name=\"NLogInclude\">\n    <xs:attribute name=\"file\" type=\"SimpleLayoutAttribute\" use=\"required\">\n      <xs:annotation>\n        <xs:documentation>Name of the file to be included. You could use * wildcard. The name is relative to the name of the current config file.</xs:documentation>\n      </xs:annotation>\n    </xs:attribute>\n    <xs:attribute name=\"ignoreErrors\" type=\"xs:boolean\" use=\"optional\" default=\"false\">\n      <xs:annotation>\n        <xs:documentation>Ignore any errors in the include file.</xs:documentation>\n      </xs:annotation>\n    </xs:attribute>\n  </xs:complexType>\n  <xs:complexType name=\"NLogVariable\">\n    <xs:attribute name=\"name\" type=\"xs:string\" use=\"required\">\n      <xs:annotation>\n        <xs:documentation>Variable name.</xs:documentation>\n      </xs:annotation>\n    </xs:attribute>\n    <xs:attribute name=\"value\" type=\"SimpleLayoutAttribute\" use=\"required\">\n      <xs:annotation>\n        <xs:documentation>Variable value.</xs:documentation>\n      </xs:annotation>\n    </xs:attribute>\n  </xs:complexType>\n  <xs:simpleType name=\"NLogTargetIDList\">\n    <xs:restriction base=\"xs:string\">\n      <xs:pattern value=\"(|([a-zA-Z][a-zA-Z0-9_\\-]*))(,([a-zA-Z][a-zA-Z0-9_\\-]*))*\" />\n    </xs:restriction>\n  </xs:simpleType>\n  <xs:complexType name=\"Target\" abstract=\"true\"></xs:complexType>\n  <xs:complexType name=\"TargetRef\">\n    <xs:attribute name=\"name\" type=\"xs:string\" use=\"required\" />\n  </xs:complexType>\n  <xs:complexType name=\"WrapperTargetBase\" abstract=\"true\">\n    <xs:complexContent>\n      <xs:extension base=\"Target\">\n        <xs:choice minOccurs=\"0\" maxOccurs=\"unbounded\">\n          <xs:element name=\"target\" type=\"Target\" minOccurs=\"1\" maxOccurs=\"1\" />\n          <xs:element name=\"wrapper-target\" type=\"WrapperTargetBase\" minOccurs=\"1\" maxOccurs=\"1\" />\n          <xs:element name=\"compound-target\" type=\"CompoundTargetBase\" minOccurs=\"1\" maxOccurs=\"1\" />\n          <xs:element name=\"target-ref\" type=\"TargetRef\" minOccurs=\"1\" maxOccurs=\"1\" />\n          <xs:element name=\"wrapper-target-ref\" type=\"TargetRef\" minOccurs=\"1\" maxOccurs=\"1\" />\n          <xs:element name=\"compound-target-ref\" type=\"TargetRef\" minOccurs=\"1\" maxOccurs=\"1\" />\n        </xs:choice>\n      </xs:extension>\n    </xs:complexContent>\n  </xs:complexType>\n  <xs:complexType name=\"CompoundTargetBase\" abstract=\"true\">\n    <xs:complexContent>\n      <xs:extension base=\"Target\">\n        <xs:choice minOccurs=\"0\" maxOccurs=\"unbounded\">\n          <xs:element name=\"target\" type=\"Target\" minOccurs=\"1\" maxOccurs=\"unbounded\" />\n          <xs:element name=\"wrapper-target\" type=\"WrapperTargetBase\" minOccurs=\"1\" maxOccurs=\"1\" />\n          <xs:element name=\"compound-target\" type=\"CompoundTargetBase\" minOccurs=\"1\" maxOccurs=\"1\" />\n          <xs:element name=\"target-ref\" type=\"TargetRef\" minOccurs=\"1\" maxOccurs=\"1\" />\n          <xs:element name=\"wrapper-target-ref\" type=\"TargetRef\" minOccurs=\"1\" maxOccurs=\"1\" />\n          <xs:element name=\"compound-target-ref\" type=\"TargetRef\" minOccurs=\"1\" maxOccurs=\"1\" />\n        </xs:choice>\n      </xs:extension>\n    </xs:complexContent>\n  </xs:complexType>\n  <xs:complexType name=\"Filter\" abstract=\"true\"></xs:complexType>\n  <xs:complexType name=\"TimeSource\" abstract=\"true\"></xs:complexType>\n  <xs:simpleType name=\"SimpleLayoutAttribute\">\n    <xs:restriction base=\"xs:string\">\n      <xs:pattern value=\".*\" />\n    </xs:restriction>\n  </xs:simpleType>\n  <xs:simpleType name=\"Condition\">\n    <xs:restriction base=\"xs:string\">\n      <xs:minLength value=\"1\" />\n    </xs:restriction>\n  </xs:simpleType>\n  <xs:complexType name=\"AsyncWrapper\">\n    <xs:complexContent>\n      <xs:extension base=\"WrapperTargetBase\">\n        <xs:choice minOccurs=\"0\" maxOccurs=\"unbounded\">\n          <xs:element name=\"name\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:string\" />\n          <xs:element name=\"batchSize\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:integer\" />\n          <xs:element name=\"fullBatchSizeWriteLimit\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:integer\" />\n          <xs:element name=\"overflowAction\" minOccurs=\"0\" maxOccurs=\"1\" type=\"NLog.Targets.Wrappers.AsyncTargetWrapperOverflowAction\" />\n          <xs:element name=\"queueLimit\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:integer\" />\n          <xs:element name=\"timeToSleepBetweenBatches\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:integer\" />\n          <xs:element name=\"optimizeBufferReuse\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:boolean\" />\n        </xs:choice>\n        <xs:attribute name=\"name\" type=\"xs:string\">\n          <xs:annotation>\n            <xs:documentation>Name of the target.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"batchSize\" type=\"xs:integer\">\n          <xs:annotation>\n            <xs:documentation>Number of log events that should be processed in a batch by the lazy writer thread.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"fullBatchSizeWriteLimit\" type=\"xs:integer\">\n          <xs:annotation>\n            <xs:documentation>Limit of full s to write before yielding into  Performance is better when writing many small batches, than writing a single large batch</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"overflowAction\" type=\"NLog.Targets.Wrappers.AsyncTargetWrapperOverflowAction\">\n          <xs:annotation>\n            <xs:documentation>Action to be taken when the lazy writer thread request queue count exceeds the set limit.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"queueLimit\" type=\"xs:integer\">\n          <xs:annotation>\n            <xs:documentation>Limit on the number of requests in the lazy writer thread request queue.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"timeToSleepBetweenBatches\" type=\"xs:integer\">\n          <xs:annotation>\n            <xs:documentation>Time in milliseconds to sleep between batches.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"optimizeBufferReuse\" type=\"xs:boolean\">\n          <xs:annotation>\n            <xs:documentation>Target supports reuse of internal buffers, and doesn't have to constantly allocate new buffers Required for legacy NLog-targets, that expects buffers to remain stable after Write-method exit</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n      </xs:extension>\n    </xs:complexContent>\n  </xs:complexType>\n  <xs:simpleType name=\"NLog.Targets.Wrappers.AsyncTargetWrapperOverflowAction\">\n    <xs:restriction base=\"xs:string\">\n      <xs:enumeration value=\"Grow\" />\n      <xs:enumeration value=\"Discard\" />\n      <xs:enumeration value=\"Block\" />\n    </xs:restriction>\n  </xs:simpleType>\n  <xs:complexType name=\"AutoFlushWrapper\">\n    <xs:complexContent>\n      <xs:extension base=\"WrapperTargetBase\">\n        <xs:choice minOccurs=\"0\" maxOccurs=\"unbounded\">\n          <xs:element name=\"asyncFlush\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:boolean\" />\n          <xs:element name=\"condition\" minOccurs=\"0\" maxOccurs=\"1\" type=\"Condition\" />\n          <xs:element name=\"name\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:string\" />\n          <xs:element name=\"optimizeBufferReuse\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:boolean\" />\n        </xs:choice>\n        <xs:attribute name=\"asyncFlush\" type=\"xs:boolean\">\n          <xs:annotation>\n            <xs:documentation>Delay the flush until the LogEvent has been confirmed as written</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"condition\" type=\"Condition\">\n          <xs:annotation>\n            <xs:documentation>Condition expression. Log events who meet this condition will cause a flush on the wrapped target.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"name\" type=\"xs:string\">\n          <xs:annotation>\n            <xs:documentation>Name of the target.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"optimizeBufferReuse\" type=\"xs:boolean\">\n          <xs:annotation>\n            <xs:documentation>Target supports reuse of internal buffers, and doesn't have to constantly allocate new buffers Required for legacy NLog-targets, that expects buffers to remain stable after Write-method exit</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n      </xs:extension>\n    </xs:complexContent>\n  </xs:complexType>\n  <xs:complexType name=\"BufferingWrapper\">\n    <xs:complexContent>\n      <xs:extension base=\"WrapperTargetBase\">\n        <xs:choice minOccurs=\"0\" maxOccurs=\"unbounded\">\n          <xs:element name=\"name\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:string\" />\n          <xs:element name=\"bufferSize\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:integer\" />\n          <xs:element name=\"flushTimeout\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:integer\" />\n          <xs:element name=\"overflowAction\" minOccurs=\"0\" maxOccurs=\"1\" type=\"NLog.Targets.Wrappers.BufferingTargetWrapperOverflowAction\" />\n          <xs:element name=\"slidingTimeout\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:boolean\" />\n          <xs:element name=\"optimizeBufferReuse\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:boolean\" />\n        </xs:choice>\n        <xs:attribute name=\"name\" type=\"xs:string\">\n          <xs:annotation>\n            <xs:documentation>Name of the target.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"bufferSize\" type=\"xs:integer\">\n          <xs:annotation>\n            <xs:documentation>Number of log events to be buffered.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"flushTimeout\" type=\"xs:integer\">\n          <xs:annotation>\n            <xs:documentation>Timeout (in milliseconds) after which the contents of buffer will be flushed if there's no write in the specified period of time. Use -1 to disable timed flushes.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"overflowAction\" type=\"NLog.Targets.Wrappers.BufferingTargetWrapperOverflowAction\">\n          <xs:annotation>\n            <xs:documentation>Action to take if the buffer overflows.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"slidingTimeout\" type=\"xs:boolean\">\n          <xs:annotation>\n            <xs:documentation>Indicates whether to use sliding timeout.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"optimizeBufferReuse\" type=\"xs:boolean\">\n          <xs:annotation>\n            <xs:documentation>Target supports reuse of internal buffers, and doesn't have to constantly allocate new buffers Required for legacy NLog-targets, that expects buffers to remain stable after Write-method exit</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n      </xs:extension>\n    </xs:complexContent>\n  </xs:complexType>\n  <xs:simpleType name=\"NLog.Targets.Wrappers.BufferingTargetWrapperOverflowAction\">\n    <xs:restriction base=\"xs:string\">\n      <xs:enumeration value=\"Flush\" />\n      <xs:enumeration value=\"Discard\" />\n    </xs:restriction>\n  </xs:simpleType>\n  <xs:complexType name=\"Chainsaw\">\n    <xs:complexContent>\n      <xs:extension base=\"Target\">\n        <xs:choice minOccurs=\"0\" maxOccurs=\"unbounded\">\n          <xs:element name=\"name\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:string\" />\n          <xs:element name=\"encoding\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:string\" />\n          <xs:element name=\"layout\" minOccurs=\"0\" maxOccurs=\"1\" type=\"Layout\" />\n          <xs:element name=\"lineEnding\" minOccurs=\"0\" maxOccurs=\"1\" type=\"LineEndingMode\" />\n          <xs:element name=\"maxMessageSize\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:integer\" />\n          <xs:element name=\"newLine\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:boolean\" />\n          <xs:element name=\"onConnectionOverflow\" minOccurs=\"0\" maxOccurs=\"1\" type=\"NLog.Targets.NetworkTargetConnectionsOverflowAction\" />\n          <xs:element name=\"maxQueueSize\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:integer\" />\n          <xs:element name=\"maxConnections\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:integer\" />\n          <xs:element name=\"keepConnection\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:boolean\" />\n          <xs:element name=\"connectionCacheSize\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:integer\" />\n          <xs:element name=\"address\" minOccurs=\"0\" maxOccurs=\"1\" type=\"Layout\" />\n          <xs:element name=\"onOverflow\" minOccurs=\"0\" maxOccurs=\"1\" type=\"NLog.Targets.NetworkTargetOverflowAction\" />\n          <xs:element name=\"parameter\" minOccurs=\"0\" maxOccurs=\"unbounded\" type=\"NLog.Targets.NLogViewerParameterInfo\" />\n          <xs:element name=\"ndlcItemSeparator\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:string\" />\n          <xs:element name=\"ndcItemSeparator\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:string\" />\n          <xs:element name=\"includeNLogData\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:boolean\" />\n          <xs:element name=\"includeSourceInfo\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:boolean\" />\n          <xs:element name=\"includeNdlc\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:boolean\" />\n          <xs:element name=\"includeNdc\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:boolean\" />\n          <xs:element name=\"includeMdlc\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:boolean\" />\n          <xs:element name=\"includeMdc\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:boolean\" />\n          <xs:element name=\"includeCallSite\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:boolean\" />\n          <xs:element name=\"includeAllProperties\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:boolean\" />\n          <xs:element name=\"appInfo\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:string\" />\n          <xs:element name=\"loggerName\" minOccurs=\"0\" maxOccurs=\"1\" type=\"Layout\" />\n          <xs:element name=\"optimizeBufferReuse\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:boolean\" />\n        </xs:choice>\n        <xs:attribute name=\"name\" type=\"xs:string\">\n          <xs:annotation>\n            <xs:documentation>Name of the target.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"encoding\" type=\"xs:string\">\n          <xs:annotation>\n            <xs:documentation>Encoding to be used.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"layout\" type=\"SimpleLayoutAttribute\">\n          <xs:annotation>\n            <xs:documentation>Instance of  that is used to format log messages.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"lineEnding\" type=\"LineEndingMode\">\n          <xs:annotation>\n            <xs:documentation>End of line value if a newline is appended at the end of log message .</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"maxMessageSize\" type=\"xs:integer\">\n          <xs:annotation>\n            <xs:documentation>Maximum message size in bytes.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"newLine\" type=\"xs:boolean\">\n          <xs:annotation>\n            <xs:documentation>Indicates whether to append newline at the end of log message.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"onConnectionOverflow\" type=\"NLog.Targets.NetworkTargetConnectionsOverflowAction\">\n          <xs:annotation>\n            <xs:documentation>Action that should be taken if the will be more connections than .</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"maxQueueSize\" type=\"xs:integer\">\n          <xs:annotation>\n            <xs:documentation>Maximum queue size.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"maxConnections\" type=\"xs:integer\">\n          <xs:annotation>\n            <xs:documentation>Maximum current connections. 0 = no maximum.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"keepConnection\" type=\"xs:boolean\">\n          <xs:annotation>\n            <xs:documentation>Indicates whether to keep connection open whenever possible.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"connectionCacheSize\" type=\"xs:integer\">\n          <xs:annotation>\n            <xs:documentation>Size of the connection cache (number of connections which are kept alive).</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"address\" type=\"SimpleLayoutAttribute\">\n          <xs:annotation>\n            <xs:documentation>Network address.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"onOverflow\" type=\"NLog.Targets.NetworkTargetOverflowAction\">\n          <xs:annotation>\n            <xs:documentation>Action that should be taken if the message is larger than maxMessageSize.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"ndlcItemSeparator\" type=\"xs:string\">\n          <xs:annotation>\n            <xs:documentation>NDLC item separator.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"ndcItemSeparator\" type=\"xs:string\">\n          <xs:annotation>\n            <xs:documentation>NDC item separator.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"includeNLogData\" type=\"xs:boolean\">\n          <xs:annotation>\n            <xs:documentation>Indicates whether to include NLog-specific extensions to log4j schema.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"includeSourceInfo\" type=\"xs:boolean\">\n          <xs:annotation>\n            <xs:documentation>Indicates whether to include source info (file name and line number) in the information sent over the network.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"includeNdlc\" type=\"xs:boolean\">\n          <xs:annotation>\n            <xs:documentation>Indicates whether to include contents of the  stack.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"includeNdc\" type=\"xs:boolean\">\n          <xs:annotation>\n            <xs:documentation>Indicates whether to include  stack contents.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"includeMdlc\" type=\"xs:boolean\">\n          <xs:annotation>\n            <xs:documentation>Indicates whether to include  dictionary contents.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"includeMdc\" type=\"xs:boolean\">\n          <xs:annotation>\n            <xs:documentation>Indicates whether to include  dictionary contents.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"includeCallSite\" type=\"xs:boolean\">\n          <xs:annotation>\n            <xs:documentation>Indicates whether to include call site (class and method name) in the information sent over the network.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"includeAllProperties\" type=\"xs:boolean\">\n          <xs:annotation>\n            <xs:documentation>Option to include all properties from the log events</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"appInfo\" type=\"xs:string\">\n          <xs:annotation>\n            <xs:documentation>AppInfo field. By default it's the friendly name of the current AppDomain.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"loggerName\" type=\"SimpleLayoutAttribute\">\n          <xs:annotation>\n            <xs:documentation>Renderer for log4j:event logger-xml-attribute (Default ${logger})</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"optimizeBufferReuse\" type=\"xs:boolean\">\n          <xs:annotation>\n            <xs:documentation>Target supports reuse of internal buffers, and doesn't have to constantly allocate new buffers Required for legacy NLog-targets, that expects buffers to remain stable after Write-method exit</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n      </xs:extension>\n    </xs:complexContent>\n  </xs:complexType>\n  <xs:simpleType name=\"NLog.Targets.NetworkTargetConnectionsOverflowAction\">\n    <xs:restriction base=\"xs:string\">\n      <xs:enumeration value=\"AllowNewConnnection\" />\n      <xs:enumeration value=\"DiscardMessage\" />\n      <xs:enumeration value=\"Block\" />\n    </xs:restriction>\n  </xs:simpleType>\n  <xs:simpleType name=\"NLog.Targets.NetworkTargetOverflowAction\">\n    <xs:restriction base=\"xs:string\">\n      <xs:enumeration value=\"Error\" />\n      <xs:enumeration value=\"Split\" />\n      <xs:enumeration value=\"Discard\" />\n    </xs:restriction>\n  </xs:simpleType>\n  <xs:complexType name=\"NLog.Targets.NLogViewerParameterInfo\">\n    <xs:choice minOccurs=\"0\" maxOccurs=\"unbounded\">\n      <xs:element name=\"layout\" minOccurs=\"0\" maxOccurs=\"1\" type=\"Layout\" />\n      <xs:element name=\"name\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:string\" />\n    </xs:choice>\n    <xs:attribute name=\"layout\" type=\"SimpleLayoutAttribute\">\n      <xs:annotation>\n        <xs:documentation>Layout that should be use to calcuate the value for the parameter.</xs:documentation>\n      </xs:annotation>\n    </xs:attribute>\n    <xs:attribute name=\"name\" type=\"xs:string\">\n      <xs:annotation>\n        <xs:documentation>Viewer parameter name.</xs:documentation>\n      </xs:annotation>\n    </xs:attribute>\n  </xs:complexType>\n  <xs:complexType name=\"ColoredConsole\">\n    <xs:complexContent>\n      <xs:extension base=\"Target\">\n        <xs:choice minOccurs=\"0\" maxOccurs=\"unbounded\">\n          <xs:element name=\"name\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:string\" />\n          <xs:element name=\"layout\" minOccurs=\"0\" maxOccurs=\"1\" type=\"Layout\" />\n          <xs:element name=\"header\" minOccurs=\"0\" maxOccurs=\"1\" type=\"Layout\" />\n          <xs:element name=\"footer\" minOccurs=\"0\" maxOccurs=\"1\" type=\"Layout\" />\n          <xs:element name=\"detectConsoleAvailable\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:boolean\" />\n          <xs:element name=\"encoding\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:string\" />\n          <xs:element name=\"errorStream\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:boolean\" />\n          <xs:element name=\"useDefaultRowHighlightingRules\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:boolean\" />\n          <xs:element name=\"highlight-row\" minOccurs=\"0\" maxOccurs=\"unbounded\" type=\"NLog.Targets.ConsoleRowHighlightingRule\" />\n          <xs:element name=\"highlight-word\" minOccurs=\"0\" maxOccurs=\"unbounded\" type=\"NLog.Targets.ConsoleWordHighlightingRule\" />\n          <xs:element name=\"optimizeBufferReuse\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:boolean\" />\n        </xs:choice>\n        <xs:attribute name=\"name\" type=\"xs:string\">\n          <xs:annotation>\n            <xs:documentation>Name of the target.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"layout\" type=\"SimpleLayoutAttribute\">\n          <xs:annotation>\n            <xs:documentation>Text to be rendered.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"header\" type=\"SimpleLayoutAttribute\">\n          <xs:annotation>\n            <xs:documentation>Header.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"footer\" type=\"SimpleLayoutAttribute\">\n          <xs:annotation>\n            <xs:documentation>Footer.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"detectConsoleAvailable\" type=\"xs:boolean\">\n          <xs:annotation>\n            <xs:documentation>Indicates whether to auto-check if the console is available. - Disables console writing if Environment.UserInteractive = False (Windows Service) - Disables console writing if Console Standard Input is not available (Non-Console-App)</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"encoding\" type=\"xs:string\">\n          <xs:annotation>\n            <xs:documentation>The encoding for writing messages to the .</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"errorStream\" type=\"xs:boolean\">\n          <xs:annotation>\n            <xs:documentation>Indicates whether the error stream (stderr) should be used instead of the output stream (stdout).</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"useDefaultRowHighlightingRules\" type=\"xs:boolean\">\n          <xs:annotation>\n            <xs:documentation>Indicates whether to use default row highlighting rules.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"optimizeBufferReuse\" type=\"xs:boolean\">\n          <xs:annotation>\n            <xs:documentation>Target supports reuse of internal buffers, and doesn't have to constantly allocate new buffers Required for legacy NLog-targets, that expects buffers to remain stable after Write-method exit</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n      </xs:extension>\n    </xs:complexContent>\n  </xs:complexType>\n  <xs:simpleType name=\"NLog.Targets.ConsoleOutputColor\">\n    <xs:restriction base=\"xs:string\">\n      <xs:enumeration value=\"Black\" />\n      <xs:enumeration value=\"DarkBlue\" />\n      <xs:enumeration value=\"DarkGreen\" />\n      <xs:enumeration value=\"DarkCyan\" />\n      <xs:enumeration value=\"DarkRed\" />\n      <xs:enumeration value=\"DarkMagenta\" />\n      <xs:enumeration value=\"DarkYellow\" />\n      <xs:enumeration value=\"Gray\" />\n      <xs:enumeration value=\"DarkGray\" />\n      <xs:enumeration value=\"Blue\" />\n      <xs:enumeration value=\"Green\" />\n      <xs:enumeration value=\"Cyan\" />\n      <xs:enumeration value=\"Red\" />\n      <xs:enumeration value=\"Magenta\" />\n      <xs:enumeration value=\"Yellow\" />\n      <xs:enumeration value=\"White\" />\n      <xs:enumeration value=\"NoChange\" />\n    </xs:restriction>\n  </xs:simpleType>\n  <xs:complexType name=\"NLog.Targets.ConsoleRowHighlightingRule\">\n    <xs:choice minOccurs=\"0\" maxOccurs=\"unbounded\">\n      <xs:element name=\"condition\" minOccurs=\"0\" maxOccurs=\"1\" type=\"Condition\" />\n      <xs:element name=\"backgroundColor\" minOccurs=\"0\" maxOccurs=\"1\" type=\"NLog.Targets.ConsoleOutputColor\" />\n      <xs:element name=\"foregroundColor\" minOccurs=\"0\" maxOccurs=\"1\" type=\"NLog.Targets.ConsoleOutputColor\" />\n    </xs:choice>\n    <xs:attribute name=\"condition\" type=\"Condition\">\n      <xs:annotation>\n        <xs:documentation>Condition that must be met in order to set the specified foreground and background color.</xs:documentation>\n      </xs:annotation>\n    </xs:attribute>\n    <xs:attribute name=\"backgroundColor\" type=\"NLog.Targets.ConsoleOutputColor\">\n      <xs:annotation>\n        <xs:documentation>Background color.</xs:documentation>\n      </xs:annotation>\n    </xs:attribute>\n    <xs:attribute name=\"foregroundColor\" type=\"NLog.Targets.ConsoleOutputColor\">\n      <xs:annotation>\n        <xs:documentation>Foreground color.</xs:documentation>\n      </xs:annotation>\n    </xs:attribute>\n  </xs:complexType>\n  <xs:complexType name=\"NLog.Targets.ConsoleWordHighlightingRule\">\n    <xs:choice minOccurs=\"0\" maxOccurs=\"unbounded\">\n      <xs:element name=\"compileRegex\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:boolean\" />\n      <xs:element name=\"ignoreCase\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:boolean\" />\n      <xs:element name=\"regex\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:string\" />\n      <xs:element name=\"text\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:string\" />\n      <xs:element name=\"wholeWords\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:boolean\" />\n      <xs:element name=\"backgroundColor\" minOccurs=\"0\" maxOccurs=\"1\" type=\"NLog.Targets.ConsoleOutputColor\" />\n      <xs:element name=\"foregroundColor\" minOccurs=\"0\" maxOccurs=\"1\" type=\"NLog.Targets.ConsoleOutputColor\" />\n    </xs:choice>\n    <xs:attribute name=\"compileRegex\" type=\"xs:boolean\">\n      <xs:annotation>\n        <xs:documentation>Compile the ? This can improve the performance, but at the costs of more memory usage. If false, the Regex Cache is used.</xs:documentation>\n      </xs:annotation>\n    </xs:attribute>\n    <xs:attribute name=\"ignoreCase\" type=\"xs:boolean\">\n      <xs:annotation>\n        <xs:documentation>Indicates whether to ignore case when comparing texts.</xs:documentation>\n      </xs:annotation>\n    </xs:attribute>\n    <xs:attribute name=\"regex\" type=\"xs:string\">\n      <xs:annotation>\n        <xs:documentation>Regular expression to be matched. You must specify either text or regex.</xs:documentation>\n      </xs:annotation>\n    </xs:attribute>\n    <xs:attribute name=\"text\" type=\"xs:string\">\n      <xs:annotation>\n        <xs:documentation>Text to be matched. You must specify either text or regex.</xs:documentation>\n      </xs:annotation>\n    </xs:attribute>\n    <xs:attribute name=\"wholeWords\" type=\"xs:boolean\">\n      <xs:annotation>\n        <xs:documentation>Indicates whether to match whole words only.</xs:documentation>\n      </xs:annotation>\n    </xs:attribute>\n    <xs:attribute name=\"backgroundColor\" type=\"NLog.Targets.ConsoleOutputColor\">\n      <xs:annotation>\n        <xs:documentation>Background color.</xs:documentation>\n      </xs:annotation>\n    </xs:attribute>\n    <xs:attribute name=\"foregroundColor\" type=\"NLog.Targets.ConsoleOutputColor\">\n      <xs:annotation>\n        <xs:documentation>Foreground color.</xs:documentation>\n      </xs:annotation>\n    </xs:attribute>\n  </xs:complexType>\n  <xs:complexType name=\"Console\">\n    <xs:complexContent>\n      <xs:extension base=\"Target\">\n        <xs:choice minOccurs=\"0\" maxOccurs=\"unbounded\">\n          <xs:element name=\"name\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:string\" />\n          <xs:element name=\"layout\" minOccurs=\"0\" maxOccurs=\"1\" type=\"Layout\" />\n          <xs:element name=\"header\" minOccurs=\"0\" maxOccurs=\"1\" type=\"Layout\" />\n          <xs:element name=\"footer\" minOccurs=\"0\" maxOccurs=\"1\" type=\"Layout\" />\n          <xs:element name=\"detectConsoleAvailable\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:boolean\" />\n          <xs:element name=\"encoding\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:string\" />\n          <xs:element name=\"error\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:boolean\" />\n          <xs:element name=\"optimizeBufferReuse\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:boolean\" />\n        </xs:choice>\n        <xs:attribute name=\"name\" type=\"xs:string\">\n          <xs:annotation>\n            <xs:documentation>Name of the target.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"layout\" type=\"SimpleLayoutAttribute\">\n          <xs:annotation>\n            <xs:documentation>Text to be rendered.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"header\" type=\"SimpleLayoutAttribute\">\n          <xs:annotation>\n            <xs:documentation>Header.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"footer\" type=\"SimpleLayoutAttribute\">\n          <xs:annotation>\n            <xs:documentation>Footer.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"detectConsoleAvailable\" type=\"xs:boolean\">\n          <xs:annotation>\n            <xs:documentation>Indicates whether to auto-check if the console is available - Disables console writing if Environment.UserInteractive = False (Windows Service) - Disables console writing if Console Standard Input is not available (Non-Console-App)</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"encoding\" type=\"xs:string\">\n          <xs:annotation>\n            <xs:documentation>The encoding for writing messages to the .</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"error\" type=\"xs:boolean\">\n          <xs:annotation>\n            <xs:documentation>Indicates whether to send the log messages to the standard error instead of the standard output.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"optimizeBufferReuse\" type=\"xs:boolean\">\n          <xs:annotation>\n            <xs:documentation>Target supports reuse of internal buffers, and doesn't have to constantly allocate new buffers Required for legacy NLog-targets, that expects buffers to remain stable after Write-method exit</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n      </xs:extension>\n    </xs:complexContent>\n  </xs:complexType>\n  <xs:complexType name=\"Database\">\n    <xs:complexContent>\n      <xs:extension base=\"Target\">\n        <xs:choice minOccurs=\"0\" maxOccurs=\"unbounded\">\n          <xs:element name=\"name\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:string\" />\n          <xs:element name=\"useTransactions\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:boolean\" />\n          <xs:element name=\"dbUserName\" minOccurs=\"0\" maxOccurs=\"1\" type=\"Layout\" />\n          <xs:element name=\"dbProvider\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:string\" />\n          <xs:element name=\"dbPassword\" minOccurs=\"0\" maxOccurs=\"1\" type=\"Layout\" />\n          <xs:element name=\"keepConnection\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:boolean\" />\n          <xs:element name=\"dbDatabase\" minOccurs=\"0\" maxOccurs=\"1\" type=\"Layout\" />\n          <xs:element name=\"connectionStringName\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:string\" />\n          <xs:element name=\"connectionString\" minOccurs=\"0\" maxOccurs=\"1\" type=\"Layout\" />\n          <xs:element name=\"dbHost\" minOccurs=\"0\" maxOccurs=\"1\" type=\"Layout\" />\n          <xs:element name=\"installConnectionString\" minOccurs=\"0\" maxOccurs=\"1\" type=\"Layout\" />\n          <xs:element name=\"install-command\" minOccurs=\"0\" maxOccurs=\"unbounded\" type=\"NLog.Targets.DatabaseCommandInfo\" />\n          <xs:element name=\"uninstall-command\" minOccurs=\"0\" maxOccurs=\"unbounded\" type=\"NLog.Targets.DatabaseCommandInfo\" />\n          <xs:element name=\"optimizeBufferReuse\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:boolean\" />\n          <xs:element name=\"parameter\" minOccurs=\"0\" maxOccurs=\"unbounded\" type=\"NLog.Targets.DatabaseParameterInfo\" />\n          <xs:element name=\"commandText\" minOccurs=\"0\" maxOccurs=\"1\" type=\"Layout\" />\n          <xs:element name=\"commandType\" minOccurs=\"0\" maxOccurs=\"1\" type=\"System.Data.CommandType\" />\n        </xs:choice>\n        <xs:attribute name=\"name\" type=\"xs:string\">\n          <xs:annotation>\n            <xs:documentation>Name of the target.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"useTransactions\" type=\"xs:boolean\">\n          <xs:annotation>\n            <xs:documentation>Obsolete - value will be ignored! The logging code always runs outside of transaction. Gets or sets a value indicating whether to use database transactions. Some data providers require this.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"dbUserName\" type=\"SimpleLayoutAttribute\">\n          <xs:annotation>\n            <xs:documentation>Database user name. If the ConnectionString is not provided this value will be used to construct the \"User ID=\" part of the connection string.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"dbProvider\" type=\"xs:string\">\n          <xs:annotation>\n            <xs:documentation>Name of the database provider.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"dbPassword\" type=\"SimpleLayoutAttribute\">\n          <xs:annotation>\n            <xs:documentation>Database password. If the ConnectionString is not provided this value will be used to construct the \"Password=\" part of the connection string.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"keepConnection\" type=\"xs:boolean\">\n          <xs:annotation>\n            <xs:documentation>Indicates whether to keep the database connection open between the log events.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"dbDatabase\" type=\"SimpleLayoutAttribute\">\n          <xs:annotation>\n            <xs:documentation>Database name. If the ConnectionString is not provided this value will be used to construct the \"Database=\" part of the connection string.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"connectionStringName\" type=\"xs:string\">\n          <xs:annotation>\n            <xs:documentation>Name of the connection string (as specified in &lt;connectionStrings&gt; configuration section.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"connectionString\" type=\"SimpleLayoutAttribute\">\n          <xs:annotation>\n            <xs:documentation>Connection string. When provided, it overrides the values specified in DBHost, DBUserName, DBPassword, DBDatabase.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"dbHost\" type=\"SimpleLayoutAttribute\">\n          <xs:annotation>\n            <xs:documentation>Database host name. If the ConnectionString is not provided this value will be used to construct the \"Server=\" part of the connection string.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"installConnectionString\" type=\"SimpleLayoutAttribute\">\n          <xs:annotation>\n            <xs:documentation>Connection string using for installation and uninstallation. If not provided, regular ConnectionString is being used.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"optimizeBufferReuse\" type=\"xs:boolean\">\n          <xs:annotation>\n            <xs:documentation>Target supports reuse of internal buffers, and doesn't have to constantly allocate new buffers Required for legacy NLog-targets, that expects buffers to remain stable after Write-method exit</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"commandText\" type=\"SimpleLayoutAttribute\">\n          <xs:annotation>\n            <xs:documentation>Text of the SQL command to be run on each log level.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"commandType\" type=\"System.Data.CommandType\">\n          <xs:annotation>\n            <xs:documentation>Type of the SQL command to be run on each log level.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n      </xs:extension>\n    </xs:complexContent>\n  </xs:complexType>\n  <xs:simpleType name=\"System.Data.CommandType\">\n    <xs:restriction base=\"xs:string\">\n      <xs:enumeration value=\"Text\" />\n      <xs:enumeration value=\"StoredProcedure\" />\n      <xs:enumeration value=\"TableDirect\" />\n    </xs:restriction>\n  </xs:simpleType>\n  <xs:complexType name=\"NLog.Targets.DatabaseCommandInfo\">\n    <xs:choice minOccurs=\"0\" maxOccurs=\"unbounded\">\n      <xs:element name=\"commandType\" minOccurs=\"0\" maxOccurs=\"1\" type=\"System.Data.CommandType\" />\n      <xs:element name=\"connectionString\" minOccurs=\"0\" maxOccurs=\"1\" type=\"Layout\" />\n      <xs:element name=\"ignoreFailures\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:boolean\" />\n      <xs:element name=\"parameter\" minOccurs=\"0\" maxOccurs=\"unbounded\" type=\"NLog.Targets.DatabaseParameterInfo\" />\n      <xs:element name=\"text\" minOccurs=\"0\" maxOccurs=\"1\" type=\"Layout\" />\n    </xs:choice>\n    <xs:attribute name=\"commandType\" type=\"System.Data.CommandType\">\n      <xs:annotation>\n        <xs:documentation>Type of the command.</xs:documentation>\n      </xs:annotation>\n    </xs:attribute>\n    <xs:attribute name=\"connectionString\" type=\"SimpleLayoutAttribute\">\n      <xs:annotation>\n        <xs:documentation>Connection string to run the command against. If not provided, connection string from the target is used.</xs:documentation>\n      </xs:annotation>\n    </xs:attribute>\n    <xs:attribute name=\"ignoreFailures\" type=\"xs:boolean\">\n      <xs:annotation>\n        <xs:documentation>Indicates whether to ignore failures.</xs:documentation>\n      </xs:annotation>\n    </xs:attribute>\n    <xs:attribute name=\"text\" type=\"SimpleLayoutAttribute\">\n      <xs:annotation>\n        <xs:documentation>Command text.</xs:documentation>\n      </xs:annotation>\n    </xs:attribute>\n  </xs:complexType>\n  <xs:complexType name=\"NLog.Targets.DatabaseParameterInfo\">\n    <xs:choice minOccurs=\"0\" maxOccurs=\"unbounded\">\n      <xs:element name=\"layout\" minOccurs=\"0\" maxOccurs=\"1\" type=\"Layout\" />\n      <xs:element name=\"name\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:string\" />\n      <xs:element name=\"precision\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:byte\" />\n      <xs:element name=\"scale\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:byte\" />\n      <xs:element name=\"size\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:integer\" />\n    </xs:choice>\n    <xs:attribute name=\"layout\" type=\"SimpleLayoutAttribute\">\n      <xs:annotation>\n        <xs:documentation>Layout that should be use to calcuate the value for the parameter.</xs:documentation>\n      </xs:annotation>\n    </xs:attribute>\n    <xs:attribute name=\"name\" type=\"xs:string\">\n      <xs:annotation>\n        <xs:documentation>Database parameter name.</xs:documentation>\n      </xs:annotation>\n    </xs:attribute>\n    <xs:attribute name=\"precision\" type=\"xs:byte\">\n      <xs:annotation>\n        <xs:documentation>Database parameter precision.</xs:documentation>\n      </xs:annotation>\n    </xs:attribute>\n    <xs:attribute name=\"scale\" type=\"xs:byte\">\n      <xs:annotation>\n        <xs:documentation>Database parameter scale.</xs:documentation>\n      </xs:annotation>\n    </xs:attribute>\n    <xs:attribute name=\"size\" type=\"xs:integer\">\n      <xs:annotation>\n        <xs:documentation>Database parameter size.</xs:documentation>\n      </xs:annotation>\n    </xs:attribute>\n  </xs:complexType>\n  <xs:complexType name=\"Debugger\">\n    <xs:complexContent>\n      <xs:extension base=\"Target\">\n        <xs:choice minOccurs=\"0\" maxOccurs=\"unbounded\">\n          <xs:element name=\"name\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:string\" />\n          <xs:element name=\"layout\" minOccurs=\"0\" maxOccurs=\"1\" type=\"Layout\" />\n          <xs:element name=\"header\" minOccurs=\"0\" maxOccurs=\"1\" type=\"Layout\" />\n          <xs:element name=\"footer\" minOccurs=\"0\" maxOccurs=\"1\" type=\"Layout\" />\n          <xs:element name=\"optimizeBufferReuse\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:boolean\" />\n        </xs:choice>\n        <xs:attribute name=\"name\" type=\"xs:string\">\n          <xs:annotation>\n            <xs:documentation>Name of the target.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"layout\" type=\"SimpleLayoutAttribute\">\n          <xs:annotation>\n            <xs:documentation>Text to be rendered.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"header\" type=\"SimpleLayoutAttribute\">\n          <xs:annotation>\n            <xs:documentation>Header.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"footer\" type=\"SimpleLayoutAttribute\">\n          <xs:annotation>\n            <xs:documentation>Footer.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"optimizeBufferReuse\" type=\"xs:boolean\">\n          <xs:annotation>\n            <xs:documentation>Target supports reuse of internal buffers, and doesn't have to constantly allocate new buffers Required for legacy NLog-targets, that expects buffers to remain stable after Write-method exit</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n      </xs:extension>\n    </xs:complexContent>\n  </xs:complexType>\n  <xs:complexType name=\"Debug\">\n    <xs:complexContent>\n      <xs:extension base=\"Target\">\n        <xs:choice minOccurs=\"0\" maxOccurs=\"unbounded\">\n          <xs:element name=\"name\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:string\" />\n          <xs:element name=\"layout\" minOccurs=\"0\" maxOccurs=\"1\" type=\"Layout\" />\n          <xs:element name=\"optimizeBufferReuse\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:boolean\" />\n        </xs:choice>\n        <xs:attribute name=\"name\" type=\"xs:string\">\n          <xs:annotation>\n            <xs:documentation>Name of the target.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"layout\" type=\"SimpleLayoutAttribute\">\n          <xs:annotation>\n            <xs:documentation>Layout used to format log messages.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"optimizeBufferReuse\" type=\"xs:boolean\">\n          <xs:annotation>\n            <xs:documentation>Target supports reuse of internal buffers, and doesn't have to constantly allocate new buffers Required for legacy NLog-targets, that expects buffers to remain stable after Write-method exit</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n      </xs:extension>\n    </xs:complexContent>\n  </xs:complexType>\n  <xs:complexType name=\"EventLog\">\n    <xs:complexContent>\n      <xs:extension base=\"Target\">\n        <xs:choice minOccurs=\"0\" maxOccurs=\"unbounded\">\n          <xs:element name=\"name\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:string\" />\n          <xs:element name=\"layout\" minOccurs=\"0\" maxOccurs=\"1\" type=\"Layout\" />\n          <xs:element name=\"category\" minOccurs=\"0\" maxOccurs=\"1\" type=\"Layout\" />\n          <xs:element name=\"entryType\" minOccurs=\"0\" maxOccurs=\"1\" type=\"Layout\" />\n          <xs:element name=\"eventId\" minOccurs=\"0\" maxOccurs=\"1\" type=\"Layout\" />\n          <xs:element name=\"log\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:string\" />\n          <xs:element name=\"machineName\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:string\" />\n          <xs:element name=\"maxKilobytes\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:long\" />\n          <xs:element name=\"maxMessageLength\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:integer\" />\n          <xs:element name=\"source\" minOccurs=\"0\" maxOccurs=\"1\" type=\"Layout\" />\n          <xs:element name=\"onOverflow\" minOccurs=\"0\" maxOccurs=\"1\" type=\"NLog.Targets.EventLogTargetOverflowAction\" />\n          <xs:element name=\"optimizeBufferReuse\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:boolean\" />\n        </xs:choice>\n        <xs:attribute name=\"name\" type=\"xs:string\">\n          <xs:annotation>\n            <xs:documentation>Name of the target.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"layout\" type=\"SimpleLayoutAttribute\">\n          <xs:annotation>\n            <xs:documentation>Layout used to format log messages.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"category\" type=\"SimpleLayoutAttribute\">\n          <xs:annotation>\n            <xs:documentation>Layout that renders event Category.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"entryType\" type=\"SimpleLayoutAttribute\">\n          <xs:annotation>\n            <xs:documentation>Optional entrytype. When not set, or when not convertable to  then determined by </xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"eventId\" type=\"SimpleLayoutAttribute\">\n          <xs:annotation>\n            <xs:documentation>Layout that renders event ID.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"log\" type=\"xs:string\">\n          <xs:annotation>\n            <xs:documentation>Name of the Event Log to write to. This can be System, Application or any user-defined name.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"machineName\" type=\"xs:string\">\n          <xs:annotation>\n            <xs:documentation>Name of the machine on which Event Log service is running.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"maxKilobytes\" type=\"xs:long\">\n          <xs:annotation>\n            <xs:documentation>Maximum Event log size in kilobytes. If null, the value won't be set. Default is 512 Kilobytes as specified by Eventlog API</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"maxMessageLength\" type=\"xs:integer\">\n          <xs:annotation>\n            <xs:documentation>Message length limit to write to the Event Log.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"source\" type=\"SimpleLayoutAttribute\">\n          <xs:annotation>\n            <xs:documentation>Value to be used as the event Source.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"onOverflow\" type=\"NLog.Targets.EventLogTargetOverflowAction\">\n          <xs:annotation>\n            <xs:documentation>Action to take if the message is larger than the  option.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"optimizeBufferReuse\" type=\"xs:boolean\">\n          <xs:annotation>\n            <xs:documentation>Target supports reuse of internal buffers, and doesn't have to constantly allocate new buffers Required for legacy NLog-targets, that expects buffers to remain stable after Write-method exit</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n      </xs:extension>\n    </xs:complexContent>\n  </xs:complexType>\n  <xs:simpleType name=\"NLog.Targets.EventLogTargetOverflowAction\">\n    <xs:restriction base=\"xs:string\">\n      <xs:enumeration value=\"Truncate\" />\n      <xs:enumeration value=\"Split\" />\n      <xs:enumeration value=\"Discard\" />\n    </xs:restriction>\n  </xs:simpleType>\n  <xs:complexType name=\"FallbackGroup\">\n    <xs:complexContent>\n      <xs:extension base=\"CompoundTargetBase\">\n        <xs:choice minOccurs=\"0\" maxOccurs=\"unbounded\">\n          <xs:element name=\"name\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:string\" />\n          <xs:element name=\"returnToFirstOnSuccess\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:boolean\" />\n          <xs:element name=\"optimizeBufferReuse\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:boolean\" />\n        </xs:choice>\n        <xs:attribute name=\"name\" type=\"xs:string\">\n          <xs:annotation>\n            <xs:documentation>Name of the target.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"returnToFirstOnSuccess\" type=\"xs:boolean\">\n          <xs:annotation>\n            <xs:documentation>Indicates whether to return to the first target after any successful write.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"optimizeBufferReuse\" type=\"xs:boolean\">\n          <xs:annotation>\n            <xs:documentation>Target supports reuse of internal buffers, and doesn't have to constantly allocate new buffers Required for legacy NLog-targets, that expects buffers to remain stable after Write-method exit</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n      </xs:extension>\n    </xs:complexContent>\n  </xs:complexType>\n  <xs:complexType name=\"File\">\n    <xs:complexContent>\n      <xs:extension base=\"Target\">\n        <xs:choice minOccurs=\"0\" maxOccurs=\"unbounded\">\n          <xs:element name=\"name\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:string\" />\n          <xs:element name=\"layout\" minOccurs=\"0\" maxOccurs=\"1\" type=\"Layout\" />\n          <xs:element name=\"header\" minOccurs=\"0\" maxOccurs=\"1\" type=\"Layout\" />\n          <xs:element name=\"footer\" minOccurs=\"0\" maxOccurs=\"1\" type=\"Layout\" />\n          <xs:element name=\"encoding\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:string\" />\n          <xs:element name=\"lineEnding\" minOccurs=\"0\" maxOccurs=\"1\" type=\"LineEndingMode\" />\n          <xs:element name=\"enableArchiveFileCompression\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:boolean\" />\n          <xs:element name=\"archiveNumbering\" minOccurs=\"0\" maxOccurs=\"1\" type=\"NLog.Targets.ArchiveNumberingMode\" />\n          <xs:element name=\"archiveFileName\" minOccurs=\"0\" maxOccurs=\"1\" type=\"Layout\" />\n          <xs:element name=\"archiveFileKind\" minOccurs=\"0\" maxOccurs=\"1\" type=\"NLog.Targets.FilePathKind\" />\n          <xs:element name=\"archiveEvery\" minOccurs=\"0\" maxOccurs=\"1\" type=\"NLog.Targets.FileArchivePeriod\" />\n          <xs:element name=\"archiveAboveSize\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:long\" />\n          <xs:element name=\"maxArchiveFiles\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:integer\" />\n          <xs:element name=\"writeFooterOnArchivingOnly\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:boolean\" />\n          <xs:element name=\"maxLogFilenames\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:integer\" />\n          <xs:element name=\"fileName\" minOccurs=\"0\" maxOccurs=\"1\" type=\"Layout\" />\n          <xs:element name=\"archiveDateFormat\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:string\" />\n          <xs:element name=\"archiveOldFileOnStartup\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:boolean\" />\n          <xs:element name=\"cleanupFileName\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:boolean\" />\n          <xs:element name=\"createDirs\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:boolean\" />\n          <xs:element name=\"deleteOldFileOnStartup\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:boolean\" />\n          <xs:element name=\"fileAttributes\" minOccurs=\"0\" maxOccurs=\"1\" type=\"NLog.Targets.Win32FileAttributes\" />\n          <xs:element name=\"writeBom\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:boolean\" />\n          <xs:element name=\"enableFileDelete\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:boolean\" />\n          <xs:element name=\"replaceFileContentsOnEachWrite\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:boolean\" />\n          <xs:element name=\"forceMutexConcurrentWrites\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:boolean\" />\n          <xs:element name=\"forceManaged\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:boolean\" />\n          <xs:element name=\"fileNameKind\" minOccurs=\"0\" maxOccurs=\"1\" type=\"NLog.Targets.FilePathKind\" />\n          <xs:element name=\"concurrentWrites\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:boolean\" />\n          <xs:element name=\"discardAll\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:boolean\" />\n          <xs:element name=\"concurrentWriteAttemptDelay\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:integer\" />\n          <xs:element name=\"networkWrites\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:boolean\" />\n          <xs:element name=\"openFileCacheSize\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:integer\" />\n          <xs:element name=\"openFileCacheTimeout\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:integer\" />\n          <xs:element name=\"optimizeBufferReuse\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:boolean\" />\n          <xs:element name=\"bufferSize\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:integer\" />\n          <xs:element name=\"autoFlush\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:boolean\" />\n          <xs:element name=\"concurrentWriteAttempts\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:integer\" />\n          <xs:element name=\"keepFileOpen\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:boolean\" />\n        </xs:choice>\n        <xs:attribute name=\"name\" type=\"xs:string\">\n          <xs:annotation>\n            <xs:documentation>Name of the target.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"layout\" type=\"SimpleLayoutAttribute\">\n          <xs:annotation>\n            <xs:documentation>Text to be rendered.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"header\" type=\"SimpleLayoutAttribute\">\n          <xs:annotation>\n            <xs:documentation>Header.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"footer\" type=\"SimpleLayoutAttribute\">\n          <xs:annotation>\n            <xs:documentation>Footer.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"encoding\" type=\"xs:string\">\n          <xs:annotation>\n            <xs:documentation>File encoding.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"lineEnding\" type=\"LineEndingMode\">\n          <xs:annotation>\n            <xs:documentation>Line ending mode.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"enableArchiveFileCompression\" type=\"xs:boolean\">\n          <xs:annotation>\n            <xs:documentation>Indicates whether to compress archive files into the zip archive format.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"archiveNumbering\" type=\"NLog.Targets.ArchiveNumberingMode\">\n          <xs:annotation>\n            <xs:documentation>Way file archives are numbered.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"archiveFileName\" type=\"SimpleLayoutAttribute\">\n          <xs:annotation>\n            <xs:documentation>Name of the file to be used for an archive.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"archiveFileKind\" type=\"NLog.Targets.FilePathKind\">\n          <xs:annotation>\n            <xs:documentation>Is the  an absolute or relative path?</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"archiveEvery\" type=\"NLog.Targets.FileArchivePeriod\">\n          <xs:annotation>\n            <xs:documentation>Indicates whether to automatically archive log files every time the specified time passes.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"archiveAboveSize\" type=\"xs:long\">\n          <xs:annotation>\n            <xs:documentation>Size in bytes above which log files will be automatically archived. Warning: combining this with  isn't supported. We cannot create multiple archive files, if they should have the same name. Choose: </xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"maxArchiveFiles\" type=\"xs:integer\">\n          <xs:annotation>\n            <xs:documentation>Maximum number of archive files that should be kept.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"writeFooterOnArchivingOnly\" type=\"xs:boolean\">\n          <xs:annotation>\n            <xs:documentation>Indicates whether the footer should be written only when the file is archived.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"maxLogFilenames\" type=\"xs:integer\">\n          <xs:annotation>\n            <xs:documentation>Maximum number of log filenames that should be stored as existing.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"fileName\" type=\"SimpleLayoutAttribute\">\n          <xs:annotation>\n            <xs:documentation>Name of the file to write to.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"archiveDateFormat\" type=\"xs:string\">\n          <xs:annotation>\n            <xs:documentation>Value specifying the date format to use when archiving files.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"archiveOldFileOnStartup\" type=\"xs:boolean\">\n          <xs:annotation>\n            <xs:documentation>Indicates whether to archive old log file on startup.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"cleanupFileName\" type=\"xs:boolean\">\n          <xs:annotation>\n            <xs:documentation>Cleanup invalid values in a filename, e.g. slashes in a filename. If set to true, this can impact the performance of massive writes. If set to false, nothing gets written when the filename is wrong.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"createDirs\" type=\"xs:boolean\">\n          <xs:annotation>\n            <xs:documentation>Indicates whether to create directories if they do not exist.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"deleteOldFileOnStartup\" type=\"xs:boolean\">\n          <xs:annotation>\n            <xs:documentation>Indicates whether to delete old log file on startup.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"fileAttributes\" type=\"NLog.Targets.Win32FileAttributes\">\n          <xs:annotation>\n            <xs:documentation>File attributes (Windows only).</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"writeBom\" type=\"xs:boolean\">\n          <xs:annotation>\n            <xs:documentation>Indicates whether to write BOM (byte order mark) in created files</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"enableFileDelete\" type=\"xs:boolean\">\n          <xs:annotation>\n            <xs:documentation>Indicates whether to enable log file(s) to be deleted.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"replaceFileContentsOnEachWrite\" type=\"xs:boolean\">\n          <xs:annotation>\n            <xs:documentation>Indicates whether to replace file contents on each write instead of appending log message at the end.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"forceMutexConcurrentWrites\" type=\"xs:boolean\">\n          <xs:annotation>\n            <xs:documentation>Value indicationg whether file creation calls should be synchronized by a system global mutex.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"forceManaged\" type=\"xs:boolean\">\n          <xs:annotation>\n            <xs:documentation>Gets or set a value indicating whether a managed file stream is forced, instead of using the native implementation.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"fileNameKind\" type=\"NLog.Targets.FilePathKind\">\n          <xs:annotation>\n            <xs:documentation>Is the  an absolute or relative path?</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"concurrentWrites\" type=\"xs:boolean\">\n          <xs:annotation>\n            <xs:documentation>Indicates whether concurrent writes to the log file by multiple processes on the same host.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"discardAll\" type=\"xs:boolean\">\n          <xs:annotation>\n            <xs:documentation>Whether or not this target should just discard all data that its asked to write. Mostly used for when testing NLog Stack except final write</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"concurrentWriteAttemptDelay\" type=\"xs:integer\">\n          <xs:annotation>\n            <xs:documentation>Delay in milliseconds to wait before attempting to write to the file again.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"networkWrites\" type=\"xs:boolean\">\n          <xs:annotation>\n            <xs:documentation>Indicates whether concurrent writes to the log file by multiple processes on different network hosts.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"openFileCacheSize\" type=\"xs:integer\">\n          <xs:annotation>\n            <xs:documentation>Number of files to be kept open. Setting this to a higher value may improve performance in a situation where a single File target is writing to many files (such as splitting by level or by logger).</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"openFileCacheTimeout\" type=\"xs:integer\">\n          <xs:annotation>\n            <xs:documentation>Maximum number of seconds that files are kept open. If this number is negative the files are not automatically closed after a period of inactivity.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"optimizeBufferReuse\" type=\"xs:boolean\">\n          <xs:annotation>\n            <xs:documentation>Target supports reuse of internal buffers, and doesn't have to constantly allocate new buffers Required for legacy NLog-targets, that expects buffers to remain stable after Write-method exit</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"bufferSize\" type=\"xs:integer\">\n          <xs:annotation>\n            <xs:documentation>Log file buffer size in bytes.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"autoFlush\" type=\"xs:boolean\">\n          <xs:annotation>\n            <xs:documentation>Indicates whether to automatically flush the file buffers after each log message.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"concurrentWriteAttempts\" type=\"xs:integer\">\n          <xs:annotation>\n            <xs:documentation>Number of times the write is appended on the file before NLog discards the log message.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"keepFileOpen\" type=\"xs:boolean\">\n          <xs:annotation>\n            <xs:documentation>Indicates whether to keep log file open instead of opening and closing it on each logging event.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n      </xs:extension>\n    </xs:complexContent>\n  </xs:complexType>\n  <xs:simpleType name=\"NLog.Targets.ArchiveNumberingMode\">\n    <xs:restriction base=\"xs:string\">\n      <xs:enumeration value=\"Sequence\" />\n      <xs:enumeration value=\"Rolling\" />\n      <xs:enumeration value=\"Date\" />\n      <xs:enumeration value=\"DateAndSequence\" />\n    </xs:restriction>\n  </xs:simpleType>\n  <xs:simpleType name=\"NLog.Targets.FilePathKind\">\n    <xs:restriction base=\"xs:string\">\n      <xs:enumeration value=\"Unknown\" />\n      <xs:enumeration value=\"Relative\" />\n      <xs:enumeration value=\"Absolute\" />\n    </xs:restriction>\n  </xs:simpleType>\n  <xs:simpleType name=\"NLog.Targets.FileArchivePeriod\">\n    <xs:restriction base=\"xs:string\">\n      <xs:enumeration value=\"None\" />\n      <xs:enumeration value=\"Year\" />\n      <xs:enumeration value=\"Month\" />\n      <xs:enumeration value=\"Day\" />\n      <xs:enumeration value=\"Hour\" />\n      <xs:enumeration value=\"Minute\" />\n      <xs:enumeration value=\"Sunday\" />\n      <xs:enumeration value=\"Monday\" />\n      <xs:enumeration value=\"Tuesday\" />\n      <xs:enumeration value=\"Wednesday\" />\n      <xs:enumeration value=\"Thursday\" />\n      <xs:enumeration value=\"Friday\" />\n      <xs:enumeration value=\"Saturday\" />\n    </xs:restriction>\n  </xs:simpleType>\n  <xs:simpleType name=\"NLog.Targets.Win32FileAttributes\">\n    <xs:restriction base=\"xs:string\">\n      <xs:enumeration value=\"ReadOnly\" />\n      <xs:enumeration value=\"Hidden\" />\n      <xs:enumeration value=\"System\" />\n      <xs:enumeration value=\"Archive\" />\n      <xs:enumeration value=\"Device\" />\n      <xs:enumeration value=\"Normal\" />\n      <xs:enumeration value=\"Temporary\" />\n      <xs:enumeration value=\"SparseFile\" />\n      <xs:enumeration value=\"ReparsePoint\" />\n      <xs:enumeration value=\"Compressed\" />\n      <xs:enumeration value=\"NotContentIndexed\" />\n      <xs:enumeration value=\"Encrypted\" />\n      <xs:enumeration value=\"WriteThrough\" />\n      <xs:enumeration value=\"NoBuffering\" />\n      <xs:enumeration value=\"DeleteOnClose\" />\n      <xs:enumeration value=\"PosixSemantics\" />\n    </xs:restriction>\n  </xs:simpleType>\n  <xs:complexType name=\"FilteringWrapper\">\n    <xs:complexContent>\n      <xs:extension base=\"WrapperTargetBase\">\n        <xs:choice minOccurs=\"0\" maxOccurs=\"unbounded\">\n          <xs:element name=\"name\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:string\" />\n          <xs:element name=\"condition\" minOccurs=\"0\" maxOccurs=\"1\" type=\"Condition\" />\n          <xs:element name=\"optimizeBufferReuse\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:boolean\" />\n        </xs:choice>\n        <xs:attribute name=\"name\" type=\"xs:string\">\n          <xs:annotation>\n            <xs:documentation>Name of the target.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"condition\" type=\"Condition\">\n          <xs:annotation>\n            <xs:documentation>Condition expression. Log events who meet this condition will be forwarded to the wrapped target.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"optimizeBufferReuse\" type=\"xs:boolean\">\n          <xs:annotation>\n            <xs:documentation>Target supports reuse of internal buffers, and doesn't have to constantly allocate new buffers Required for legacy NLog-targets, that expects buffers to remain stable after Write-method exit</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n      </xs:extension>\n    </xs:complexContent>\n  </xs:complexType>\n  <xs:complexType name=\"ImpersonatingWrapper\">\n    <xs:complexContent>\n      <xs:extension base=\"WrapperTargetBase\">\n        <xs:choice minOccurs=\"0\" maxOccurs=\"unbounded\">\n          <xs:element name=\"name\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:string\" />\n          <xs:element name=\"domain\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:string\" />\n          <xs:element name=\"impersonationLevel\" minOccurs=\"0\" maxOccurs=\"1\" type=\"NLog.Targets.Wrappers.SecurityImpersonationLevel\" />\n          <xs:element name=\"logOnProvider\" minOccurs=\"0\" maxOccurs=\"1\" type=\"NLog.Targets.Wrappers.LogOnProviderType\" />\n          <xs:element name=\"logOnType\" minOccurs=\"0\" maxOccurs=\"1\" type=\"NLog.Targets.Wrappers.SecurityLogOnType\" />\n          <xs:element name=\"password\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:string\" />\n          <xs:element name=\"revertToSelf\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:boolean\" />\n          <xs:element name=\"userName\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:string\" />\n          <xs:element name=\"optimizeBufferReuse\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:boolean\" />\n        </xs:choice>\n        <xs:attribute name=\"name\" type=\"xs:string\">\n          <xs:annotation>\n            <xs:documentation>Name of the target.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"domain\" type=\"xs:string\">\n          <xs:annotation>\n            <xs:documentation>Windows domain name to change context to.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"impersonationLevel\" type=\"NLog.Targets.Wrappers.SecurityImpersonationLevel\">\n          <xs:annotation>\n            <xs:documentation>Required impersonation level.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"logOnProvider\" type=\"NLog.Targets.Wrappers.LogOnProviderType\">\n          <xs:annotation>\n            <xs:documentation>Type of the logon provider.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"logOnType\" type=\"NLog.Targets.Wrappers.SecurityLogOnType\">\n          <xs:annotation>\n            <xs:documentation>Logon Type.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"password\" type=\"xs:string\">\n          <xs:annotation>\n            <xs:documentation>User account password.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"revertToSelf\" type=\"xs:boolean\">\n          <xs:annotation>\n            <xs:documentation>Indicates whether to revert to the credentials of the process instead of impersonating another user.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"userName\" type=\"xs:string\">\n          <xs:annotation>\n            <xs:documentation>Username to change context to.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"optimizeBufferReuse\" type=\"xs:boolean\">\n          <xs:annotation>\n            <xs:documentation>Target supports reuse of internal buffers, and doesn't have to constantly allocate new buffers Required for legacy NLog-targets, that expects buffers to remain stable after Write-method exit</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n      </xs:extension>\n    </xs:complexContent>\n  </xs:complexType>\n  <xs:simpleType name=\"NLog.Targets.Wrappers.SecurityImpersonationLevel\">\n    <xs:restriction base=\"xs:string\">\n      <xs:enumeration value=\"Anonymous\" />\n      <xs:enumeration value=\"Identification\" />\n      <xs:enumeration value=\"Impersonation\" />\n      <xs:enumeration value=\"Delegation\" />\n    </xs:restriction>\n  </xs:simpleType>\n  <xs:simpleType name=\"NLog.Targets.Wrappers.LogOnProviderType\">\n    <xs:restriction base=\"xs:string\">\n      <xs:enumeration value=\"Default\" />\n    </xs:restriction>\n  </xs:simpleType>\n  <xs:simpleType name=\"NLog.Targets.Wrappers.SecurityLogOnType\">\n    <xs:restriction base=\"xs:string\">\n      <xs:enumeration value=\"Interactive\" />\n      <xs:enumeration value=\"Network\" />\n      <xs:enumeration value=\"Batch\" />\n      <xs:enumeration value=\"Service\" />\n      <xs:enumeration value=\"NetworkClearText\" />\n      <xs:enumeration value=\"NewCredentials\" />\n    </xs:restriction>\n  </xs:simpleType>\n  <xs:complexType name=\"LimitingWrapper\">\n    <xs:complexContent>\n      <xs:extension base=\"WrapperTargetBase\">\n        <xs:choice minOccurs=\"0\" maxOccurs=\"unbounded\">\n          <xs:element name=\"interval\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:string\" />\n          <xs:element name=\"messageLimit\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:integer\" />\n          <xs:element name=\"name\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:string\" />\n          <xs:element name=\"optimizeBufferReuse\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:boolean\" />\n        </xs:choice>\n        <xs:attribute name=\"interval\" type=\"xs:string\">\n          <xs:annotation>\n            <xs:documentation>Interval in which messages will be written up to the  number of messages.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"messageLimit\" type=\"xs:integer\">\n          <xs:annotation>\n            <xs:documentation>Maximum allowed number of messages written per .</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"name\" type=\"xs:string\">\n          <xs:annotation>\n            <xs:documentation>Name of the target.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"optimizeBufferReuse\" type=\"xs:boolean\">\n          <xs:annotation>\n            <xs:documentation>Target supports reuse of internal buffers, and doesn't have to constantly allocate new buffers Required for legacy NLog-targets, that expects buffers to remain stable after Write-method exit</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n      </xs:extension>\n    </xs:complexContent>\n  </xs:complexType>\n  <xs:complexType name=\"LogReceiverService\">\n    <xs:complexContent>\n      <xs:extension base=\"Target\">\n        <xs:choice minOccurs=\"0\" maxOccurs=\"unbounded\">\n          <xs:element name=\"name\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:string\" />\n          <xs:element name=\"endpointAddress\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:string\" />\n          <xs:element name=\"endpointConfigurationName\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:string\" />\n          <xs:element name=\"useOneWayContract\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:boolean\" />\n          <xs:element name=\"clientId\" minOccurs=\"0\" maxOccurs=\"1\" type=\"Layout\" />\n          <xs:element name=\"includeEventProperties\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:boolean\" />\n          <xs:element name=\"parameter\" minOccurs=\"0\" maxOccurs=\"unbounded\" type=\"NLog.Targets.MethodCallParameter\" />\n          <xs:element name=\"useBinaryEncoding\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:boolean\" />\n          <xs:element name=\"optimizeBufferReuse\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:boolean\" />\n        </xs:choice>\n        <xs:attribute name=\"name\" type=\"xs:string\">\n          <xs:annotation>\n            <xs:documentation>Name of the target.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"endpointAddress\" type=\"xs:string\">\n          <xs:annotation>\n            <xs:documentation>Endpoint address.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"endpointConfigurationName\" type=\"xs:string\">\n          <xs:annotation>\n            <xs:documentation>Name of the endpoint configuration in WCF configuration file.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"useOneWayContract\" type=\"xs:boolean\">\n          <xs:annotation>\n            <xs:documentation>Indicates whether to use a WCF service contract that is one way (fire and forget) or two way (request-reply)</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"clientId\" type=\"SimpleLayoutAttribute\">\n          <xs:annotation>\n            <xs:documentation>Client ID.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"includeEventProperties\" type=\"xs:boolean\">\n          <xs:annotation>\n            <xs:documentation>Indicates whether to include per-event properties in the payload sent to the server.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"useBinaryEncoding\" type=\"xs:boolean\">\n          <xs:annotation>\n            <xs:documentation>Indicates whether to use binary message encoding.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"optimizeBufferReuse\" type=\"xs:boolean\">\n          <xs:annotation>\n            <xs:documentation>Target supports reuse of internal buffers, and doesn't have to constantly allocate new buffers Required for legacy NLog-targets, that expects buffers to remain stable after Write-method exit</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n      </xs:extension>\n    </xs:complexContent>\n  </xs:complexType>\n  <xs:complexType name=\"NLog.Targets.MethodCallParameter\">\n    <xs:choice minOccurs=\"0\" maxOccurs=\"unbounded\">\n      <xs:element name=\"layout\" minOccurs=\"0\" maxOccurs=\"1\" type=\"Layout\" />\n      <xs:element name=\"name\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:string\" />\n      <xs:element name=\"parameterType\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:string\" />\n      <xs:element name=\"type\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:string\" />\n    </xs:choice>\n    <xs:attribute name=\"layout\" type=\"SimpleLayoutAttribute\">\n      <xs:annotation>\n        <xs:documentation>Layout that should be use to calculate the value for the parameter.</xs:documentation>\n      </xs:annotation>\n    </xs:attribute>\n    <xs:attribute name=\"name\" type=\"xs:string\">\n      <xs:annotation>\n        <xs:documentation>Name of the parameter.</xs:documentation>\n      </xs:annotation>\n    </xs:attribute>\n    <xs:attribute name=\"parameterType\" type=\"xs:string\">\n      <xs:annotation>\n        <xs:documentation>Type of the parameter.</xs:documentation>\n      </xs:annotation>\n    </xs:attribute>\n    <xs:attribute name=\"type\" type=\"xs:string\">\n      <xs:annotation>\n        <xs:documentation>Type of the parameter. Obsolete alias for </xs:documentation>\n      </xs:annotation>\n    </xs:attribute>\n  </xs:complexType>\n  <xs:complexType name=\"Mail\">\n    <xs:complexContent>\n      <xs:extension base=\"Target\">\n        <xs:choice minOccurs=\"0\" maxOccurs=\"unbounded\">\n          <xs:element name=\"name\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:string\" />\n          <xs:element name=\"layout\" minOccurs=\"0\" maxOccurs=\"1\" type=\"Layout\" />\n          <xs:element name=\"header\" minOccurs=\"0\" maxOccurs=\"1\" type=\"Layout\" />\n          <xs:element name=\"footer\" minOccurs=\"0\" maxOccurs=\"1\" type=\"Layout\" />\n          <xs:element name=\"replaceNewlineWithBrTagInHtml\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:boolean\" />\n          <xs:element name=\"priority\" minOccurs=\"0\" maxOccurs=\"1\" type=\"Layout\" />\n          <xs:element name=\"encoding\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:string\" />\n          <xs:element name=\"bcc\" minOccurs=\"0\" maxOccurs=\"1\" type=\"Layout\" />\n          <xs:element name=\"cc\" minOccurs=\"0\" maxOccurs=\"1\" type=\"Layout\" />\n          <xs:element name=\"addNewLines\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:boolean\" />\n          <xs:element name=\"html\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:boolean\" />\n          <xs:element name=\"from\" minOccurs=\"0\" maxOccurs=\"1\" type=\"Layout\" />\n          <xs:element name=\"body\" minOccurs=\"0\" maxOccurs=\"1\" type=\"Layout\" />\n          <xs:element name=\"subject\" minOccurs=\"0\" maxOccurs=\"1\" type=\"Layout\" />\n          <xs:element name=\"to\" minOccurs=\"0\" maxOccurs=\"1\" type=\"Layout\" />\n          <xs:element name=\"optimizeBufferReuse\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:boolean\" />\n          <xs:element name=\"timeout\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:integer\" />\n          <xs:element name=\"smtpServer\" minOccurs=\"0\" maxOccurs=\"1\" type=\"Layout\" />\n          <xs:element name=\"smtpAuthentication\" minOccurs=\"0\" maxOccurs=\"1\" type=\"NLog.Targets.SmtpAuthenticationMode\" />\n          <xs:element name=\"smtpUserName\" minOccurs=\"0\" maxOccurs=\"1\" type=\"Layout\" />\n          <xs:element name=\"smtpPassword\" minOccurs=\"0\" maxOccurs=\"1\" type=\"Layout\" />\n          <xs:element name=\"enableSsl\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:boolean\" />\n          <xs:element name=\"smtpPort\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:integer\" />\n          <xs:element name=\"useSystemNetMailSettings\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:boolean\" />\n          <xs:element name=\"pickupDirectoryLocation\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:string\" />\n          <xs:element name=\"deliveryMethod\" minOccurs=\"0\" maxOccurs=\"1\" type=\"System.Net.Mail.SmtpDeliveryMethod\" />\n        </xs:choice>\n        <xs:attribute name=\"name\" type=\"xs:string\">\n          <xs:annotation>\n            <xs:documentation>Name of the target.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"layout\" type=\"SimpleLayoutAttribute\">\n          <xs:annotation>\n            <xs:documentation>Text to be rendered.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"header\" type=\"SimpleLayoutAttribute\">\n          <xs:annotation>\n            <xs:documentation>Header.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"footer\" type=\"SimpleLayoutAttribute\">\n          <xs:annotation>\n            <xs:documentation>Footer.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"replaceNewlineWithBrTagInHtml\" type=\"xs:boolean\">\n          <xs:annotation>\n            <xs:documentation>Indicates whether NewLine characters in the body should be replaced with  tags.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"priority\" type=\"SimpleLayoutAttribute\">\n          <xs:annotation>\n            <xs:documentation>Priority used for sending mails.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"encoding\" type=\"xs:string\">\n          <xs:annotation>\n            <xs:documentation>Encoding to be used for sending e-mail.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"bcc\" type=\"SimpleLayoutAttribute\">\n          <xs:annotation>\n            <xs:documentation>BCC email addresses separated by semicolons (e.g. john@domain.com;jane@domain.com).</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"cc\" type=\"SimpleLayoutAttribute\">\n          <xs:annotation>\n            <xs:documentation>CC email addresses separated by semicolons (e.g. john@domain.com;jane@domain.com).</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"addNewLines\" type=\"xs:boolean\">\n          <xs:annotation>\n            <xs:documentation>Indicates whether to add new lines between log entries.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"html\" type=\"xs:boolean\">\n          <xs:annotation>\n            <xs:documentation>Indicates whether to send message as HTML instead of plain text.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"from\" type=\"SimpleLayoutAttribute\">\n          <xs:annotation>\n            <xs:documentation>Sender's email address (e.g. joe@domain.com).</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"body\" type=\"SimpleLayoutAttribute\">\n          <xs:annotation>\n            <xs:documentation>Mail message body (repeated for each log message send in one mail).</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"subject\" type=\"SimpleLayoutAttribute\">\n          <xs:annotation>\n            <xs:documentation>Mail subject.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"to\" type=\"SimpleLayoutAttribute\">\n          <xs:annotation>\n            <xs:documentation>Recipients' email addresses separated by semicolons (e.g. john@domain.com;jane@domain.com).</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"optimizeBufferReuse\" type=\"xs:boolean\">\n          <xs:annotation>\n            <xs:documentation>Target supports reuse of internal buffers, and doesn't have to constantly allocate new buffers Required for legacy NLog-targets, that expects buffers to remain stable after Write-method exit</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"timeout\" type=\"xs:integer\">\n          <xs:annotation>\n            <xs:documentation>Indicates the SMTP client timeout.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"smtpServer\" type=\"SimpleLayoutAttribute\">\n          <xs:annotation>\n            <xs:documentation>SMTP Server to be used for sending.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"smtpAuthentication\" type=\"NLog.Targets.SmtpAuthenticationMode\">\n          <xs:annotation>\n            <xs:documentation>SMTP Authentication mode.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"smtpUserName\" type=\"SimpleLayoutAttribute\">\n          <xs:annotation>\n            <xs:documentation>Username used to connect to SMTP server (used when SmtpAuthentication is set to \"basic\").</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"smtpPassword\" type=\"SimpleLayoutAttribute\">\n          <xs:annotation>\n            <xs:documentation>Password used to authenticate against SMTP server (used when SmtpAuthentication is set to \"basic\").</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"enableSsl\" type=\"xs:boolean\">\n          <xs:annotation>\n            <xs:documentation>Indicates whether SSL (secure sockets layer) should be used when communicating with SMTP server.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"smtpPort\" type=\"xs:integer\">\n          <xs:annotation>\n            <xs:documentation>Port number that SMTP Server is listening on.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"useSystemNetMailSettings\" type=\"xs:boolean\">\n          <xs:annotation>\n            <xs:documentation>Indicates whether the default Settings from System.Net.MailSettings should be used.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"pickupDirectoryLocation\" type=\"xs:string\">\n          <xs:annotation>\n            <xs:documentation>Folder where applications save mail messages to be processed by the local SMTP server.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"deliveryMethod\" type=\"System.Net.Mail.SmtpDeliveryMethod\">\n          <xs:annotation>\n            <xs:documentation>Specifies how outgoing email messages will be handled.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n      </xs:extension>\n    </xs:complexContent>\n  </xs:complexType>\n  <xs:simpleType name=\"NLog.Targets.SmtpAuthenticationMode\">\n    <xs:restriction base=\"xs:string\">\n      <xs:enumeration value=\"None\" />\n      <xs:enumeration value=\"Basic\" />\n      <xs:enumeration value=\"Ntlm\" />\n    </xs:restriction>\n  </xs:simpleType>\n  <xs:simpleType name=\"System.Net.Mail.SmtpDeliveryMethod\">\n    <xs:restriction base=\"xs:string\">\n      <xs:enumeration value=\"Network\" />\n      <xs:enumeration value=\"SpecifiedPickupDirectory\" />\n      <xs:enumeration value=\"PickupDirectoryFromIis\" />\n    </xs:restriction>\n  </xs:simpleType>\n  <xs:complexType name=\"Memory\">\n    <xs:complexContent>\n      <xs:extension base=\"Target\">\n        <xs:choice minOccurs=\"0\" maxOccurs=\"unbounded\">\n          <xs:element name=\"name\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:string\" />\n          <xs:element name=\"layout\" minOccurs=\"0\" maxOccurs=\"1\" type=\"Layout\" />\n          <xs:element name=\"optimizeBufferReuse\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:boolean\" />\n        </xs:choice>\n        <xs:attribute name=\"name\" type=\"xs:string\">\n          <xs:annotation>\n            <xs:documentation>Name of the target.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"layout\" type=\"SimpleLayoutAttribute\">\n          <xs:annotation>\n            <xs:documentation>Layout used to format log messages.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"optimizeBufferReuse\" type=\"xs:boolean\">\n          <xs:annotation>\n            <xs:documentation>Target supports reuse of internal buffers, and doesn't have to constantly allocate new buffers Required for legacy NLog-targets, that expects buffers to remain stable after Write-method exit</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n      </xs:extension>\n    </xs:complexContent>\n  </xs:complexType>\n  <xs:complexType name=\"MethodCall\">\n    <xs:complexContent>\n      <xs:extension base=\"Target\">\n        <xs:choice minOccurs=\"0\" maxOccurs=\"unbounded\">\n          <xs:element name=\"name\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:string\" />\n          <xs:element name=\"className\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:string\" />\n          <xs:element name=\"methodName\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:string\" />\n          <xs:element name=\"parameter\" minOccurs=\"0\" maxOccurs=\"unbounded\" type=\"NLog.Targets.MethodCallParameter\" />\n          <xs:element name=\"optimizeBufferReuse\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:boolean\" />\n        </xs:choice>\n        <xs:attribute name=\"name\" type=\"xs:string\">\n          <xs:annotation>\n            <xs:documentation>Name of the target.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"className\" type=\"xs:string\">\n          <xs:annotation>\n            <xs:documentation>Class name.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"methodName\" type=\"xs:string\">\n          <xs:annotation>\n            <xs:documentation>Method name. The method must be public and static. Use the AssemblyQualifiedName , https://msdn.microsoft.com/en-us/library/system.type.assemblyqualifiedname(v=vs.110).aspx e.g.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"optimizeBufferReuse\" type=\"xs:boolean\">\n          <xs:annotation>\n            <xs:documentation>Target supports reuse of internal buffers, and doesn't have to constantly allocate new buffers Required for legacy NLog-targets, that expects buffers to remain stable after Write-method exit</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n      </xs:extension>\n    </xs:complexContent>\n  </xs:complexType>\n  <xs:complexType name=\"Network\">\n    <xs:complexContent>\n      <xs:extension base=\"Target\">\n        <xs:choice minOccurs=\"0\" maxOccurs=\"unbounded\">\n          <xs:element name=\"name\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:string\" />\n          <xs:element name=\"layout\" minOccurs=\"0\" maxOccurs=\"1\" type=\"Layout\" />\n          <xs:element name=\"encoding\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:string\" />\n          <xs:element name=\"lineEnding\" minOccurs=\"0\" maxOccurs=\"1\" type=\"LineEndingMode\" />\n          <xs:element name=\"maxMessageSize\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:integer\" />\n          <xs:element name=\"newLine\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:boolean\" />\n          <xs:element name=\"address\" minOccurs=\"0\" maxOccurs=\"1\" type=\"Layout\" />\n          <xs:element name=\"connectionCacheSize\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:integer\" />\n          <xs:element name=\"keepConnection\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:boolean\" />\n          <xs:element name=\"maxConnections\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:integer\" />\n          <xs:element name=\"maxQueueSize\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:integer\" />\n          <xs:element name=\"onConnectionOverflow\" minOccurs=\"0\" maxOccurs=\"1\" type=\"NLog.Targets.NetworkTargetConnectionsOverflowAction\" />\n          <xs:element name=\"onOverflow\" minOccurs=\"0\" maxOccurs=\"1\" type=\"NLog.Targets.NetworkTargetOverflowAction\" />\n          <xs:element name=\"optimizeBufferReuse\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:boolean\" />\n        </xs:choice>\n        <xs:attribute name=\"name\" type=\"xs:string\">\n          <xs:annotation>\n            <xs:documentation>Name of the target.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"layout\" type=\"SimpleLayoutAttribute\">\n          <xs:annotation>\n            <xs:documentation>Layout used to format log messages.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"encoding\" type=\"xs:string\">\n          <xs:annotation>\n            <xs:documentation>Encoding to be used.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"lineEnding\" type=\"LineEndingMode\">\n          <xs:annotation>\n            <xs:documentation>End of line value if a newline is appended at the end of log message .</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"maxMessageSize\" type=\"xs:integer\">\n          <xs:annotation>\n            <xs:documentation>Maximum message size in bytes.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"newLine\" type=\"xs:boolean\">\n          <xs:annotation>\n            <xs:documentation>Indicates whether to append newline at the end of log message.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"address\" type=\"SimpleLayoutAttribute\">\n          <xs:annotation>\n            <xs:documentation>Network address.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"connectionCacheSize\" type=\"xs:integer\">\n          <xs:annotation>\n            <xs:documentation>Size of the connection cache (number of connections which are kept alive).</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"keepConnection\" type=\"xs:boolean\">\n          <xs:annotation>\n            <xs:documentation>Indicates whether to keep connection open whenever possible.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"maxConnections\" type=\"xs:integer\">\n          <xs:annotation>\n            <xs:documentation>Maximum current connections. 0 = no maximum.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"maxQueueSize\" type=\"xs:integer\">\n          <xs:annotation>\n            <xs:documentation>Maximum queue size.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"onConnectionOverflow\" type=\"NLog.Targets.NetworkTargetConnectionsOverflowAction\">\n          <xs:annotation>\n            <xs:documentation>Action that should be taken if the will be more connections than .</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"onOverflow\" type=\"NLog.Targets.NetworkTargetOverflowAction\">\n          <xs:annotation>\n            <xs:documentation>Action that should be taken if the message is larger than maxMessageSize.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"optimizeBufferReuse\" type=\"xs:boolean\">\n          <xs:annotation>\n            <xs:documentation>Target supports reuse of internal buffers, and doesn't have to constantly allocate new buffers Required for legacy NLog-targets, that expects buffers to remain stable after Write-method exit</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n      </xs:extension>\n    </xs:complexContent>\n  </xs:complexType>\n  <xs:complexType name=\"NLogViewer\">\n    <xs:complexContent>\n      <xs:extension base=\"Target\">\n        <xs:choice minOccurs=\"0\" maxOccurs=\"unbounded\">\n          <xs:element name=\"name\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:string\" />\n          <xs:element name=\"encoding\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:string\" />\n          <xs:element name=\"layout\" minOccurs=\"0\" maxOccurs=\"1\" type=\"Layout\" />\n          <xs:element name=\"lineEnding\" minOccurs=\"0\" maxOccurs=\"1\" type=\"LineEndingMode\" />\n          <xs:element name=\"maxMessageSize\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:integer\" />\n          <xs:element name=\"newLine\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:boolean\" />\n          <xs:element name=\"onConnectionOverflow\" minOccurs=\"0\" maxOccurs=\"1\" type=\"NLog.Targets.NetworkTargetConnectionsOverflowAction\" />\n          <xs:element name=\"maxQueueSize\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:integer\" />\n          <xs:element name=\"maxConnections\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:integer\" />\n          <xs:element name=\"keepConnection\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:boolean\" />\n          <xs:element name=\"connectionCacheSize\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:integer\" />\n          <xs:element name=\"address\" minOccurs=\"0\" maxOccurs=\"1\" type=\"Layout\" />\n          <xs:element name=\"onOverflow\" minOccurs=\"0\" maxOccurs=\"1\" type=\"NLog.Targets.NetworkTargetOverflowAction\" />\n          <xs:element name=\"parameter\" minOccurs=\"0\" maxOccurs=\"unbounded\" type=\"NLog.Targets.NLogViewerParameterInfo\" />\n          <xs:element name=\"ndlcItemSeparator\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:string\" />\n          <xs:element name=\"ndcItemSeparator\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:string\" />\n          <xs:element name=\"includeNLogData\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:boolean\" />\n          <xs:element name=\"includeSourceInfo\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:boolean\" />\n          <xs:element name=\"includeNdlc\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:boolean\" />\n          <xs:element name=\"includeNdc\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:boolean\" />\n          <xs:element name=\"includeMdlc\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:boolean\" />\n          <xs:element name=\"includeMdc\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:boolean\" />\n          <xs:element name=\"includeCallSite\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:boolean\" />\n          <xs:element name=\"includeAllProperties\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:boolean\" />\n          <xs:element name=\"appInfo\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:string\" />\n          <xs:element name=\"loggerName\" minOccurs=\"0\" maxOccurs=\"1\" type=\"Layout\" />\n          <xs:element name=\"optimizeBufferReuse\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:boolean\" />\n        </xs:choice>\n        <xs:attribute name=\"name\" type=\"xs:string\">\n          <xs:annotation>\n            <xs:documentation>Name of the target.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"encoding\" type=\"xs:string\">\n          <xs:annotation>\n            <xs:documentation>Encoding to be used.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"layout\" type=\"SimpleLayoutAttribute\">\n          <xs:annotation>\n            <xs:documentation>Instance of  that is used to format log messages.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"lineEnding\" type=\"LineEndingMode\">\n          <xs:annotation>\n            <xs:documentation>End of line value if a newline is appended at the end of log message .</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"maxMessageSize\" type=\"xs:integer\">\n          <xs:annotation>\n            <xs:documentation>Maximum message size in bytes.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"newLine\" type=\"xs:boolean\">\n          <xs:annotation>\n            <xs:documentation>Indicates whether to append newline at the end of log message.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"onConnectionOverflow\" type=\"NLog.Targets.NetworkTargetConnectionsOverflowAction\">\n          <xs:annotation>\n            <xs:documentation>Action that should be taken if the will be more connections than .</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"maxQueueSize\" type=\"xs:integer\">\n          <xs:annotation>\n            <xs:documentation>Maximum queue size.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"maxConnections\" type=\"xs:integer\">\n          <xs:annotation>\n            <xs:documentation>Maximum current connections. 0 = no maximum.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"keepConnection\" type=\"xs:boolean\">\n          <xs:annotation>\n            <xs:documentation>Indicates whether to keep connection open whenever possible.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"connectionCacheSize\" type=\"xs:integer\">\n          <xs:annotation>\n            <xs:documentation>Size of the connection cache (number of connections which are kept alive).</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"address\" type=\"SimpleLayoutAttribute\">\n          <xs:annotation>\n            <xs:documentation>Network address.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"onOverflow\" type=\"NLog.Targets.NetworkTargetOverflowAction\">\n          <xs:annotation>\n            <xs:documentation>Action that should be taken if the message is larger than maxMessageSize.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"ndlcItemSeparator\" type=\"xs:string\">\n          <xs:annotation>\n            <xs:documentation>NDLC item separator.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"ndcItemSeparator\" type=\"xs:string\">\n          <xs:annotation>\n            <xs:documentation>NDC item separator.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"includeNLogData\" type=\"xs:boolean\">\n          <xs:annotation>\n            <xs:documentation>Indicates whether to include NLog-specific extensions to log4j schema.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"includeSourceInfo\" type=\"xs:boolean\">\n          <xs:annotation>\n            <xs:documentation>Indicates whether to include source info (file name and line number) in the information sent over the network.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"includeNdlc\" type=\"xs:boolean\">\n          <xs:annotation>\n            <xs:documentation>Indicates whether to include contents of the  stack.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"includeNdc\" type=\"xs:boolean\">\n          <xs:annotation>\n            <xs:documentation>Indicates whether to include  stack contents.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"includeMdlc\" type=\"xs:boolean\">\n          <xs:annotation>\n            <xs:documentation>Indicates whether to include  dictionary contents.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"includeMdc\" type=\"xs:boolean\">\n          <xs:annotation>\n            <xs:documentation>Indicates whether to include  dictionary contents.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"includeCallSite\" type=\"xs:boolean\">\n          <xs:annotation>\n            <xs:documentation>Indicates whether to include call site (class and method name) in the information sent over the network.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"includeAllProperties\" type=\"xs:boolean\">\n          <xs:annotation>\n            <xs:documentation>Option to include all properties from the log events</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"appInfo\" type=\"xs:string\">\n          <xs:annotation>\n            <xs:documentation>AppInfo field. By default it's the friendly name of the current AppDomain.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"loggerName\" type=\"SimpleLayoutAttribute\">\n          <xs:annotation>\n            <xs:documentation>Renderer for log4j:event logger-xml-attribute (Default ${logger})</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"optimizeBufferReuse\" type=\"xs:boolean\">\n          <xs:annotation>\n            <xs:documentation>Target supports reuse of internal buffers, and doesn't have to constantly allocate new buffers Required for legacy NLog-targets, that expects buffers to remain stable after Write-method exit</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n      </xs:extension>\n    </xs:complexContent>\n  </xs:complexType>\n  <xs:complexType name=\"Null\">\n    <xs:complexContent>\n      <xs:extension base=\"Target\">\n        <xs:choice minOccurs=\"0\" maxOccurs=\"unbounded\">\n          <xs:element name=\"name\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:string\" />\n          <xs:element name=\"layout\" minOccurs=\"0\" maxOccurs=\"1\" type=\"Layout\" />\n          <xs:element name=\"formatMessage\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:boolean\" />\n          <xs:element name=\"optimizeBufferReuse\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:boolean\" />\n        </xs:choice>\n        <xs:attribute name=\"name\" type=\"xs:string\">\n          <xs:annotation>\n            <xs:documentation>Name of the target.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"layout\" type=\"SimpleLayoutAttribute\">\n          <xs:annotation>\n            <xs:documentation>Layout used to format log messages.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"formatMessage\" type=\"xs:boolean\">\n          <xs:annotation>\n            <xs:documentation>Indicates whether to perform layout calculation.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"optimizeBufferReuse\" type=\"xs:boolean\">\n          <xs:annotation>\n            <xs:documentation>Target supports reuse of internal buffers, and doesn't have to constantly allocate new buffers Required for legacy NLog-targets, that expects buffers to remain stable after Write-method exit</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n      </xs:extension>\n    </xs:complexContent>\n  </xs:complexType>\n  <xs:complexType name=\"OutputDebugString\">\n    <xs:complexContent>\n      <xs:extension base=\"Target\">\n        <xs:choice minOccurs=\"0\" maxOccurs=\"unbounded\">\n          <xs:element name=\"name\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:string\" />\n          <xs:element name=\"layout\" minOccurs=\"0\" maxOccurs=\"1\" type=\"Layout\" />\n          <xs:element name=\"optimizeBufferReuse\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:boolean\" />\n        </xs:choice>\n        <xs:attribute name=\"name\" type=\"xs:string\">\n          <xs:annotation>\n            <xs:documentation>Name of the target.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"layout\" type=\"SimpleLayoutAttribute\">\n          <xs:annotation>\n            <xs:documentation>Layout used to format log messages.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"optimizeBufferReuse\" type=\"xs:boolean\">\n          <xs:annotation>\n            <xs:documentation>Target supports reuse of internal buffers, and doesn't have to constantly allocate new buffers Required for legacy NLog-targets, that expects buffers to remain stable after Write-method exit</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n      </xs:extension>\n    </xs:complexContent>\n  </xs:complexType>\n  <xs:complexType name=\"PerfCounter\">\n    <xs:complexContent>\n      <xs:extension base=\"Target\">\n        <xs:choice minOccurs=\"0\" maxOccurs=\"unbounded\">\n          <xs:element name=\"name\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:string\" />\n          <xs:element name=\"autoCreate\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:boolean\" />\n          <xs:element name=\"categoryName\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:string\" />\n          <xs:element name=\"counterHelp\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:string\" />\n          <xs:element name=\"counterName\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:string\" />\n          <xs:element name=\"counterType\" minOccurs=\"0\" maxOccurs=\"1\" type=\"System.Diagnostics.PerformanceCounterType\" />\n          <xs:element name=\"incrementValue\" minOccurs=\"0\" maxOccurs=\"1\" type=\"Layout\" />\n          <xs:element name=\"instanceName\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:string\" />\n          <xs:element name=\"optimizeBufferReuse\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:boolean\" />\n        </xs:choice>\n        <xs:attribute name=\"name\" type=\"xs:string\">\n          <xs:annotation>\n            <xs:documentation>Name of the target.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"autoCreate\" type=\"xs:boolean\">\n          <xs:annotation>\n            <xs:documentation>Indicates whether performance counter should be automatically created.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"categoryName\" type=\"xs:string\">\n          <xs:annotation>\n            <xs:documentation>Name of the performance counter category.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"counterHelp\" type=\"xs:string\">\n          <xs:annotation>\n            <xs:documentation>Counter help text.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"counterName\" type=\"xs:string\">\n          <xs:annotation>\n            <xs:documentation>Name of the performance counter.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"counterType\" type=\"System.Diagnostics.PerformanceCounterType\">\n          <xs:annotation>\n            <xs:documentation>Performance counter type.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"incrementValue\" type=\"SimpleLayoutAttribute\">\n          <xs:annotation>\n            <xs:documentation>The value by which to increment the counter.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"instanceName\" type=\"xs:string\">\n          <xs:annotation>\n            <xs:documentation>Performance counter instance name.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"optimizeBufferReuse\" type=\"xs:boolean\">\n          <xs:annotation>\n            <xs:documentation>Target supports reuse of internal buffers, and doesn't have to constantly allocate new buffers Required for legacy NLog-targets, that expects buffers to remain stable after Write-method exit</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n      </xs:extension>\n    </xs:complexContent>\n  </xs:complexType>\n  <xs:simpleType name=\"System.Diagnostics.PerformanceCounterType\">\n    <xs:restriction base=\"xs:string\">\n      <xs:enumeration value=\"NumberOfItems32\" />\n      <xs:enumeration value=\"NumberOfItems64\" />\n      <xs:enumeration value=\"NumberOfItemsHEX32\" />\n      <xs:enumeration value=\"NumberOfItemsHEX64\" />\n      <xs:enumeration value=\"RateOfCountsPerSecond32\" />\n      <xs:enumeration value=\"RateOfCountsPerSecond64\" />\n      <xs:enumeration value=\"CountPerTimeInterval32\" />\n      <xs:enumeration value=\"CountPerTimeInterval64\" />\n      <xs:enumeration value=\"RawFraction\" />\n      <xs:enumeration value=\"RawBase\" />\n      <xs:enumeration value=\"AverageTimer32\" />\n      <xs:enumeration value=\"AverageBase\" />\n      <xs:enumeration value=\"AverageCount64\" />\n      <xs:enumeration value=\"SampleFraction\" />\n      <xs:enumeration value=\"SampleCounter\" />\n      <xs:enumeration value=\"SampleBase\" />\n      <xs:enumeration value=\"CounterTimer\" />\n      <xs:enumeration value=\"CounterTimerInverse\" />\n      <xs:enumeration value=\"Timer100Ns\" />\n      <xs:enumeration value=\"Timer100NsInverse\" />\n      <xs:enumeration value=\"ElapsedTime\" />\n      <xs:enumeration value=\"CounterMultiTimer\" />\n      <xs:enumeration value=\"CounterMultiTimerInverse\" />\n      <xs:enumeration value=\"CounterMultiTimer100Ns\" />\n      <xs:enumeration value=\"CounterMultiTimer100NsInverse\" />\n      <xs:enumeration value=\"CounterMultiBase\" />\n      <xs:enumeration value=\"CounterDelta32\" />\n      <xs:enumeration value=\"CounterDelta64\" />\n    </xs:restriction>\n  </xs:simpleType>\n  <xs:complexType name=\"PostFilteringWrapper\">\n    <xs:complexContent>\n      <xs:extension base=\"WrapperTargetBase\">\n        <xs:choice minOccurs=\"0\" maxOccurs=\"unbounded\">\n          <xs:element name=\"name\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:string\" />\n          <xs:element name=\"defaultFilter\" minOccurs=\"0\" maxOccurs=\"1\" type=\"Condition\" />\n          <xs:element name=\"when\" minOccurs=\"0\" maxOccurs=\"unbounded\" type=\"NLog.Targets.Wrappers.FilteringRule\" />\n          <xs:element name=\"optimizeBufferReuse\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:boolean\" />\n        </xs:choice>\n        <xs:attribute name=\"name\" type=\"xs:string\">\n          <xs:annotation>\n            <xs:documentation>Name of the target.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"defaultFilter\" type=\"Condition\">\n          <xs:annotation>\n            <xs:documentation>Default filter to be applied when no specific rule matches.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"optimizeBufferReuse\" type=\"xs:boolean\">\n          <xs:annotation>\n            <xs:documentation>Target supports reuse of internal buffers, and doesn't have to constantly allocate new buffers Required for legacy NLog-targets, that expects buffers to remain stable after Write-method exit</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n      </xs:extension>\n    </xs:complexContent>\n  </xs:complexType>\n  <xs:complexType name=\"NLog.Targets.Wrappers.FilteringRule\">\n    <xs:choice minOccurs=\"0\" maxOccurs=\"unbounded\">\n      <xs:element name=\"exists\" minOccurs=\"0\" maxOccurs=\"1\" type=\"Condition\" />\n      <xs:element name=\"filter\" minOccurs=\"0\" maxOccurs=\"1\" type=\"Condition\" />\n    </xs:choice>\n    <xs:attribute name=\"exists\" type=\"Condition\">\n      <xs:annotation>\n        <xs:documentation>Condition to be tested.</xs:documentation>\n      </xs:annotation>\n    </xs:attribute>\n    <xs:attribute name=\"filter\" type=\"Condition\">\n      <xs:annotation>\n        <xs:documentation>Resulting filter to be applied when the condition matches.</xs:documentation>\n      </xs:annotation>\n    </xs:attribute>\n  </xs:complexType>\n  <xs:complexType name=\"RandomizeGroup\">\n    <xs:complexContent>\n      <xs:extension base=\"CompoundTargetBase\">\n        <xs:choice minOccurs=\"0\" maxOccurs=\"unbounded\">\n          <xs:element name=\"name\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:string\" />\n          <xs:element name=\"optimizeBufferReuse\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:boolean\" />\n        </xs:choice>\n        <xs:attribute name=\"name\" type=\"xs:string\">\n          <xs:annotation>\n            <xs:documentation>Name of the target.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"optimizeBufferReuse\" type=\"xs:boolean\">\n          <xs:annotation>\n            <xs:documentation>Target supports reuse of internal buffers, and doesn't have to constantly allocate new buffers Required for legacy NLog-targets, that expects buffers to remain stable after Write-method exit</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n      </xs:extension>\n    </xs:complexContent>\n  </xs:complexType>\n  <xs:complexType name=\"RepeatingWrapper\">\n    <xs:complexContent>\n      <xs:extension base=\"WrapperTargetBase\">\n        <xs:choice minOccurs=\"0\" maxOccurs=\"unbounded\">\n          <xs:element name=\"name\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:string\" />\n          <xs:element name=\"optimizeBufferReuse\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:boolean\" />\n          <xs:element name=\"repeatCount\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:integer\" />\n        </xs:choice>\n        <xs:attribute name=\"name\" type=\"xs:string\">\n          <xs:annotation>\n            <xs:documentation>Name of the target.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"optimizeBufferReuse\" type=\"xs:boolean\">\n          <xs:annotation>\n            <xs:documentation>Target supports reuse of internal buffers, and doesn't have to constantly allocate new buffers Required for legacy NLog-targets, that expects buffers to remain stable after Write-method exit</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"repeatCount\" type=\"xs:integer\">\n          <xs:annotation>\n            <xs:documentation>Number of times to repeat each log message.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n      </xs:extension>\n    </xs:complexContent>\n  </xs:complexType>\n  <xs:complexType name=\"RetryingWrapper\">\n    <xs:complexContent>\n      <xs:extension base=\"WrapperTargetBase\">\n        <xs:choice minOccurs=\"0\" maxOccurs=\"unbounded\">\n          <xs:element name=\"name\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:string\" />\n          <xs:element name=\"optimizeBufferReuse\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:boolean\" />\n          <xs:element name=\"retryCount\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:integer\" />\n          <xs:element name=\"retryDelayMilliseconds\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:integer\" />\n        </xs:choice>\n        <xs:attribute name=\"name\" type=\"xs:string\">\n          <xs:annotation>\n            <xs:documentation>Name of the target.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"optimizeBufferReuse\" type=\"xs:boolean\">\n          <xs:annotation>\n            <xs:documentation>Target supports reuse of internal buffers, and doesn't have to constantly allocate new buffers Required for legacy NLog-targets, that expects buffers to remain stable after Write-method exit</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"retryCount\" type=\"xs:integer\">\n          <xs:annotation>\n            <xs:documentation>Number of retries that should be attempted on the wrapped target in case of a failure.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"retryDelayMilliseconds\" type=\"xs:integer\">\n          <xs:annotation>\n            <xs:documentation>Time to wait between retries in milliseconds.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n      </xs:extension>\n    </xs:complexContent>\n  </xs:complexType>\n  <xs:complexType name=\"RoundRobinGroup\">\n    <xs:complexContent>\n      <xs:extension base=\"CompoundTargetBase\">\n        <xs:choice minOccurs=\"0\" maxOccurs=\"unbounded\">\n          <xs:element name=\"name\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:string\" />\n          <xs:element name=\"optimizeBufferReuse\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:boolean\" />\n        </xs:choice>\n        <xs:attribute name=\"name\" type=\"xs:string\">\n          <xs:annotation>\n            <xs:documentation>Name of the target.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"optimizeBufferReuse\" type=\"xs:boolean\">\n          <xs:annotation>\n            <xs:documentation>Target supports reuse of internal buffers, and doesn't have to constantly allocate new buffers Required for legacy NLog-targets, that expects buffers to remain stable after Write-method exit</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n      </xs:extension>\n    </xs:complexContent>\n  </xs:complexType>\n  <xs:complexType name=\"SplitGroup\">\n    <xs:complexContent>\n      <xs:extension base=\"CompoundTargetBase\">\n        <xs:choice minOccurs=\"0\" maxOccurs=\"unbounded\">\n          <xs:element name=\"name\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:string\" />\n          <xs:element name=\"optimizeBufferReuse\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:boolean\" />\n        </xs:choice>\n        <xs:attribute name=\"name\" type=\"xs:string\">\n          <xs:annotation>\n            <xs:documentation>Name of the target.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"optimizeBufferReuse\" type=\"xs:boolean\">\n          <xs:annotation>\n            <xs:documentation>Target supports reuse of internal buffers, and doesn't have to constantly allocate new buffers Required for legacy NLog-targets, that expects buffers to remain stable after Write-method exit</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n      </xs:extension>\n    </xs:complexContent>\n  </xs:complexType>\n  <xs:complexType name=\"Trace\">\n    <xs:complexContent>\n      <xs:extension base=\"Target\">\n        <xs:choice minOccurs=\"0\" maxOccurs=\"unbounded\">\n          <xs:element name=\"name\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:string\" />\n          <xs:element name=\"layout\" minOccurs=\"0\" maxOccurs=\"1\" type=\"Layout\" />\n          <xs:element name=\"rawWrite\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:boolean\" />\n          <xs:element name=\"optimizeBufferReuse\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:boolean\" />\n        </xs:choice>\n        <xs:attribute name=\"name\" type=\"xs:string\">\n          <xs:annotation>\n            <xs:documentation>Name of the target.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"layout\" type=\"SimpleLayoutAttribute\">\n          <xs:annotation>\n            <xs:documentation>Layout used to format log messages.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"rawWrite\" type=\"xs:boolean\">\n          <xs:annotation>\n            <xs:documentation>Always use  independent of </xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"optimizeBufferReuse\" type=\"xs:boolean\">\n          <xs:annotation>\n            <xs:documentation>Target supports reuse of internal buffers, and doesn't have to constantly allocate new buffers Required for legacy NLog-targets, that expects buffers to remain stable after Write-method exit</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n      </xs:extension>\n    </xs:complexContent>\n  </xs:complexType>\n  <xs:complexType name=\"WebService\">\n    <xs:complexContent>\n      <xs:extension base=\"Target\">\n        <xs:choice minOccurs=\"0\" maxOccurs=\"unbounded\">\n          <xs:element name=\"name\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:string\" />\n          <xs:element name=\"parameter\" minOccurs=\"0\" maxOccurs=\"unbounded\" type=\"NLog.Targets.MethodCallParameter\" />\n          <xs:element name=\"optimizeBufferReuse\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:boolean\" />\n          <xs:element name=\"includeBOM\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:boolean\" />\n          <xs:element name=\"methodName\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:string\" />\n          <xs:element name=\"namespace\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:string\" />\n          <xs:element name=\"protocol\" minOccurs=\"0\" maxOccurs=\"1\" type=\"NLog.Targets.WebServiceProtocol\" />\n          <xs:element name=\"proxyAddress\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:string\" />\n          <xs:element name=\"encoding\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:string\" />\n          <xs:element name=\"url\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:anyURI\" />\n          <xs:element name=\"escapeDataNLogLegacy\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:boolean\" />\n          <xs:element name=\"escapeDataRfc3986\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:boolean\" />\n          <xs:element name=\"preAuthenticate\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:boolean\" />\n          <xs:element name=\"xmlRoot\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:string\" />\n          <xs:element name=\"xmlRootNamespace\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:string\" />\n          <xs:element name=\"header\" minOccurs=\"0\" maxOccurs=\"unbounded\" type=\"NLog.Targets.MethodCallParameter\" />\n          <xs:element name=\"proxyType\" minOccurs=\"0\" maxOccurs=\"1\" type=\"NLog.Targets.WebServiceProxyType\" />\n        </xs:choice>\n        <xs:attribute name=\"name\" type=\"xs:string\">\n          <xs:annotation>\n            <xs:documentation>Name of the target.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"optimizeBufferReuse\" type=\"xs:boolean\">\n          <xs:annotation>\n            <xs:documentation>Target supports reuse of internal buffers, and doesn't have to constantly allocate new buffers Required for legacy NLog-targets, that expects buffers to remain stable after Write-method exit</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"includeBOM\" type=\"xs:boolean\">\n          <xs:annotation>\n            <xs:documentation>Should we include the BOM (Byte-order-mark) for UTF? Influences the  property. This will only work for UTF-8.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"methodName\" type=\"xs:string\">\n          <xs:annotation>\n            <xs:documentation>Web service method name. Only used with Soap.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"namespace\" type=\"xs:string\">\n          <xs:annotation>\n            <xs:documentation>Web service namespace. Only used with Soap.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"protocol\" type=\"NLog.Targets.WebServiceProtocol\">\n          <xs:annotation>\n            <xs:documentation>Protocol to be used when calling web service.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"proxyAddress\" type=\"xs:string\">\n          <xs:annotation>\n            <xs:documentation>Custom proxy address, include port separated by a colon</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"encoding\" type=\"xs:string\">\n          <xs:annotation>\n            <xs:documentation>Encoding.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"url\" type=\"xs:anyURI\">\n          <xs:annotation>\n            <xs:documentation>Web service URL.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"escapeDataNLogLegacy\" type=\"xs:boolean\">\n          <xs:annotation>\n            <xs:documentation>Value whether escaping be done according to the old NLog style (Very non-standard)</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"escapeDataRfc3986\" type=\"xs:boolean\">\n          <xs:annotation>\n            <xs:documentation>Value whether escaping be done according to Rfc3986 (Supports Internationalized Resource Identifiers - IRIs)</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"preAuthenticate\" type=\"xs:boolean\">\n          <xs:annotation>\n            <xs:documentation>Indicates whether to pre-authenticate the HttpWebRequest (Requires 'Authorization' in  parameters)</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"xmlRoot\" type=\"xs:string\">\n          <xs:annotation>\n            <xs:documentation>Name of the root XML element, if POST of XML document chosen. If so, this property must not be null. (see  and ).</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"xmlRootNamespace\" type=\"xs:string\">\n          <xs:annotation>\n            <xs:documentation>(optional) root namespace of the XML document, if POST of XML document chosen. (see  and ).</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"proxyType\" type=\"NLog.Targets.WebServiceProxyType\">\n          <xs:annotation>\n            <xs:documentation>Proxy configuration when calling web service</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n      </xs:extension>\n    </xs:complexContent>\n  </xs:complexType>\n  <xs:simpleType name=\"NLog.Targets.WebServiceProtocol\">\n    <xs:restriction base=\"xs:string\">\n      <xs:enumeration value=\"Soap11\" />\n      <xs:enumeration value=\"Soap12\" />\n      <xs:enumeration value=\"HttpPost\" />\n      <xs:enumeration value=\"HttpGet\" />\n      <xs:enumeration value=\"JsonPost\" />\n      <xs:enumeration value=\"XmlPost\" />\n    </xs:restriction>\n  </xs:simpleType>\n  <xs:simpleType name=\"NLog.Targets.WebServiceProxyType\">\n    <xs:restriction base=\"xs:string\">\n      <xs:enumeration value=\"DefaultWebProxy\" />\n      <xs:enumeration value=\"AutoProxy\" />\n      <xs:enumeration value=\"NoProxy\" />\n      <xs:enumeration value=\"ProxyAddress\" />\n    </xs:restriction>\n  </xs:simpleType>\n  <xs:complexType name=\"CompoundLayout\">\n    <xs:complexContent>\n      <xs:extension base=\"Layout\">\n        <xs:choice minOccurs=\"0\" maxOccurs=\"unbounded\">\n          <xs:element name=\"layout\" minOccurs=\"0\" maxOccurs=\"unbounded\" type=\"Layout\" />\n        </xs:choice>\n      </xs:extension>\n    </xs:complexContent>\n  </xs:complexType>\n  <xs:complexType name=\"Layout\">\n    <xs:choice minOccurs=\"0\" maxOccurs=\"unbounded\" />\n  </xs:complexType>\n  <xs:complexType name=\"CsvLayout\">\n    <xs:complexContent>\n      <xs:extension base=\"Layout\">\n        <xs:choice minOccurs=\"0\" maxOccurs=\"unbounded\">\n          <xs:element name=\"footer\" minOccurs=\"0\" maxOccurs=\"1\" type=\"Layout\" />\n          <xs:element name=\"header\" minOccurs=\"0\" maxOccurs=\"1\" type=\"Layout\" />\n          <xs:element name=\"layout\" minOccurs=\"0\" maxOccurs=\"1\" type=\"Layout\" />\n          <xs:element name=\"column\" minOccurs=\"0\" maxOccurs=\"unbounded\" type=\"NLog.Layouts.CsvColumn\" />\n          <xs:element name=\"customColumnDelimiter\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:string\" />\n          <xs:element name=\"delimiter\" minOccurs=\"0\" maxOccurs=\"1\" type=\"NLog.Layouts.CsvColumnDelimiterMode\" />\n          <xs:element name=\"quoteChar\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:string\" />\n          <xs:element name=\"quoting\" minOccurs=\"0\" maxOccurs=\"1\" type=\"NLog.Layouts.CsvQuotingMode\" />\n          <xs:element name=\"withHeader\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:boolean\" />\n        </xs:choice>\n        <xs:attribute name=\"footer\" type=\"SimpleLayoutAttribute\">\n          <xs:annotation>\n            <xs:documentation>Footer layout.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"header\" type=\"SimpleLayoutAttribute\">\n          <xs:annotation>\n            <xs:documentation>Header layout.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"layout\" type=\"SimpleLayoutAttribute\">\n          <xs:annotation>\n            <xs:documentation>Body layout (can be repeated multiple times).</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"customColumnDelimiter\" type=\"xs:string\">\n          <xs:annotation>\n            <xs:documentation>Custom column delimiter value (valid when ColumnDelimiter is set to 'Custom').</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"delimiter\" type=\"NLog.Layouts.CsvColumnDelimiterMode\">\n          <xs:annotation>\n            <xs:documentation>Column delimiter.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"quoteChar\" type=\"xs:string\">\n          <xs:annotation>\n            <xs:documentation>Quote Character.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"quoting\" type=\"NLog.Layouts.CsvQuotingMode\">\n          <xs:annotation>\n            <xs:documentation>Quoting mode.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"withHeader\" type=\"xs:boolean\">\n          <xs:annotation>\n            <xs:documentation>Indicates whether CVS should include header.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n      </xs:extension>\n    </xs:complexContent>\n  </xs:complexType>\n  <xs:simpleType name=\"NLog.Layouts.CsvColumnDelimiterMode\">\n    <xs:restriction base=\"xs:string\">\n      <xs:enumeration value=\"Auto\" />\n      <xs:enumeration value=\"Comma\" />\n      <xs:enumeration value=\"Semicolon\" />\n      <xs:enumeration value=\"Tab\" />\n      <xs:enumeration value=\"Pipe\" />\n      <xs:enumeration value=\"Space\" />\n      <xs:enumeration value=\"Custom\" />\n    </xs:restriction>\n  </xs:simpleType>\n  <xs:simpleType name=\"NLog.Layouts.CsvQuotingMode\">\n    <xs:restriction base=\"xs:string\">\n      <xs:enumeration value=\"All\" />\n      <xs:enumeration value=\"Nothing\" />\n      <xs:enumeration value=\"Auto\" />\n    </xs:restriction>\n  </xs:simpleType>\n  <xs:complexType name=\"NLog.Layouts.CsvColumn\">\n    <xs:choice minOccurs=\"0\" maxOccurs=\"unbounded\">\n      <xs:element name=\"layout\" minOccurs=\"0\" maxOccurs=\"1\" type=\"Layout\" />\n      <xs:element name=\"name\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:string\" />\n    </xs:choice>\n    <xs:attribute name=\"layout\" type=\"SimpleLayoutAttribute\">\n      <xs:annotation>\n        <xs:documentation>Layout of the column.</xs:documentation>\n      </xs:annotation>\n    </xs:attribute>\n    <xs:attribute name=\"name\" type=\"xs:string\">\n      <xs:annotation>\n        <xs:documentation>Name of the column.</xs:documentation>\n      </xs:annotation>\n    </xs:attribute>\n  </xs:complexType>\n  <xs:complexType name=\"JsonLayout\">\n    <xs:complexContent>\n      <xs:extension base=\"Layout\">\n        <xs:choice minOccurs=\"0\" maxOccurs=\"unbounded\">\n          <xs:element name=\"attribute\" minOccurs=\"0\" maxOccurs=\"unbounded\" type=\"NLog.Layouts.JsonAttribute\" />\n          <xs:element name=\"excludeProperties\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:string\" />\n          <xs:element name=\"includeAllProperties\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:boolean\" />\n          <xs:element name=\"includeMdc\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:boolean\" />\n          <xs:element name=\"includeMdlc\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:boolean\" />\n          <xs:element name=\"renderEmptyObject\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:boolean\" />\n          <xs:element name=\"suppressSpaces\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:boolean\" />\n          <xs:element name=\"maxRecursionLimit\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:integer\" />\n        </xs:choice>\n        <xs:attribute name=\"excludeProperties\" type=\"xs:string\">\n          <xs:annotation>\n            <xs:documentation>List of property names to exclude when  is true</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"includeAllProperties\" type=\"xs:boolean\">\n          <xs:annotation>\n            <xs:documentation>Option to include all properties from the log event (as JSON)</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"includeMdc\" type=\"xs:boolean\">\n          <xs:annotation>\n            <xs:documentation>Indicates whether to include contents of the  dictionary.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"includeMdlc\" type=\"xs:boolean\">\n          <xs:annotation>\n            <xs:documentation>Indicates whether to include contents of the  dictionary.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"renderEmptyObject\" type=\"xs:boolean\">\n          <xs:annotation>\n            <xs:documentation>Option to render the empty object value {}</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"suppressSpaces\" type=\"xs:boolean\">\n          <xs:annotation>\n            <xs:documentation>Option to suppress the extra spaces in the output json</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"maxRecursionLimit\" type=\"xs:integer\">\n          <xs:annotation>\n            <xs:documentation>How far should the JSON serializer follow object references before backing off</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n      </xs:extension>\n    </xs:complexContent>\n  </xs:complexType>\n  <xs:complexType name=\"NLog.Layouts.JsonAttribute\">\n    <xs:choice minOccurs=\"0\" maxOccurs=\"unbounded\">\n      <xs:element name=\"layout\" minOccurs=\"0\" maxOccurs=\"1\" type=\"Layout\" />\n      <xs:element name=\"name\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:string\" />\n      <xs:element name=\"encode\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:boolean\" />\n      <xs:element name=\"escapeUnicode\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:boolean\" />\n      <xs:element name=\"includeEmptyValue\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:boolean\" />\n    </xs:choice>\n    <xs:attribute name=\"layout\" type=\"SimpleLayoutAttribute\">\n      <xs:annotation>\n        <xs:documentation>Layout that will be rendered as the attribute's value.</xs:documentation>\n      </xs:annotation>\n    </xs:attribute>\n    <xs:attribute name=\"name\" type=\"xs:string\">\n      <xs:annotation>\n        <xs:documentation>Name of the attribute.</xs:documentation>\n      </xs:annotation>\n    </xs:attribute>\n    <xs:attribute name=\"encode\" type=\"xs:boolean\">\n      <xs:annotation>\n        <xs:documentation>Determines wether or not this attribute will be Json encoded.</xs:documentation>\n      </xs:annotation>\n    </xs:attribute>\n    <xs:attribute name=\"escapeUnicode\" type=\"xs:boolean\">\n      <xs:annotation>\n        <xs:documentation>Indicates whether to escape non-ascii characters</xs:documentation>\n      </xs:annotation>\n    </xs:attribute>\n    <xs:attribute name=\"includeEmptyValue\" type=\"xs:boolean\">\n      <xs:annotation>\n        <xs:documentation>Whether an attribute with empty value should be included in the output</xs:documentation>\n      </xs:annotation>\n    </xs:attribute>\n  </xs:complexType>\n  <xs:complexType name=\"LayoutWithHeaderAndFooter\">\n    <xs:complexContent>\n      <xs:extension base=\"Layout\">\n        <xs:choice minOccurs=\"0\" maxOccurs=\"unbounded\">\n          <xs:element name=\"footer\" minOccurs=\"0\" maxOccurs=\"1\" type=\"Layout\" />\n          <xs:element name=\"header\" minOccurs=\"0\" maxOccurs=\"1\" type=\"Layout\" />\n          <xs:element name=\"layout\" minOccurs=\"0\" maxOccurs=\"1\" type=\"Layout\" />\n        </xs:choice>\n        <xs:attribute name=\"footer\" type=\"SimpleLayoutAttribute\">\n          <xs:annotation>\n            <xs:documentation>Footer layout.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"header\" type=\"SimpleLayoutAttribute\">\n          <xs:annotation>\n            <xs:documentation>Header layout.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"layout\" type=\"SimpleLayoutAttribute\">\n          <xs:annotation>\n            <xs:documentation>Body layout (can be repeated multiple times).</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n      </xs:extension>\n    </xs:complexContent>\n  </xs:complexType>\n  <xs:complexType name=\"Log4JXmlEventLayout\">\n    <xs:complexContent>\n      <xs:extension base=\"Layout\">\n        <xs:choice minOccurs=\"0\" maxOccurs=\"unbounded\">\n          <xs:element name=\"includeAllProperties\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:boolean\" />\n          <xs:element name=\"includeMdc\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:boolean\" />\n          <xs:element name=\"includeMdlc\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:boolean\" />\n          <xs:element name=\"includeNdc\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:boolean\" />\n          <xs:element name=\"includeNdlc\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:boolean\" />\n        </xs:choice>\n        <xs:attribute name=\"includeAllProperties\" type=\"xs:boolean\">\n          <xs:annotation>\n            <xs:documentation>Option to include all properties from the log events</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"includeMdc\" type=\"xs:boolean\">\n          <xs:annotation>\n            <xs:documentation>Indicates whether to include contents of the  dictionary.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"includeMdlc\" type=\"xs:boolean\">\n          <xs:annotation>\n            <xs:documentation>Indicates whether to include contents of the  dictionary.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"includeNdc\" type=\"xs:boolean\">\n          <xs:annotation>\n            <xs:documentation>Indicates whether to include contents of the  stack.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"includeNdlc\" type=\"xs:boolean\">\n          <xs:annotation>\n            <xs:documentation>Indicates whether to include contents of the  stack.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n      </xs:extension>\n    </xs:complexContent>\n  </xs:complexType>\n  <xs:complexType name=\"SimpleLayout\">\n    <xs:complexContent>\n      <xs:extension base=\"Layout\">\n        <xs:choice minOccurs=\"0\" maxOccurs=\"unbounded\">\n          <xs:element name=\"text\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:string\" />\n        </xs:choice>\n        <xs:attribute name=\"text\" type=\"xs:string\">\n          <xs:annotation>\n            <xs:documentation>Layout text.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n      </xs:extension>\n    </xs:complexContent>\n  </xs:complexType>\n  <xs:complexType name=\"when\">\n    <xs:complexContent>\n      <xs:extension base=\"Filter\">\n        <xs:choice minOccurs=\"0\" maxOccurs=\"unbounded\">\n          <xs:element name=\"action\" minOccurs=\"0\" maxOccurs=\"1\" type=\"FilterResult\" />\n          <xs:element name=\"condition\" minOccurs=\"0\" maxOccurs=\"1\" type=\"Condition\" />\n        </xs:choice>\n        <xs:attribute name=\"action\" type=\"FilterResult\">\n          <xs:annotation>\n            <xs:documentation>Action to be taken when filter matches.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"condition\" type=\"Condition\">\n          <xs:annotation>\n            <xs:documentation>Condition expression.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n      </xs:extension>\n    </xs:complexContent>\n  </xs:complexType>\n  <xs:simpleType name=\"FilterResult\">\n    <xs:restriction base=\"xs:string\">\n      <xs:enumeration value=\"Neutral\" />\n      <xs:enumeration value=\"Log\" />\n      <xs:enumeration value=\"Ignore\" />\n      <xs:enumeration value=\"LogFinal\" />\n      <xs:enumeration value=\"IgnoreFinal\" />\n    </xs:restriction>\n  </xs:simpleType>\n  <xs:complexType name=\"whenContains\">\n    <xs:complexContent>\n      <xs:extension base=\"Filter\">\n        <xs:choice minOccurs=\"0\" maxOccurs=\"unbounded\">\n          <xs:element name=\"action\" minOccurs=\"0\" maxOccurs=\"1\" type=\"FilterResult\" />\n          <xs:element name=\"ignoreCase\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:boolean\" />\n          <xs:element name=\"layout\" minOccurs=\"0\" maxOccurs=\"1\" type=\"Layout\" />\n          <xs:element name=\"substring\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:string\" />\n        </xs:choice>\n        <xs:attribute name=\"action\" type=\"FilterResult\">\n          <xs:annotation>\n            <xs:documentation>Action to be taken when filter matches.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"ignoreCase\" type=\"xs:boolean\">\n          <xs:annotation>\n            <xs:documentation>Indicates whether to ignore case when comparing strings.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"layout\" type=\"SimpleLayoutAttribute\">\n          <xs:annotation>\n            <xs:documentation>Layout to be used to filter log messages.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"substring\" type=\"xs:string\">\n          <xs:annotation>\n            <xs:documentation>Substring to be matched.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n      </xs:extension>\n    </xs:complexContent>\n  </xs:complexType>\n  <xs:complexType name=\"whenEqual\">\n    <xs:complexContent>\n      <xs:extension base=\"Filter\">\n        <xs:choice minOccurs=\"0\" maxOccurs=\"unbounded\">\n          <xs:element name=\"action\" minOccurs=\"0\" maxOccurs=\"1\" type=\"FilterResult\" />\n          <xs:element name=\"compareTo\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:string\" />\n          <xs:element name=\"ignoreCase\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:boolean\" />\n          <xs:element name=\"layout\" minOccurs=\"0\" maxOccurs=\"1\" type=\"Layout\" />\n        </xs:choice>\n        <xs:attribute name=\"action\" type=\"FilterResult\">\n          <xs:annotation>\n            <xs:documentation>Action to be taken when filter matches.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"compareTo\" type=\"xs:string\">\n          <xs:annotation>\n            <xs:documentation>String to compare the layout to.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"ignoreCase\" type=\"xs:boolean\">\n          <xs:annotation>\n            <xs:documentation>Indicates whether to ignore case when comparing strings.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"layout\" type=\"SimpleLayoutAttribute\">\n          <xs:annotation>\n            <xs:documentation>Layout to be used to filter log messages.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n      </xs:extension>\n    </xs:complexContent>\n  </xs:complexType>\n  <xs:complexType name=\"whenNotContains\">\n    <xs:complexContent>\n      <xs:extension base=\"Filter\">\n        <xs:choice minOccurs=\"0\" maxOccurs=\"unbounded\">\n          <xs:element name=\"action\" minOccurs=\"0\" maxOccurs=\"1\" type=\"FilterResult\" />\n          <xs:element name=\"ignoreCase\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:boolean\" />\n          <xs:element name=\"layout\" minOccurs=\"0\" maxOccurs=\"1\" type=\"Layout\" />\n          <xs:element name=\"substring\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:string\" />\n        </xs:choice>\n        <xs:attribute name=\"action\" type=\"FilterResult\">\n          <xs:annotation>\n            <xs:documentation>Action to be taken when filter matches.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"ignoreCase\" type=\"xs:boolean\">\n          <xs:annotation>\n            <xs:documentation>Indicates whether to ignore case when comparing strings.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"layout\" type=\"SimpleLayoutAttribute\">\n          <xs:annotation>\n            <xs:documentation>Layout to be used to filter log messages.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"substring\" type=\"xs:string\">\n          <xs:annotation>\n            <xs:documentation>Substring to be matched.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n      </xs:extension>\n    </xs:complexContent>\n  </xs:complexType>\n  <xs:complexType name=\"whenNotEqual\">\n    <xs:complexContent>\n      <xs:extension base=\"Filter\">\n        <xs:choice minOccurs=\"0\" maxOccurs=\"unbounded\">\n          <xs:element name=\"action\" minOccurs=\"0\" maxOccurs=\"1\" type=\"FilterResult\" />\n          <xs:element name=\"compareTo\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:string\" />\n          <xs:element name=\"ignoreCase\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:boolean\" />\n          <xs:element name=\"layout\" minOccurs=\"0\" maxOccurs=\"1\" type=\"Layout\" />\n        </xs:choice>\n        <xs:attribute name=\"action\" type=\"FilterResult\">\n          <xs:annotation>\n            <xs:documentation>Action to be taken when filter matches.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"compareTo\" type=\"xs:string\">\n          <xs:annotation>\n            <xs:documentation>String to compare the layout to.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"ignoreCase\" type=\"xs:boolean\">\n          <xs:annotation>\n            <xs:documentation>Indicates whether to ignore case when comparing strings.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"layout\" type=\"SimpleLayoutAttribute\">\n          <xs:annotation>\n            <xs:documentation>Layout to be used to filter log messages.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n      </xs:extension>\n    </xs:complexContent>\n  </xs:complexType>\n  <xs:complexType name=\"whenRepeated\">\n    <xs:complexContent>\n      <xs:extension base=\"Filter\">\n        <xs:choice minOccurs=\"0\" maxOccurs=\"unbounded\">\n          <xs:element name=\"action\" minOccurs=\"0\" maxOccurs=\"1\" type=\"FilterResult\" />\n          <xs:element name=\"defaultFilterCacheSize\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:integer\" />\n          <xs:element name=\"includeFirst\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:boolean\" />\n          <xs:element name=\"layout\" minOccurs=\"0\" maxOccurs=\"1\" type=\"Layout\" />\n          <xs:element name=\"maxFilterCacheSize\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:integer\" />\n          <xs:element name=\"maxLength\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:integer\" />\n          <xs:element name=\"timeoutSeconds\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:integer\" />\n          <xs:element name=\"optimizeBufferDefaultLength\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:integer\" />\n          <xs:element name=\"optimizeBufferReuse\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:boolean\" />\n          <xs:element name=\"filterCountMessageAppendFormat\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:string\" />\n          <xs:element name=\"filterCountPropertyName\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:string\" />\n        </xs:choice>\n        <xs:attribute name=\"action\" type=\"FilterResult\">\n          <xs:annotation>\n            <xs:documentation>Action to be taken when filter matches.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"defaultFilterCacheSize\" type=\"xs:integer\">\n          <xs:annotation>\n            <xs:documentation>Default number of unique filter values to expect, will automatically increase if needed</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"includeFirst\" type=\"xs:boolean\">\n          <xs:annotation>\n            <xs:documentation>Applies the configured action to the initial logevent that starts the timeout period. Used to configure that it should ignore all events until timeout.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"layout\" type=\"SimpleLayoutAttribute\">\n          <xs:annotation>\n            <xs:documentation>Layout to be used to filter log messages.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"maxFilterCacheSize\" type=\"xs:integer\">\n          <xs:annotation>\n            <xs:documentation>Max number of unique filter values to expect simultaneously</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"maxLength\" type=\"xs:integer\">\n          <xs:annotation>\n            <xs:documentation>Max length of filter values, will truncate if above limit</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"timeoutSeconds\" type=\"xs:integer\">\n          <xs:annotation>\n            <xs:documentation>How long before a filter expires, and logging is accepted again</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"optimizeBufferDefaultLength\" type=\"xs:integer\">\n          <xs:annotation>\n            <xs:documentation>Default buffer size for the internal buffers</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"optimizeBufferReuse\" type=\"xs:boolean\">\n          <xs:annotation>\n            <xs:documentation>Reuse internal buffers, and doesn't have to constantly allocate new buffers</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"filterCountMessageAppendFormat\" type=\"xs:string\">\n          <xs:annotation>\n            <xs:documentation>Append FilterCount to the  when an event is no longer filtered</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"filterCountPropertyName\" type=\"xs:string\">\n          <xs:annotation>\n            <xs:documentation>Insert FilterCount value into  when an event is no longer filtered</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n      </xs:extension>\n    </xs:complexContent>\n  </xs:complexType>\n  <xs:complexType name=\"AccurateLocal\">\n    <xs:complexContent>\n      <xs:extension base=\"TimeSource\">\n        <xs:choice minOccurs=\"0\" maxOccurs=\"unbounded\" />\n      </xs:extension>\n    </xs:complexContent>\n  </xs:complexType>\n  <xs:complexType name=\"AccurateUTC\">\n    <xs:complexContent>\n      <xs:extension base=\"TimeSource\">\n        <xs:choice minOccurs=\"0\" maxOccurs=\"unbounded\" />\n      </xs:extension>\n    </xs:complexContent>\n  </xs:complexType>\n  <xs:complexType name=\"FastLocal\">\n    <xs:complexContent>\n      <xs:extension base=\"TimeSource\">\n        <xs:choice minOccurs=\"0\" maxOccurs=\"unbounded\" />\n      </xs:extension>\n    </xs:complexContent>\n  </xs:complexType>\n  <xs:complexType name=\"FastUTC\">\n    <xs:complexContent>\n      <xs:extension base=\"TimeSource\">\n        <xs:choice minOccurs=\"0\" maxOccurs=\"unbounded\" />\n      </xs:extension>\n    </xs:complexContent>\n  </xs:complexType>\n</xs:schema>"
  },
  {
    "path": "src2/Samples/Sample.RebusRabbitMqConsumer/Program.cs",
    "content": "﻿using System;\nusing Topshelf;\n\nnamespace Sample.RebusRabbitMqConsumer\n{\n    class Program\n    {\n        static int Main()\n        {\n\n            return (int)HostFactory.Run(x =>\n            {\n                x.UseAssemblyInfoForServiceInfo();\n\n                x.Service<SampleRebusRabbitMqConsumerBootstrap>(s =>\n                {\n                    s.ConstructUsing(() => new SampleRebusRabbitMqConsumerBootstrap());\n                    s.WhenStarted(v => v.Start());\n                    s.WhenStopped(v => v.Stop());\n                    s.BeforeStartingService(_ => { Console.WriteLine(\"Processor is starting\"); });\n                    s.BeforeStoppingService(_ => { Console.WriteLine(\"Processor is stopping\"); });\n                });\n\n                // x.StartAutomatically();\n\n                x.SetStartTimeout(TimeSpan.FromSeconds(10));\n                x.SetStopTimeout(TimeSpan.FromSeconds(10));\n\n                x.EnableServiceRecovery(r =>\n                {\n                    r.RestartService(1);\n                    //r.RunProgram(7, \"ping google.com\");\n                    r.RestartComputer(5, \"message\");\n\n                    r.OnCrashOnly();\n                    r.SetResetPeriod(2);\n                });\n\n                //x.AddCommandLineSwitch(\"throwonstart\", v => throwOnStart = v);\n                //x.AddCommandLineSwitch(\"throwonstop\", v => throwOnStop = v);\n                //x.AddCommandLineSwitch(\"throwunhandled\", v => throwUnhandled = v);\n\n                x.OnException((exception) =>\n                {\n                });\n            });\n        }\n    }\n}\n"
  },
  {
    "path": "src2/Samples/Sample.RebusRabbitMqConsumer/Properties/AssemblyInfo.cs",
    "content": "﻿using System.Reflection;\nusing System.Runtime.CompilerServices;\nusing System.Runtime.InteropServices;\n\n// 有关程序集的一般信息由以下\n// 控制。更改这些特性值可修改\n// 与程序集关联的信息。\n[assembly: AssemblyTitle(\"Sample.RebusRabbitMqConsumer\")]\n[assembly: AssemblyDescription(\"\")]\n[assembly: AssemblyConfiguration(\"\")]\n[assembly: AssemblyCompany(\"\")]\n[assembly: AssemblyProduct(\"Sample.RebusRabbitMqConsumer\")]\n[assembly: AssemblyCopyright(\"Copyright ©  2017\")]\n[assembly: AssemblyTrademark(\"\")]\n[assembly: AssemblyCulture(\"\")]\n\n//将 ComVisible 设置为 false 将使此程序集中的类型\n//对 COM 组件不可见。  如果需要从 COM 访问此程序集中的类型，\n//请将此类型的 ComVisible 特性设置为 true。\n[assembly: ComVisible(false)]\n\n// 如果此项目向 COM 公开，则下列 GUID 用于类型库的 ID\n[assembly: Guid(\"96002b54-90ba-4cfe-af91-149035703a98\")]\n\n// 程序集的版本信息由下列四个值组成: \n//\n//      主版本\n//      次版本\n//      生成号\n//      修订号\n//\n//可以指定所有这些值，也可以使用“生成号”和“修订号”的默认值，\n// 方法是按如下所示使用“*”: :\n// [assembly: AssemblyVersion(\"1.0.*\")]\n[assembly: AssemblyVersion(\"1.0.0.0\")]\n[assembly: AssemblyFileVersion(\"1.0.0.0\")]\n"
  },
  {
    "path": "src2/Samples/Sample.RebusRabbitMqConsumer/Sample.RebusRabbitMqConsumer.csproj",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<Project ToolsVersion=\"14.0\" DefaultTargets=\"Build\" xmlns=\"http://schemas.microsoft.com/developer/msbuild/2003\">\n  <Import Project=\"$(MSBuildExtensionsPath)\\$(MSBuildToolsVersion)\\Microsoft.Common.props\" Condition=\"Exists('$(MSBuildExtensionsPath)\\$(MSBuildToolsVersion)\\Microsoft.Common.props')\" />\n  <PropertyGroup>\n    <Configuration Condition=\" '$(Configuration)' == '' \">Debug</Configuration>\n    <Platform Condition=\" '$(Platform)' == '' \">AnyCPU</Platform>\n    <ProjectGuid>{96002B54-90BA-4CFE-AF91-149035703A98}</ProjectGuid>\n    <OutputType>Exe</OutputType>\n    <AppDesignerFolder>Properties</AppDesignerFolder>\n    <RootNamespace>Sample</RootNamespace>\n    <AssemblyName>Sample.RebusRabbitMqConsumer</AssemblyName>\n    <TargetFrameworkVersion>v4.6.1</TargetFrameworkVersion>\n    <FileAlignment>512</FileAlignment>\n    <AutoGenerateBindingRedirects>true</AutoGenerateBindingRedirects>\n    <NuGetPackageImportStamp>\n    </NuGetPackageImportStamp>\n  </PropertyGroup>\n  <PropertyGroup Condition=\" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' \">\n    <PlatformTarget>AnyCPU</PlatformTarget>\n    <DebugSymbols>true</DebugSymbols>\n    <DebugType>full</DebugType>\n    <Optimize>false</Optimize>\n    <OutputPath>bin\\Debug\\</OutputPath>\n    <DefineConstants>DEBUG;TRACE</DefineConstants>\n    <ErrorReport>prompt</ErrorReport>\n    <WarningLevel>4</WarningLevel>\n  </PropertyGroup>\n  <PropertyGroup Condition=\" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' \">\n    <PlatformTarget>AnyCPU</PlatformTarget>\n    <DebugType>pdbonly</DebugType>\n    <Optimize>true</Optimize>\n    <OutputPath>bin\\Release\\</OutputPath>\n    <DefineConstants>TRACE</DefineConstants>\n    <ErrorReport>prompt</ErrorReport>\n    <WarningLevel>4</WarningLevel>\n  </PropertyGroup>\n  <ItemGroup>\n    <Reference Include=\"Abp, Version=3.7.2.0, Culture=neutral, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\..\\packages\\Abp.3.7.2\\lib\\netstandard2.0\\Abp.dll</HintPath>\n    </Reference>\n    <Reference Include=\"Abplus, Version=0.1.7.6, Culture=neutral, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\..\\packages\\Abplus.0.1.7.6\\lib\\net461\\Abplus.dll</HintPath>\n    </Reference>\n    <Reference Include=\"Abplus.MqMessages.RebusCore, Version=0.1.6.3, Culture=neutral, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\..\\packages\\Abplus.MqMessages.RebusCore.0.1.6.3\\lib\\net461\\Abplus.MqMessages.RebusCore.dll</HintPath>\n    </Reference>\n    <Reference Include=\"Abplus.MqMessages.RebusRabbitMqConsumer, Version=0.1.6.3, Culture=neutral, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\..\\packages\\Abplus.MqMessages.RebusRabbitMqConsumer.0.1.6.3\\lib\\net461\\Abplus.MqMessages.RebusRabbitMqConsumer.dll</HintPath>\n    </Reference>\n    <Reference Include=\"Castle.Core, Version=4.0.0.0, Culture=neutral, PublicKeyToken=407dd0808d44fbdc, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\..\\packages\\Castle.Core.4.3.1\\lib\\net45\\Castle.Core.dll</HintPath>\n    </Reference>\n    <Reference Include=\"Castle.Facilities.Logging, Version=4.0.0.0, Culture=neutral, PublicKeyToken=407dd0808d44fbdc, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\..\\packages\\Castle.LoggingFacility.4.1.0\\lib\\net45\\Castle.Facilities.Logging.dll</HintPath>\n    </Reference>\n    <Reference Include=\"Castle.Services.Logging.NLogIntegration, Version=3.3.0.0, Culture=neutral, PublicKeyToken=407dd0808d44fbdc, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\..\\packages\\Castle.Core-NLog.3.3.0\\lib\\net45\\Castle.Services.Logging.NLogIntegration.dll</HintPath>\n      <Private>True</Private>\n    </Reference>\n    <Reference Include=\"Castle.Windsor, Version=4.0.0.0, Culture=neutral, PublicKeyToken=407dd0808d44fbdc, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\..\\packages\\Castle.Windsor.4.1.0\\lib\\net45\\Castle.Windsor.dll</HintPath>\n    </Reference>\n    <Reference Include=\"JetBrains.Annotations, Version=11.1.0.0, Culture=neutral, PublicKeyToken=1010a0d8d6380325, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\..\\packages\\JetBrains.Annotations.11.1.0\\lib\\net20\\JetBrains.Annotations.dll</HintPath>\n    </Reference>\n    <Reference Include=\"Microsoft.Diagnostics.Tracing.EventSource, Version=2.0.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\..\\packages\\Microsoft.Diagnostics.Tracing.EventSource.Redist.2.0.0\\lib\\net461\\Microsoft.Diagnostics.Tracing.EventSource.dll</HintPath>\n    </Reference>\n    <Reference Include=\"Microsoft.Extensions.Caching.Abstractions, Version=2.1.0.0, Culture=neutral, PublicKeyToken=adb9793829ddae60, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\..\\packages\\Microsoft.Extensions.Caching.Abstractions.2.1.0\\lib\\netstandard2.0\\Microsoft.Extensions.Caching.Abstractions.dll</HintPath>\n    </Reference>\n    <Reference Include=\"Microsoft.Extensions.Caching.Memory, Version=2.1.0.0, Culture=neutral, PublicKeyToken=adb9793829ddae60, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\..\\packages\\Microsoft.Extensions.Caching.Memory.2.1.0\\lib\\netstandard2.0\\Microsoft.Extensions.Caching.Memory.dll</HintPath>\n    </Reference>\n    <Reference Include=\"Microsoft.Extensions.DependencyInjection.Abstractions, Version=2.1.0.0, Culture=neutral, PublicKeyToken=adb9793829ddae60, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\..\\packages\\Microsoft.Extensions.DependencyInjection.Abstractions.2.1.0\\lib\\netstandard2.0\\Microsoft.Extensions.DependencyInjection.Abstractions.dll</HintPath>\n    </Reference>\n    <Reference Include=\"Microsoft.Extensions.Options, Version=2.1.0.0, Culture=neutral, PublicKeyToken=adb9793829ddae60, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\..\\packages\\Microsoft.Extensions.Options.2.1.0\\lib\\netstandard2.0\\Microsoft.Extensions.Options.dll</HintPath>\n    </Reference>\n    <Reference Include=\"Microsoft.Extensions.Primitives, Version=2.1.0.0, Culture=neutral, PublicKeyToken=adb9793829ddae60, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\..\\packages\\Microsoft.Extensions.Primitives.2.1.0\\lib\\netstandard2.0\\Microsoft.Extensions.Primitives.dll</HintPath>\n    </Reference>\n    <Reference Include=\"Microsoft.Threading.Tasks, Version=1.0.12.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\..\\packages\\Microsoft.Bcl.Async.1.0.168\\lib\\net40\\Microsoft.Threading.Tasks.dll</HintPath>\n      <Private>True</Private>\n    </Reference>\n    <Reference Include=\"Microsoft.Threading.Tasks.Extensions, Version=1.0.12.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\..\\packages\\Microsoft.Bcl.Async.1.0.168\\lib\\net40\\Microsoft.Threading.Tasks.Extensions.dll</HintPath>\n      <Private>True</Private>\n    </Reference>\n    <Reference Include=\"Microsoft.Threading.Tasks.Extensions.Desktop, Version=1.0.168.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\..\\packages\\Microsoft.Bcl.Async.1.0.168\\lib\\net40\\Microsoft.Threading.Tasks.Extensions.Desktop.dll</HintPath>\n      <Private>True</Private>\n    </Reference>\n    <Reference Include=\"Newtonsoft.Json, Version=11.0.0.0, Culture=neutral, PublicKeyToken=30ad4fe6b2a6aeed, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\..\\packages\\Newtonsoft.Json.11.0.2\\lib\\net45\\Newtonsoft.Json.dll</HintPath>\n    </Reference>\n    <Reference Include=\"Nito.AsyncEx, Version=4.0.1.0, Culture=neutral, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\..\\packages\\Nito.AsyncEx.4.0.1\\lib\\net45\\Nito.AsyncEx.dll</HintPath>\n      <Private>True</Private>\n    </Reference>\n    <Reference Include=\"Nito.AsyncEx.Concurrent, Version=4.0.1.0, Culture=neutral, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\..\\packages\\Nito.AsyncEx.4.0.1\\lib\\net45\\Nito.AsyncEx.Concurrent.dll</HintPath>\n      <Private>True</Private>\n    </Reference>\n    <Reference Include=\"Nito.AsyncEx.Context, Version=1.1.0.0, Culture=neutral, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\..\\packages\\Nito.AsyncEx.Context.1.1.0\\lib\\net46\\Nito.AsyncEx.Context.dll</HintPath>\n    </Reference>\n    <Reference Include=\"Nito.AsyncEx.Coordination, Version=1.0.2.0, Culture=neutral, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\..\\packages\\Nito.AsyncEx.Coordination.1.0.2\\lib\\net46\\Nito.AsyncEx.Coordination.dll</HintPath>\n    </Reference>\n    <Reference Include=\"Nito.AsyncEx.Enlightenment, Version=4.0.1.0, Culture=neutral, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\..\\packages\\Nito.AsyncEx.4.0.1\\lib\\net45\\Nito.AsyncEx.Enlightenment.dll</HintPath>\n      <Private>True</Private>\n    </Reference>\n    <Reference Include=\"Nito.AsyncEx.Tasks, Version=1.1.0.0, Culture=neutral, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\..\\packages\\Nito.AsyncEx.Tasks.1.1.0\\lib\\net46\\Nito.AsyncEx.Tasks.dll</HintPath>\n    </Reference>\n    <Reference Include=\"Nito.Collections.Deque, Version=1.0.4.0, Culture=neutral, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\..\\packages\\Nito.Collections.Deque.1.0.4\\lib\\netstandard2.0\\Nito.Collections.Deque.dll</HintPath>\n    </Reference>\n    <Reference Include=\"Nito.Disposables, Version=1.2.3.0, Culture=neutral, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\..\\packages\\Nito.Disposables.1.2.3\\lib\\netstandard2.0\\Nito.Disposables.dll</HintPath>\n    </Reference>\n    <Reference Include=\"NLog, Version=4.0.0.0, Culture=neutral, PublicKeyToken=5120e14c03d0593c, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\..\\packages\\NLog.4.5.6\\lib\\net45\\NLog.dll</HintPath>\n    </Reference>\n    <Reference Include=\"RabbitMQ.Client, Version=5.0.0.0, Culture=neutral, PublicKeyToken=89e7d7c5feba84ce, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\..\\packages\\RabbitMQ.Client.5.0.1\\lib\\net451\\RabbitMQ.Client.dll</HintPath>\n    </Reference>\n    <Reference Include=\"Rebus, Version=4.2.1.0, Culture=neutral, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\..\\packages\\Rebus.4.2.1\\lib\\net45\\Rebus.dll</HintPath>\n    </Reference>\n    <Reference Include=\"Rebus.CastleWindsor, Version=4.0.0.0, Culture=neutral, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\..\\packages\\Rebus.Castle.Windsor.4.0.0\\lib\\net45\\Rebus.CastleWindsor.dll</HintPath>\n    </Reference>\n    <Reference Include=\"Rebus.NewtonsoftJson, Version=3.1.5.0, Culture=neutral, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\..\\packages\\Rebus.NewtonsoftJson.3.1.5\\lib\\NET45\\Rebus.NewtonsoftJson.dll</HintPath>\n    </Reference>\n    <Reference Include=\"Rebus.NLog, Version=5.0.0.0, Culture=neutral, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\..\\packages\\Rebus.NLog.5.0.0\\lib\\net45\\Rebus.NLog.dll</HintPath>\n    </Reference>\n    <Reference Include=\"Rebus.RabbitMq, Version=4.4.2.0, Culture=neutral, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\..\\packages\\Rebus.RabbitMq.4.4.2\\lib\\net452\\Rebus.RabbitMq.dll</HintPath>\n    </Reference>\n    <Reference Include=\"System\" />\n    <Reference Include=\"System.Buffers, Version=4.0.2.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\..\\packages\\System.Buffers.4.4.0\\lib\\netstandard2.0\\System.Buffers.dll</HintPath>\n    </Reference>\n    <Reference Include=\"System.Collections.Immutable, Version=1.2.3.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\..\\packages\\System.Collections.Immutable.1.5.0\\lib\\netstandard2.0\\System.Collections.Immutable.dll</HintPath>\n    </Reference>\n    <Reference Include=\"System.ComponentModel.Annotations, Version=4.2.1.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\..\\packages\\System.ComponentModel.Annotations.4.5.0\\lib\\net461\\System.ComponentModel.Annotations.dll</HintPath>\n    </Reference>\n    <Reference Include=\"System.ComponentModel.DataAnnotations\" />\n    <Reference Include=\"System.Configuration\" />\n    <Reference Include=\"System.Configuration.ConfigurationManager, Version=4.0.1.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\..\\packages\\System.Configuration.ConfigurationManager.4.5.0\\lib\\net461\\System.Configuration.ConfigurationManager.dll</HintPath>\n    </Reference>\n    <Reference Include=\"System.Core\" />\n    <Reference Include=\"System.Data.Common, Version=4.1.1.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\..\\packages\\System.Data.Common.4.3.0\\lib\\net451\\System.Data.Common.dll</HintPath>\n      <Private>True</Private>\n    </Reference>\n    <Reference Include=\"System.Data.OracleClient\" />\n    <Reference Include=\"System.Drawing\" />\n    <Reference Include=\"System.IO.Compression, Version=4.2.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089, processorArchitecture=MSIL\" />\n    <Reference Include=\"System.Linq.Dynamic, Version=1.0.6132.35681, Culture=neutral, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\..\\packages\\System.Linq.Dynamic.1.0.7\\lib\\net40\\System.Linq.Dynamic.dll</HintPath>\n      <Private>True</Private>\n    </Reference>\n    <Reference Include=\"System.Linq.Dynamic.Core, Version=0.0.0.0, Culture=neutral, PublicKeyToken=0f07ec44de6ac832, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\..\\packages\\System.Linq.Dynamic.Core.1.0.8.9\\lib\\net46\\System.Linq.Dynamic.Core.dll</HintPath>\n    </Reference>\n    <Reference Include=\"System.Memory, Version=4.0.1.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\..\\packages\\System.Memory.4.5.0\\lib\\netstandard2.0\\System.Memory.dll</HintPath>\n    </Reference>\n    <Reference Include=\"System.Net\" />\n    <Reference Include=\"System.Numerics\" />\n    <Reference Include=\"System.Numerics.Vectors, Version=4.1.3.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\..\\packages\\System.Numerics.Vectors.4.4.0\\lib\\net46\\System.Numerics.Vectors.dll</HintPath>\n    </Reference>\n    <Reference Include=\"System.Runtime.Caching\" />\n    <Reference Include=\"System.Runtime.CompilerServices.Unsafe, Version=4.0.4.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\..\\packages\\System.Runtime.CompilerServices.Unsafe.4.5.0\\lib\\netstandard2.0\\System.Runtime.CompilerServices.Unsafe.dll</HintPath>\n    </Reference>\n    <Reference Include=\"System.Runtime.InteropServices.RuntimeInformation, Version=4.0.1.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\..\\packages\\System.Runtime.InteropServices.RuntimeInformation.4.3.0\\lib\\net45\\System.Runtime.InteropServices.RuntimeInformation.dll</HintPath>\n      <Private>True</Private>\n    </Reference>\n    <Reference Include=\"System.Runtime.Remoting\" />\n    <Reference Include=\"System.Runtime.Serialization\" />\n    <Reference Include=\"System.Runtime.Serialization.Formatters, Version=4.0.1.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\..\\packages\\System.Runtime.Serialization.Formatters.4.3.0\\lib\\net46\\System.Runtime.Serialization.Formatters.dll</HintPath>\n      <Private>True</Private>\n    </Reference>\n    <Reference Include=\"System.Runtime.Serialization.Primitives, Version=4.1.2.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\..\\packages\\System.Runtime.Serialization.Primitives.4.3.0\\lib\\net46\\System.Runtime.Serialization.Primitives.dll</HintPath>\n      <Private>True</Private>\n    </Reference>\n    <Reference Include=\"System.Security.AccessControl, Version=4.1.1.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\..\\packages\\System.Security.AccessControl.4.5.0\\lib\\net461\\System.Security.AccessControl.dll</HintPath>\n    </Reference>\n    <Reference Include=\"System.Security.Claims, Version=4.0.2.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\..\\packages\\System.Security.Claims.4.3.0\\lib\\net46\\System.Security.Claims.dll</HintPath>\n      <Private>True</Private>\n    </Reference>\n    <Reference Include=\"System.Security.Permissions, Version=4.0.1.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\..\\packages\\System.Security.Permissions.4.5.0\\lib\\net461\\System.Security.Permissions.dll</HintPath>\n    </Reference>\n    <Reference Include=\"System.Security.Principal.Windows, Version=4.1.1.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\..\\packages\\System.Security.Principal.Windows.4.5.0\\lib\\net461\\System.Security.Principal.Windows.dll</HintPath>\n    </Reference>\n    <Reference Include=\"System.ServiceModel\" />\n    <Reference Include=\"System.ServiceProcess\" />\n    <Reference Include=\"System.Transactions\" />\n    <Reference Include=\"System.Web\" />\n    <Reference Include=\"System.Xml.Linq\" />\n    <Reference Include=\"System.Data.DataSetExtensions\" />\n    <Reference Include=\"Microsoft.CSharp\" />\n    <Reference Include=\"System.Data\" />\n    <Reference Include=\"System.Net.Http\" />\n    <Reference Include=\"System.Xml\" />\n    <Reference Include=\"System.Xml.XmlDocument, Version=4.0.2.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\..\\packages\\System.Xml.XmlDocument.4.3.0\\lib\\net46\\System.Xml.XmlDocument.dll</HintPath>\n      <Private>True</Private>\n    </Reference>\n    <Reference Include=\"System.Xml.XPath, Version=4.0.2.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\..\\packages\\System.Xml.XPath.4.3.0\\lib\\net46\\System.Xml.XPath.dll</HintPath>\n      <Private>True</Private>\n    </Reference>\n    <Reference Include=\"System.Xml.XPath.XmlDocument, Version=4.0.2.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\..\\packages\\System.Xml.XPath.XmlDocument.4.3.0\\lib\\net46\\System.Xml.XPath.XmlDocument.dll</HintPath>\n    </Reference>\n    <Reference Include=\"TimeZoneConverter, Version=2.4.1.0, Culture=neutral, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\..\\packages\\TimeZoneConverter.2.4.1\\lib\\net45\\TimeZoneConverter.dll</HintPath>\n    </Reference>\n    <Reference Include=\"Topshelf, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b800c4cfcdeea87b, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\..\\packages\\Topshelf.4.0.4\\lib\\net452\\Topshelf.dll</HintPath>\n    </Reference>\n    <Reference Include=\"Topshelf.NLog, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b800c4cfcdeea87b, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\..\\packages\\Topshelf.NLog.4.0.4\\lib\\net452\\Topshelf.NLog.dll</HintPath>\n    </Reference>\n  </ItemGroup>\n  <ItemGroup>\n    <Compile Include=\"Handlers\\TestHandler.cs\" />\n    <Compile Include=\"Program.cs\" />\n    <Compile Include=\"Properties\\AssemblyInfo.cs\" />\n    <Compile Include=\"SampleRebusRabbitMqConsumerBootstrap.cs\" />\n    <Compile Include=\"SampleRebusRabbitMqConsumerModule.cs\" />\n  </ItemGroup>\n  <ItemGroup>\n    <None Include=\"App.config\" />\n    <Content Include=\"NLog.config\">\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </Content>\n    <None Include=\"NLog.xsd\">\n      <SubType>Designer</SubType>\n    </None>\n    <None Include=\"packages.config\">\n      <SubType>Designer</SubType>\n    </None>\n  </ItemGroup>\n  <ItemGroup />\n  <ItemGroup>\n    <ProjectReference Include=\"..\\Sample.MqMessages\\Sample.MqMessages.csproj\">\n      <Project>{94E6D468-2D45-4EC7-AF1B-AAC884DB467F}</Project>\n      <Name>Sample.MqMessages</Name>\n    </ProjectReference>\n  </ItemGroup>\n  <Import Project=\"$(MSBuildToolsPath)\\Microsoft.CSharp.targets\" />\n  <Import Project=\"..\\..\\..\\packages\\Microsoft.Bcl.Build.1.0.21\\build\\Microsoft.Bcl.Build.targets\" Condition=\"Exists('..\\..\\..\\packages\\Microsoft.Bcl.Build.1.0.21\\build\\Microsoft.Bcl.Build.targets')\" />\n  <Target Name=\"EnsureNuGetPackageBuildImports\" BeforeTargets=\"PrepareForBuild\">\n    <PropertyGroup>\n      <ErrorText>这台计算机上缺少此项目引用的 NuGet 程序包。使用“NuGet 程序包还原”可下载这些程序包。有关更多信息，请参见 http://go.microsoft.com/fwlink/?LinkID=322105。缺少的文件是 {0}。</ErrorText>\n    </PropertyGroup>\n    <Error Condition=\"!Exists('..\\..\\..\\packages\\Microsoft.Bcl.Build.1.0.21\\build\\Microsoft.Bcl.Build.targets')\" Text=\"$([System.String]::Format('$(ErrorText)', '..\\..\\..\\packages\\Microsoft.Bcl.Build.1.0.21\\build\\Microsoft.Bcl.Build.targets'))\" />\n  </Target>\n  <!-- To modify your build process, add your task inside one of the targets below and uncomment it. \n       Other similar extension points exist, see Microsoft.Common.targets.\n  <Target Name=\"BeforeBuild\">\n  </Target>\n  <Target Name=\"AfterBuild\">\n  </Target>\n  -->\n</Project>"
  },
  {
    "path": "src2/Samples/Sample.RebusRabbitMqConsumer/SampleRebusRabbitMqConsumerBootstrap.cs",
    "content": "﻿using Abp;\n\nnamespace Sample\n{\n    public class SampleRebusRabbitMqConsumerBootstrap\n    {\n        private static readonly AbpBootstrapper _bs = AbpBootstrapper.Create<SampleRebusRabbitMqConsumerModule>();\n\n        public void Start()\n        {\n            //LogManager.Configuration = new XmlLoggingConfiguration(\"nlog.config\");\n            _bs.Initialize();\n        }\n\n        public void Stop()\n        {\n            _bs.Dispose();\n        }\n    }\n}\n"
  },
  {
    "path": "src2/Samples/Sample.RebusRabbitMqConsumer/SampleRebusRabbitMqConsumerModule.cs",
    "content": "﻿using System.Reflection;\nusing Abp.Configuration.Startup;\nusing Abp.Modules;\nusing Abp.MqMessages.Consumers;\nusing Castle.Facilities.Logging;\nusing Castle.Services.Logging.NLogIntegration;\nusing Rebus.NLog.Config;\n\nnamespace Sample\n{\n    [DependsOn(typeof(RebusRabbitMqConsumerModule))]\n    public class SampleRebusRabbitMqConsumerModule : AbpModule\n    {\n        public override void PreInitialize()\n        {\n            Configuration.Modules.UseAbplusRebusRabbitMqConsumer()\n                .UseLogging(c => c.NLog())\n                .ConnectTo(\"amqp://dev:dev@rabbitmq.local.jk724.cn/dev_host\")\n                .UseQueue(Assembly.GetExecutingAssembly().GetName().Name)\n                .RegisterHandlerInAssemblys(Assembly.GetExecutingAssembly());\n        }\n\n        public override void Initialize()\n        {\n            base.Initialize();\n        }\n\n        public override void PostInitialize()\n        {\n            Abp.Dependency.IocManager.Instance.IocContainer.AddFacility<LoggingFacility>(f => f.LogUsing<NLogFactory>().WithConfig(\"nlog.config\"));\n        }\n    }\n}\n"
  },
  {
    "path": "src2/Samples/Sample.RebusRabbitMqConsumer/packages.config",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<packages>\n  <package id=\"Abp\" version=\"3.7.2\" targetFramework=\"net461\" />\n  <package id=\"Abplus\" version=\"0.1.7.6\" targetFramework=\"net461\" />\n  <package id=\"Abplus.MqMessages.RebusCore\" version=\"0.1.6.3\" targetFramework=\"net461\" />\n  <package id=\"Abplus.MqMessages.RebusRabbitMqConsumer\" version=\"0.1.6.3\" targetFramework=\"net461\" />\n  <package id=\"Castle.Core\" version=\"4.3.1\" targetFramework=\"net461\" />\n  <package id=\"Castle.Core-NLog\" version=\"3.3.0\" targetFramework=\"net461\" />\n  <package id=\"Castle.LoggingFacility\" version=\"4.1.0\" targetFramework=\"net461\" />\n  <package id=\"Castle.Windsor\" version=\"4.1.0\" targetFramework=\"net461\" />\n  <package id=\"Castle.Windsor-NLog\" version=\"3.4.0\" targetFramework=\"net461\" />\n  <package id=\"JetBrains.Annotations\" version=\"11.1.0\" targetFramework=\"net461\" />\n  <package id=\"Microsoft.Bcl\" version=\"1.1.10\" targetFramework=\"net461\" />\n  <package id=\"Microsoft.Bcl.Async\" version=\"1.0.168\" targetFramework=\"net461\" />\n  <package id=\"Microsoft.Bcl.Build\" version=\"1.0.21\" targetFramework=\"net461\" />\n  <package id=\"Microsoft.Diagnostics.Tracing.EventSource.Redist\" version=\"2.0.0\" targetFramework=\"net461\" />\n  <package id=\"Microsoft.Extensions.Caching.Abstractions\" version=\"2.1.0\" targetFramework=\"net461\" />\n  <package id=\"Microsoft.Extensions.Caching.Memory\" version=\"2.1.0\" targetFramework=\"net461\" />\n  <package id=\"Microsoft.Extensions.DependencyInjection.Abstractions\" version=\"2.1.0\" targetFramework=\"net461\" />\n  <package id=\"Microsoft.Extensions.Options\" version=\"2.1.0\" targetFramework=\"net461\" />\n  <package id=\"Microsoft.Extensions.Primitives\" version=\"2.1.0\" targetFramework=\"net461\" />\n  <package id=\"Newtonsoft.Json\" version=\"11.0.2\" targetFramework=\"net461\" />\n  <package id=\"Nito.AsyncEx\" version=\"4.0.1\" targetFramework=\"net461\" />\n  <package id=\"Nito.AsyncEx.Context\" version=\"1.1.0\" targetFramework=\"net461\" />\n  <package id=\"Nito.AsyncEx.Coordination\" version=\"1.0.2\" targetFramework=\"net461\" />\n  <package id=\"Nito.AsyncEx.Tasks\" version=\"1.1.0\" targetFramework=\"net461\" />\n  <package id=\"Nito.Collections.Deque\" version=\"1.0.4\" targetFramework=\"net461\" />\n  <package id=\"Nito.Disposables\" version=\"1.2.3\" targetFramework=\"net461\" />\n  <package id=\"NLog\" version=\"4.5.6\" targetFramework=\"net461\" />\n  <package id=\"NLog.Config\" version=\"4.5.6\" targetFramework=\"net461\" />\n  <package id=\"NLog.Schema\" version=\"4.5.6\" targetFramework=\"net461\" />\n  <package id=\"RabbitMQ.Client\" version=\"5.0.1\" targetFramework=\"net461\" />\n  <package id=\"Rebus\" version=\"4.2.1\" targetFramework=\"net461\" />\n  <package id=\"Rebus.Castle.Windsor\" version=\"4.0.0\" targetFramework=\"net461\" />\n  <package id=\"Rebus.NewtonsoftJson\" version=\"3.1.5\" targetFramework=\"net461\" />\n  <package id=\"Rebus.NLog\" version=\"5.0.0\" targetFramework=\"net461\" />\n  <package id=\"Rebus.RabbitMq\" version=\"4.4.2\" targetFramework=\"net461\" />\n  <package id=\"System.Buffers\" version=\"4.4.0\" targetFramework=\"net461\" />\n  <package id=\"System.Collections.Immutable\" version=\"1.5.0\" targetFramework=\"net461\" />\n  <package id=\"System.ComponentModel.Annotations\" version=\"4.5.0\" targetFramework=\"net461\" />\n  <package id=\"System.Configuration.ConfigurationManager\" version=\"4.5.0\" targetFramework=\"net461\" />\n  <package id=\"System.Data.Common\" version=\"4.3.0\" targetFramework=\"net461\" />\n  <package id=\"System.Linq.Dynamic\" version=\"1.0.7\" targetFramework=\"net461\" />\n  <package id=\"System.Linq.Dynamic.Core\" version=\"1.0.8.9\" targetFramework=\"net461\" />\n  <package id=\"System.Linq.Queryable\" version=\"4.3.0\" targetFramework=\"net461\" />\n  <package id=\"System.Memory\" version=\"4.5.0\" targetFramework=\"net461\" />\n  <package id=\"System.Numerics.Vectors\" version=\"4.4.0\" targetFramework=\"net461\" />\n  <package id=\"System.Runtime.CompilerServices.Unsafe\" version=\"4.5.0\" targetFramework=\"net461\" />\n  <package id=\"System.Runtime.InteropServices.RuntimeInformation\" version=\"4.3.0\" targetFramework=\"net461\" />\n  <package id=\"System.Runtime.Serialization.Formatters\" version=\"4.3.0\" targetFramework=\"net461\" />\n  <package id=\"System.Runtime.Serialization.Primitives\" version=\"4.3.0\" targetFramework=\"net461\" />\n  <package id=\"System.Security.AccessControl\" version=\"4.5.0\" targetFramework=\"net461\" />\n  <package id=\"System.Security.Claims\" version=\"4.3.0\" targetFramework=\"net461\" />\n  <package id=\"System.Security.Permissions\" version=\"4.5.0\" targetFramework=\"net461\" />\n  <package id=\"System.Security.Principal.Windows\" version=\"4.5.0\" targetFramework=\"net461\" />\n  <package id=\"System.Threading\" version=\"4.3.0\" targetFramework=\"net461\" />\n  <package id=\"System.Xml.XmlDocument\" version=\"4.3.0\" targetFramework=\"net461\" />\n  <package id=\"System.Xml.XPath\" version=\"4.3.0\" targetFramework=\"net461\" />\n  <package id=\"System.Xml.XPath.XmlDocument\" version=\"4.3.0\" targetFramework=\"net461\" />\n  <package id=\"TimeZoneConverter\" version=\"2.4.1\" targetFramework=\"net461\" />\n  <package id=\"Topshelf\" version=\"4.0.4\" targetFramework=\"net461\" />\n  <package id=\"Topshelf.NLog\" version=\"4.0.4\" targetFramework=\"net461\" />\n</packages>"
  },
  {
    "path": "src2/Samples/Sample.RebusRabbitMqPublisher/App.config",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<configuration>\n    <startup> \n        <supportedRuntime version=\"v4.0\" sku=\".NETFramework,Version=v4.6.1\" />\n    </startup>\n  <runtime>\n    <assemblyBinding xmlns=\"urn:schemas-microsoft-com:asm.v1\">\n      <dependentAssembly>\n        <assemblyIdentity name=\"NLog\" publicKeyToken=\"5120e14c03d0593c\" culture=\"neutral\" />\n        <bindingRedirect oldVersion=\"0.0.0.0-4.0.0.0\" newVersion=\"4.0.0.0\" />\n      </dependentAssembly>\n      <dependentAssembly>\n        <assemblyIdentity name=\"Castle.Windsor\" publicKeyToken=\"407dd0808d44fbdc\" culture=\"neutral\" />\n        <bindingRedirect oldVersion=\"0.0.0.0-4.0.0.0\" newVersion=\"4.0.0.0\" />\n      </dependentAssembly>\n      <dependentAssembly>\n        <assemblyIdentity name=\"Newtonsoft.Json\" publicKeyToken=\"30ad4fe6b2a6aeed\" culture=\"neutral\" />\n        <bindingRedirect oldVersion=\"0.0.0.0-11.0.0.0\" newVersion=\"11.0.0.0\" />\n      </dependentAssembly>\n      <dependentAssembly>\n        <assemblyIdentity name=\"Castle.Core\" publicKeyToken=\"407dd0808d44fbdc\" culture=\"neutral\" />\n        <bindingRedirect oldVersion=\"0.0.0.0-4.0.0.0\" newVersion=\"4.0.0.0\" />\n      </dependentAssembly>\n      <dependentAssembly>\n        <assemblyIdentity name=\"Microsoft.Extensions.Caching.Abstractions\" publicKeyToken=\"adb9793829ddae60\" culture=\"neutral\" />\n        <bindingRedirect oldVersion=\"0.0.0.0-2.0.1.0\" newVersion=\"2.0.1.0\" />\n      </dependentAssembly>\n      <dependentAssembly>\n        <assemblyIdentity name=\"Microsoft.Extensions.Caching.Memory\" publicKeyToken=\"adb9793829ddae60\" culture=\"neutral\" />\n        <bindingRedirect oldVersion=\"0.0.0.0-2.0.1.0\" newVersion=\"2.0.1.0\" />\n      </dependentAssembly>\n      <dependentAssembly>\n        <assemblyIdentity name=\"Microsoft.Extensions.Options\" publicKeyToken=\"adb9793829ddae60\" culture=\"neutral\" />\n        <bindingRedirect oldVersion=\"0.0.0.0-2.0.1.0\" newVersion=\"2.0.1.0\" />\n      </dependentAssembly>\n      <dependentAssembly>\n        <assemblyIdentity name=\"System.Runtime.InteropServices.RuntimeInformation\" publicKeyToken=\"b03f5f7f11d50a3a\" culture=\"neutral\" />\n        <bindingRedirect oldVersion=\"0.0.0.0-4.0.2.0\" newVersion=\"4.0.2.0\" />\n      </dependentAssembly>\n      <dependentAssembly>\n        <assemblyIdentity name=\"RabbitMQ.Client\" publicKeyToken=\"89e7d7c5feba84ce\" culture=\"neutral\" />\n        <bindingRedirect oldVersion=\"0.0.0.0-5.0.0.0\" newVersion=\"5.0.0.0\" />\n      </dependentAssembly>\n    </assemblyBinding>\n  </runtime>\n</configuration>"
  },
  {
    "path": "src2/Samples/Sample.RebusRabbitMqPublisher/BackgroundWorks/TestWorker.cs",
    "content": "﻿using System;\nusing Abp.Dependency;\nusing Abp.MqMessages;\nusing Abp.Threading.BackgroundWorkers;\nusing Abp.Threading.Timers;\nusing Sample.MqMessages;\n\nnamespace Sample.BackgroundWorks\n{\n    public class TestWorker : PeriodicBackgroundWorkerBase, ISingletonDependency\n    {\n        private readonly IMqMessagePublisher _publisher;\n\n        public TestWorker(AbpTimer timer, IMqMessagePublisher publisher)\n            : base(timer)\n        {\n            _publisher = publisher;\n            Timer.Period = 3000;//one minute\n            Timer.RunOnStart = true;\n        }\n\n        protected override void DoWork()\n        {\n            Logger.Info($\"TestWork Done! Time:{DateTime.Now}\");\n            _publisher.Publish(new TestMqMessage\n            {\n                Name = \"TestWork\",\n                Value = \"BlaBlaBlaBlaBlaBla\",\n                Time = DateTime.Now\n            });\n        }\n    }\n}\n"
  },
  {
    "path": "src2/Samples/Sample.RebusRabbitMqPublisher/NLog.config",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\" ?>\n<nlog xmlns=\"http://www.nlog-project.org/schemas/NLog.xsd\"\n      xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\"\n      xsi:schemaLocation=\"http://www.nlog-project.org/schemas/NLog.xsd NLog.xsd\"\n      autoReload=\"true\"\n      throwExceptions=\"false\"\n      internalLogLevel=\"Off\" internalLogFile=\"c:\\temp\\nlog-internal.log\">\n\n  <!-- optional, add some variables\n  https://github.com/nlog/NLog/wiki/Configuration-file#variables\n  -->\n  <variable name=\"myvar\" value=\"myvalue\"/>\n\n  <!--\n  See https://github.com/nlog/nlog/wiki/Configuration-file\n  for information on customizing logging rules and outputs.\n   -->\n  <targets>\n\n    <!--\n    add your targets here\n    See https://github.com/nlog/NLog/wiki/Targets for possible targets.\n    See https://github.com/nlog/NLog/wiki/Layout-Renderers for the possible layout renderers.\n    -->\n\n    <!--\n    Write events to a file with the date in the filename. -->\n    <target xsi:type=\"File\" name=\"f\" fileName=\"${basedir}/logs/${shortdate}.log\"\n            layout=\"${longdate} ${uppercase:${level}} ${message}\" />\n    <target xsi:type=\"ColoredConsole\"  name=\"c\" layout=\"${longdate} ${uppercase:${level}} ${message}\" />\n  </targets>\n\n  <rules>\n    <!-- add your logging rules here -->\n\n    <!--\n    Write all events with minimal level of Debug (So Debug, Info, Warn, Error and Fatal, but not Trace)  to \"f\" -->\n    <logger name=\"*\" minlevel=\"Debug\" writeTo=\"f\" />\n    <logger name=\"*\" minlevel=\"Debug\" writeTo=\"c\" />\n   \n  </rules>\n</nlog>\n"
  },
  {
    "path": "src2/Samples/Sample.RebusRabbitMqPublisher/NLog.xsd",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<xs:schema id=\"NLog\" targetNamespace=\"http://www.nlog-project.org/schemas/NLog.xsd\" elementFormDefault=\"qualified\" xmlns:xs=\"http://www.w3.org/2001/XMLSchema\" xmlns=\"http://www.nlog-project.org/schemas/NLog.xsd\">\n  <xs:element name=\"nlog\" type=\"NLogConfiguration\" />\n  <xs:complexType name=\"NLogConfiguration\">\n    <xs:choice minOccurs=\"0\" maxOccurs=\"unbounded\">\n      <xs:element name=\"extensions\" type=\"NLogExtensions\" />\n      <xs:element name=\"include\" type=\"NLogInclude\" />\n      <xs:element name=\"variable\" type=\"NLogVariable\" />\n      <xs:element name=\"targets\" type=\"NLogTargets\" />\n      <xs:element name=\"rules\" type=\"NLogRules\" />\n      <xs:element name=\"time\" type=\"TimeSource\" />\n    </xs:choice>\n    <xs:attribute name=\"autoReload\" type=\"xs:boolean\">\n      <xs:annotation>\n        <xs:documentation>Watch config file for changes and reload automatically.</xs:documentation>\n      </xs:annotation>\n    </xs:attribute>\n    <xs:attribute name=\"internalLogToConsole\" type=\"xs:boolean\">\n      <xs:annotation>\n        <xs:documentation>Print internal NLog messages to the console. Default value is: false</xs:documentation>\n      </xs:annotation>\n    </xs:attribute>\n    <xs:attribute name=\"internalLogToConsoleError\" type=\"xs:boolean\">\n      <xs:annotation>\n        <xs:documentation>Print internal NLog messages to the console error output. Default value is: false</xs:documentation>\n      </xs:annotation>\n    </xs:attribute>\n    <xs:attribute name=\"internalLogFile\" type=\"xs:string\">\n      <xs:annotation>\n        <xs:documentation>Write internal NLog messages to the specified file.</xs:documentation>\n      </xs:annotation>\n    </xs:attribute>\n    <xs:attribute name=\"internalLogLevel\" type=\"NLogLevel\">\n      <xs:annotation>\n        <xs:documentation>Log level threshold for internal log messages. Default value is: Info.</xs:documentation>\n      </xs:annotation>\n    </xs:attribute>\n    <xs:attribute name=\"globalThreshold\" type=\"NLogLevel\">\n      <xs:annotation>\n        <xs:documentation>Global log level threshold for application log messages. Messages below this level won't be logged..</xs:documentation>\n      </xs:annotation>\n    </xs:attribute>\n    <xs:attribute name=\"throwExceptions\" type=\"xs:boolean\">\n      <xs:annotation>\n        <xs:documentation>Throw an exception when there is an internal error. Default value is: false.</xs:documentation>\n      </xs:annotation>\n    </xs:attribute>\n    <xs:attribute name=\"throwConfigExceptions\" type=\"xs:boolean\">\n      <xs:annotation>\n        <xs:documentation>Throw an exception when there is a configuration error. If not set, determined by throwExceptions.</xs:documentation>\n      </xs:annotation>\n    </xs:attribute>\n    <xs:attribute name=\"keepVariablesOnReload\" type=\"xs:boolean\">\n      <xs:annotation>\n        <xs:documentation>Gets or sets a value indicating whether Variables should be kept on configuration reload. Default value is: false.</xs:documentation>\n      </xs:annotation>\n    </xs:attribute>\n    <xs:attribute name=\"internalLogToTrace\" type=\"xs:boolean\">\n      <xs:annotation>\n        <xs:documentation>Write internal NLog messages to the System.Diagnostics.Trace. Default value is: false.</xs:documentation>\n      </xs:annotation>\n    </xs:attribute>\n    <xs:attribute name=\"internalLogIncludeTimestamp\" type=\"xs:boolean\">\n      <xs:annotation>\n        <xs:documentation>Write timestamps for internal NLog messages. Default value is: true.</xs:documentation>\n      </xs:annotation>\n    </xs:attribute>\n    <xs:attribute name=\"useInvariantCulture\" type=\"xs:boolean\">\n      <xs:annotation>\n        <xs:documentation>Use InvariantCulture as default culture instead of CurrentCulture.  Default value is: false.</xs:documentation>\n      </xs:annotation>\n    </xs:attribute>\n    <xs:attribute name=\"parseMessageTemplates\" type=\"xs:boolean\">\n      <xs:annotation>\n        <xs:documentation>Perform mesage template parsing and formatting of LogEvent messages (true = Always, false = Never, empty = Auto Detect). Default value is: empty.</xs:documentation>\n      </xs:annotation>\n    </xs:attribute>\n  </xs:complexType>\n  <xs:complexType name=\"NLogTargets\">\n    <xs:choice minOccurs=\"0\" maxOccurs=\"unbounded\">\n      <xs:element name=\"default-wrapper\" type=\"WrapperTargetBase\" />\n      <xs:element name=\"default-target-parameters\" type=\"Target\" />\n      <xs:element name=\"target\" type=\"Target\" />\n      <xs:element name=\"wrapper-target\" type=\"WrapperTargetBase\" />\n      <xs:element name=\"compound-target\" type=\"CompoundTargetBase\" />\n    </xs:choice>\n    <xs:attribute name=\"async\" type=\"xs:boolean\">\n      <xs:annotation>\n        <xs:documentation>Make all targets within this section asynchronous (creates additional threads but the calling thread isn't blocked by any target writes).</xs:documentation>\n      </xs:annotation>\n    </xs:attribute>\n  </xs:complexType>\n  <xs:complexType name=\"NLogRules\">\n    <xs:sequence minOccurs=\"0\" maxOccurs=\"unbounded\">\n      <xs:element name=\"logger\" type=\"NLogLoggerRule\" />\n    </xs:sequence>\n  </xs:complexType>\n  <xs:complexType name=\"NLogExtensions\">\n    <xs:choice minOccurs=\"0\" maxOccurs=\"unbounded\">\n      <xs:element name=\"add\" type=\"NLogExtensionsAdd\" />\n    </xs:choice>\n  </xs:complexType>\n  <xs:complexType name=\"NLogExtensionsAdd\">\n    <xs:attribute name=\"prefix\" type=\"xs:string\">\n      <xs:annotation>\n        <xs:documentation>Prefix for targets/layout renderers/filters/conditions loaded from this assembly.</xs:documentation>\n      </xs:annotation>\n    </xs:attribute>\n    <xs:attribute name=\"assemblyFile\" type=\"xs:string\">\n      <xs:annotation>\n        <xs:documentation>Load NLog extensions from the specified file (*.dll)</xs:documentation>\n      </xs:annotation>\n    </xs:attribute>\n    <xs:attribute name=\"assembly\" type=\"xs:string\">\n      <xs:annotation>\n        <xs:documentation>Load NLog extensions from the specified assembly. Assembly name should be fully qualified.</xs:documentation>\n      </xs:annotation>\n    </xs:attribute>\n  </xs:complexType>\n  <xs:complexType name=\"NLogLoggerRule\">\n    <xs:choice minOccurs=\"0\" maxOccurs=\"unbounded\">\n      <xs:element name=\"filters\" type=\"NLogFilters\" />\n    </xs:choice>\n    <xs:attribute name=\"name\" use=\"optional\">\n      <xs:annotation>\n        <xs:documentation>Name of the logger. May include '*' character which acts like a wildcard. Allowed forms are: *, Name, *Name, Name* and *Name*</xs:documentation>\n      </xs:annotation>\n    </xs:attribute>\n    <xs:attribute name=\"levels\" type=\"NLogLevelList\">\n      <xs:annotation>\n        <xs:documentation>Comma separated list of levels that this rule matches.</xs:documentation>\n      </xs:annotation>\n    </xs:attribute>\n    <xs:attribute name=\"minlevel\" type=\"NLogLevel\">\n      <xs:annotation>\n        <xs:documentation>Minimum level that this rule matches.</xs:documentation>\n      </xs:annotation>\n    </xs:attribute>\n    <xs:attribute name=\"maxlevel\" type=\"NLogLevel\">\n      <xs:annotation>\n        <xs:documentation>Maximum level that this rule matches.</xs:documentation>\n      </xs:annotation>\n    </xs:attribute>\n    <xs:attribute name=\"level\" type=\"NLogLevel\">\n      <xs:annotation>\n        <xs:documentation>Level that this rule matches.</xs:documentation>\n      </xs:annotation>\n    </xs:attribute>\n    <xs:attribute name=\"writeTo\" type=\"NLogTargetIDList\">\n      <xs:annotation>\n        <xs:documentation>Comma separated list of target names.</xs:documentation>\n      </xs:annotation>\n    </xs:attribute>\n    <xs:attribute name=\"final\" type=\"xs:boolean\" default=\"false\">\n      <xs:annotation>\n        <xs:documentation>Ignore further rules if this one matches.</xs:documentation>\n      </xs:annotation>\n    </xs:attribute>\n    <xs:attribute name=\"enabled\" type=\"xs:boolean\" default=\"true\">\n      <xs:annotation>\n        <xs:documentation>Enable or disable logging rule. Disabled rules are ignored.</xs:documentation>\n      </xs:annotation>\n    </xs:attribute>\n  </xs:complexType>\n  <xs:complexType name=\"NLogFilters\">\n    <xs:choice minOccurs=\"0\" maxOccurs=\"unbounded\">\n      <xs:element name=\"when\" type=\"when\" />\n      <xs:element name=\"whenContains\" type=\"whenContains\" />\n      <xs:element name=\"whenEqual\" type=\"whenEqual\" />\n      <xs:element name=\"whenNotContains\" type=\"whenNotContains\" />\n      <xs:element name=\"whenNotEqual\" type=\"whenNotEqual\" />\n      <xs:element name=\"whenRepeated\" type=\"whenRepeated\" />\n    </xs:choice>\n  </xs:complexType>\n  <xs:simpleType name=\"NLogLevel\">\n    <xs:restriction base=\"xs:string\">\n      <xs:enumeration value=\"Off\" />\n      <xs:enumeration value=\"Trace\" />\n      <xs:enumeration value=\"Debug\" />\n      <xs:enumeration value=\"Info\" />\n      <xs:enumeration value=\"Warn\" />\n      <xs:enumeration value=\"Error\" />\n      <xs:enumeration value=\"Fatal\" />\n    </xs:restriction>\n  </xs:simpleType>\n  <xs:simpleType name=\"LineEndingMode\">\n    <xs:restriction base=\"xs:string\">\n      <xs:enumeration value=\"Default\" />\n      <xs:enumeration value=\"CRLF\" />\n      <xs:enumeration value=\"CR\" />\n      <xs:enumeration value=\"LF\" />\n      <xs:enumeration value=\"None\" />\n    </xs:restriction>\n  </xs:simpleType>\n  <xs:simpleType name=\"NLogLevelList\">\n    <xs:restriction base=\"xs:string\">\n      <xs:pattern value=\"(|Trace|Debug|Info|Warn|Error|Fatal)(,(Trace|Debug|Info|Warn|Error|Fatal))*\" />\n    </xs:restriction>\n  </xs:simpleType>\n  <xs:complexType name=\"NLogInclude\">\n    <xs:attribute name=\"file\" type=\"SimpleLayoutAttribute\" use=\"required\">\n      <xs:annotation>\n        <xs:documentation>Name of the file to be included. You could use * wildcard. The name is relative to the name of the current config file.</xs:documentation>\n      </xs:annotation>\n    </xs:attribute>\n    <xs:attribute name=\"ignoreErrors\" type=\"xs:boolean\" use=\"optional\" default=\"false\">\n      <xs:annotation>\n        <xs:documentation>Ignore any errors in the include file.</xs:documentation>\n      </xs:annotation>\n    </xs:attribute>\n  </xs:complexType>\n  <xs:complexType name=\"NLogVariable\">\n    <xs:attribute name=\"name\" type=\"xs:string\" use=\"required\">\n      <xs:annotation>\n        <xs:documentation>Variable name.</xs:documentation>\n      </xs:annotation>\n    </xs:attribute>\n    <xs:attribute name=\"value\" type=\"SimpleLayoutAttribute\" use=\"required\">\n      <xs:annotation>\n        <xs:documentation>Variable value.</xs:documentation>\n      </xs:annotation>\n    </xs:attribute>\n  </xs:complexType>\n  <xs:simpleType name=\"NLogTargetIDList\">\n    <xs:restriction base=\"xs:string\">\n      <xs:pattern value=\"(|([a-zA-Z][a-zA-Z0-9_\\-]*))(,([a-zA-Z][a-zA-Z0-9_\\-]*))*\" />\n    </xs:restriction>\n  </xs:simpleType>\n  <xs:complexType name=\"Target\" abstract=\"true\"></xs:complexType>\n  <xs:complexType name=\"TargetRef\">\n    <xs:attribute name=\"name\" type=\"xs:string\" use=\"required\" />\n  </xs:complexType>\n  <xs:complexType name=\"WrapperTargetBase\" abstract=\"true\">\n    <xs:complexContent>\n      <xs:extension base=\"Target\">\n        <xs:choice minOccurs=\"0\" maxOccurs=\"unbounded\">\n          <xs:element name=\"target\" type=\"Target\" minOccurs=\"1\" maxOccurs=\"1\" />\n          <xs:element name=\"wrapper-target\" type=\"WrapperTargetBase\" minOccurs=\"1\" maxOccurs=\"1\" />\n          <xs:element name=\"compound-target\" type=\"CompoundTargetBase\" minOccurs=\"1\" maxOccurs=\"1\" />\n          <xs:element name=\"target-ref\" type=\"TargetRef\" minOccurs=\"1\" maxOccurs=\"1\" />\n          <xs:element name=\"wrapper-target-ref\" type=\"TargetRef\" minOccurs=\"1\" maxOccurs=\"1\" />\n          <xs:element name=\"compound-target-ref\" type=\"TargetRef\" minOccurs=\"1\" maxOccurs=\"1\" />\n        </xs:choice>\n      </xs:extension>\n    </xs:complexContent>\n  </xs:complexType>\n  <xs:complexType name=\"CompoundTargetBase\" abstract=\"true\">\n    <xs:complexContent>\n      <xs:extension base=\"Target\">\n        <xs:choice minOccurs=\"0\" maxOccurs=\"unbounded\">\n          <xs:element name=\"target\" type=\"Target\" minOccurs=\"1\" maxOccurs=\"unbounded\" />\n          <xs:element name=\"wrapper-target\" type=\"WrapperTargetBase\" minOccurs=\"1\" maxOccurs=\"1\" />\n          <xs:element name=\"compound-target\" type=\"CompoundTargetBase\" minOccurs=\"1\" maxOccurs=\"1\" />\n          <xs:element name=\"target-ref\" type=\"TargetRef\" minOccurs=\"1\" maxOccurs=\"1\" />\n          <xs:element name=\"wrapper-target-ref\" type=\"TargetRef\" minOccurs=\"1\" maxOccurs=\"1\" />\n          <xs:element name=\"compound-target-ref\" type=\"TargetRef\" minOccurs=\"1\" maxOccurs=\"1\" />\n        </xs:choice>\n      </xs:extension>\n    </xs:complexContent>\n  </xs:complexType>\n  <xs:complexType name=\"Filter\" abstract=\"true\"></xs:complexType>\n  <xs:complexType name=\"TimeSource\" abstract=\"true\"></xs:complexType>\n  <xs:simpleType name=\"SimpleLayoutAttribute\">\n    <xs:restriction base=\"xs:string\">\n      <xs:pattern value=\".*\" />\n    </xs:restriction>\n  </xs:simpleType>\n  <xs:simpleType name=\"Condition\">\n    <xs:restriction base=\"xs:string\">\n      <xs:minLength value=\"1\" />\n    </xs:restriction>\n  </xs:simpleType>\n  <xs:complexType name=\"AsyncWrapper\">\n    <xs:complexContent>\n      <xs:extension base=\"WrapperTargetBase\">\n        <xs:choice minOccurs=\"0\" maxOccurs=\"unbounded\">\n          <xs:element name=\"name\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:string\" />\n          <xs:element name=\"batchSize\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:integer\" />\n          <xs:element name=\"fullBatchSizeWriteLimit\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:integer\" />\n          <xs:element name=\"overflowAction\" minOccurs=\"0\" maxOccurs=\"1\" type=\"NLog.Targets.Wrappers.AsyncTargetWrapperOverflowAction\" />\n          <xs:element name=\"queueLimit\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:integer\" />\n          <xs:element name=\"timeToSleepBetweenBatches\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:integer\" />\n          <xs:element name=\"optimizeBufferReuse\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:boolean\" />\n        </xs:choice>\n        <xs:attribute name=\"name\" type=\"xs:string\">\n          <xs:annotation>\n            <xs:documentation>Name of the target.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"batchSize\" type=\"xs:integer\">\n          <xs:annotation>\n            <xs:documentation>Number of log events that should be processed in a batch by the lazy writer thread.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"fullBatchSizeWriteLimit\" type=\"xs:integer\">\n          <xs:annotation>\n            <xs:documentation>Limit of full s to write before yielding into  Performance is better when writing many small batches, than writing a single large batch</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"overflowAction\" type=\"NLog.Targets.Wrappers.AsyncTargetWrapperOverflowAction\">\n          <xs:annotation>\n            <xs:documentation>Action to be taken when the lazy writer thread request queue count exceeds the set limit.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"queueLimit\" type=\"xs:integer\">\n          <xs:annotation>\n            <xs:documentation>Limit on the number of requests in the lazy writer thread request queue.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"timeToSleepBetweenBatches\" type=\"xs:integer\">\n          <xs:annotation>\n            <xs:documentation>Time in milliseconds to sleep between batches.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"optimizeBufferReuse\" type=\"xs:boolean\">\n          <xs:annotation>\n            <xs:documentation>Target supports reuse of internal buffers, and doesn't have to constantly allocate new buffers Required for legacy NLog-targets, that expects buffers to remain stable after Write-method exit</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n      </xs:extension>\n    </xs:complexContent>\n  </xs:complexType>\n  <xs:simpleType name=\"NLog.Targets.Wrappers.AsyncTargetWrapperOverflowAction\">\n    <xs:restriction base=\"xs:string\">\n      <xs:enumeration value=\"Grow\" />\n      <xs:enumeration value=\"Discard\" />\n      <xs:enumeration value=\"Block\" />\n    </xs:restriction>\n  </xs:simpleType>\n  <xs:complexType name=\"AutoFlushWrapper\">\n    <xs:complexContent>\n      <xs:extension base=\"WrapperTargetBase\">\n        <xs:choice minOccurs=\"0\" maxOccurs=\"unbounded\">\n          <xs:element name=\"asyncFlush\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:boolean\" />\n          <xs:element name=\"condition\" minOccurs=\"0\" maxOccurs=\"1\" type=\"Condition\" />\n          <xs:element name=\"name\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:string\" />\n          <xs:element name=\"optimizeBufferReuse\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:boolean\" />\n        </xs:choice>\n        <xs:attribute name=\"asyncFlush\" type=\"xs:boolean\">\n          <xs:annotation>\n            <xs:documentation>Delay the flush until the LogEvent has been confirmed as written</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"condition\" type=\"Condition\">\n          <xs:annotation>\n            <xs:documentation>Condition expression. Log events who meet this condition will cause a flush on the wrapped target.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"name\" type=\"xs:string\">\n          <xs:annotation>\n            <xs:documentation>Name of the target.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"optimizeBufferReuse\" type=\"xs:boolean\">\n          <xs:annotation>\n            <xs:documentation>Target supports reuse of internal buffers, and doesn't have to constantly allocate new buffers Required for legacy NLog-targets, that expects buffers to remain stable after Write-method exit</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n      </xs:extension>\n    </xs:complexContent>\n  </xs:complexType>\n  <xs:complexType name=\"BufferingWrapper\">\n    <xs:complexContent>\n      <xs:extension base=\"WrapperTargetBase\">\n        <xs:choice minOccurs=\"0\" maxOccurs=\"unbounded\">\n          <xs:element name=\"name\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:string\" />\n          <xs:element name=\"bufferSize\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:integer\" />\n          <xs:element name=\"flushTimeout\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:integer\" />\n          <xs:element name=\"overflowAction\" minOccurs=\"0\" maxOccurs=\"1\" type=\"NLog.Targets.Wrappers.BufferingTargetWrapperOverflowAction\" />\n          <xs:element name=\"slidingTimeout\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:boolean\" />\n          <xs:element name=\"optimizeBufferReuse\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:boolean\" />\n        </xs:choice>\n        <xs:attribute name=\"name\" type=\"xs:string\">\n          <xs:annotation>\n            <xs:documentation>Name of the target.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"bufferSize\" type=\"xs:integer\">\n          <xs:annotation>\n            <xs:documentation>Number of log events to be buffered.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"flushTimeout\" type=\"xs:integer\">\n          <xs:annotation>\n            <xs:documentation>Timeout (in milliseconds) after which the contents of buffer will be flushed if there's no write in the specified period of time. Use -1 to disable timed flushes.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"overflowAction\" type=\"NLog.Targets.Wrappers.BufferingTargetWrapperOverflowAction\">\n          <xs:annotation>\n            <xs:documentation>Action to take if the buffer overflows.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"slidingTimeout\" type=\"xs:boolean\">\n          <xs:annotation>\n            <xs:documentation>Indicates whether to use sliding timeout.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"optimizeBufferReuse\" type=\"xs:boolean\">\n          <xs:annotation>\n            <xs:documentation>Target supports reuse of internal buffers, and doesn't have to constantly allocate new buffers Required for legacy NLog-targets, that expects buffers to remain stable after Write-method exit</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n      </xs:extension>\n    </xs:complexContent>\n  </xs:complexType>\n  <xs:simpleType name=\"NLog.Targets.Wrappers.BufferingTargetWrapperOverflowAction\">\n    <xs:restriction base=\"xs:string\">\n      <xs:enumeration value=\"Flush\" />\n      <xs:enumeration value=\"Discard\" />\n    </xs:restriction>\n  </xs:simpleType>\n  <xs:complexType name=\"Chainsaw\">\n    <xs:complexContent>\n      <xs:extension base=\"Target\">\n        <xs:choice minOccurs=\"0\" maxOccurs=\"unbounded\">\n          <xs:element name=\"name\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:string\" />\n          <xs:element name=\"encoding\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:string\" />\n          <xs:element name=\"layout\" minOccurs=\"0\" maxOccurs=\"1\" type=\"Layout\" />\n          <xs:element name=\"lineEnding\" minOccurs=\"0\" maxOccurs=\"1\" type=\"LineEndingMode\" />\n          <xs:element name=\"maxMessageSize\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:integer\" />\n          <xs:element name=\"newLine\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:boolean\" />\n          <xs:element name=\"onConnectionOverflow\" minOccurs=\"0\" maxOccurs=\"1\" type=\"NLog.Targets.NetworkTargetConnectionsOverflowAction\" />\n          <xs:element name=\"maxQueueSize\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:integer\" />\n          <xs:element name=\"maxConnections\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:integer\" />\n          <xs:element name=\"keepConnection\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:boolean\" />\n          <xs:element name=\"connectionCacheSize\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:integer\" />\n          <xs:element name=\"address\" minOccurs=\"0\" maxOccurs=\"1\" type=\"Layout\" />\n          <xs:element name=\"onOverflow\" minOccurs=\"0\" maxOccurs=\"1\" type=\"NLog.Targets.NetworkTargetOverflowAction\" />\n          <xs:element name=\"parameter\" minOccurs=\"0\" maxOccurs=\"unbounded\" type=\"NLog.Targets.NLogViewerParameterInfo\" />\n          <xs:element name=\"ndlcItemSeparator\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:string\" />\n          <xs:element name=\"ndcItemSeparator\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:string\" />\n          <xs:element name=\"includeNLogData\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:boolean\" />\n          <xs:element name=\"includeSourceInfo\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:boolean\" />\n          <xs:element name=\"includeNdlc\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:boolean\" />\n          <xs:element name=\"includeNdc\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:boolean\" />\n          <xs:element name=\"includeMdlc\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:boolean\" />\n          <xs:element name=\"includeMdc\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:boolean\" />\n          <xs:element name=\"includeCallSite\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:boolean\" />\n          <xs:element name=\"includeAllProperties\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:boolean\" />\n          <xs:element name=\"appInfo\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:string\" />\n          <xs:element name=\"loggerName\" minOccurs=\"0\" maxOccurs=\"1\" type=\"Layout\" />\n          <xs:element name=\"optimizeBufferReuse\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:boolean\" />\n        </xs:choice>\n        <xs:attribute name=\"name\" type=\"xs:string\">\n          <xs:annotation>\n            <xs:documentation>Name of the target.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"encoding\" type=\"xs:string\">\n          <xs:annotation>\n            <xs:documentation>Encoding to be used.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"layout\" type=\"SimpleLayoutAttribute\">\n          <xs:annotation>\n            <xs:documentation>Instance of  that is used to format log messages.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"lineEnding\" type=\"LineEndingMode\">\n          <xs:annotation>\n            <xs:documentation>End of line value if a newline is appended at the end of log message .</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"maxMessageSize\" type=\"xs:integer\">\n          <xs:annotation>\n            <xs:documentation>Maximum message size in bytes.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"newLine\" type=\"xs:boolean\">\n          <xs:annotation>\n            <xs:documentation>Indicates whether to append newline at the end of log message.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"onConnectionOverflow\" type=\"NLog.Targets.NetworkTargetConnectionsOverflowAction\">\n          <xs:annotation>\n            <xs:documentation>Action that should be taken if the will be more connections than .</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"maxQueueSize\" type=\"xs:integer\">\n          <xs:annotation>\n            <xs:documentation>Maximum queue size.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"maxConnections\" type=\"xs:integer\">\n          <xs:annotation>\n            <xs:documentation>Maximum current connections. 0 = no maximum.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"keepConnection\" type=\"xs:boolean\">\n          <xs:annotation>\n            <xs:documentation>Indicates whether to keep connection open whenever possible.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"connectionCacheSize\" type=\"xs:integer\">\n          <xs:annotation>\n            <xs:documentation>Size of the connection cache (number of connections which are kept alive).</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"address\" type=\"SimpleLayoutAttribute\">\n          <xs:annotation>\n            <xs:documentation>Network address.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"onOverflow\" type=\"NLog.Targets.NetworkTargetOverflowAction\">\n          <xs:annotation>\n            <xs:documentation>Action that should be taken if the message is larger than maxMessageSize.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"ndlcItemSeparator\" type=\"xs:string\">\n          <xs:annotation>\n            <xs:documentation>NDLC item separator.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"ndcItemSeparator\" type=\"xs:string\">\n          <xs:annotation>\n            <xs:documentation>NDC item separator.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"includeNLogData\" type=\"xs:boolean\">\n          <xs:annotation>\n            <xs:documentation>Indicates whether to include NLog-specific extensions to log4j schema.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"includeSourceInfo\" type=\"xs:boolean\">\n          <xs:annotation>\n            <xs:documentation>Indicates whether to include source info (file name and line number) in the information sent over the network.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"includeNdlc\" type=\"xs:boolean\">\n          <xs:annotation>\n            <xs:documentation>Indicates whether to include contents of the  stack.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"includeNdc\" type=\"xs:boolean\">\n          <xs:annotation>\n            <xs:documentation>Indicates whether to include  stack contents.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"includeMdlc\" type=\"xs:boolean\">\n          <xs:annotation>\n            <xs:documentation>Indicates whether to include  dictionary contents.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"includeMdc\" type=\"xs:boolean\">\n          <xs:annotation>\n            <xs:documentation>Indicates whether to include  dictionary contents.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"includeCallSite\" type=\"xs:boolean\">\n          <xs:annotation>\n            <xs:documentation>Indicates whether to include call site (class and method name) in the information sent over the network.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"includeAllProperties\" type=\"xs:boolean\">\n          <xs:annotation>\n            <xs:documentation>Option to include all properties from the log events</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"appInfo\" type=\"xs:string\">\n          <xs:annotation>\n            <xs:documentation>AppInfo field. By default it's the friendly name of the current AppDomain.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"loggerName\" type=\"SimpleLayoutAttribute\">\n          <xs:annotation>\n            <xs:documentation>Renderer for log4j:event logger-xml-attribute (Default ${logger})</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"optimizeBufferReuse\" type=\"xs:boolean\">\n          <xs:annotation>\n            <xs:documentation>Target supports reuse of internal buffers, and doesn't have to constantly allocate new buffers Required for legacy NLog-targets, that expects buffers to remain stable after Write-method exit</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n      </xs:extension>\n    </xs:complexContent>\n  </xs:complexType>\n  <xs:simpleType name=\"NLog.Targets.NetworkTargetConnectionsOverflowAction\">\n    <xs:restriction base=\"xs:string\">\n      <xs:enumeration value=\"AllowNewConnnection\" />\n      <xs:enumeration value=\"DiscardMessage\" />\n      <xs:enumeration value=\"Block\" />\n    </xs:restriction>\n  </xs:simpleType>\n  <xs:simpleType name=\"NLog.Targets.NetworkTargetOverflowAction\">\n    <xs:restriction base=\"xs:string\">\n      <xs:enumeration value=\"Error\" />\n      <xs:enumeration value=\"Split\" />\n      <xs:enumeration value=\"Discard\" />\n    </xs:restriction>\n  </xs:simpleType>\n  <xs:complexType name=\"NLog.Targets.NLogViewerParameterInfo\">\n    <xs:choice minOccurs=\"0\" maxOccurs=\"unbounded\">\n      <xs:element name=\"layout\" minOccurs=\"0\" maxOccurs=\"1\" type=\"Layout\" />\n      <xs:element name=\"name\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:string\" />\n    </xs:choice>\n    <xs:attribute name=\"layout\" type=\"SimpleLayoutAttribute\">\n      <xs:annotation>\n        <xs:documentation>Layout that should be use to calcuate the value for the parameter.</xs:documentation>\n      </xs:annotation>\n    </xs:attribute>\n    <xs:attribute name=\"name\" type=\"xs:string\">\n      <xs:annotation>\n        <xs:documentation>Viewer parameter name.</xs:documentation>\n      </xs:annotation>\n    </xs:attribute>\n  </xs:complexType>\n  <xs:complexType name=\"ColoredConsole\">\n    <xs:complexContent>\n      <xs:extension base=\"Target\">\n        <xs:choice minOccurs=\"0\" maxOccurs=\"unbounded\">\n          <xs:element name=\"name\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:string\" />\n          <xs:element name=\"layout\" minOccurs=\"0\" maxOccurs=\"1\" type=\"Layout\" />\n          <xs:element name=\"header\" minOccurs=\"0\" maxOccurs=\"1\" type=\"Layout\" />\n          <xs:element name=\"footer\" minOccurs=\"0\" maxOccurs=\"1\" type=\"Layout\" />\n          <xs:element name=\"detectConsoleAvailable\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:boolean\" />\n          <xs:element name=\"encoding\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:string\" />\n          <xs:element name=\"errorStream\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:boolean\" />\n          <xs:element name=\"useDefaultRowHighlightingRules\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:boolean\" />\n          <xs:element name=\"highlight-row\" minOccurs=\"0\" maxOccurs=\"unbounded\" type=\"NLog.Targets.ConsoleRowHighlightingRule\" />\n          <xs:element name=\"highlight-word\" minOccurs=\"0\" maxOccurs=\"unbounded\" type=\"NLog.Targets.ConsoleWordHighlightingRule\" />\n          <xs:element name=\"optimizeBufferReuse\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:boolean\" />\n        </xs:choice>\n        <xs:attribute name=\"name\" type=\"xs:string\">\n          <xs:annotation>\n            <xs:documentation>Name of the target.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"layout\" type=\"SimpleLayoutAttribute\">\n          <xs:annotation>\n            <xs:documentation>Text to be rendered.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"header\" type=\"SimpleLayoutAttribute\">\n          <xs:annotation>\n            <xs:documentation>Header.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"footer\" type=\"SimpleLayoutAttribute\">\n          <xs:annotation>\n            <xs:documentation>Footer.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"detectConsoleAvailable\" type=\"xs:boolean\">\n          <xs:annotation>\n            <xs:documentation>Indicates whether to auto-check if the console is available. - Disables console writing if Environment.UserInteractive = False (Windows Service) - Disables console writing if Console Standard Input is not available (Non-Console-App)</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"encoding\" type=\"xs:string\">\n          <xs:annotation>\n            <xs:documentation>The encoding for writing messages to the .</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"errorStream\" type=\"xs:boolean\">\n          <xs:annotation>\n            <xs:documentation>Indicates whether the error stream (stderr) should be used instead of the output stream (stdout).</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"useDefaultRowHighlightingRules\" type=\"xs:boolean\">\n          <xs:annotation>\n            <xs:documentation>Indicates whether to use default row highlighting rules.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"optimizeBufferReuse\" type=\"xs:boolean\">\n          <xs:annotation>\n            <xs:documentation>Target supports reuse of internal buffers, and doesn't have to constantly allocate new buffers Required for legacy NLog-targets, that expects buffers to remain stable after Write-method exit</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n      </xs:extension>\n    </xs:complexContent>\n  </xs:complexType>\n  <xs:simpleType name=\"NLog.Targets.ConsoleOutputColor\">\n    <xs:restriction base=\"xs:string\">\n      <xs:enumeration value=\"Black\" />\n      <xs:enumeration value=\"DarkBlue\" />\n      <xs:enumeration value=\"DarkGreen\" />\n      <xs:enumeration value=\"DarkCyan\" />\n      <xs:enumeration value=\"DarkRed\" />\n      <xs:enumeration value=\"DarkMagenta\" />\n      <xs:enumeration value=\"DarkYellow\" />\n      <xs:enumeration value=\"Gray\" />\n      <xs:enumeration value=\"DarkGray\" />\n      <xs:enumeration value=\"Blue\" />\n      <xs:enumeration value=\"Green\" />\n      <xs:enumeration value=\"Cyan\" />\n      <xs:enumeration value=\"Red\" />\n      <xs:enumeration value=\"Magenta\" />\n      <xs:enumeration value=\"Yellow\" />\n      <xs:enumeration value=\"White\" />\n      <xs:enumeration value=\"NoChange\" />\n    </xs:restriction>\n  </xs:simpleType>\n  <xs:complexType name=\"NLog.Targets.ConsoleRowHighlightingRule\">\n    <xs:choice minOccurs=\"0\" maxOccurs=\"unbounded\">\n      <xs:element name=\"condition\" minOccurs=\"0\" maxOccurs=\"1\" type=\"Condition\" />\n      <xs:element name=\"backgroundColor\" minOccurs=\"0\" maxOccurs=\"1\" type=\"NLog.Targets.ConsoleOutputColor\" />\n      <xs:element name=\"foregroundColor\" minOccurs=\"0\" maxOccurs=\"1\" type=\"NLog.Targets.ConsoleOutputColor\" />\n    </xs:choice>\n    <xs:attribute name=\"condition\" type=\"Condition\">\n      <xs:annotation>\n        <xs:documentation>Condition that must be met in order to set the specified foreground and background color.</xs:documentation>\n      </xs:annotation>\n    </xs:attribute>\n    <xs:attribute name=\"backgroundColor\" type=\"NLog.Targets.ConsoleOutputColor\">\n      <xs:annotation>\n        <xs:documentation>Background color.</xs:documentation>\n      </xs:annotation>\n    </xs:attribute>\n    <xs:attribute name=\"foregroundColor\" type=\"NLog.Targets.ConsoleOutputColor\">\n      <xs:annotation>\n        <xs:documentation>Foreground color.</xs:documentation>\n      </xs:annotation>\n    </xs:attribute>\n  </xs:complexType>\n  <xs:complexType name=\"NLog.Targets.ConsoleWordHighlightingRule\">\n    <xs:choice minOccurs=\"0\" maxOccurs=\"unbounded\">\n      <xs:element name=\"compileRegex\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:boolean\" />\n      <xs:element name=\"ignoreCase\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:boolean\" />\n      <xs:element name=\"regex\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:string\" />\n      <xs:element name=\"text\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:string\" />\n      <xs:element name=\"wholeWords\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:boolean\" />\n      <xs:element name=\"backgroundColor\" minOccurs=\"0\" maxOccurs=\"1\" type=\"NLog.Targets.ConsoleOutputColor\" />\n      <xs:element name=\"foregroundColor\" minOccurs=\"0\" maxOccurs=\"1\" type=\"NLog.Targets.ConsoleOutputColor\" />\n    </xs:choice>\n    <xs:attribute name=\"compileRegex\" type=\"xs:boolean\">\n      <xs:annotation>\n        <xs:documentation>Compile the ? This can improve the performance, but at the costs of more memory usage. If false, the Regex Cache is used.</xs:documentation>\n      </xs:annotation>\n    </xs:attribute>\n    <xs:attribute name=\"ignoreCase\" type=\"xs:boolean\">\n      <xs:annotation>\n        <xs:documentation>Indicates whether to ignore case when comparing texts.</xs:documentation>\n      </xs:annotation>\n    </xs:attribute>\n    <xs:attribute name=\"regex\" type=\"xs:string\">\n      <xs:annotation>\n        <xs:documentation>Regular expression to be matched. You must specify either text or regex.</xs:documentation>\n      </xs:annotation>\n    </xs:attribute>\n    <xs:attribute name=\"text\" type=\"xs:string\">\n      <xs:annotation>\n        <xs:documentation>Text to be matched. You must specify either text or regex.</xs:documentation>\n      </xs:annotation>\n    </xs:attribute>\n    <xs:attribute name=\"wholeWords\" type=\"xs:boolean\">\n      <xs:annotation>\n        <xs:documentation>Indicates whether to match whole words only.</xs:documentation>\n      </xs:annotation>\n    </xs:attribute>\n    <xs:attribute name=\"backgroundColor\" type=\"NLog.Targets.ConsoleOutputColor\">\n      <xs:annotation>\n        <xs:documentation>Background color.</xs:documentation>\n      </xs:annotation>\n    </xs:attribute>\n    <xs:attribute name=\"foregroundColor\" type=\"NLog.Targets.ConsoleOutputColor\">\n      <xs:annotation>\n        <xs:documentation>Foreground color.</xs:documentation>\n      </xs:annotation>\n    </xs:attribute>\n  </xs:complexType>\n  <xs:complexType name=\"Console\">\n    <xs:complexContent>\n      <xs:extension base=\"Target\">\n        <xs:choice minOccurs=\"0\" maxOccurs=\"unbounded\">\n          <xs:element name=\"name\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:string\" />\n          <xs:element name=\"layout\" minOccurs=\"0\" maxOccurs=\"1\" type=\"Layout\" />\n          <xs:element name=\"header\" minOccurs=\"0\" maxOccurs=\"1\" type=\"Layout\" />\n          <xs:element name=\"footer\" minOccurs=\"0\" maxOccurs=\"1\" type=\"Layout\" />\n          <xs:element name=\"detectConsoleAvailable\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:boolean\" />\n          <xs:element name=\"encoding\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:string\" />\n          <xs:element name=\"error\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:boolean\" />\n          <xs:element name=\"optimizeBufferReuse\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:boolean\" />\n        </xs:choice>\n        <xs:attribute name=\"name\" type=\"xs:string\">\n          <xs:annotation>\n            <xs:documentation>Name of the target.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"layout\" type=\"SimpleLayoutAttribute\">\n          <xs:annotation>\n            <xs:documentation>Text to be rendered.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"header\" type=\"SimpleLayoutAttribute\">\n          <xs:annotation>\n            <xs:documentation>Header.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"footer\" type=\"SimpleLayoutAttribute\">\n          <xs:annotation>\n            <xs:documentation>Footer.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"detectConsoleAvailable\" type=\"xs:boolean\">\n          <xs:annotation>\n            <xs:documentation>Indicates whether to auto-check if the console is available - Disables console writing if Environment.UserInteractive = False (Windows Service) - Disables console writing if Console Standard Input is not available (Non-Console-App)</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"encoding\" type=\"xs:string\">\n          <xs:annotation>\n            <xs:documentation>The encoding for writing messages to the .</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"error\" type=\"xs:boolean\">\n          <xs:annotation>\n            <xs:documentation>Indicates whether to send the log messages to the standard error instead of the standard output.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"optimizeBufferReuse\" type=\"xs:boolean\">\n          <xs:annotation>\n            <xs:documentation>Target supports reuse of internal buffers, and doesn't have to constantly allocate new buffers Required for legacy NLog-targets, that expects buffers to remain stable after Write-method exit</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n      </xs:extension>\n    </xs:complexContent>\n  </xs:complexType>\n  <xs:complexType name=\"Database\">\n    <xs:complexContent>\n      <xs:extension base=\"Target\">\n        <xs:choice minOccurs=\"0\" maxOccurs=\"unbounded\">\n          <xs:element name=\"name\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:string\" />\n          <xs:element name=\"useTransactions\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:boolean\" />\n          <xs:element name=\"dbUserName\" minOccurs=\"0\" maxOccurs=\"1\" type=\"Layout\" />\n          <xs:element name=\"dbProvider\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:string\" />\n          <xs:element name=\"dbPassword\" minOccurs=\"0\" maxOccurs=\"1\" type=\"Layout\" />\n          <xs:element name=\"keepConnection\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:boolean\" />\n          <xs:element name=\"dbDatabase\" minOccurs=\"0\" maxOccurs=\"1\" type=\"Layout\" />\n          <xs:element name=\"connectionStringName\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:string\" />\n          <xs:element name=\"connectionString\" minOccurs=\"0\" maxOccurs=\"1\" type=\"Layout\" />\n          <xs:element name=\"dbHost\" minOccurs=\"0\" maxOccurs=\"1\" type=\"Layout\" />\n          <xs:element name=\"installConnectionString\" minOccurs=\"0\" maxOccurs=\"1\" type=\"Layout\" />\n          <xs:element name=\"install-command\" minOccurs=\"0\" maxOccurs=\"unbounded\" type=\"NLog.Targets.DatabaseCommandInfo\" />\n          <xs:element name=\"uninstall-command\" minOccurs=\"0\" maxOccurs=\"unbounded\" type=\"NLog.Targets.DatabaseCommandInfo\" />\n          <xs:element name=\"optimizeBufferReuse\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:boolean\" />\n          <xs:element name=\"parameter\" minOccurs=\"0\" maxOccurs=\"unbounded\" type=\"NLog.Targets.DatabaseParameterInfo\" />\n          <xs:element name=\"commandText\" minOccurs=\"0\" maxOccurs=\"1\" type=\"Layout\" />\n          <xs:element name=\"commandType\" minOccurs=\"0\" maxOccurs=\"1\" type=\"System.Data.CommandType\" />\n        </xs:choice>\n        <xs:attribute name=\"name\" type=\"xs:string\">\n          <xs:annotation>\n            <xs:documentation>Name of the target.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"useTransactions\" type=\"xs:boolean\">\n          <xs:annotation>\n            <xs:documentation>Obsolete - value will be ignored! The logging code always runs outside of transaction. Gets or sets a value indicating whether to use database transactions. Some data providers require this.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"dbUserName\" type=\"SimpleLayoutAttribute\">\n          <xs:annotation>\n            <xs:documentation>Database user name. If the ConnectionString is not provided this value will be used to construct the \"User ID=\" part of the connection string.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"dbProvider\" type=\"xs:string\">\n          <xs:annotation>\n            <xs:documentation>Name of the database provider.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"dbPassword\" type=\"SimpleLayoutAttribute\">\n          <xs:annotation>\n            <xs:documentation>Database password. If the ConnectionString is not provided this value will be used to construct the \"Password=\" part of the connection string.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"keepConnection\" type=\"xs:boolean\">\n          <xs:annotation>\n            <xs:documentation>Indicates whether to keep the database connection open between the log events.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"dbDatabase\" type=\"SimpleLayoutAttribute\">\n          <xs:annotation>\n            <xs:documentation>Database name. If the ConnectionString is not provided this value will be used to construct the \"Database=\" part of the connection string.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"connectionStringName\" type=\"xs:string\">\n          <xs:annotation>\n            <xs:documentation>Name of the connection string (as specified in &lt;connectionStrings&gt; configuration section.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"connectionString\" type=\"SimpleLayoutAttribute\">\n          <xs:annotation>\n            <xs:documentation>Connection string. When provided, it overrides the values specified in DBHost, DBUserName, DBPassword, DBDatabase.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"dbHost\" type=\"SimpleLayoutAttribute\">\n          <xs:annotation>\n            <xs:documentation>Database host name. If the ConnectionString is not provided this value will be used to construct the \"Server=\" part of the connection string.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"installConnectionString\" type=\"SimpleLayoutAttribute\">\n          <xs:annotation>\n            <xs:documentation>Connection string using for installation and uninstallation. If not provided, regular ConnectionString is being used.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"optimizeBufferReuse\" type=\"xs:boolean\">\n          <xs:annotation>\n            <xs:documentation>Target supports reuse of internal buffers, and doesn't have to constantly allocate new buffers Required for legacy NLog-targets, that expects buffers to remain stable after Write-method exit</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"commandText\" type=\"SimpleLayoutAttribute\">\n          <xs:annotation>\n            <xs:documentation>Text of the SQL command to be run on each log level.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"commandType\" type=\"System.Data.CommandType\">\n          <xs:annotation>\n            <xs:documentation>Type of the SQL command to be run on each log level.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n      </xs:extension>\n    </xs:complexContent>\n  </xs:complexType>\n  <xs:simpleType name=\"System.Data.CommandType\">\n    <xs:restriction base=\"xs:string\">\n      <xs:enumeration value=\"Text\" />\n      <xs:enumeration value=\"StoredProcedure\" />\n      <xs:enumeration value=\"TableDirect\" />\n    </xs:restriction>\n  </xs:simpleType>\n  <xs:complexType name=\"NLog.Targets.DatabaseCommandInfo\">\n    <xs:choice minOccurs=\"0\" maxOccurs=\"unbounded\">\n      <xs:element name=\"commandType\" minOccurs=\"0\" maxOccurs=\"1\" type=\"System.Data.CommandType\" />\n      <xs:element name=\"connectionString\" minOccurs=\"0\" maxOccurs=\"1\" type=\"Layout\" />\n      <xs:element name=\"ignoreFailures\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:boolean\" />\n      <xs:element name=\"parameter\" minOccurs=\"0\" maxOccurs=\"unbounded\" type=\"NLog.Targets.DatabaseParameterInfo\" />\n      <xs:element name=\"text\" minOccurs=\"0\" maxOccurs=\"1\" type=\"Layout\" />\n    </xs:choice>\n    <xs:attribute name=\"commandType\" type=\"System.Data.CommandType\">\n      <xs:annotation>\n        <xs:documentation>Type of the command.</xs:documentation>\n      </xs:annotation>\n    </xs:attribute>\n    <xs:attribute name=\"connectionString\" type=\"SimpleLayoutAttribute\">\n      <xs:annotation>\n        <xs:documentation>Connection string to run the command against. If not provided, connection string from the target is used.</xs:documentation>\n      </xs:annotation>\n    </xs:attribute>\n    <xs:attribute name=\"ignoreFailures\" type=\"xs:boolean\">\n      <xs:annotation>\n        <xs:documentation>Indicates whether to ignore failures.</xs:documentation>\n      </xs:annotation>\n    </xs:attribute>\n    <xs:attribute name=\"text\" type=\"SimpleLayoutAttribute\">\n      <xs:annotation>\n        <xs:documentation>Command text.</xs:documentation>\n      </xs:annotation>\n    </xs:attribute>\n  </xs:complexType>\n  <xs:complexType name=\"NLog.Targets.DatabaseParameterInfo\">\n    <xs:choice minOccurs=\"0\" maxOccurs=\"unbounded\">\n      <xs:element name=\"layout\" minOccurs=\"0\" maxOccurs=\"1\" type=\"Layout\" />\n      <xs:element name=\"name\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:string\" />\n      <xs:element name=\"precision\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:byte\" />\n      <xs:element name=\"scale\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:byte\" />\n      <xs:element name=\"size\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:integer\" />\n    </xs:choice>\n    <xs:attribute name=\"layout\" type=\"SimpleLayoutAttribute\">\n      <xs:annotation>\n        <xs:documentation>Layout that should be use to calcuate the value for the parameter.</xs:documentation>\n      </xs:annotation>\n    </xs:attribute>\n    <xs:attribute name=\"name\" type=\"xs:string\">\n      <xs:annotation>\n        <xs:documentation>Database parameter name.</xs:documentation>\n      </xs:annotation>\n    </xs:attribute>\n    <xs:attribute name=\"precision\" type=\"xs:byte\">\n      <xs:annotation>\n        <xs:documentation>Database parameter precision.</xs:documentation>\n      </xs:annotation>\n    </xs:attribute>\n    <xs:attribute name=\"scale\" type=\"xs:byte\">\n      <xs:annotation>\n        <xs:documentation>Database parameter scale.</xs:documentation>\n      </xs:annotation>\n    </xs:attribute>\n    <xs:attribute name=\"size\" type=\"xs:integer\">\n      <xs:annotation>\n        <xs:documentation>Database parameter size.</xs:documentation>\n      </xs:annotation>\n    </xs:attribute>\n  </xs:complexType>\n  <xs:complexType name=\"Debugger\">\n    <xs:complexContent>\n      <xs:extension base=\"Target\">\n        <xs:choice minOccurs=\"0\" maxOccurs=\"unbounded\">\n          <xs:element name=\"name\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:string\" />\n          <xs:element name=\"layout\" minOccurs=\"0\" maxOccurs=\"1\" type=\"Layout\" />\n          <xs:element name=\"header\" minOccurs=\"0\" maxOccurs=\"1\" type=\"Layout\" />\n          <xs:element name=\"footer\" minOccurs=\"0\" maxOccurs=\"1\" type=\"Layout\" />\n          <xs:element name=\"optimizeBufferReuse\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:boolean\" />\n        </xs:choice>\n        <xs:attribute name=\"name\" type=\"xs:string\">\n          <xs:annotation>\n            <xs:documentation>Name of the target.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"layout\" type=\"SimpleLayoutAttribute\">\n          <xs:annotation>\n            <xs:documentation>Text to be rendered.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"header\" type=\"SimpleLayoutAttribute\">\n          <xs:annotation>\n            <xs:documentation>Header.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"footer\" type=\"SimpleLayoutAttribute\">\n          <xs:annotation>\n            <xs:documentation>Footer.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"optimizeBufferReuse\" type=\"xs:boolean\">\n          <xs:annotation>\n            <xs:documentation>Target supports reuse of internal buffers, and doesn't have to constantly allocate new buffers Required for legacy NLog-targets, that expects buffers to remain stable after Write-method exit</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n      </xs:extension>\n    </xs:complexContent>\n  </xs:complexType>\n  <xs:complexType name=\"Debug\">\n    <xs:complexContent>\n      <xs:extension base=\"Target\">\n        <xs:choice minOccurs=\"0\" maxOccurs=\"unbounded\">\n          <xs:element name=\"name\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:string\" />\n          <xs:element name=\"layout\" minOccurs=\"0\" maxOccurs=\"1\" type=\"Layout\" />\n          <xs:element name=\"optimizeBufferReuse\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:boolean\" />\n        </xs:choice>\n        <xs:attribute name=\"name\" type=\"xs:string\">\n          <xs:annotation>\n            <xs:documentation>Name of the target.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"layout\" type=\"SimpleLayoutAttribute\">\n          <xs:annotation>\n            <xs:documentation>Layout used to format log messages.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"optimizeBufferReuse\" type=\"xs:boolean\">\n          <xs:annotation>\n            <xs:documentation>Target supports reuse of internal buffers, and doesn't have to constantly allocate new buffers Required for legacy NLog-targets, that expects buffers to remain stable after Write-method exit</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n      </xs:extension>\n    </xs:complexContent>\n  </xs:complexType>\n  <xs:complexType name=\"EventLog\">\n    <xs:complexContent>\n      <xs:extension base=\"Target\">\n        <xs:choice minOccurs=\"0\" maxOccurs=\"unbounded\">\n          <xs:element name=\"name\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:string\" />\n          <xs:element name=\"layout\" minOccurs=\"0\" maxOccurs=\"1\" type=\"Layout\" />\n          <xs:element name=\"category\" minOccurs=\"0\" maxOccurs=\"1\" type=\"Layout\" />\n          <xs:element name=\"entryType\" minOccurs=\"0\" maxOccurs=\"1\" type=\"Layout\" />\n          <xs:element name=\"eventId\" minOccurs=\"0\" maxOccurs=\"1\" type=\"Layout\" />\n          <xs:element name=\"log\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:string\" />\n          <xs:element name=\"machineName\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:string\" />\n          <xs:element name=\"maxKilobytes\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:long\" />\n          <xs:element name=\"maxMessageLength\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:integer\" />\n          <xs:element name=\"source\" minOccurs=\"0\" maxOccurs=\"1\" type=\"Layout\" />\n          <xs:element name=\"onOverflow\" minOccurs=\"0\" maxOccurs=\"1\" type=\"NLog.Targets.EventLogTargetOverflowAction\" />\n          <xs:element name=\"optimizeBufferReuse\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:boolean\" />\n        </xs:choice>\n        <xs:attribute name=\"name\" type=\"xs:string\">\n          <xs:annotation>\n            <xs:documentation>Name of the target.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"layout\" type=\"SimpleLayoutAttribute\">\n          <xs:annotation>\n            <xs:documentation>Layout used to format log messages.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"category\" type=\"SimpleLayoutAttribute\">\n          <xs:annotation>\n            <xs:documentation>Layout that renders event Category.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"entryType\" type=\"SimpleLayoutAttribute\">\n          <xs:annotation>\n            <xs:documentation>Optional entrytype. When not set, or when not convertable to  then determined by </xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"eventId\" type=\"SimpleLayoutAttribute\">\n          <xs:annotation>\n            <xs:documentation>Layout that renders event ID.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"log\" type=\"xs:string\">\n          <xs:annotation>\n            <xs:documentation>Name of the Event Log to write to. This can be System, Application or any user-defined name.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"machineName\" type=\"xs:string\">\n          <xs:annotation>\n            <xs:documentation>Name of the machine on which Event Log service is running.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"maxKilobytes\" type=\"xs:long\">\n          <xs:annotation>\n            <xs:documentation>Maximum Event log size in kilobytes. If null, the value won't be set. Default is 512 Kilobytes as specified by Eventlog API</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"maxMessageLength\" type=\"xs:integer\">\n          <xs:annotation>\n            <xs:documentation>Message length limit to write to the Event Log.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"source\" type=\"SimpleLayoutAttribute\">\n          <xs:annotation>\n            <xs:documentation>Value to be used as the event Source.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"onOverflow\" type=\"NLog.Targets.EventLogTargetOverflowAction\">\n          <xs:annotation>\n            <xs:documentation>Action to take if the message is larger than the  option.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"optimizeBufferReuse\" type=\"xs:boolean\">\n          <xs:annotation>\n            <xs:documentation>Target supports reuse of internal buffers, and doesn't have to constantly allocate new buffers Required for legacy NLog-targets, that expects buffers to remain stable after Write-method exit</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n      </xs:extension>\n    </xs:complexContent>\n  </xs:complexType>\n  <xs:simpleType name=\"NLog.Targets.EventLogTargetOverflowAction\">\n    <xs:restriction base=\"xs:string\">\n      <xs:enumeration value=\"Truncate\" />\n      <xs:enumeration value=\"Split\" />\n      <xs:enumeration value=\"Discard\" />\n    </xs:restriction>\n  </xs:simpleType>\n  <xs:complexType name=\"FallbackGroup\">\n    <xs:complexContent>\n      <xs:extension base=\"CompoundTargetBase\">\n        <xs:choice minOccurs=\"0\" maxOccurs=\"unbounded\">\n          <xs:element name=\"name\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:string\" />\n          <xs:element name=\"returnToFirstOnSuccess\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:boolean\" />\n          <xs:element name=\"optimizeBufferReuse\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:boolean\" />\n        </xs:choice>\n        <xs:attribute name=\"name\" type=\"xs:string\">\n          <xs:annotation>\n            <xs:documentation>Name of the target.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"returnToFirstOnSuccess\" type=\"xs:boolean\">\n          <xs:annotation>\n            <xs:documentation>Indicates whether to return to the first target after any successful write.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"optimizeBufferReuse\" type=\"xs:boolean\">\n          <xs:annotation>\n            <xs:documentation>Target supports reuse of internal buffers, and doesn't have to constantly allocate new buffers Required for legacy NLog-targets, that expects buffers to remain stable after Write-method exit</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n      </xs:extension>\n    </xs:complexContent>\n  </xs:complexType>\n  <xs:complexType name=\"File\">\n    <xs:complexContent>\n      <xs:extension base=\"Target\">\n        <xs:choice minOccurs=\"0\" maxOccurs=\"unbounded\">\n          <xs:element name=\"name\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:string\" />\n          <xs:element name=\"layout\" minOccurs=\"0\" maxOccurs=\"1\" type=\"Layout\" />\n          <xs:element name=\"header\" minOccurs=\"0\" maxOccurs=\"1\" type=\"Layout\" />\n          <xs:element name=\"footer\" minOccurs=\"0\" maxOccurs=\"1\" type=\"Layout\" />\n          <xs:element name=\"encoding\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:string\" />\n          <xs:element name=\"lineEnding\" minOccurs=\"0\" maxOccurs=\"1\" type=\"LineEndingMode\" />\n          <xs:element name=\"enableArchiveFileCompression\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:boolean\" />\n          <xs:element name=\"archiveNumbering\" minOccurs=\"0\" maxOccurs=\"1\" type=\"NLog.Targets.ArchiveNumberingMode\" />\n          <xs:element name=\"archiveFileName\" minOccurs=\"0\" maxOccurs=\"1\" type=\"Layout\" />\n          <xs:element name=\"archiveFileKind\" minOccurs=\"0\" maxOccurs=\"1\" type=\"NLog.Targets.FilePathKind\" />\n          <xs:element name=\"archiveEvery\" minOccurs=\"0\" maxOccurs=\"1\" type=\"NLog.Targets.FileArchivePeriod\" />\n          <xs:element name=\"archiveAboveSize\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:long\" />\n          <xs:element name=\"maxArchiveFiles\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:integer\" />\n          <xs:element name=\"writeFooterOnArchivingOnly\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:boolean\" />\n          <xs:element name=\"maxLogFilenames\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:integer\" />\n          <xs:element name=\"fileName\" minOccurs=\"0\" maxOccurs=\"1\" type=\"Layout\" />\n          <xs:element name=\"archiveDateFormat\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:string\" />\n          <xs:element name=\"archiveOldFileOnStartup\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:boolean\" />\n          <xs:element name=\"cleanupFileName\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:boolean\" />\n          <xs:element name=\"createDirs\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:boolean\" />\n          <xs:element name=\"deleteOldFileOnStartup\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:boolean\" />\n          <xs:element name=\"fileAttributes\" minOccurs=\"0\" maxOccurs=\"1\" type=\"NLog.Targets.Win32FileAttributes\" />\n          <xs:element name=\"writeBom\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:boolean\" />\n          <xs:element name=\"enableFileDelete\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:boolean\" />\n          <xs:element name=\"replaceFileContentsOnEachWrite\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:boolean\" />\n          <xs:element name=\"forceMutexConcurrentWrites\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:boolean\" />\n          <xs:element name=\"forceManaged\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:boolean\" />\n          <xs:element name=\"fileNameKind\" minOccurs=\"0\" maxOccurs=\"1\" type=\"NLog.Targets.FilePathKind\" />\n          <xs:element name=\"concurrentWrites\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:boolean\" />\n          <xs:element name=\"discardAll\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:boolean\" />\n          <xs:element name=\"concurrentWriteAttemptDelay\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:integer\" />\n          <xs:element name=\"networkWrites\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:boolean\" />\n          <xs:element name=\"openFileCacheSize\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:integer\" />\n          <xs:element name=\"openFileCacheTimeout\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:integer\" />\n          <xs:element name=\"optimizeBufferReuse\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:boolean\" />\n          <xs:element name=\"bufferSize\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:integer\" />\n          <xs:element name=\"autoFlush\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:boolean\" />\n          <xs:element name=\"concurrentWriteAttempts\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:integer\" />\n          <xs:element name=\"keepFileOpen\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:boolean\" />\n        </xs:choice>\n        <xs:attribute name=\"name\" type=\"xs:string\">\n          <xs:annotation>\n            <xs:documentation>Name of the target.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"layout\" type=\"SimpleLayoutAttribute\">\n          <xs:annotation>\n            <xs:documentation>Text to be rendered.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"header\" type=\"SimpleLayoutAttribute\">\n          <xs:annotation>\n            <xs:documentation>Header.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"footer\" type=\"SimpleLayoutAttribute\">\n          <xs:annotation>\n            <xs:documentation>Footer.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"encoding\" type=\"xs:string\">\n          <xs:annotation>\n            <xs:documentation>File encoding.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"lineEnding\" type=\"LineEndingMode\">\n          <xs:annotation>\n            <xs:documentation>Line ending mode.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"enableArchiveFileCompression\" type=\"xs:boolean\">\n          <xs:annotation>\n            <xs:documentation>Indicates whether to compress archive files into the zip archive format.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"archiveNumbering\" type=\"NLog.Targets.ArchiveNumberingMode\">\n          <xs:annotation>\n            <xs:documentation>Way file archives are numbered.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"archiveFileName\" type=\"SimpleLayoutAttribute\">\n          <xs:annotation>\n            <xs:documentation>Name of the file to be used for an archive.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"archiveFileKind\" type=\"NLog.Targets.FilePathKind\">\n          <xs:annotation>\n            <xs:documentation>Is the  an absolute or relative path?</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"archiveEvery\" type=\"NLog.Targets.FileArchivePeriod\">\n          <xs:annotation>\n            <xs:documentation>Indicates whether to automatically archive log files every time the specified time passes.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"archiveAboveSize\" type=\"xs:long\">\n          <xs:annotation>\n            <xs:documentation>Size in bytes above which log files will be automatically archived. Warning: combining this with  isn't supported. We cannot create multiple archive files, if they should have the same name. Choose: </xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"maxArchiveFiles\" type=\"xs:integer\">\n          <xs:annotation>\n            <xs:documentation>Maximum number of archive files that should be kept.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"writeFooterOnArchivingOnly\" type=\"xs:boolean\">\n          <xs:annotation>\n            <xs:documentation>Indicates whether the footer should be written only when the file is archived.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"maxLogFilenames\" type=\"xs:integer\">\n          <xs:annotation>\n            <xs:documentation>Maximum number of log filenames that should be stored as existing.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"fileName\" type=\"SimpleLayoutAttribute\">\n          <xs:annotation>\n            <xs:documentation>Name of the file to write to.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"archiveDateFormat\" type=\"xs:string\">\n          <xs:annotation>\n            <xs:documentation>Value specifying the date format to use when archiving files.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"archiveOldFileOnStartup\" type=\"xs:boolean\">\n          <xs:annotation>\n            <xs:documentation>Indicates whether to archive old log file on startup.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"cleanupFileName\" type=\"xs:boolean\">\n          <xs:annotation>\n            <xs:documentation>Cleanup invalid values in a filename, e.g. slashes in a filename. If set to true, this can impact the performance of massive writes. If set to false, nothing gets written when the filename is wrong.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"createDirs\" type=\"xs:boolean\">\n          <xs:annotation>\n            <xs:documentation>Indicates whether to create directories if they do not exist.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"deleteOldFileOnStartup\" type=\"xs:boolean\">\n          <xs:annotation>\n            <xs:documentation>Indicates whether to delete old log file on startup.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"fileAttributes\" type=\"NLog.Targets.Win32FileAttributes\">\n          <xs:annotation>\n            <xs:documentation>File attributes (Windows only).</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"writeBom\" type=\"xs:boolean\">\n          <xs:annotation>\n            <xs:documentation>Indicates whether to write BOM (byte order mark) in created files</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"enableFileDelete\" type=\"xs:boolean\">\n          <xs:annotation>\n            <xs:documentation>Indicates whether to enable log file(s) to be deleted.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"replaceFileContentsOnEachWrite\" type=\"xs:boolean\">\n          <xs:annotation>\n            <xs:documentation>Indicates whether to replace file contents on each write instead of appending log message at the end.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"forceMutexConcurrentWrites\" type=\"xs:boolean\">\n          <xs:annotation>\n            <xs:documentation>Value indicationg whether file creation calls should be synchronized by a system global mutex.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"forceManaged\" type=\"xs:boolean\">\n          <xs:annotation>\n            <xs:documentation>Gets or set a value indicating whether a managed file stream is forced, instead of using the native implementation.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"fileNameKind\" type=\"NLog.Targets.FilePathKind\">\n          <xs:annotation>\n            <xs:documentation>Is the  an absolute or relative path?</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"concurrentWrites\" type=\"xs:boolean\">\n          <xs:annotation>\n            <xs:documentation>Indicates whether concurrent writes to the log file by multiple processes on the same host.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"discardAll\" type=\"xs:boolean\">\n          <xs:annotation>\n            <xs:documentation>Whether or not this target should just discard all data that its asked to write. Mostly used for when testing NLog Stack except final write</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"concurrentWriteAttemptDelay\" type=\"xs:integer\">\n          <xs:annotation>\n            <xs:documentation>Delay in milliseconds to wait before attempting to write to the file again.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"networkWrites\" type=\"xs:boolean\">\n          <xs:annotation>\n            <xs:documentation>Indicates whether concurrent writes to the log file by multiple processes on different network hosts.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"openFileCacheSize\" type=\"xs:integer\">\n          <xs:annotation>\n            <xs:documentation>Number of files to be kept open. Setting this to a higher value may improve performance in a situation where a single File target is writing to many files (such as splitting by level or by logger).</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"openFileCacheTimeout\" type=\"xs:integer\">\n          <xs:annotation>\n            <xs:documentation>Maximum number of seconds that files are kept open. If this number is negative the files are not automatically closed after a period of inactivity.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"optimizeBufferReuse\" type=\"xs:boolean\">\n          <xs:annotation>\n            <xs:documentation>Target supports reuse of internal buffers, and doesn't have to constantly allocate new buffers Required for legacy NLog-targets, that expects buffers to remain stable after Write-method exit</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"bufferSize\" type=\"xs:integer\">\n          <xs:annotation>\n            <xs:documentation>Log file buffer size in bytes.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"autoFlush\" type=\"xs:boolean\">\n          <xs:annotation>\n            <xs:documentation>Indicates whether to automatically flush the file buffers after each log message.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"concurrentWriteAttempts\" type=\"xs:integer\">\n          <xs:annotation>\n            <xs:documentation>Number of times the write is appended on the file before NLog discards the log message.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"keepFileOpen\" type=\"xs:boolean\">\n          <xs:annotation>\n            <xs:documentation>Indicates whether to keep log file open instead of opening and closing it on each logging event.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n      </xs:extension>\n    </xs:complexContent>\n  </xs:complexType>\n  <xs:simpleType name=\"NLog.Targets.ArchiveNumberingMode\">\n    <xs:restriction base=\"xs:string\">\n      <xs:enumeration value=\"Sequence\" />\n      <xs:enumeration value=\"Rolling\" />\n      <xs:enumeration value=\"Date\" />\n      <xs:enumeration value=\"DateAndSequence\" />\n    </xs:restriction>\n  </xs:simpleType>\n  <xs:simpleType name=\"NLog.Targets.FilePathKind\">\n    <xs:restriction base=\"xs:string\">\n      <xs:enumeration value=\"Unknown\" />\n      <xs:enumeration value=\"Relative\" />\n      <xs:enumeration value=\"Absolute\" />\n    </xs:restriction>\n  </xs:simpleType>\n  <xs:simpleType name=\"NLog.Targets.FileArchivePeriod\">\n    <xs:restriction base=\"xs:string\">\n      <xs:enumeration value=\"None\" />\n      <xs:enumeration value=\"Year\" />\n      <xs:enumeration value=\"Month\" />\n      <xs:enumeration value=\"Day\" />\n      <xs:enumeration value=\"Hour\" />\n      <xs:enumeration value=\"Minute\" />\n      <xs:enumeration value=\"Sunday\" />\n      <xs:enumeration value=\"Monday\" />\n      <xs:enumeration value=\"Tuesday\" />\n      <xs:enumeration value=\"Wednesday\" />\n      <xs:enumeration value=\"Thursday\" />\n      <xs:enumeration value=\"Friday\" />\n      <xs:enumeration value=\"Saturday\" />\n    </xs:restriction>\n  </xs:simpleType>\n  <xs:simpleType name=\"NLog.Targets.Win32FileAttributes\">\n    <xs:restriction base=\"xs:string\">\n      <xs:enumeration value=\"ReadOnly\" />\n      <xs:enumeration value=\"Hidden\" />\n      <xs:enumeration value=\"System\" />\n      <xs:enumeration value=\"Archive\" />\n      <xs:enumeration value=\"Device\" />\n      <xs:enumeration value=\"Normal\" />\n      <xs:enumeration value=\"Temporary\" />\n      <xs:enumeration value=\"SparseFile\" />\n      <xs:enumeration value=\"ReparsePoint\" />\n      <xs:enumeration value=\"Compressed\" />\n      <xs:enumeration value=\"NotContentIndexed\" />\n      <xs:enumeration value=\"Encrypted\" />\n      <xs:enumeration value=\"WriteThrough\" />\n      <xs:enumeration value=\"NoBuffering\" />\n      <xs:enumeration value=\"DeleteOnClose\" />\n      <xs:enumeration value=\"PosixSemantics\" />\n    </xs:restriction>\n  </xs:simpleType>\n  <xs:complexType name=\"FilteringWrapper\">\n    <xs:complexContent>\n      <xs:extension base=\"WrapperTargetBase\">\n        <xs:choice minOccurs=\"0\" maxOccurs=\"unbounded\">\n          <xs:element name=\"name\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:string\" />\n          <xs:element name=\"condition\" minOccurs=\"0\" maxOccurs=\"1\" type=\"Condition\" />\n          <xs:element name=\"optimizeBufferReuse\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:boolean\" />\n        </xs:choice>\n        <xs:attribute name=\"name\" type=\"xs:string\">\n          <xs:annotation>\n            <xs:documentation>Name of the target.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"condition\" type=\"Condition\">\n          <xs:annotation>\n            <xs:documentation>Condition expression. Log events who meet this condition will be forwarded to the wrapped target.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"optimizeBufferReuse\" type=\"xs:boolean\">\n          <xs:annotation>\n            <xs:documentation>Target supports reuse of internal buffers, and doesn't have to constantly allocate new buffers Required for legacy NLog-targets, that expects buffers to remain stable after Write-method exit</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n      </xs:extension>\n    </xs:complexContent>\n  </xs:complexType>\n  <xs:complexType name=\"ImpersonatingWrapper\">\n    <xs:complexContent>\n      <xs:extension base=\"WrapperTargetBase\">\n        <xs:choice minOccurs=\"0\" maxOccurs=\"unbounded\">\n          <xs:element name=\"name\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:string\" />\n          <xs:element name=\"domain\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:string\" />\n          <xs:element name=\"impersonationLevel\" minOccurs=\"0\" maxOccurs=\"1\" type=\"NLog.Targets.Wrappers.SecurityImpersonationLevel\" />\n          <xs:element name=\"logOnProvider\" minOccurs=\"0\" maxOccurs=\"1\" type=\"NLog.Targets.Wrappers.LogOnProviderType\" />\n          <xs:element name=\"logOnType\" minOccurs=\"0\" maxOccurs=\"1\" type=\"NLog.Targets.Wrappers.SecurityLogOnType\" />\n          <xs:element name=\"password\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:string\" />\n          <xs:element name=\"revertToSelf\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:boolean\" />\n          <xs:element name=\"userName\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:string\" />\n          <xs:element name=\"optimizeBufferReuse\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:boolean\" />\n        </xs:choice>\n        <xs:attribute name=\"name\" type=\"xs:string\">\n          <xs:annotation>\n            <xs:documentation>Name of the target.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"domain\" type=\"xs:string\">\n          <xs:annotation>\n            <xs:documentation>Windows domain name to change context to.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"impersonationLevel\" type=\"NLog.Targets.Wrappers.SecurityImpersonationLevel\">\n          <xs:annotation>\n            <xs:documentation>Required impersonation level.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"logOnProvider\" type=\"NLog.Targets.Wrappers.LogOnProviderType\">\n          <xs:annotation>\n            <xs:documentation>Type of the logon provider.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"logOnType\" type=\"NLog.Targets.Wrappers.SecurityLogOnType\">\n          <xs:annotation>\n            <xs:documentation>Logon Type.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"password\" type=\"xs:string\">\n          <xs:annotation>\n            <xs:documentation>User account password.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"revertToSelf\" type=\"xs:boolean\">\n          <xs:annotation>\n            <xs:documentation>Indicates whether to revert to the credentials of the process instead of impersonating another user.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"userName\" type=\"xs:string\">\n          <xs:annotation>\n            <xs:documentation>Username to change context to.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"optimizeBufferReuse\" type=\"xs:boolean\">\n          <xs:annotation>\n            <xs:documentation>Target supports reuse of internal buffers, and doesn't have to constantly allocate new buffers Required for legacy NLog-targets, that expects buffers to remain stable after Write-method exit</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n      </xs:extension>\n    </xs:complexContent>\n  </xs:complexType>\n  <xs:simpleType name=\"NLog.Targets.Wrappers.SecurityImpersonationLevel\">\n    <xs:restriction base=\"xs:string\">\n      <xs:enumeration value=\"Anonymous\" />\n      <xs:enumeration value=\"Identification\" />\n      <xs:enumeration value=\"Impersonation\" />\n      <xs:enumeration value=\"Delegation\" />\n    </xs:restriction>\n  </xs:simpleType>\n  <xs:simpleType name=\"NLog.Targets.Wrappers.LogOnProviderType\">\n    <xs:restriction base=\"xs:string\">\n      <xs:enumeration value=\"Default\" />\n    </xs:restriction>\n  </xs:simpleType>\n  <xs:simpleType name=\"NLog.Targets.Wrappers.SecurityLogOnType\">\n    <xs:restriction base=\"xs:string\">\n      <xs:enumeration value=\"Interactive\" />\n      <xs:enumeration value=\"Network\" />\n      <xs:enumeration value=\"Batch\" />\n      <xs:enumeration value=\"Service\" />\n      <xs:enumeration value=\"NetworkClearText\" />\n      <xs:enumeration value=\"NewCredentials\" />\n    </xs:restriction>\n  </xs:simpleType>\n  <xs:complexType name=\"LimitingWrapper\">\n    <xs:complexContent>\n      <xs:extension base=\"WrapperTargetBase\">\n        <xs:choice minOccurs=\"0\" maxOccurs=\"unbounded\">\n          <xs:element name=\"interval\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:string\" />\n          <xs:element name=\"messageLimit\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:integer\" />\n          <xs:element name=\"name\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:string\" />\n          <xs:element name=\"optimizeBufferReuse\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:boolean\" />\n        </xs:choice>\n        <xs:attribute name=\"interval\" type=\"xs:string\">\n          <xs:annotation>\n            <xs:documentation>Interval in which messages will be written up to the  number of messages.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"messageLimit\" type=\"xs:integer\">\n          <xs:annotation>\n            <xs:documentation>Maximum allowed number of messages written per .</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"name\" type=\"xs:string\">\n          <xs:annotation>\n            <xs:documentation>Name of the target.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"optimizeBufferReuse\" type=\"xs:boolean\">\n          <xs:annotation>\n            <xs:documentation>Target supports reuse of internal buffers, and doesn't have to constantly allocate new buffers Required for legacy NLog-targets, that expects buffers to remain stable after Write-method exit</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n      </xs:extension>\n    </xs:complexContent>\n  </xs:complexType>\n  <xs:complexType name=\"LogReceiverService\">\n    <xs:complexContent>\n      <xs:extension base=\"Target\">\n        <xs:choice minOccurs=\"0\" maxOccurs=\"unbounded\">\n          <xs:element name=\"name\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:string\" />\n          <xs:element name=\"endpointAddress\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:string\" />\n          <xs:element name=\"endpointConfigurationName\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:string\" />\n          <xs:element name=\"useOneWayContract\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:boolean\" />\n          <xs:element name=\"clientId\" minOccurs=\"0\" maxOccurs=\"1\" type=\"Layout\" />\n          <xs:element name=\"includeEventProperties\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:boolean\" />\n          <xs:element name=\"parameter\" minOccurs=\"0\" maxOccurs=\"unbounded\" type=\"NLog.Targets.MethodCallParameter\" />\n          <xs:element name=\"useBinaryEncoding\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:boolean\" />\n          <xs:element name=\"optimizeBufferReuse\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:boolean\" />\n        </xs:choice>\n        <xs:attribute name=\"name\" type=\"xs:string\">\n          <xs:annotation>\n            <xs:documentation>Name of the target.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"endpointAddress\" type=\"xs:string\">\n          <xs:annotation>\n            <xs:documentation>Endpoint address.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"endpointConfigurationName\" type=\"xs:string\">\n          <xs:annotation>\n            <xs:documentation>Name of the endpoint configuration in WCF configuration file.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"useOneWayContract\" type=\"xs:boolean\">\n          <xs:annotation>\n            <xs:documentation>Indicates whether to use a WCF service contract that is one way (fire and forget) or two way (request-reply)</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"clientId\" type=\"SimpleLayoutAttribute\">\n          <xs:annotation>\n            <xs:documentation>Client ID.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"includeEventProperties\" type=\"xs:boolean\">\n          <xs:annotation>\n            <xs:documentation>Indicates whether to include per-event properties in the payload sent to the server.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"useBinaryEncoding\" type=\"xs:boolean\">\n          <xs:annotation>\n            <xs:documentation>Indicates whether to use binary message encoding.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"optimizeBufferReuse\" type=\"xs:boolean\">\n          <xs:annotation>\n            <xs:documentation>Target supports reuse of internal buffers, and doesn't have to constantly allocate new buffers Required for legacy NLog-targets, that expects buffers to remain stable after Write-method exit</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n      </xs:extension>\n    </xs:complexContent>\n  </xs:complexType>\n  <xs:complexType name=\"NLog.Targets.MethodCallParameter\">\n    <xs:choice minOccurs=\"0\" maxOccurs=\"unbounded\">\n      <xs:element name=\"layout\" minOccurs=\"0\" maxOccurs=\"1\" type=\"Layout\" />\n      <xs:element name=\"name\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:string\" />\n      <xs:element name=\"parameterType\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:string\" />\n      <xs:element name=\"type\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:string\" />\n    </xs:choice>\n    <xs:attribute name=\"layout\" type=\"SimpleLayoutAttribute\">\n      <xs:annotation>\n        <xs:documentation>Layout that should be use to calculate the value for the parameter.</xs:documentation>\n      </xs:annotation>\n    </xs:attribute>\n    <xs:attribute name=\"name\" type=\"xs:string\">\n      <xs:annotation>\n        <xs:documentation>Name of the parameter.</xs:documentation>\n      </xs:annotation>\n    </xs:attribute>\n    <xs:attribute name=\"parameterType\" type=\"xs:string\">\n      <xs:annotation>\n        <xs:documentation>Type of the parameter.</xs:documentation>\n      </xs:annotation>\n    </xs:attribute>\n    <xs:attribute name=\"type\" type=\"xs:string\">\n      <xs:annotation>\n        <xs:documentation>Type of the parameter. Obsolete alias for </xs:documentation>\n      </xs:annotation>\n    </xs:attribute>\n  </xs:complexType>\n  <xs:complexType name=\"Mail\">\n    <xs:complexContent>\n      <xs:extension base=\"Target\">\n        <xs:choice minOccurs=\"0\" maxOccurs=\"unbounded\">\n          <xs:element name=\"name\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:string\" />\n          <xs:element name=\"layout\" minOccurs=\"0\" maxOccurs=\"1\" type=\"Layout\" />\n          <xs:element name=\"header\" minOccurs=\"0\" maxOccurs=\"1\" type=\"Layout\" />\n          <xs:element name=\"footer\" minOccurs=\"0\" maxOccurs=\"1\" type=\"Layout\" />\n          <xs:element name=\"replaceNewlineWithBrTagInHtml\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:boolean\" />\n          <xs:element name=\"priority\" minOccurs=\"0\" maxOccurs=\"1\" type=\"Layout\" />\n          <xs:element name=\"encoding\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:string\" />\n          <xs:element name=\"bcc\" minOccurs=\"0\" maxOccurs=\"1\" type=\"Layout\" />\n          <xs:element name=\"cc\" minOccurs=\"0\" maxOccurs=\"1\" type=\"Layout\" />\n          <xs:element name=\"addNewLines\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:boolean\" />\n          <xs:element name=\"html\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:boolean\" />\n          <xs:element name=\"from\" minOccurs=\"0\" maxOccurs=\"1\" type=\"Layout\" />\n          <xs:element name=\"body\" minOccurs=\"0\" maxOccurs=\"1\" type=\"Layout\" />\n          <xs:element name=\"subject\" minOccurs=\"0\" maxOccurs=\"1\" type=\"Layout\" />\n          <xs:element name=\"to\" minOccurs=\"0\" maxOccurs=\"1\" type=\"Layout\" />\n          <xs:element name=\"optimizeBufferReuse\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:boolean\" />\n          <xs:element name=\"timeout\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:integer\" />\n          <xs:element name=\"smtpServer\" minOccurs=\"0\" maxOccurs=\"1\" type=\"Layout\" />\n          <xs:element name=\"smtpAuthentication\" minOccurs=\"0\" maxOccurs=\"1\" type=\"NLog.Targets.SmtpAuthenticationMode\" />\n          <xs:element name=\"smtpUserName\" minOccurs=\"0\" maxOccurs=\"1\" type=\"Layout\" />\n          <xs:element name=\"smtpPassword\" minOccurs=\"0\" maxOccurs=\"1\" type=\"Layout\" />\n          <xs:element name=\"enableSsl\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:boolean\" />\n          <xs:element name=\"smtpPort\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:integer\" />\n          <xs:element name=\"useSystemNetMailSettings\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:boolean\" />\n          <xs:element name=\"pickupDirectoryLocation\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:string\" />\n          <xs:element name=\"deliveryMethod\" minOccurs=\"0\" maxOccurs=\"1\" type=\"System.Net.Mail.SmtpDeliveryMethod\" />\n        </xs:choice>\n        <xs:attribute name=\"name\" type=\"xs:string\">\n          <xs:annotation>\n            <xs:documentation>Name of the target.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"layout\" type=\"SimpleLayoutAttribute\">\n          <xs:annotation>\n            <xs:documentation>Text to be rendered.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"header\" type=\"SimpleLayoutAttribute\">\n          <xs:annotation>\n            <xs:documentation>Header.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"footer\" type=\"SimpleLayoutAttribute\">\n          <xs:annotation>\n            <xs:documentation>Footer.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"replaceNewlineWithBrTagInHtml\" type=\"xs:boolean\">\n          <xs:annotation>\n            <xs:documentation>Indicates whether NewLine characters in the body should be replaced with  tags.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"priority\" type=\"SimpleLayoutAttribute\">\n          <xs:annotation>\n            <xs:documentation>Priority used for sending mails.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"encoding\" type=\"xs:string\">\n          <xs:annotation>\n            <xs:documentation>Encoding to be used for sending e-mail.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"bcc\" type=\"SimpleLayoutAttribute\">\n          <xs:annotation>\n            <xs:documentation>BCC email addresses separated by semicolons (e.g. john@domain.com;jane@domain.com).</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"cc\" type=\"SimpleLayoutAttribute\">\n          <xs:annotation>\n            <xs:documentation>CC email addresses separated by semicolons (e.g. john@domain.com;jane@domain.com).</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"addNewLines\" type=\"xs:boolean\">\n          <xs:annotation>\n            <xs:documentation>Indicates whether to add new lines between log entries.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"html\" type=\"xs:boolean\">\n          <xs:annotation>\n            <xs:documentation>Indicates whether to send message as HTML instead of plain text.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"from\" type=\"SimpleLayoutAttribute\">\n          <xs:annotation>\n            <xs:documentation>Sender's email address (e.g. joe@domain.com).</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"body\" type=\"SimpleLayoutAttribute\">\n          <xs:annotation>\n            <xs:documentation>Mail message body (repeated for each log message send in one mail).</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"subject\" type=\"SimpleLayoutAttribute\">\n          <xs:annotation>\n            <xs:documentation>Mail subject.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"to\" type=\"SimpleLayoutAttribute\">\n          <xs:annotation>\n            <xs:documentation>Recipients' email addresses separated by semicolons (e.g. john@domain.com;jane@domain.com).</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"optimizeBufferReuse\" type=\"xs:boolean\">\n          <xs:annotation>\n            <xs:documentation>Target supports reuse of internal buffers, and doesn't have to constantly allocate new buffers Required for legacy NLog-targets, that expects buffers to remain stable after Write-method exit</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"timeout\" type=\"xs:integer\">\n          <xs:annotation>\n            <xs:documentation>Indicates the SMTP client timeout.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"smtpServer\" type=\"SimpleLayoutAttribute\">\n          <xs:annotation>\n            <xs:documentation>SMTP Server to be used for sending.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"smtpAuthentication\" type=\"NLog.Targets.SmtpAuthenticationMode\">\n          <xs:annotation>\n            <xs:documentation>SMTP Authentication mode.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"smtpUserName\" type=\"SimpleLayoutAttribute\">\n          <xs:annotation>\n            <xs:documentation>Username used to connect to SMTP server (used when SmtpAuthentication is set to \"basic\").</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"smtpPassword\" type=\"SimpleLayoutAttribute\">\n          <xs:annotation>\n            <xs:documentation>Password used to authenticate against SMTP server (used when SmtpAuthentication is set to \"basic\").</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"enableSsl\" type=\"xs:boolean\">\n          <xs:annotation>\n            <xs:documentation>Indicates whether SSL (secure sockets layer) should be used when communicating with SMTP server.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"smtpPort\" type=\"xs:integer\">\n          <xs:annotation>\n            <xs:documentation>Port number that SMTP Server is listening on.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"useSystemNetMailSettings\" type=\"xs:boolean\">\n          <xs:annotation>\n            <xs:documentation>Indicates whether the default Settings from System.Net.MailSettings should be used.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"pickupDirectoryLocation\" type=\"xs:string\">\n          <xs:annotation>\n            <xs:documentation>Folder where applications save mail messages to be processed by the local SMTP server.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"deliveryMethod\" type=\"System.Net.Mail.SmtpDeliveryMethod\">\n          <xs:annotation>\n            <xs:documentation>Specifies how outgoing email messages will be handled.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n      </xs:extension>\n    </xs:complexContent>\n  </xs:complexType>\n  <xs:simpleType name=\"NLog.Targets.SmtpAuthenticationMode\">\n    <xs:restriction base=\"xs:string\">\n      <xs:enumeration value=\"None\" />\n      <xs:enumeration value=\"Basic\" />\n      <xs:enumeration value=\"Ntlm\" />\n    </xs:restriction>\n  </xs:simpleType>\n  <xs:simpleType name=\"System.Net.Mail.SmtpDeliveryMethod\">\n    <xs:restriction base=\"xs:string\">\n      <xs:enumeration value=\"Network\" />\n      <xs:enumeration value=\"SpecifiedPickupDirectory\" />\n      <xs:enumeration value=\"PickupDirectoryFromIis\" />\n    </xs:restriction>\n  </xs:simpleType>\n  <xs:complexType name=\"Memory\">\n    <xs:complexContent>\n      <xs:extension base=\"Target\">\n        <xs:choice minOccurs=\"0\" maxOccurs=\"unbounded\">\n          <xs:element name=\"name\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:string\" />\n          <xs:element name=\"layout\" minOccurs=\"0\" maxOccurs=\"1\" type=\"Layout\" />\n          <xs:element name=\"optimizeBufferReuse\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:boolean\" />\n        </xs:choice>\n        <xs:attribute name=\"name\" type=\"xs:string\">\n          <xs:annotation>\n            <xs:documentation>Name of the target.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"layout\" type=\"SimpleLayoutAttribute\">\n          <xs:annotation>\n            <xs:documentation>Layout used to format log messages.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"optimizeBufferReuse\" type=\"xs:boolean\">\n          <xs:annotation>\n            <xs:documentation>Target supports reuse of internal buffers, and doesn't have to constantly allocate new buffers Required for legacy NLog-targets, that expects buffers to remain stable after Write-method exit</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n      </xs:extension>\n    </xs:complexContent>\n  </xs:complexType>\n  <xs:complexType name=\"MethodCall\">\n    <xs:complexContent>\n      <xs:extension base=\"Target\">\n        <xs:choice minOccurs=\"0\" maxOccurs=\"unbounded\">\n          <xs:element name=\"name\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:string\" />\n          <xs:element name=\"className\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:string\" />\n          <xs:element name=\"methodName\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:string\" />\n          <xs:element name=\"parameter\" minOccurs=\"0\" maxOccurs=\"unbounded\" type=\"NLog.Targets.MethodCallParameter\" />\n          <xs:element name=\"optimizeBufferReuse\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:boolean\" />\n        </xs:choice>\n        <xs:attribute name=\"name\" type=\"xs:string\">\n          <xs:annotation>\n            <xs:documentation>Name of the target.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"className\" type=\"xs:string\">\n          <xs:annotation>\n            <xs:documentation>Class name.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"methodName\" type=\"xs:string\">\n          <xs:annotation>\n            <xs:documentation>Method name. The method must be public and static. Use the AssemblyQualifiedName , https://msdn.microsoft.com/en-us/library/system.type.assemblyqualifiedname(v=vs.110).aspx e.g.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"optimizeBufferReuse\" type=\"xs:boolean\">\n          <xs:annotation>\n            <xs:documentation>Target supports reuse of internal buffers, and doesn't have to constantly allocate new buffers Required for legacy NLog-targets, that expects buffers to remain stable after Write-method exit</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n      </xs:extension>\n    </xs:complexContent>\n  </xs:complexType>\n  <xs:complexType name=\"Network\">\n    <xs:complexContent>\n      <xs:extension base=\"Target\">\n        <xs:choice minOccurs=\"0\" maxOccurs=\"unbounded\">\n          <xs:element name=\"name\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:string\" />\n          <xs:element name=\"layout\" minOccurs=\"0\" maxOccurs=\"1\" type=\"Layout\" />\n          <xs:element name=\"encoding\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:string\" />\n          <xs:element name=\"lineEnding\" minOccurs=\"0\" maxOccurs=\"1\" type=\"LineEndingMode\" />\n          <xs:element name=\"maxMessageSize\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:integer\" />\n          <xs:element name=\"newLine\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:boolean\" />\n          <xs:element name=\"address\" minOccurs=\"0\" maxOccurs=\"1\" type=\"Layout\" />\n          <xs:element name=\"connectionCacheSize\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:integer\" />\n          <xs:element name=\"keepConnection\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:boolean\" />\n          <xs:element name=\"maxConnections\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:integer\" />\n          <xs:element name=\"maxQueueSize\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:integer\" />\n          <xs:element name=\"onConnectionOverflow\" minOccurs=\"0\" maxOccurs=\"1\" type=\"NLog.Targets.NetworkTargetConnectionsOverflowAction\" />\n          <xs:element name=\"onOverflow\" minOccurs=\"0\" maxOccurs=\"1\" type=\"NLog.Targets.NetworkTargetOverflowAction\" />\n          <xs:element name=\"optimizeBufferReuse\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:boolean\" />\n        </xs:choice>\n        <xs:attribute name=\"name\" type=\"xs:string\">\n          <xs:annotation>\n            <xs:documentation>Name of the target.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"layout\" type=\"SimpleLayoutAttribute\">\n          <xs:annotation>\n            <xs:documentation>Layout used to format log messages.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"encoding\" type=\"xs:string\">\n          <xs:annotation>\n            <xs:documentation>Encoding to be used.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"lineEnding\" type=\"LineEndingMode\">\n          <xs:annotation>\n            <xs:documentation>End of line value if a newline is appended at the end of log message .</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"maxMessageSize\" type=\"xs:integer\">\n          <xs:annotation>\n            <xs:documentation>Maximum message size in bytes.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"newLine\" type=\"xs:boolean\">\n          <xs:annotation>\n            <xs:documentation>Indicates whether to append newline at the end of log message.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"address\" type=\"SimpleLayoutAttribute\">\n          <xs:annotation>\n            <xs:documentation>Network address.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"connectionCacheSize\" type=\"xs:integer\">\n          <xs:annotation>\n            <xs:documentation>Size of the connection cache (number of connections which are kept alive).</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"keepConnection\" type=\"xs:boolean\">\n          <xs:annotation>\n            <xs:documentation>Indicates whether to keep connection open whenever possible.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"maxConnections\" type=\"xs:integer\">\n          <xs:annotation>\n            <xs:documentation>Maximum current connections. 0 = no maximum.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"maxQueueSize\" type=\"xs:integer\">\n          <xs:annotation>\n            <xs:documentation>Maximum queue size.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"onConnectionOverflow\" type=\"NLog.Targets.NetworkTargetConnectionsOverflowAction\">\n          <xs:annotation>\n            <xs:documentation>Action that should be taken if the will be more connections than .</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"onOverflow\" type=\"NLog.Targets.NetworkTargetOverflowAction\">\n          <xs:annotation>\n            <xs:documentation>Action that should be taken if the message is larger than maxMessageSize.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"optimizeBufferReuse\" type=\"xs:boolean\">\n          <xs:annotation>\n            <xs:documentation>Target supports reuse of internal buffers, and doesn't have to constantly allocate new buffers Required for legacy NLog-targets, that expects buffers to remain stable after Write-method exit</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n      </xs:extension>\n    </xs:complexContent>\n  </xs:complexType>\n  <xs:complexType name=\"NLogViewer\">\n    <xs:complexContent>\n      <xs:extension base=\"Target\">\n        <xs:choice minOccurs=\"0\" maxOccurs=\"unbounded\">\n          <xs:element name=\"name\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:string\" />\n          <xs:element name=\"encoding\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:string\" />\n          <xs:element name=\"layout\" minOccurs=\"0\" maxOccurs=\"1\" type=\"Layout\" />\n          <xs:element name=\"lineEnding\" minOccurs=\"0\" maxOccurs=\"1\" type=\"LineEndingMode\" />\n          <xs:element name=\"maxMessageSize\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:integer\" />\n          <xs:element name=\"newLine\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:boolean\" />\n          <xs:element name=\"onConnectionOverflow\" minOccurs=\"0\" maxOccurs=\"1\" type=\"NLog.Targets.NetworkTargetConnectionsOverflowAction\" />\n          <xs:element name=\"maxQueueSize\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:integer\" />\n          <xs:element name=\"maxConnections\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:integer\" />\n          <xs:element name=\"keepConnection\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:boolean\" />\n          <xs:element name=\"connectionCacheSize\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:integer\" />\n          <xs:element name=\"address\" minOccurs=\"0\" maxOccurs=\"1\" type=\"Layout\" />\n          <xs:element name=\"onOverflow\" minOccurs=\"0\" maxOccurs=\"1\" type=\"NLog.Targets.NetworkTargetOverflowAction\" />\n          <xs:element name=\"parameter\" minOccurs=\"0\" maxOccurs=\"unbounded\" type=\"NLog.Targets.NLogViewerParameterInfo\" />\n          <xs:element name=\"ndlcItemSeparator\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:string\" />\n          <xs:element name=\"ndcItemSeparator\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:string\" />\n          <xs:element name=\"includeNLogData\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:boolean\" />\n          <xs:element name=\"includeSourceInfo\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:boolean\" />\n          <xs:element name=\"includeNdlc\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:boolean\" />\n          <xs:element name=\"includeNdc\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:boolean\" />\n          <xs:element name=\"includeMdlc\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:boolean\" />\n          <xs:element name=\"includeMdc\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:boolean\" />\n          <xs:element name=\"includeCallSite\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:boolean\" />\n          <xs:element name=\"includeAllProperties\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:boolean\" />\n          <xs:element name=\"appInfo\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:string\" />\n          <xs:element name=\"loggerName\" minOccurs=\"0\" maxOccurs=\"1\" type=\"Layout\" />\n          <xs:element name=\"optimizeBufferReuse\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:boolean\" />\n        </xs:choice>\n        <xs:attribute name=\"name\" type=\"xs:string\">\n          <xs:annotation>\n            <xs:documentation>Name of the target.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"encoding\" type=\"xs:string\">\n          <xs:annotation>\n            <xs:documentation>Encoding to be used.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"layout\" type=\"SimpleLayoutAttribute\">\n          <xs:annotation>\n            <xs:documentation>Instance of  that is used to format log messages.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"lineEnding\" type=\"LineEndingMode\">\n          <xs:annotation>\n            <xs:documentation>End of line value if a newline is appended at the end of log message .</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"maxMessageSize\" type=\"xs:integer\">\n          <xs:annotation>\n            <xs:documentation>Maximum message size in bytes.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"newLine\" type=\"xs:boolean\">\n          <xs:annotation>\n            <xs:documentation>Indicates whether to append newline at the end of log message.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"onConnectionOverflow\" type=\"NLog.Targets.NetworkTargetConnectionsOverflowAction\">\n          <xs:annotation>\n            <xs:documentation>Action that should be taken if the will be more connections than .</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"maxQueueSize\" type=\"xs:integer\">\n          <xs:annotation>\n            <xs:documentation>Maximum queue size.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"maxConnections\" type=\"xs:integer\">\n          <xs:annotation>\n            <xs:documentation>Maximum current connections. 0 = no maximum.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"keepConnection\" type=\"xs:boolean\">\n          <xs:annotation>\n            <xs:documentation>Indicates whether to keep connection open whenever possible.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"connectionCacheSize\" type=\"xs:integer\">\n          <xs:annotation>\n            <xs:documentation>Size of the connection cache (number of connections which are kept alive).</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"address\" type=\"SimpleLayoutAttribute\">\n          <xs:annotation>\n            <xs:documentation>Network address.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"onOverflow\" type=\"NLog.Targets.NetworkTargetOverflowAction\">\n          <xs:annotation>\n            <xs:documentation>Action that should be taken if the message is larger than maxMessageSize.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"ndlcItemSeparator\" type=\"xs:string\">\n          <xs:annotation>\n            <xs:documentation>NDLC item separator.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"ndcItemSeparator\" type=\"xs:string\">\n          <xs:annotation>\n            <xs:documentation>NDC item separator.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"includeNLogData\" type=\"xs:boolean\">\n          <xs:annotation>\n            <xs:documentation>Indicates whether to include NLog-specific extensions to log4j schema.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"includeSourceInfo\" type=\"xs:boolean\">\n          <xs:annotation>\n            <xs:documentation>Indicates whether to include source info (file name and line number) in the information sent over the network.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"includeNdlc\" type=\"xs:boolean\">\n          <xs:annotation>\n            <xs:documentation>Indicates whether to include contents of the  stack.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"includeNdc\" type=\"xs:boolean\">\n          <xs:annotation>\n            <xs:documentation>Indicates whether to include  stack contents.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"includeMdlc\" type=\"xs:boolean\">\n          <xs:annotation>\n            <xs:documentation>Indicates whether to include  dictionary contents.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"includeMdc\" type=\"xs:boolean\">\n          <xs:annotation>\n            <xs:documentation>Indicates whether to include  dictionary contents.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"includeCallSite\" type=\"xs:boolean\">\n          <xs:annotation>\n            <xs:documentation>Indicates whether to include call site (class and method name) in the information sent over the network.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"includeAllProperties\" type=\"xs:boolean\">\n          <xs:annotation>\n            <xs:documentation>Option to include all properties from the log events</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"appInfo\" type=\"xs:string\">\n          <xs:annotation>\n            <xs:documentation>AppInfo field. By default it's the friendly name of the current AppDomain.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"loggerName\" type=\"SimpleLayoutAttribute\">\n          <xs:annotation>\n            <xs:documentation>Renderer for log4j:event logger-xml-attribute (Default ${logger})</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"optimizeBufferReuse\" type=\"xs:boolean\">\n          <xs:annotation>\n            <xs:documentation>Target supports reuse of internal buffers, and doesn't have to constantly allocate new buffers Required for legacy NLog-targets, that expects buffers to remain stable after Write-method exit</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n      </xs:extension>\n    </xs:complexContent>\n  </xs:complexType>\n  <xs:complexType name=\"Null\">\n    <xs:complexContent>\n      <xs:extension base=\"Target\">\n        <xs:choice minOccurs=\"0\" maxOccurs=\"unbounded\">\n          <xs:element name=\"name\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:string\" />\n          <xs:element name=\"layout\" minOccurs=\"0\" maxOccurs=\"1\" type=\"Layout\" />\n          <xs:element name=\"formatMessage\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:boolean\" />\n          <xs:element name=\"optimizeBufferReuse\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:boolean\" />\n        </xs:choice>\n        <xs:attribute name=\"name\" type=\"xs:string\">\n          <xs:annotation>\n            <xs:documentation>Name of the target.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"layout\" type=\"SimpleLayoutAttribute\">\n          <xs:annotation>\n            <xs:documentation>Layout used to format log messages.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"formatMessage\" type=\"xs:boolean\">\n          <xs:annotation>\n            <xs:documentation>Indicates whether to perform layout calculation.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"optimizeBufferReuse\" type=\"xs:boolean\">\n          <xs:annotation>\n            <xs:documentation>Target supports reuse of internal buffers, and doesn't have to constantly allocate new buffers Required for legacy NLog-targets, that expects buffers to remain stable after Write-method exit</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n      </xs:extension>\n    </xs:complexContent>\n  </xs:complexType>\n  <xs:complexType name=\"OutputDebugString\">\n    <xs:complexContent>\n      <xs:extension base=\"Target\">\n        <xs:choice minOccurs=\"0\" maxOccurs=\"unbounded\">\n          <xs:element name=\"name\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:string\" />\n          <xs:element name=\"layout\" minOccurs=\"0\" maxOccurs=\"1\" type=\"Layout\" />\n          <xs:element name=\"optimizeBufferReuse\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:boolean\" />\n        </xs:choice>\n        <xs:attribute name=\"name\" type=\"xs:string\">\n          <xs:annotation>\n            <xs:documentation>Name of the target.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"layout\" type=\"SimpleLayoutAttribute\">\n          <xs:annotation>\n            <xs:documentation>Layout used to format log messages.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"optimizeBufferReuse\" type=\"xs:boolean\">\n          <xs:annotation>\n            <xs:documentation>Target supports reuse of internal buffers, and doesn't have to constantly allocate new buffers Required for legacy NLog-targets, that expects buffers to remain stable after Write-method exit</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n      </xs:extension>\n    </xs:complexContent>\n  </xs:complexType>\n  <xs:complexType name=\"PerfCounter\">\n    <xs:complexContent>\n      <xs:extension base=\"Target\">\n        <xs:choice minOccurs=\"0\" maxOccurs=\"unbounded\">\n          <xs:element name=\"name\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:string\" />\n          <xs:element name=\"autoCreate\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:boolean\" />\n          <xs:element name=\"categoryName\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:string\" />\n          <xs:element name=\"counterHelp\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:string\" />\n          <xs:element name=\"counterName\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:string\" />\n          <xs:element name=\"counterType\" minOccurs=\"0\" maxOccurs=\"1\" type=\"System.Diagnostics.PerformanceCounterType\" />\n          <xs:element name=\"incrementValue\" minOccurs=\"0\" maxOccurs=\"1\" type=\"Layout\" />\n          <xs:element name=\"instanceName\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:string\" />\n          <xs:element name=\"optimizeBufferReuse\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:boolean\" />\n        </xs:choice>\n        <xs:attribute name=\"name\" type=\"xs:string\">\n          <xs:annotation>\n            <xs:documentation>Name of the target.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"autoCreate\" type=\"xs:boolean\">\n          <xs:annotation>\n            <xs:documentation>Indicates whether performance counter should be automatically created.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"categoryName\" type=\"xs:string\">\n          <xs:annotation>\n            <xs:documentation>Name of the performance counter category.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"counterHelp\" type=\"xs:string\">\n          <xs:annotation>\n            <xs:documentation>Counter help text.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"counterName\" type=\"xs:string\">\n          <xs:annotation>\n            <xs:documentation>Name of the performance counter.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"counterType\" type=\"System.Diagnostics.PerformanceCounterType\">\n          <xs:annotation>\n            <xs:documentation>Performance counter type.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"incrementValue\" type=\"SimpleLayoutAttribute\">\n          <xs:annotation>\n            <xs:documentation>The value by which to increment the counter.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"instanceName\" type=\"xs:string\">\n          <xs:annotation>\n            <xs:documentation>Performance counter instance name.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"optimizeBufferReuse\" type=\"xs:boolean\">\n          <xs:annotation>\n            <xs:documentation>Target supports reuse of internal buffers, and doesn't have to constantly allocate new buffers Required for legacy NLog-targets, that expects buffers to remain stable after Write-method exit</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n      </xs:extension>\n    </xs:complexContent>\n  </xs:complexType>\n  <xs:simpleType name=\"System.Diagnostics.PerformanceCounterType\">\n    <xs:restriction base=\"xs:string\">\n      <xs:enumeration value=\"NumberOfItems32\" />\n      <xs:enumeration value=\"NumberOfItems64\" />\n      <xs:enumeration value=\"NumberOfItemsHEX32\" />\n      <xs:enumeration value=\"NumberOfItemsHEX64\" />\n      <xs:enumeration value=\"RateOfCountsPerSecond32\" />\n      <xs:enumeration value=\"RateOfCountsPerSecond64\" />\n      <xs:enumeration value=\"CountPerTimeInterval32\" />\n      <xs:enumeration value=\"CountPerTimeInterval64\" />\n      <xs:enumeration value=\"RawFraction\" />\n      <xs:enumeration value=\"RawBase\" />\n      <xs:enumeration value=\"AverageTimer32\" />\n      <xs:enumeration value=\"AverageBase\" />\n      <xs:enumeration value=\"AverageCount64\" />\n      <xs:enumeration value=\"SampleFraction\" />\n      <xs:enumeration value=\"SampleCounter\" />\n      <xs:enumeration value=\"SampleBase\" />\n      <xs:enumeration value=\"CounterTimer\" />\n      <xs:enumeration value=\"CounterTimerInverse\" />\n      <xs:enumeration value=\"Timer100Ns\" />\n      <xs:enumeration value=\"Timer100NsInverse\" />\n      <xs:enumeration value=\"ElapsedTime\" />\n      <xs:enumeration value=\"CounterMultiTimer\" />\n      <xs:enumeration value=\"CounterMultiTimerInverse\" />\n      <xs:enumeration value=\"CounterMultiTimer100Ns\" />\n      <xs:enumeration value=\"CounterMultiTimer100NsInverse\" />\n      <xs:enumeration value=\"CounterMultiBase\" />\n      <xs:enumeration value=\"CounterDelta32\" />\n      <xs:enumeration value=\"CounterDelta64\" />\n    </xs:restriction>\n  </xs:simpleType>\n  <xs:complexType name=\"PostFilteringWrapper\">\n    <xs:complexContent>\n      <xs:extension base=\"WrapperTargetBase\">\n        <xs:choice minOccurs=\"0\" maxOccurs=\"unbounded\">\n          <xs:element name=\"name\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:string\" />\n          <xs:element name=\"defaultFilter\" minOccurs=\"0\" maxOccurs=\"1\" type=\"Condition\" />\n          <xs:element name=\"when\" minOccurs=\"0\" maxOccurs=\"unbounded\" type=\"NLog.Targets.Wrappers.FilteringRule\" />\n          <xs:element name=\"optimizeBufferReuse\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:boolean\" />\n        </xs:choice>\n        <xs:attribute name=\"name\" type=\"xs:string\">\n          <xs:annotation>\n            <xs:documentation>Name of the target.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"defaultFilter\" type=\"Condition\">\n          <xs:annotation>\n            <xs:documentation>Default filter to be applied when no specific rule matches.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"optimizeBufferReuse\" type=\"xs:boolean\">\n          <xs:annotation>\n            <xs:documentation>Target supports reuse of internal buffers, and doesn't have to constantly allocate new buffers Required for legacy NLog-targets, that expects buffers to remain stable after Write-method exit</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n      </xs:extension>\n    </xs:complexContent>\n  </xs:complexType>\n  <xs:complexType name=\"NLog.Targets.Wrappers.FilteringRule\">\n    <xs:choice minOccurs=\"0\" maxOccurs=\"unbounded\">\n      <xs:element name=\"exists\" minOccurs=\"0\" maxOccurs=\"1\" type=\"Condition\" />\n      <xs:element name=\"filter\" minOccurs=\"0\" maxOccurs=\"1\" type=\"Condition\" />\n    </xs:choice>\n    <xs:attribute name=\"exists\" type=\"Condition\">\n      <xs:annotation>\n        <xs:documentation>Condition to be tested.</xs:documentation>\n      </xs:annotation>\n    </xs:attribute>\n    <xs:attribute name=\"filter\" type=\"Condition\">\n      <xs:annotation>\n        <xs:documentation>Resulting filter to be applied when the condition matches.</xs:documentation>\n      </xs:annotation>\n    </xs:attribute>\n  </xs:complexType>\n  <xs:complexType name=\"RandomizeGroup\">\n    <xs:complexContent>\n      <xs:extension base=\"CompoundTargetBase\">\n        <xs:choice minOccurs=\"0\" maxOccurs=\"unbounded\">\n          <xs:element name=\"name\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:string\" />\n          <xs:element name=\"optimizeBufferReuse\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:boolean\" />\n        </xs:choice>\n        <xs:attribute name=\"name\" type=\"xs:string\">\n          <xs:annotation>\n            <xs:documentation>Name of the target.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"optimizeBufferReuse\" type=\"xs:boolean\">\n          <xs:annotation>\n            <xs:documentation>Target supports reuse of internal buffers, and doesn't have to constantly allocate new buffers Required for legacy NLog-targets, that expects buffers to remain stable after Write-method exit</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n      </xs:extension>\n    </xs:complexContent>\n  </xs:complexType>\n  <xs:complexType name=\"RepeatingWrapper\">\n    <xs:complexContent>\n      <xs:extension base=\"WrapperTargetBase\">\n        <xs:choice minOccurs=\"0\" maxOccurs=\"unbounded\">\n          <xs:element name=\"name\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:string\" />\n          <xs:element name=\"optimizeBufferReuse\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:boolean\" />\n          <xs:element name=\"repeatCount\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:integer\" />\n        </xs:choice>\n        <xs:attribute name=\"name\" type=\"xs:string\">\n          <xs:annotation>\n            <xs:documentation>Name of the target.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"optimizeBufferReuse\" type=\"xs:boolean\">\n          <xs:annotation>\n            <xs:documentation>Target supports reuse of internal buffers, and doesn't have to constantly allocate new buffers Required for legacy NLog-targets, that expects buffers to remain stable after Write-method exit</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"repeatCount\" type=\"xs:integer\">\n          <xs:annotation>\n            <xs:documentation>Number of times to repeat each log message.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n      </xs:extension>\n    </xs:complexContent>\n  </xs:complexType>\n  <xs:complexType name=\"RetryingWrapper\">\n    <xs:complexContent>\n      <xs:extension base=\"WrapperTargetBase\">\n        <xs:choice minOccurs=\"0\" maxOccurs=\"unbounded\">\n          <xs:element name=\"name\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:string\" />\n          <xs:element name=\"optimizeBufferReuse\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:boolean\" />\n          <xs:element name=\"retryCount\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:integer\" />\n          <xs:element name=\"retryDelayMilliseconds\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:integer\" />\n        </xs:choice>\n        <xs:attribute name=\"name\" type=\"xs:string\">\n          <xs:annotation>\n            <xs:documentation>Name of the target.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"optimizeBufferReuse\" type=\"xs:boolean\">\n          <xs:annotation>\n            <xs:documentation>Target supports reuse of internal buffers, and doesn't have to constantly allocate new buffers Required for legacy NLog-targets, that expects buffers to remain stable after Write-method exit</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"retryCount\" type=\"xs:integer\">\n          <xs:annotation>\n            <xs:documentation>Number of retries that should be attempted on the wrapped target in case of a failure.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"retryDelayMilliseconds\" type=\"xs:integer\">\n          <xs:annotation>\n            <xs:documentation>Time to wait between retries in milliseconds.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n      </xs:extension>\n    </xs:complexContent>\n  </xs:complexType>\n  <xs:complexType name=\"RoundRobinGroup\">\n    <xs:complexContent>\n      <xs:extension base=\"CompoundTargetBase\">\n        <xs:choice minOccurs=\"0\" maxOccurs=\"unbounded\">\n          <xs:element name=\"name\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:string\" />\n          <xs:element name=\"optimizeBufferReuse\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:boolean\" />\n        </xs:choice>\n        <xs:attribute name=\"name\" type=\"xs:string\">\n          <xs:annotation>\n            <xs:documentation>Name of the target.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"optimizeBufferReuse\" type=\"xs:boolean\">\n          <xs:annotation>\n            <xs:documentation>Target supports reuse of internal buffers, and doesn't have to constantly allocate new buffers Required for legacy NLog-targets, that expects buffers to remain stable after Write-method exit</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n      </xs:extension>\n    </xs:complexContent>\n  </xs:complexType>\n  <xs:complexType name=\"SplitGroup\">\n    <xs:complexContent>\n      <xs:extension base=\"CompoundTargetBase\">\n        <xs:choice minOccurs=\"0\" maxOccurs=\"unbounded\">\n          <xs:element name=\"name\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:string\" />\n          <xs:element name=\"optimizeBufferReuse\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:boolean\" />\n        </xs:choice>\n        <xs:attribute name=\"name\" type=\"xs:string\">\n          <xs:annotation>\n            <xs:documentation>Name of the target.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"optimizeBufferReuse\" type=\"xs:boolean\">\n          <xs:annotation>\n            <xs:documentation>Target supports reuse of internal buffers, and doesn't have to constantly allocate new buffers Required for legacy NLog-targets, that expects buffers to remain stable after Write-method exit</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n      </xs:extension>\n    </xs:complexContent>\n  </xs:complexType>\n  <xs:complexType name=\"Trace\">\n    <xs:complexContent>\n      <xs:extension base=\"Target\">\n        <xs:choice minOccurs=\"0\" maxOccurs=\"unbounded\">\n          <xs:element name=\"name\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:string\" />\n          <xs:element name=\"layout\" minOccurs=\"0\" maxOccurs=\"1\" type=\"Layout\" />\n          <xs:element name=\"rawWrite\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:boolean\" />\n          <xs:element name=\"optimizeBufferReuse\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:boolean\" />\n        </xs:choice>\n        <xs:attribute name=\"name\" type=\"xs:string\">\n          <xs:annotation>\n            <xs:documentation>Name of the target.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"layout\" type=\"SimpleLayoutAttribute\">\n          <xs:annotation>\n            <xs:documentation>Layout used to format log messages.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"rawWrite\" type=\"xs:boolean\">\n          <xs:annotation>\n            <xs:documentation>Always use  independent of </xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"optimizeBufferReuse\" type=\"xs:boolean\">\n          <xs:annotation>\n            <xs:documentation>Target supports reuse of internal buffers, and doesn't have to constantly allocate new buffers Required for legacy NLog-targets, that expects buffers to remain stable after Write-method exit</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n      </xs:extension>\n    </xs:complexContent>\n  </xs:complexType>\n  <xs:complexType name=\"WebService\">\n    <xs:complexContent>\n      <xs:extension base=\"Target\">\n        <xs:choice minOccurs=\"0\" maxOccurs=\"unbounded\">\n          <xs:element name=\"name\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:string\" />\n          <xs:element name=\"parameter\" minOccurs=\"0\" maxOccurs=\"unbounded\" type=\"NLog.Targets.MethodCallParameter\" />\n          <xs:element name=\"optimizeBufferReuse\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:boolean\" />\n          <xs:element name=\"includeBOM\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:boolean\" />\n          <xs:element name=\"methodName\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:string\" />\n          <xs:element name=\"namespace\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:string\" />\n          <xs:element name=\"protocol\" minOccurs=\"0\" maxOccurs=\"1\" type=\"NLog.Targets.WebServiceProtocol\" />\n          <xs:element name=\"proxyAddress\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:string\" />\n          <xs:element name=\"encoding\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:string\" />\n          <xs:element name=\"url\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:anyURI\" />\n          <xs:element name=\"escapeDataNLogLegacy\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:boolean\" />\n          <xs:element name=\"escapeDataRfc3986\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:boolean\" />\n          <xs:element name=\"preAuthenticate\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:boolean\" />\n          <xs:element name=\"xmlRoot\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:string\" />\n          <xs:element name=\"xmlRootNamespace\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:string\" />\n          <xs:element name=\"header\" minOccurs=\"0\" maxOccurs=\"unbounded\" type=\"NLog.Targets.MethodCallParameter\" />\n          <xs:element name=\"proxyType\" minOccurs=\"0\" maxOccurs=\"1\" type=\"NLog.Targets.WebServiceProxyType\" />\n        </xs:choice>\n        <xs:attribute name=\"name\" type=\"xs:string\">\n          <xs:annotation>\n            <xs:documentation>Name of the target.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"optimizeBufferReuse\" type=\"xs:boolean\">\n          <xs:annotation>\n            <xs:documentation>Target supports reuse of internal buffers, and doesn't have to constantly allocate new buffers Required for legacy NLog-targets, that expects buffers to remain stable after Write-method exit</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"includeBOM\" type=\"xs:boolean\">\n          <xs:annotation>\n            <xs:documentation>Should we include the BOM (Byte-order-mark) for UTF? Influences the  property. This will only work for UTF-8.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"methodName\" type=\"xs:string\">\n          <xs:annotation>\n            <xs:documentation>Web service method name. Only used with Soap.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"namespace\" type=\"xs:string\">\n          <xs:annotation>\n            <xs:documentation>Web service namespace. Only used with Soap.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"protocol\" type=\"NLog.Targets.WebServiceProtocol\">\n          <xs:annotation>\n            <xs:documentation>Protocol to be used when calling web service.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"proxyAddress\" type=\"xs:string\">\n          <xs:annotation>\n            <xs:documentation>Custom proxy address, include port separated by a colon</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"encoding\" type=\"xs:string\">\n          <xs:annotation>\n            <xs:documentation>Encoding.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"url\" type=\"xs:anyURI\">\n          <xs:annotation>\n            <xs:documentation>Web service URL.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"escapeDataNLogLegacy\" type=\"xs:boolean\">\n          <xs:annotation>\n            <xs:documentation>Value whether escaping be done according to the old NLog style (Very non-standard)</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"escapeDataRfc3986\" type=\"xs:boolean\">\n          <xs:annotation>\n            <xs:documentation>Value whether escaping be done according to Rfc3986 (Supports Internationalized Resource Identifiers - IRIs)</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"preAuthenticate\" type=\"xs:boolean\">\n          <xs:annotation>\n            <xs:documentation>Indicates whether to pre-authenticate the HttpWebRequest (Requires 'Authorization' in  parameters)</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"xmlRoot\" type=\"xs:string\">\n          <xs:annotation>\n            <xs:documentation>Name of the root XML element, if POST of XML document chosen. If so, this property must not be null. (see  and ).</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"xmlRootNamespace\" type=\"xs:string\">\n          <xs:annotation>\n            <xs:documentation>(optional) root namespace of the XML document, if POST of XML document chosen. (see  and ).</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"proxyType\" type=\"NLog.Targets.WebServiceProxyType\">\n          <xs:annotation>\n            <xs:documentation>Proxy configuration when calling web service</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n      </xs:extension>\n    </xs:complexContent>\n  </xs:complexType>\n  <xs:simpleType name=\"NLog.Targets.WebServiceProtocol\">\n    <xs:restriction base=\"xs:string\">\n      <xs:enumeration value=\"Soap11\" />\n      <xs:enumeration value=\"Soap12\" />\n      <xs:enumeration value=\"HttpPost\" />\n      <xs:enumeration value=\"HttpGet\" />\n      <xs:enumeration value=\"JsonPost\" />\n      <xs:enumeration value=\"XmlPost\" />\n    </xs:restriction>\n  </xs:simpleType>\n  <xs:simpleType name=\"NLog.Targets.WebServiceProxyType\">\n    <xs:restriction base=\"xs:string\">\n      <xs:enumeration value=\"DefaultWebProxy\" />\n      <xs:enumeration value=\"AutoProxy\" />\n      <xs:enumeration value=\"NoProxy\" />\n      <xs:enumeration value=\"ProxyAddress\" />\n    </xs:restriction>\n  </xs:simpleType>\n  <xs:complexType name=\"CompoundLayout\">\n    <xs:complexContent>\n      <xs:extension base=\"Layout\">\n        <xs:choice minOccurs=\"0\" maxOccurs=\"unbounded\">\n          <xs:element name=\"layout\" minOccurs=\"0\" maxOccurs=\"unbounded\" type=\"Layout\" />\n        </xs:choice>\n      </xs:extension>\n    </xs:complexContent>\n  </xs:complexType>\n  <xs:complexType name=\"Layout\">\n    <xs:choice minOccurs=\"0\" maxOccurs=\"unbounded\" />\n  </xs:complexType>\n  <xs:complexType name=\"CsvLayout\">\n    <xs:complexContent>\n      <xs:extension base=\"Layout\">\n        <xs:choice minOccurs=\"0\" maxOccurs=\"unbounded\">\n          <xs:element name=\"footer\" minOccurs=\"0\" maxOccurs=\"1\" type=\"Layout\" />\n          <xs:element name=\"header\" minOccurs=\"0\" maxOccurs=\"1\" type=\"Layout\" />\n          <xs:element name=\"layout\" minOccurs=\"0\" maxOccurs=\"1\" type=\"Layout\" />\n          <xs:element name=\"column\" minOccurs=\"0\" maxOccurs=\"unbounded\" type=\"NLog.Layouts.CsvColumn\" />\n          <xs:element name=\"customColumnDelimiter\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:string\" />\n          <xs:element name=\"delimiter\" minOccurs=\"0\" maxOccurs=\"1\" type=\"NLog.Layouts.CsvColumnDelimiterMode\" />\n          <xs:element name=\"quoteChar\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:string\" />\n          <xs:element name=\"quoting\" minOccurs=\"0\" maxOccurs=\"1\" type=\"NLog.Layouts.CsvQuotingMode\" />\n          <xs:element name=\"withHeader\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:boolean\" />\n        </xs:choice>\n        <xs:attribute name=\"footer\" type=\"SimpleLayoutAttribute\">\n          <xs:annotation>\n            <xs:documentation>Footer layout.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"header\" type=\"SimpleLayoutAttribute\">\n          <xs:annotation>\n            <xs:documentation>Header layout.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"layout\" type=\"SimpleLayoutAttribute\">\n          <xs:annotation>\n            <xs:documentation>Body layout (can be repeated multiple times).</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"customColumnDelimiter\" type=\"xs:string\">\n          <xs:annotation>\n            <xs:documentation>Custom column delimiter value (valid when ColumnDelimiter is set to 'Custom').</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"delimiter\" type=\"NLog.Layouts.CsvColumnDelimiterMode\">\n          <xs:annotation>\n            <xs:documentation>Column delimiter.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"quoteChar\" type=\"xs:string\">\n          <xs:annotation>\n            <xs:documentation>Quote Character.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"quoting\" type=\"NLog.Layouts.CsvQuotingMode\">\n          <xs:annotation>\n            <xs:documentation>Quoting mode.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"withHeader\" type=\"xs:boolean\">\n          <xs:annotation>\n            <xs:documentation>Indicates whether CVS should include header.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n      </xs:extension>\n    </xs:complexContent>\n  </xs:complexType>\n  <xs:simpleType name=\"NLog.Layouts.CsvColumnDelimiterMode\">\n    <xs:restriction base=\"xs:string\">\n      <xs:enumeration value=\"Auto\" />\n      <xs:enumeration value=\"Comma\" />\n      <xs:enumeration value=\"Semicolon\" />\n      <xs:enumeration value=\"Tab\" />\n      <xs:enumeration value=\"Pipe\" />\n      <xs:enumeration value=\"Space\" />\n      <xs:enumeration value=\"Custom\" />\n    </xs:restriction>\n  </xs:simpleType>\n  <xs:simpleType name=\"NLog.Layouts.CsvQuotingMode\">\n    <xs:restriction base=\"xs:string\">\n      <xs:enumeration value=\"All\" />\n      <xs:enumeration value=\"Nothing\" />\n      <xs:enumeration value=\"Auto\" />\n    </xs:restriction>\n  </xs:simpleType>\n  <xs:complexType name=\"NLog.Layouts.CsvColumn\">\n    <xs:choice minOccurs=\"0\" maxOccurs=\"unbounded\">\n      <xs:element name=\"layout\" minOccurs=\"0\" maxOccurs=\"1\" type=\"Layout\" />\n      <xs:element name=\"name\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:string\" />\n    </xs:choice>\n    <xs:attribute name=\"layout\" type=\"SimpleLayoutAttribute\">\n      <xs:annotation>\n        <xs:documentation>Layout of the column.</xs:documentation>\n      </xs:annotation>\n    </xs:attribute>\n    <xs:attribute name=\"name\" type=\"xs:string\">\n      <xs:annotation>\n        <xs:documentation>Name of the column.</xs:documentation>\n      </xs:annotation>\n    </xs:attribute>\n  </xs:complexType>\n  <xs:complexType name=\"JsonLayout\">\n    <xs:complexContent>\n      <xs:extension base=\"Layout\">\n        <xs:choice minOccurs=\"0\" maxOccurs=\"unbounded\">\n          <xs:element name=\"attribute\" minOccurs=\"0\" maxOccurs=\"unbounded\" type=\"NLog.Layouts.JsonAttribute\" />\n          <xs:element name=\"excludeProperties\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:string\" />\n          <xs:element name=\"includeAllProperties\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:boolean\" />\n          <xs:element name=\"includeMdc\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:boolean\" />\n          <xs:element name=\"includeMdlc\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:boolean\" />\n          <xs:element name=\"renderEmptyObject\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:boolean\" />\n          <xs:element name=\"suppressSpaces\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:boolean\" />\n          <xs:element name=\"maxRecursionLimit\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:integer\" />\n        </xs:choice>\n        <xs:attribute name=\"excludeProperties\" type=\"xs:string\">\n          <xs:annotation>\n            <xs:documentation>List of property names to exclude when  is true</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"includeAllProperties\" type=\"xs:boolean\">\n          <xs:annotation>\n            <xs:documentation>Option to include all properties from the log event (as JSON)</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"includeMdc\" type=\"xs:boolean\">\n          <xs:annotation>\n            <xs:documentation>Indicates whether to include contents of the  dictionary.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"includeMdlc\" type=\"xs:boolean\">\n          <xs:annotation>\n            <xs:documentation>Indicates whether to include contents of the  dictionary.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"renderEmptyObject\" type=\"xs:boolean\">\n          <xs:annotation>\n            <xs:documentation>Option to render the empty object value {}</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"suppressSpaces\" type=\"xs:boolean\">\n          <xs:annotation>\n            <xs:documentation>Option to suppress the extra spaces in the output json</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"maxRecursionLimit\" type=\"xs:integer\">\n          <xs:annotation>\n            <xs:documentation>How far should the JSON serializer follow object references before backing off</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n      </xs:extension>\n    </xs:complexContent>\n  </xs:complexType>\n  <xs:complexType name=\"NLog.Layouts.JsonAttribute\">\n    <xs:choice minOccurs=\"0\" maxOccurs=\"unbounded\">\n      <xs:element name=\"layout\" minOccurs=\"0\" maxOccurs=\"1\" type=\"Layout\" />\n      <xs:element name=\"name\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:string\" />\n      <xs:element name=\"encode\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:boolean\" />\n      <xs:element name=\"escapeUnicode\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:boolean\" />\n      <xs:element name=\"includeEmptyValue\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:boolean\" />\n    </xs:choice>\n    <xs:attribute name=\"layout\" type=\"SimpleLayoutAttribute\">\n      <xs:annotation>\n        <xs:documentation>Layout that will be rendered as the attribute's value.</xs:documentation>\n      </xs:annotation>\n    </xs:attribute>\n    <xs:attribute name=\"name\" type=\"xs:string\">\n      <xs:annotation>\n        <xs:documentation>Name of the attribute.</xs:documentation>\n      </xs:annotation>\n    </xs:attribute>\n    <xs:attribute name=\"encode\" type=\"xs:boolean\">\n      <xs:annotation>\n        <xs:documentation>Determines wether or not this attribute will be Json encoded.</xs:documentation>\n      </xs:annotation>\n    </xs:attribute>\n    <xs:attribute name=\"escapeUnicode\" type=\"xs:boolean\">\n      <xs:annotation>\n        <xs:documentation>Indicates whether to escape non-ascii characters</xs:documentation>\n      </xs:annotation>\n    </xs:attribute>\n    <xs:attribute name=\"includeEmptyValue\" type=\"xs:boolean\">\n      <xs:annotation>\n        <xs:documentation>Whether an attribute with empty value should be included in the output</xs:documentation>\n      </xs:annotation>\n    </xs:attribute>\n  </xs:complexType>\n  <xs:complexType name=\"LayoutWithHeaderAndFooter\">\n    <xs:complexContent>\n      <xs:extension base=\"Layout\">\n        <xs:choice minOccurs=\"0\" maxOccurs=\"unbounded\">\n          <xs:element name=\"footer\" minOccurs=\"0\" maxOccurs=\"1\" type=\"Layout\" />\n          <xs:element name=\"header\" minOccurs=\"0\" maxOccurs=\"1\" type=\"Layout\" />\n          <xs:element name=\"layout\" minOccurs=\"0\" maxOccurs=\"1\" type=\"Layout\" />\n        </xs:choice>\n        <xs:attribute name=\"footer\" type=\"SimpleLayoutAttribute\">\n          <xs:annotation>\n            <xs:documentation>Footer layout.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"header\" type=\"SimpleLayoutAttribute\">\n          <xs:annotation>\n            <xs:documentation>Header layout.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"layout\" type=\"SimpleLayoutAttribute\">\n          <xs:annotation>\n            <xs:documentation>Body layout (can be repeated multiple times).</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n      </xs:extension>\n    </xs:complexContent>\n  </xs:complexType>\n  <xs:complexType name=\"Log4JXmlEventLayout\">\n    <xs:complexContent>\n      <xs:extension base=\"Layout\">\n        <xs:choice minOccurs=\"0\" maxOccurs=\"unbounded\">\n          <xs:element name=\"includeAllProperties\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:boolean\" />\n          <xs:element name=\"includeMdc\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:boolean\" />\n          <xs:element name=\"includeMdlc\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:boolean\" />\n          <xs:element name=\"includeNdc\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:boolean\" />\n          <xs:element name=\"includeNdlc\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:boolean\" />\n        </xs:choice>\n        <xs:attribute name=\"includeAllProperties\" type=\"xs:boolean\">\n          <xs:annotation>\n            <xs:documentation>Option to include all properties from the log events</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"includeMdc\" type=\"xs:boolean\">\n          <xs:annotation>\n            <xs:documentation>Indicates whether to include contents of the  dictionary.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"includeMdlc\" type=\"xs:boolean\">\n          <xs:annotation>\n            <xs:documentation>Indicates whether to include contents of the  dictionary.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"includeNdc\" type=\"xs:boolean\">\n          <xs:annotation>\n            <xs:documentation>Indicates whether to include contents of the  stack.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"includeNdlc\" type=\"xs:boolean\">\n          <xs:annotation>\n            <xs:documentation>Indicates whether to include contents of the  stack.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n      </xs:extension>\n    </xs:complexContent>\n  </xs:complexType>\n  <xs:complexType name=\"SimpleLayout\">\n    <xs:complexContent>\n      <xs:extension base=\"Layout\">\n        <xs:choice minOccurs=\"0\" maxOccurs=\"unbounded\">\n          <xs:element name=\"text\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:string\" />\n        </xs:choice>\n        <xs:attribute name=\"text\" type=\"xs:string\">\n          <xs:annotation>\n            <xs:documentation>Layout text.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n      </xs:extension>\n    </xs:complexContent>\n  </xs:complexType>\n  <xs:complexType name=\"when\">\n    <xs:complexContent>\n      <xs:extension base=\"Filter\">\n        <xs:choice minOccurs=\"0\" maxOccurs=\"unbounded\">\n          <xs:element name=\"action\" minOccurs=\"0\" maxOccurs=\"1\" type=\"FilterResult\" />\n          <xs:element name=\"condition\" minOccurs=\"0\" maxOccurs=\"1\" type=\"Condition\" />\n        </xs:choice>\n        <xs:attribute name=\"action\" type=\"FilterResult\">\n          <xs:annotation>\n            <xs:documentation>Action to be taken when filter matches.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"condition\" type=\"Condition\">\n          <xs:annotation>\n            <xs:documentation>Condition expression.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n      </xs:extension>\n    </xs:complexContent>\n  </xs:complexType>\n  <xs:simpleType name=\"FilterResult\">\n    <xs:restriction base=\"xs:string\">\n      <xs:enumeration value=\"Neutral\" />\n      <xs:enumeration value=\"Log\" />\n      <xs:enumeration value=\"Ignore\" />\n      <xs:enumeration value=\"LogFinal\" />\n      <xs:enumeration value=\"IgnoreFinal\" />\n    </xs:restriction>\n  </xs:simpleType>\n  <xs:complexType name=\"whenContains\">\n    <xs:complexContent>\n      <xs:extension base=\"Filter\">\n        <xs:choice minOccurs=\"0\" maxOccurs=\"unbounded\">\n          <xs:element name=\"action\" minOccurs=\"0\" maxOccurs=\"1\" type=\"FilterResult\" />\n          <xs:element name=\"ignoreCase\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:boolean\" />\n          <xs:element name=\"layout\" minOccurs=\"0\" maxOccurs=\"1\" type=\"Layout\" />\n          <xs:element name=\"substring\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:string\" />\n        </xs:choice>\n        <xs:attribute name=\"action\" type=\"FilterResult\">\n          <xs:annotation>\n            <xs:documentation>Action to be taken when filter matches.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"ignoreCase\" type=\"xs:boolean\">\n          <xs:annotation>\n            <xs:documentation>Indicates whether to ignore case when comparing strings.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"layout\" type=\"SimpleLayoutAttribute\">\n          <xs:annotation>\n            <xs:documentation>Layout to be used to filter log messages.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"substring\" type=\"xs:string\">\n          <xs:annotation>\n            <xs:documentation>Substring to be matched.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n      </xs:extension>\n    </xs:complexContent>\n  </xs:complexType>\n  <xs:complexType name=\"whenEqual\">\n    <xs:complexContent>\n      <xs:extension base=\"Filter\">\n        <xs:choice minOccurs=\"0\" maxOccurs=\"unbounded\">\n          <xs:element name=\"action\" minOccurs=\"0\" maxOccurs=\"1\" type=\"FilterResult\" />\n          <xs:element name=\"compareTo\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:string\" />\n          <xs:element name=\"ignoreCase\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:boolean\" />\n          <xs:element name=\"layout\" minOccurs=\"0\" maxOccurs=\"1\" type=\"Layout\" />\n        </xs:choice>\n        <xs:attribute name=\"action\" type=\"FilterResult\">\n          <xs:annotation>\n            <xs:documentation>Action to be taken when filter matches.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"compareTo\" type=\"xs:string\">\n          <xs:annotation>\n            <xs:documentation>String to compare the layout to.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"ignoreCase\" type=\"xs:boolean\">\n          <xs:annotation>\n            <xs:documentation>Indicates whether to ignore case when comparing strings.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"layout\" type=\"SimpleLayoutAttribute\">\n          <xs:annotation>\n            <xs:documentation>Layout to be used to filter log messages.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n      </xs:extension>\n    </xs:complexContent>\n  </xs:complexType>\n  <xs:complexType name=\"whenNotContains\">\n    <xs:complexContent>\n      <xs:extension base=\"Filter\">\n        <xs:choice minOccurs=\"0\" maxOccurs=\"unbounded\">\n          <xs:element name=\"action\" minOccurs=\"0\" maxOccurs=\"1\" type=\"FilterResult\" />\n          <xs:element name=\"ignoreCase\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:boolean\" />\n          <xs:element name=\"layout\" minOccurs=\"0\" maxOccurs=\"1\" type=\"Layout\" />\n          <xs:element name=\"substring\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:string\" />\n        </xs:choice>\n        <xs:attribute name=\"action\" type=\"FilterResult\">\n          <xs:annotation>\n            <xs:documentation>Action to be taken when filter matches.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"ignoreCase\" type=\"xs:boolean\">\n          <xs:annotation>\n            <xs:documentation>Indicates whether to ignore case when comparing strings.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"layout\" type=\"SimpleLayoutAttribute\">\n          <xs:annotation>\n            <xs:documentation>Layout to be used to filter log messages.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"substring\" type=\"xs:string\">\n          <xs:annotation>\n            <xs:documentation>Substring to be matched.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n      </xs:extension>\n    </xs:complexContent>\n  </xs:complexType>\n  <xs:complexType name=\"whenNotEqual\">\n    <xs:complexContent>\n      <xs:extension base=\"Filter\">\n        <xs:choice minOccurs=\"0\" maxOccurs=\"unbounded\">\n          <xs:element name=\"action\" minOccurs=\"0\" maxOccurs=\"1\" type=\"FilterResult\" />\n          <xs:element name=\"compareTo\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:string\" />\n          <xs:element name=\"ignoreCase\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:boolean\" />\n          <xs:element name=\"layout\" minOccurs=\"0\" maxOccurs=\"1\" type=\"Layout\" />\n        </xs:choice>\n        <xs:attribute name=\"action\" type=\"FilterResult\">\n          <xs:annotation>\n            <xs:documentation>Action to be taken when filter matches.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"compareTo\" type=\"xs:string\">\n          <xs:annotation>\n            <xs:documentation>String to compare the layout to.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"ignoreCase\" type=\"xs:boolean\">\n          <xs:annotation>\n            <xs:documentation>Indicates whether to ignore case when comparing strings.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"layout\" type=\"SimpleLayoutAttribute\">\n          <xs:annotation>\n            <xs:documentation>Layout to be used to filter log messages.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n      </xs:extension>\n    </xs:complexContent>\n  </xs:complexType>\n  <xs:complexType name=\"whenRepeated\">\n    <xs:complexContent>\n      <xs:extension base=\"Filter\">\n        <xs:choice minOccurs=\"0\" maxOccurs=\"unbounded\">\n          <xs:element name=\"action\" minOccurs=\"0\" maxOccurs=\"1\" type=\"FilterResult\" />\n          <xs:element name=\"defaultFilterCacheSize\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:integer\" />\n          <xs:element name=\"includeFirst\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:boolean\" />\n          <xs:element name=\"layout\" minOccurs=\"0\" maxOccurs=\"1\" type=\"Layout\" />\n          <xs:element name=\"maxFilterCacheSize\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:integer\" />\n          <xs:element name=\"maxLength\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:integer\" />\n          <xs:element name=\"timeoutSeconds\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:integer\" />\n          <xs:element name=\"optimizeBufferDefaultLength\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:integer\" />\n          <xs:element name=\"optimizeBufferReuse\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:boolean\" />\n          <xs:element name=\"filterCountMessageAppendFormat\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:string\" />\n          <xs:element name=\"filterCountPropertyName\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:string\" />\n        </xs:choice>\n        <xs:attribute name=\"action\" type=\"FilterResult\">\n          <xs:annotation>\n            <xs:documentation>Action to be taken when filter matches.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"defaultFilterCacheSize\" type=\"xs:integer\">\n          <xs:annotation>\n            <xs:documentation>Default number of unique filter values to expect, will automatically increase if needed</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"includeFirst\" type=\"xs:boolean\">\n          <xs:annotation>\n            <xs:documentation>Applies the configured action to the initial logevent that starts the timeout period. Used to configure that it should ignore all events until timeout.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"layout\" type=\"SimpleLayoutAttribute\">\n          <xs:annotation>\n            <xs:documentation>Layout to be used to filter log messages.</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"maxFilterCacheSize\" type=\"xs:integer\">\n          <xs:annotation>\n            <xs:documentation>Max number of unique filter values to expect simultaneously</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"maxLength\" type=\"xs:integer\">\n          <xs:annotation>\n            <xs:documentation>Max length of filter values, will truncate if above limit</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"timeoutSeconds\" type=\"xs:integer\">\n          <xs:annotation>\n            <xs:documentation>How long before a filter expires, and logging is accepted again</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"optimizeBufferDefaultLength\" type=\"xs:integer\">\n          <xs:annotation>\n            <xs:documentation>Default buffer size for the internal buffers</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"optimizeBufferReuse\" type=\"xs:boolean\">\n          <xs:annotation>\n            <xs:documentation>Reuse internal buffers, and doesn't have to constantly allocate new buffers</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"filterCountMessageAppendFormat\" type=\"xs:string\">\n          <xs:annotation>\n            <xs:documentation>Append FilterCount to the  when an event is no longer filtered</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n        <xs:attribute name=\"filterCountPropertyName\" type=\"xs:string\">\n          <xs:annotation>\n            <xs:documentation>Insert FilterCount value into  when an event is no longer filtered</xs:documentation>\n          </xs:annotation>\n        </xs:attribute>\n      </xs:extension>\n    </xs:complexContent>\n  </xs:complexType>\n  <xs:complexType name=\"AccurateLocal\">\n    <xs:complexContent>\n      <xs:extension base=\"TimeSource\">\n        <xs:choice minOccurs=\"0\" maxOccurs=\"unbounded\" />\n      </xs:extension>\n    </xs:complexContent>\n  </xs:complexType>\n  <xs:complexType name=\"AccurateUTC\">\n    <xs:complexContent>\n      <xs:extension base=\"TimeSource\">\n        <xs:choice minOccurs=\"0\" maxOccurs=\"unbounded\" />\n      </xs:extension>\n    </xs:complexContent>\n  </xs:complexType>\n  <xs:complexType name=\"FastLocal\">\n    <xs:complexContent>\n      <xs:extension base=\"TimeSource\">\n        <xs:choice minOccurs=\"0\" maxOccurs=\"unbounded\" />\n      </xs:extension>\n    </xs:complexContent>\n  </xs:complexType>\n  <xs:complexType name=\"FastUTC\">\n    <xs:complexContent>\n      <xs:extension base=\"TimeSource\">\n        <xs:choice minOccurs=\"0\" maxOccurs=\"unbounded\" />\n      </xs:extension>\n    </xs:complexContent>\n  </xs:complexType>\n</xs:schema>"
  },
  {
    "path": "src2/Samples/Sample.RebusRabbitMqPublisher/Program.cs",
    "content": "﻿using System;\nusing Topshelf;\n\nnamespace Sample.RebusRabbitMqPublisher\n{\n    class Program\n    {\n        static int Main()\n        {\n\n            return (int)HostFactory.Run(x =>\n            {\n                x.UseAssemblyInfoForServiceInfo();\n\n                x.Service<SampleRebusRabbitMqPublisherBootstrap>(s =>\n                {\n                    s.ConstructUsing(() => new SampleRebusRabbitMqPublisherBootstrap());\n                    s.WhenStarted(v => v.Start());\n                    s.WhenStopped(v => v.Stop());\n                    s.BeforeStartingService(_ => { Console.WriteLine(\"Processor is starting\"); });\n                    s.BeforeStoppingService(_ => { Console.WriteLine(\"Processor is stopping\"); });\n                });\n\n                // x.StartAutomatically();\n\n                x.SetStartTimeout(TimeSpan.FromSeconds(10));\n                x.SetStopTimeout(TimeSpan.FromSeconds(10));\n\n                x.EnableServiceRecovery(r =>\n                {\n                    r.RestartService(1);\n                    //r.RunProgram(7, \"ping google.com\");\n                    r.RestartComputer(5, \"message\");\n\n                    r.OnCrashOnly();\n                    r.SetResetPeriod(2);\n                });\n\n                //x.AddCommandLineSwitch(\"throwonstart\", v => throwOnStart = v);\n                //x.AddCommandLineSwitch(\"throwonstop\", v => throwOnStop = v);\n                //x.AddCommandLineSwitch(\"throwunhandled\", v => throwUnhandled = v);\n\n                x.OnException((exception) =>\n                {\n                });\n            });\n        }\n    }\n}\n"
  },
  {
    "path": "src2/Samples/Sample.RebusRabbitMqPublisher/Properties/AssemblyInfo.cs",
    "content": "﻿using System.Reflection;\nusing System.Runtime.CompilerServices;\nusing System.Runtime.InteropServices;\n\n// 有关程序集的一般信息由以下\n// 控制。更改这些特性值可修改\n// 与程序集关联的信息。\n[assembly: AssemblyTitle(\"Sample.RebusRabbitMqPublisher\")]\n[assembly: AssemblyDescription(\"\")]\n[assembly: AssemblyConfiguration(\"\")]\n[assembly: AssemblyCompany(\"\")]\n[assembly: AssemblyProduct(\"Sample.RebusRabbitMqPublisher\")]\n[assembly: AssemblyCopyright(\"Copyright ©  2017\")]\n[assembly: AssemblyTrademark(\"\")]\n[assembly: AssemblyCulture(\"\")]\n\n//将 ComVisible 设置为 false 将使此程序集中的类型\n//对 COM 组件不可见。  如果需要从 COM 访问此程序集中的类型，\n//请将此类型的 ComVisible 特性设置为 true。\n[assembly: ComVisible(false)]\n\n// 如果此项目向 COM 公开，则下列 GUID 用于类型库的 ID\n[assembly: Guid(\"db9b68cd-6868-4e94-9a94-6a9e70d7c48f\")]\n\n// 程序集的版本信息由下列四个值组成: \n//\n//      主版本\n//      次版本\n//      生成号\n//      修订号\n//\n//可以指定所有这些值，也可以使用“生成号”和“修订号”的默认值，\n// 方法是按如下所示使用“*”: :\n// [assembly: AssemblyVersion(\"1.0.*\")]\n[assembly: AssemblyVersion(\"1.0.0.0\")]\n[assembly: AssemblyFileVersion(\"1.0.0.0\")]\n"
  },
  {
    "path": "src2/Samples/Sample.RebusRabbitMqPublisher/Sample.RebusRabbitMqPublisher.csproj",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<Project ToolsVersion=\"14.0\" DefaultTargets=\"Build\" xmlns=\"http://schemas.microsoft.com/developer/msbuild/2003\">\n  <Import Project=\"$(MSBuildExtensionsPath)\\$(MSBuildToolsVersion)\\Microsoft.Common.props\" Condition=\"Exists('$(MSBuildExtensionsPath)\\$(MSBuildToolsVersion)\\Microsoft.Common.props')\" />\n  <PropertyGroup>\n    <Configuration Condition=\" '$(Configuration)' == '' \">Debug</Configuration>\n    <Platform Condition=\" '$(Platform)' == '' \">AnyCPU</Platform>\n    <ProjectGuid>{DB9B68CD-6868-4E94-9A94-6A9E70D7C48F}</ProjectGuid>\n    <OutputType>Exe</OutputType>\n    <AppDesignerFolder>Properties</AppDesignerFolder>\n    <RootNamespace>Sample</RootNamespace>\n    <AssemblyName>Sample.RebusRabbitMqPublisher</AssemblyName>\n    <TargetFrameworkVersion>v4.6.1</TargetFrameworkVersion>\n    <FileAlignment>512</FileAlignment>\n    <AutoGenerateBindingRedirects>true</AutoGenerateBindingRedirects>\n    <NuGetPackageImportStamp>\n    </NuGetPackageImportStamp>\n  </PropertyGroup>\n  <PropertyGroup Condition=\" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' \">\n    <PlatformTarget>AnyCPU</PlatformTarget>\n    <DebugSymbols>true</DebugSymbols>\n    <DebugType>full</DebugType>\n    <Optimize>false</Optimize>\n    <OutputPath>bin\\Debug\\</OutputPath>\n    <DefineConstants>DEBUG;TRACE</DefineConstants>\n    <ErrorReport>prompt</ErrorReport>\n    <WarningLevel>4</WarningLevel>\n  </PropertyGroup>\n  <PropertyGroup Condition=\" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' \">\n    <PlatformTarget>AnyCPU</PlatformTarget>\n    <DebugType>pdbonly</DebugType>\n    <Optimize>true</Optimize>\n    <OutputPath>bin\\Release\\</OutputPath>\n    <DefineConstants>TRACE</DefineConstants>\n    <ErrorReport>prompt</ErrorReport>\n    <WarningLevel>4</WarningLevel>\n  </PropertyGroup>\n  <ItemGroup>\n    <Reference Include=\"Abp, Version=3.7.2.0, Culture=neutral, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\..\\packages\\Abp.3.7.2\\lib\\netstandard2.0\\Abp.dll</HintPath>\n    </Reference>\n    <Reference Include=\"Abplus, Version=0.1.7.6, Culture=neutral, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\..\\packages\\Abplus.0.1.7.6\\lib\\net461\\Abplus.dll</HintPath>\n    </Reference>\n    <Reference Include=\"Abplus.MqMessages.RebusCore, Version=0.1.6.3, Culture=neutral, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\..\\packages\\Abplus.MqMessages.RebusCore.0.1.6.3\\lib\\net461\\Abplus.MqMessages.RebusCore.dll</HintPath>\n    </Reference>\n    <Reference Include=\"Abplus.MqMessages.RebusRabbitMqPublisher, Version=0.1.6.3, Culture=neutral, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\..\\packages\\Abplus.MqMessages.RebusRabbitMqPublisher.0.1.6.3\\lib\\net461\\Abplus.MqMessages.RebusRabbitMqPublisher.dll</HintPath>\n    </Reference>\n    <Reference Include=\"Castle.Core, Version=4.0.0.0, Culture=neutral, PublicKeyToken=407dd0808d44fbdc, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\..\\packages\\Castle.Core.4.3.1\\lib\\net45\\Castle.Core.dll</HintPath>\n    </Reference>\n    <Reference Include=\"Castle.Facilities.Logging, Version=4.0.0.0, Culture=neutral, PublicKeyToken=407dd0808d44fbdc, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\..\\packages\\Castle.LoggingFacility.4.1.0\\lib\\net45\\Castle.Facilities.Logging.dll</HintPath>\n    </Reference>\n    <Reference Include=\"Castle.Services.Logging.NLogIntegration, Version=3.3.0.0, Culture=neutral, PublicKeyToken=407dd0808d44fbdc, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\..\\packages\\Castle.Core-NLog.3.3.0\\lib\\net45\\Castle.Services.Logging.NLogIntegration.dll</HintPath>\n      <Private>True</Private>\n    </Reference>\n    <Reference Include=\"Castle.Windsor, Version=4.0.0.0, Culture=neutral, PublicKeyToken=407dd0808d44fbdc, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\..\\packages\\Castle.Windsor.4.1.0\\lib\\net45\\Castle.Windsor.dll</HintPath>\n    </Reference>\n    <Reference Include=\"JetBrains.Annotations, Version=11.1.0.0, Culture=neutral, PublicKeyToken=1010a0d8d6380325, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\..\\packages\\JetBrains.Annotations.11.1.0\\lib\\net20\\JetBrains.Annotations.dll</HintPath>\n    </Reference>\n    <Reference Include=\"Microsoft.Diagnostics.Tracing.EventSource, Version=2.0.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\..\\packages\\Microsoft.Diagnostics.Tracing.EventSource.Redist.2.0.0\\lib\\net461\\Microsoft.Diagnostics.Tracing.EventSource.dll</HintPath>\n    </Reference>\n    <Reference Include=\"Microsoft.Extensions.Caching.Abstractions, Version=2.1.0.0, Culture=neutral, PublicKeyToken=adb9793829ddae60, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\..\\packages\\Microsoft.Extensions.Caching.Abstractions.2.1.0\\lib\\netstandard2.0\\Microsoft.Extensions.Caching.Abstractions.dll</HintPath>\n    </Reference>\n    <Reference Include=\"Microsoft.Extensions.Caching.Memory, Version=2.1.0.0, Culture=neutral, PublicKeyToken=adb9793829ddae60, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\..\\packages\\Microsoft.Extensions.Caching.Memory.2.1.0\\lib\\netstandard2.0\\Microsoft.Extensions.Caching.Memory.dll</HintPath>\n    </Reference>\n    <Reference Include=\"Microsoft.Extensions.DependencyInjection.Abstractions, Version=2.1.0.0, Culture=neutral, PublicKeyToken=adb9793829ddae60, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\..\\packages\\Microsoft.Extensions.DependencyInjection.Abstractions.2.1.0\\lib\\netstandard2.0\\Microsoft.Extensions.DependencyInjection.Abstractions.dll</HintPath>\n    </Reference>\n    <Reference Include=\"Microsoft.Extensions.Options, Version=2.1.0.0, Culture=neutral, PublicKeyToken=adb9793829ddae60, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\..\\packages\\Microsoft.Extensions.Options.2.1.0\\lib\\netstandard2.0\\Microsoft.Extensions.Options.dll</HintPath>\n    </Reference>\n    <Reference Include=\"Microsoft.Extensions.Primitives, Version=2.1.0.0, Culture=neutral, PublicKeyToken=adb9793829ddae60, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\..\\packages\\Microsoft.Extensions.Primitives.2.1.0\\lib\\netstandard2.0\\Microsoft.Extensions.Primitives.dll</HintPath>\n    </Reference>\n    <Reference Include=\"Microsoft.Threading.Tasks, Version=1.0.12.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\..\\packages\\Microsoft.Bcl.Async.1.0.168\\lib\\net40\\Microsoft.Threading.Tasks.dll</HintPath>\n      <Private>True</Private>\n    </Reference>\n    <Reference Include=\"Microsoft.Threading.Tasks.Extensions, Version=1.0.12.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\..\\packages\\Microsoft.Bcl.Async.1.0.168\\lib\\net40\\Microsoft.Threading.Tasks.Extensions.dll</HintPath>\n      <Private>True</Private>\n    </Reference>\n    <Reference Include=\"Microsoft.Threading.Tasks.Extensions.Desktop, Version=1.0.168.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\..\\packages\\Microsoft.Bcl.Async.1.0.168\\lib\\net40\\Microsoft.Threading.Tasks.Extensions.Desktop.dll</HintPath>\n      <Private>True</Private>\n    </Reference>\n    <Reference Include=\"Newtonsoft.Json, Version=11.0.0.0, Culture=neutral, PublicKeyToken=30ad4fe6b2a6aeed, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\..\\packages\\Newtonsoft.Json.11.0.2\\lib\\net45\\Newtonsoft.Json.dll</HintPath>\n    </Reference>\n    <Reference Include=\"Nito.AsyncEx, Version=4.0.1.0, Culture=neutral, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\..\\packages\\Nito.AsyncEx.4.0.1\\lib\\net45\\Nito.AsyncEx.dll</HintPath>\n      <Private>True</Private>\n    </Reference>\n    <Reference Include=\"Nito.AsyncEx.Concurrent, Version=4.0.1.0, Culture=neutral, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\..\\packages\\Nito.AsyncEx.4.0.1\\lib\\net45\\Nito.AsyncEx.Concurrent.dll</HintPath>\n      <Private>True</Private>\n    </Reference>\n    <Reference Include=\"Nito.AsyncEx.Context, Version=1.1.0.0, Culture=neutral, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\..\\packages\\Nito.AsyncEx.Context.1.1.0\\lib\\net46\\Nito.AsyncEx.Context.dll</HintPath>\n    </Reference>\n    <Reference Include=\"Nito.AsyncEx.Coordination, Version=1.0.2.0, Culture=neutral, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\..\\packages\\Nito.AsyncEx.Coordination.1.0.2\\lib\\net46\\Nito.AsyncEx.Coordination.dll</HintPath>\n    </Reference>\n    <Reference Include=\"Nito.AsyncEx.Enlightenment, Version=4.0.1.0, Culture=neutral, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\..\\packages\\Nito.AsyncEx.4.0.1\\lib\\net45\\Nito.AsyncEx.Enlightenment.dll</HintPath>\n      <Private>True</Private>\n    </Reference>\n    <Reference Include=\"Nito.AsyncEx.Tasks, Version=1.1.0.0, Culture=neutral, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\..\\packages\\Nito.AsyncEx.Tasks.1.1.0\\lib\\net46\\Nito.AsyncEx.Tasks.dll</HintPath>\n    </Reference>\n    <Reference Include=\"Nito.Collections.Deque, Version=1.0.4.0, Culture=neutral, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\..\\packages\\Nito.Collections.Deque.1.0.4\\lib\\netstandard2.0\\Nito.Collections.Deque.dll</HintPath>\n    </Reference>\n    <Reference Include=\"Nito.Disposables, Version=1.2.3.0, Culture=neutral, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\..\\packages\\Nito.Disposables.1.2.3\\lib\\netstandard2.0\\Nito.Disposables.dll</HintPath>\n    </Reference>\n    <Reference Include=\"NLog, Version=4.0.0.0, Culture=neutral, PublicKeyToken=5120e14c03d0593c, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\..\\packages\\NLog.4.5.6\\lib\\net45\\NLog.dll</HintPath>\n    </Reference>\n    <Reference Include=\"RabbitMQ.Client, Version=5.0.0.0, Culture=neutral, PublicKeyToken=89e7d7c5feba84ce, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\..\\packages\\RabbitMQ.Client.5.0.1\\lib\\net451\\RabbitMQ.Client.dll</HintPath>\n    </Reference>\n    <Reference Include=\"Rebus, Version=5.0.0.0, Culture=neutral, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\..\\packages\\Rebus.5.0.0-b05\\lib\\net45\\Rebus.dll</HintPath>\n    </Reference>\n    <Reference Include=\"Rebus.CastleWindsor, Version=4.0.0.0, Culture=neutral, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\..\\packages\\Rebus.Castle.Windsor.4.0.0\\lib\\net45\\Rebus.CastleWindsor.dll</HintPath>\n    </Reference>\n    <Reference Include=\"Rebus.NLog, Version=5.0.0.0, Culture=neutral, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\..\\packages\\Rebus.NLog.5.0.0\\lib\\net45\\Rebus.NLog.dll</HintPath>\n    </Reference>\n    <Reference Include=\"Rebus.RabbitMq, Version=4.4.2.0, Culture=neutral, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\..\\packages\\Rebus.RabbitMq.4.4.2\\lib\\net452\\Rebus.RabbitMq.dll</HintPath>\n    </Reference>\n    <Reference Include=\"System\" />\n    <Reference Include=\"System.Buffers, Version=4.0.2.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\..\\packages\\System.Buffers.4.4.0\\lib\\netstandard2.0\\System.Buffers.dll</HintPath>\n    </Reference>\n    <Reference Include=\"System.Collections.Immutable, Version=1.2.3.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\..\\packages\\System.Collections.Immutable.1.5.0\\lib\\netstandard2.0\\System.Collections.Immutable.dll</HintPath>\n    </Reference>\n    <Reference Include=\"System.ComponentModel.Annotations, Version=4.2.1.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\..\\packages\\System.ComponentModel.Annotations.4.5.0\\lib\\net461\\System.ComponentModel.Annotations.dll</HintPath>\n    </Reference>\n    <Reference Include=\"System.ComponentModel.DataAnnotations\" />\n    <Reference Include=\"System.Configuration\" />\n    <Reference Include=\"System.Configuration.ConfigurationManager, Version=4.0.1.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\..\\packages\\System.Configuration.ConfigurationManager.4.5.0\\lib\\net461\\System.Configuration.ConfigurationManager.dll</HintPath>\n    </Reference>\n    <Reference Include=\"System.Core\" />\n    <Reference Include=\"System.Data.Common, Version=4.1.1.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\..\\packages\\System.Data.Common.4.3.0\\lib\\net451\\System.Data.Common.dll</HintPath>\n      <Private>True</Private>\n    </Reference>\n    <Reference Include=\"System.Data.OracleClient\" />\n    <Reference Include=\"System.Drawing\" />\n    <Reference Include=\"System.IO.Compression, Version=4.2.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089, processorArchitecture=MSIL\" />\n    <Reference Include=\"System.Linq.Dynamic, Version=1.0.6132.35681, Culture=neutral, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\..\\packages\\System.Linq.Dynamic.1.0.7\\lib\\net40\\System.Linq.Dynamic.dll</HintPath>\n      <Private>True</Private>\n    </Reference>\n    <Reference Include=\"System.Linq.Dynamic.Core, Version=0.0.0.0, Culture=neutral, PublicKeyToken=0f07ec44de6ac832, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\..\\packages\\System.Linq.Dynamic.Core.1.0.8.9\\lib\\net46\\System.Linq.Dynamic.Core.dll</HintPath>\n    </Reference>\n    <Reference Include=\"System.Memory, Version=4.0.1.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\..\\packages\\System.Memory.4.5.0\\lib\\netstandard2.0\\System.Memory.dll</HintPath>\n    </Reference>\n    <Reference Include=\"System.Net\" />\n    <Reference Include=\"System.Numerics\" />\n    <Reference Include=\"System.Numerics.Vectors, Version=4.1.3.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\..\\packages\\System.Numerics.Vectors.4.4.0\\lib\\net46\\System.Numerics.Vectors.dll</HintPath>\n    </Reference>\n    <Reference Include=\"System.Runtime.Caching\" />\n    <Reference Include=\"System.Runtime.CompilerServices.Unsafe, Version=4.0.4.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\..\\packages\\System.Runtime.CompilerServices.Unsafe.4.5.0\\lib\\netstandard2.0\\System.Runtime.CompilerServices.Unsafe.dll</HintPath>\n    </Reference>\n    <Reference Include=\"System.Runtime.InteropServices.RuntimeInformation, Version=4.0.1.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\..\\packages\\System.Runtime.InteropServices.RuntimeInformation.4.3.0\\lib\\net45\\System.Runtime.InteropServices.RuntimeInformation.dll</HintPath>\n      <Private>True</Private>\n    </Reference>\n    <Reference Include=\"System.Runtime.Remoting\" />\n    <Reference Include=\"System.Runtime.Serialization\" />\n    <Reference Include=\"System.Runtime.Serialization.Formatters, Version=4.0.1.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\..\\packages\\System.Runtime.Serialization.Formatters.4.3.0\\lib\\net46\\System.Runtime.Serialization.Formatters.dll</HintPath>\n      <Private>True</Private>\n    </Reference>\n    <Reference Include=\"System.Runtime.Serialization.Primitives, Version=4.1.2.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\..\\packages\\System.Runtime.Serialization.Primitives.4.3.0\\lib\\net46\\System.Runtime.Serialization.Primitives.dll</HintPath>\n      <Private>True</Private>\n    </Reference>\n    <Reference Include=\"System.Security.AccessControl, Version=4.1.1.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\..\\packages\\System.Security.AccessControl.4.5.0\\lib\\net461\\System.Security.AccessControl.dll</HintPath>\n    </Reference>\n    <Reference Include=\"System.Security.Claims, Version=4.0.2.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\..\\packages\\System.Security.Claims.4.3.0\\lib\\net46\\System.Security.Claims.dll</HintPath>\n      <Private>True</Private>\n    </Reference>\n    <Reference Include=\"System.Security.Permissions, Version=4.0.1.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\..\\packages\\System.Security.Permissions.4.5.0\\lib\\net461\\System.Security.Permissions.dll</HintPath>\n    </Reference>\n    <Reference Include=\"System.Security.Principal.Windows, Version=4.1.1.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\..\\packages\\System.Security.Principal.Windows.4.5.0\\lib\\net461\\System.Security.Principal.Windows.dll</HintPath>\n    </Reference>\n    <Reference Include=\"System.ServiceModel\" />\n    <Reference Include=\"System.ServiceProcess\" />\n    <Reference Include=\"System.Transactions\" />\n    <Reference Include=\"System.Web\" />\n    <Reference Include=\"System.Xml.Linq\" />\n    <Reference Include=\"System.Data.DataSetExtensions\" />\n    <Reference Include=\"Microsoft.CSharp\" />\n    <Reference Include=\"System.Data\" />\n    <Reference Include=\"System.Net.Http\" />\n    <Reference Include=\"System.Xml\" />\n    <Reference Include=\"System.Xml.XmlDocument, Version=4.0.2.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\..\\packages\\System.Xml.XmlDocument.4.3.0\\lib\\net46\\System.Xml.XmlDocument.dll</HintPath>\n      <Private>True</Private>\n    </Reference>\n    <Reference Include=\"System.Xml.XPath, Version=4.0.2.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\..\\packages\\System.Xml.XPath.4.3.0\\lib\\net46\\System.Xml.XPath.dll</HintPath>\n      <Private>True</Private>\n    </Reference>\n    <Reference Include=\"System.Xml.XPath.XmlDocument, Version=4.0.2.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\..\\packages\\System.Xml.XPath.XmlDocument.4.3.0\\lib\\net46\\System.Xml.XPath.XmlDocument.dll</HintPath>\n    </Reference>\n    <Reference Include=\"TimeZoneConverter, Version=2.4.1.0, Culture=neutral, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\..\\packages\\TimeZoneConverter.2.4.1\\lib\\net45\\TimeZoneConverter.dll</HintPath>\n    </Reference>\n    <Reference Include=\"Topshelf, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b800c4cfcdeea87b, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\..\\packages\\Topshelf.4.0.4\\lib\\net452\\Topshelf.dll</HintPath>\n    </Reference>\n    <Reference Include=\"Topshelf.NLog, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b800c4cfcdeea87b, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\..\\packages\\Topshelf.NLog.4.0.4\\lib\\net452\\Topshelf.NLog.dll</HintPath>\n    </Reference>\n  </ItemGroup>\n  <ItemGroup>\n    <Compile Include=\"BackgroundWorks\\TestWorker.cs\" />\n    <Compile Include=\"Program.cs\" />\n    <Compile Include=\"Properties\\AssemblyInfo.cs\" />\n    <Compile Include=\"SampleRebusRabbitMqPublisherBootstrap.cs\" />\n    <Compile Include=\"SampleRebusRabbitMqPublisherModule.cs\" />\n  </ItemGroup>\n  <ItemGroup>\n    <None Include=\"App.config\" />\n    <Content Include=\"NLog.config\">\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </Content>\n    <None Include=\"NLog.xsd\">\n      <SubType>Designer</SubType>\n    </None>\n    <None Include=\"packages.config\" />\n  </ItemGroup>\n  <ItemGroup>\n    <ProjectReference Include=\"..\\Sample.MqMessages\\Sample.MqMessages.csproj\">\n      <Project>{94E6D468-2D45-4EC7-AF1B-AAC884DB467F}</Project>\n      <Name>Sample.MqMessages</Name>\n    </ProjectReference>\n  </ItemGroup>\n  <Import Project=\"$(MSBuildToolsPath)\\Microsoft.CSharp.targets\" />\n  <Import Project=\"..\\..\\..\\packages\\Microsoft.Bcl.Build.1.0.21\\build\\Microsoft.Bcl.Build.targets\" Condition=\"Exists('..\\..\\..\\packages\\Microsoft.Bcl.Build.1.0.21\\build\\Microsoft.Bcl.Build.targets')\" />\n  <Target Name=\"EnsureNuGetPackageBuildImports\" BeforeTargets=\"PrepareForBuild\">\n    <PropertyGroup>\n      <ErrorText>这台计算机上缺少此项目引用的 NuGet 程序包。使用“NuGet 程序包还原”可下载这些程序包。有关更多信息，请参见 http://go.microsoft.com/fwlink/?LinkID=322105。缺少的文件是 {0}。</ErrorText>\n    </PropertyGroup>\n    <Error Condition=\"!Exists('..\\..\\..\\packages\\Microsoft.Bcl.Build.1.0.21\\build\\Microsoft.Bcl.Build.targets')\" Text=\"$([System.String]::Format('$(ErrorText)', '..\\..\\..\\packages\\Microsoft.Bcl.Build.1.0.21\\build\\Microsoft.Bcl.Build.targets'))\" />\n  </Target>\n  <!-- To modify your build process, add your task inside one of the targets below and uncomment it. \n       Other similar extension points exist, see Microsoft.Common.targets.\n  <Target Name=\"BeforeBuild\">\n  </Target>\n  <Target Name=\"AfterBuild\">\n  </Target>\n  -->\n</Project>"
  },
  {
    "path": "src2/Samples/Sample.RebusRabbitMqPublisher/SampleRebusRabbitMqPublisherBootstrap.cs",
    "content": "﻿using System.Configuration;\nusing Abp;\nusing NLog;\nusing NLog.Config;\n\nnamespace Sample\n{\n    public class SampleRebusRabbitMqPublisherBootstrap\n    {\n        private static readonly AbpBootstrapper _bs = AbpBootstrapper.Create<SampleRebusRabbitMqPublisherModule>();\n\n        public void Start()\n        {\n            //LogManager.Configuration = new XmlLoggingConfiguration(\"nlog.config\");\n            _bs.Initialize();\n        }\n\n        public void Stop()\n        {\n            _bs.Dispose();\n        }\n    }\n}\n"
  },
  {
    "path": "src2/Samples/Sample.RebusRabbitMqPublisher/SampleRebusRabbitMqPublisherModule.cs",
    "content": "﻿using System.Reflection;\nusing Abp.Configuration.Startup;\nusing Abp.Modules;\nusing Abp.MqMessages.Publishers;\nusing Abp.Threading.BackgroundWorkers;\nusing Castle.Facilities.Logging;\nusing Castle.Services.Logging.NLogIntegration;\nusing Rebus.NLog.Config;\nusing Sample.BackgroundWorks;\n\nnamespace Sample\n{\n    [DependsOn(typeof(RebusRabbitMqPublisherModule))]\n    public class SampleRebusRabbitMqPublisherModule : AbpModule\n    {\n        public override void PreInitialize()\n        {\n            Configuration.Modules.UseAbplusRebusRabbitMqPublisher()\n                .UseLogging(c => c.NLog())\n                .ConnectionTo(\"amqp://dev:dev@rabbitmq.local.jk724.cn/dev_host\");\n\n            Configuration.BackgroundJobs.IsJobExecutionEnabled = true;\n        }\n\n        public override void Initialize()\n        {\n            IocManager.RegisterAssemblyByConvention(Assembly.GetExecutingAssembly());\n        }\n\n        public override void PostInitialize()\n        {\n            Abp.Dependency.IocManager.Instance.IocContainer.AddFacility<LoggingFacility>(f => f.LogUsing<NLogFactory>().WithConfig(\"nlog.config\"));\n\n            var workManager = IocManager.Resolve<IBackgroundWorkerManager>();\n            workManager.Add(IocManager.Resolve<TestWorker>());\n        }\n    }\n}\n"
  },
  {
    "path": "src2/Samples/Sample.RebusRabbitMqPublisher/packages.config",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<packages>\n  <package id=\"Abp\" version=\"3.7.2\" targetFramework=\"net461\" />\n  <package id=\"Abplus\" version=\"0.1.7.6\" targetFramework=\"net461\" />\n  <package id=\"Abplus.MqMessages.RebusCore\" version=\"0.1.6.3\" targetFramework=\"net461\" />\n  <package id=\"Abplus.MqMessages.RebusRabbitMqPublisher\" version=\"0.1.6.3\" targetFramework=\"net461\" />\n  <package id=\"Castle.Core\" version=\"4.3.1\" targetFramework=\"net461\" />\n  <package id=\"Castle.Core-NLog\" version=\"3.3.0\" targetFramework=\"net461\" />\n  <package id=\"Castle.LoggingFacility\" version=\"4.1.0\" targetFramework=\"net461\" />\n  <package id=\"Castle.Windsor\" version=\"4.1.0\" targetFramework=\"net461\" />\n  <package id=\"Castle.Windsor-NLog\" version=\"3.4.0\" targetFramework=\"net461\" />\n  <package id=\"JetBrains.Annotations\" version=\"11.1.0\" targetFramework=\"net461\" />\n  <package id=\"Microsoft.Bcl\" version=\"1.1.10\" targetFramework=\"net461\" />\n  <package id=\"Microsoft.Bcl.Async\" version=\"1.0.168\" targetFramework=\"net461\" />\n  <package id=\"Microsoft.Bcl.Build\" version=\"1.0.21\" targetFramework=\"net461\" />\n  <package id=\"Microsoft.Diagnostics.Tracing.EventSource.Redist\" version=\"2.0.0\" targetFramework=\"net461\" />\n  <package id=\"Microsoft.Extensions.Caching.Abstractions\" version=\"2.1.0\" targetFramework=\"net461\" />\n  <package id=\"Microsoft.Extensions.Caching.Memory\" version=\"2.1.0\" targetFramework=\"net461\" />\n  <package id=\"Microsoft.Extensions.DependencyInjection.Abstractions\" version=\"2.1.0\" targetFramework=\"net461\" />\n  <package id=\"Microsoft.Extensions.Options\" version=\"2.1.0\" targetFramework=\"net461\" />\n  <package id=\"Microsoft.Extensions.Primitives\" version=\"2.1.0\" targetFramework=\"net461\" />\n  <package id=\"Newtonsoft.Json\" version=\"11.0.2\" targetFramework=\"net461\" />\n  <package id=\"Nito.AsyncEx\" version=\"4.0.1\" targetFramework=\"net461\" />\n  <package id=\"Nito.AsyncEx.Context\" version=\"1.1.0\" targetFramework=\"net461\" />\n  <package id=\"Nito.AsyncEx.Coordination\" version=\"1.0.2\" targetFramework=\"net461\" />\n  <package id=\"Nito.AsyncEx.Tasks\" version=\"1.1.0\" targetFramework=\"net461\" />\n  <package id=\"Nito.Collections.Deque\" version=\"1.0.4\" targetFramework=\"net461\" />\n  <package id=\"Nito.Disposables\" version=\"1.2.3\" targetFramework=\"net461\" />\n  <package id=\"NLog\" version=\"4.5.6\" targetFramework=\"net461\" />\n  <package id=\"NLog.Config\" version=\"4.5.6\" targetFramework=\"net461\" />\n  <package id=\"NLog.Schema\" version=\"4.5.6\" targetFramework=\"net461\" />\n  <package id=\"RabbitMQ.Client\" version=\"5.0.1\" targetFramework=\"net461\" />\n  <package id=\"Rebus\" version=\"5.0.0-b05\" targetFramework=\"net461\" />\n  <package id=\"Rebus.Castle.Windsor\" version=\"4.0.0\" targetFramework=\"net461\" />\n  <package id=\"Rebus.NLog\" version=\"5.0.0\" targetFramework=\"net461\" />\n  <package id=\"Rebus.RabbitMq\" version=\"4.4.2\" targetFramework=\"net461\" />\n  <package id=\"System.Buffers\" version=\"4.4.0\" targetFramework=\"net461\" />\n  <package id=\"System.Collections.Immutable\" version=\"1.5.0\" targetFramework=\"net461\" />\n  <package id=\"System.ComponentModel.Annotations\" version=\"4.5.0\" targetFramework=\"net461\" />\n  <package id=\"System.Configuration.ConfigurationManager\" version=\"4.5.0\" targetFramework=\"net461\" />\n  <package id=\"System.Data.Common\" version=\"4.3.0\" targetFramework=\"net461\" />\n  <package id=\"System.Linq.Dynamic\" version=\"1.0.7\" targetFramework=\"net461\" />\n  <package id=\"System.Linq.Dynamic.Core\" version=\"1.0.8.9\" targetFramework=\"net461\" />\n  <package id=\"System.Linq.Queryable\" version=\"4.3.0\" targetFramework=\"net461\" />\n  <package id=\"System.Memory\" version=\"4.5.0\" targetFramework=\"net461\" />\n  <package id=\"System.Numerics.Vectors\" version=\"4.4.0\" targetFramework=\"net461\" />\n  <package id=\"System.Runtime.CompilerServices.Unsafe\" version=\"4.5.0\" targetFramework=\"net461\" />\n  <package id=\"System.Runtime.InteropServices.RuntimeInformation\" version=\"4.3.0\" targetFramework=\"net461\" />\n  <package id=\"System.Runtime.Serialization.Formatters\" version=\"4.3.0\" targetFramework=\"net461\" />\n  <package id=\"System.Runtime.Serialization.Primitives\" version=\"4.3.0\" targetFramework=\"net461\" />\n  <package id=\"System.Security.AccessControl\" version=\"4.5.0\" targetFramework=\"net461\" />\n  <package id=\"System.Security.Claims\" version=\"4.3.0\" targetFramework=\"net461\" />\n  <package id=\"System.Security.Permissions\" version=\"4.5.0\" targetFramework=\"net461\" />\n  <package id=\"System.Security.Principal.Windows\" version=\"4.5.0\" targetFramework=\"net461\" />\n  <package id=\"System.Threading\" version=\"4.3.0\" targetFramework=\"net461\" />\n  <package id=\"System.Xml.XmlDocument\" version=\"4.3.0\" targetFramework=\"net461\" />\n  <package id=\"System.Xml.XPath\" version=\"4.3.0\" targetFramework=\"net461\" />\n  <package id=\"System.Xml.XPath.XmlDocument\" version=\"4.3.0\" targetFramework=\"net461\" />\n  <package id=\"TimeZoneConverter\" version=\"2.4.1\" targetFramework=\"net461\" />\n  <package id=\"Topshelf\" version=\"4.0.4\" targetFramework=\"net461\" />\n  <package id=\"Topshelf.NLog\" version=\"4.0.4\" targetFramework=\"net461\" />\n</packages>"
  },
  {
    "path": "src2/Tests/Abplus.Tests/Abplus.Tests.csproj",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<Project ToolsVersion=\"14.0\" DefaultTargets=\"Build\" xmlns=\"http://schemas.microsoft.com/developer/msbuild/2003\">\n  <Import Project=\"..\\..\\..\\packages\\xunit.runner.visualstudio.2.3.1\\build\\net20\\xunit.runner.visualstudio.props\" Condition=\"Exists('..\\..\\..\\packages\\xunit.runner.visualstudio.2.3.1\\build\\net20\\xunit.runner.visualstudio.props')\" />\n  <Import Project=\"..\\..\\..\\packages\\xunit.core.2.3.1\\build\\xunit.core.props\" Condition=\"Exists('..\\..\\..\\packages\\xunit.core.2.3.1\\build\\xunit.core.props')\" />\n  <Import Project=\"$(MSBuildExtensionsPath)\\$(MSBuildToolsVersion)\\Microsoft.Common.props\" Condition=\"Exists('$(MSBuildExtensionsPath)\\$(MSBuildToolsVersion)\\Microsoft.Common.props')\" />\n  <PropertyGroup>\n    <Configuration Condition=\" '$(Configuration)' == '' \">Debug</Configuration>\n    <Platform Condition=\" '$(Platform)' == '' \">AnyCPU</Platform>\n    <ProjectGuid>{336022E3-D481-4D09-9B97-305441FF6301}</ProjectGuid>\n    <OutputType>Library</OutputType>\n    <AppDesignerFolder>Properties</AppDesignerFolder>\n    <RootNamespace>Abplus.Tests</RootNamespace>\n    <AssemblyName>Abplus.Tests</AssemblyName>\n    <TargetFrameworkVersion>v4.6.1</TargetFrameworkVersion>\n    <FileAlignment>512</FileAlignment>\n    <NuGetPackageImportStamp>\n    </NuGetPackageImportStamp>\n  </PropertyGroup>\n  <PropertyGroup Condition=\" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' \">\n    <DebugSymbols>true</DebugSymbols>\n    <DebugType>full</DebugType>\n    <Optimize>false</Optimize>\n    <OutputPath>bin\\Debug\\</OutputPath>\n    <DefineConstants>DEBUG;TRACE</DefineConstants>\n    <ErrorReport>prompt</ErrorReport>\n    <WarningLevel>4</WarningLevel>\n  </PropertyGroup>\n  <PropertyGroup Condition=\" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' \">\n    <DebugType>pdbonly</DebugType>\n    <Optimize>true</Optimize>\n    <OutputPath>bin\\Release\\</OutputPath>\n    <DefineConstants>TRACE</DefineConstants>\n    <ErrorReport>prompt</ErrorReport>\n    <WarningLevel>4</WarningLevel>\n  </PropertyGroup>\n  <ItemGroup>\n    <Reference Include=\"Abp, Version=3.7.2.0, Culture=neutral, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\..\\packages\\Abp.3.7.2\\lib\\netstandard2.0\\Abp.dll</HintPath>\n    </Reference>\n    <Reference Include=\"Castle.Core, Version=4.0.0.0, Culture=neutral, PublicKeyToken=407dd0808d44fbdc, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\..\\packages\\Castle.Core.4.3.1\\lib\\net45\\Castle.Core.dll</HintPath>\n    </Reference>\n    <Reference Include=\"Castle.Facilities.Logging, Version=4.0.0.0, Culture=neutral, PublicKeyToken=407dd0808d44fbdc, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\..\\packages\\Castle.LoggingFacility.4.1.0\\lib\\net45\\Castle.Facilities.Logging.dll</HintPath>\n    </Reference>\n    <Reference Include=\"Castle.Windsor, Version=4.0.0.0, Culture=neutral, PublicKeyToken=407dd0808d44fbdc, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\..\\packages\\Castle.Windsor.4.1.0\\lib\\net45\\Castle.Windsor.dll</HintPath>\n    </Reference>\n    <Reference Include=\"JetBrains.Annotations, Version=11.1.0.0, Culture=neutral, PublicKeyToken=1010a0d8d6380325, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\..\\packages\\JetBrains.Annotations.11.1.0\\lib\\net20\\JetBrains.Annotations.dll</HintPath>\n    </Reference>\n    <Reference Include=\"Microsoft.Extensions.Caching.Abstractions, Version=2.1.0.0, Culture=neutral, PublicKeyToken=adb9793829ddae60, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\..\\packages\\Microsoft.Extensions.Caching.Abstractions.2.1.0\\lib\\netstandard2.0\\Microsoft.Extensions.Caching.Abstractions.dll</HintPath>\n    </Reference>\n    <Reference Include=\"Microsoft.Extensions.Caching.Memory, Version=2.1.0.0, Culture=neutral, PublicKeyToken=adb9793829ddae60, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\..\\packages\\Microsoft.Extensions.Caching.Memory.2.1.0\\lib\\netstandard2.0\\Microsoft.Extensions.Caching.Memory.dll</HintPath>\n    </Reference>\n    <Reference Include=\"Microsoft.Extensions.DependencyInjection.Abstractions, Version=2.1.0.0, Culture=neutral, PublicKeyToken=adb9793829ddae60, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\..\\packages\\Microsoft.Extensions.DependencyInjection.Abstractions.2.1.0\\lib\\netstandard2.0\\Microsoft.Extensions.DependencyInjection.Abstractions.dll</HintPath>\n    </Reference>\n    <Reference Include=\"Microsoft.Extensions.Options, Version=2.1.0.0, Culture=neutral, PublicKeyToken=adb9793829ddae60, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\..\\packages\\Microsoft.Extensions.Options.2.1.0\\lib\\netstandard2.0\\Microsoft.Extensions.Options.dll</HintPath>\n    </Reference>\n    <Reference Include=\"Microsoft.Extensions.Primitives, Version=2.1.0.0, Culture=neutral, PublicKeyToken=adb9793829ddae60, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\..\\packages\\Microsoft.Extensions.Primitives.2.1.0\\lib\\netstandard2.0\\Microsoft.Extensions.Primitives.dll</HintPath>\n    </Reference>\n    <Reference Include=\"Microsoft.Threading.Tasks, Version=1.0.12.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\..\\packages\\Microsoft.Bcl.Async.1.0.168\\lib\\net40\\Microsoft.Threading.Tasks.dll</HintPath>\n      <Private>True</Private>\n    </Reference>\n    <Reference Include=\"Microsoft.Threading.Tasks.Extensions, Version=1.0.12.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\..\\packages\\Microsoft.Bcl.Async.1.0.168\\lib\\net40\\Microsoft.Threading.Tasks.Extensions.dll</HintPath>\n      <Private>True</Private>\n    </Reference>\n    <Reference Include=\"Microsoft.Threading.Tasks.Extensions.Desktop, Version=1.0.168.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\..\\packages\\Microsoft.Bcl.Async.1.0.168\\lib\\net40\\Microsoft.Threading.Tasks.Extensions.Desktop.dll</HintPath>\n      <Private>True</Private>\n    </Reference>\n    <Reference Include=\"Newtonsoft.Json, Version=11.0.0.0, Culture=neutral, PublicKeyToken=30ad4fe6b2a6aeed, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\..\\packages\\Newtonsoft.Json.11.0.2\\lib\\net45\\Newtonsoft.Json.dll</HintPath>\n    </Reference>\n    <Reference Include=\"Nito.AsyncEx, Version=4.0.1.0, Culture=neutral, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\..\\packages\\Nito.AsyncEx.4.0.1\\lib\\net45\\Nito.AsyncEx.dll</HintPath>\n      <Private>True</Private>\n    </Reference>\n    <Reference Include=\"Nito.AsyncEx.Concurrent, Version=4.0.1.0, Culture=neutral, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\..\\packages\\Nito.AsyncEx.4.0.1\\lib\\net45\\Nito.AsyncEx.Concurrent.dll</HintPath>\n      <Private>True</Private>\n    </Reference>\n    <Reference Include=\"Nito.AsyncEx.Context, Version=1.1.0.0, Culture=neutral, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\..\\packages\\Nito.AsyncEx.Context.1.1.0\\lib\\net46\\Nito.AsyncEx.Context.dll</HintPath>\n    </Reference>\n    <Reference Include=\"Nito.AsyncEx.Coordination, Version=1.0.2.0, Culture=neutral, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\..\\packages\\Nito.AsyncEx.Coordination.1.0.2\\lib\\net46\\Nito.AsyncEx.Coordination.dll</HintPath>\n    </Reference>\n    <Reference Include=\"Nito.AsyncEx.Enlightenment, Version=4.0.1.0, Culture=neutral, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\..\\packages\\Nito.AsyncEx.4.0.1\\lib\\net45\\Nito.AsyncEx.Enlightenment.dll</HintPath>\n      <Private>True</Private>\n    </Reference>\n    <Reference Include=\"Nito.AsyncEx.Tasks, Version=1.1.0.0, Culture=neutral, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\..\\packages\\Nito.AsyncEx.Tasks.1.1.0\\lib\\net46\\Nito.AsyncEx.Tasks.dll</HintPath>\n    </Reference>\n    <Reference Include=\"Nito.Collections.Deque, Version=1.0.4.0, Culture=neutral, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\..\\packages\\Nito.Collections.Deque.1.0.4\\lib\\netstandard2.0\\Nito.Collections.Deque.dll</HintPath>\n    </Reference>\n    <Reference Include=\"Nito.Disposables, Version=1.2.3.0, Culture=neutral, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\..\\packages\\Nito.Disposables.1.2.3\\lib\\netstandard2.0\\Nito.Disposables.dll</HintPath>\n    </Reference>\n    <Reference Include=\"Shouldly, Version=3.0.0.0, Culture=neutral, PublicKeyToken=6042cbcb05cbc941, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\..\\packages\\Shouldly.3.0.0\\lib\\net451\\Shouldly.dll</HintPath>\n    </Reference>\n    <Reference Include=\"System\" />\n    <Reference Include=\"System.Buffers, Version=4.0.2.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\..\\packages\\System.Buffers.4.4.0\\lib\\netstandard2.0\\System.Buffers.dll</HintPath>\n    </Reference>\n    <Reference Include=\"System.Collections.Immutable, Version=1.2.3.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\..\\packages\\System.Collections.Immutable.1.5.0\\lib\\netstandard2.0\\System.Collections.Immutable.dll</HintPath>\n    </Reference>\n    <Reference Include=\"System.ComponentModel.Annotations, Version=4.2.1.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\..\\packages\\System.ComponentModel.Annotations.4.5.0\\lib\\net461\\System.ComponentModel.Annotations.dll</HintPath>\n    </Reference>\n    <Reference Include=\"System.ComponentModel.DataAnnotations\" />\n    <Reference Include=\"System.Configuration\" />\n    <Reference Include=\"System.Configuration.ConfigurationManager, Version=4.0.1.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\..\\packages\\System.Configuration.ConfigurationManager.4.5.0\\lib\\net461\\System.Configuration.ConfigurationManager.dll</HintPath>\n    </Reference>\n    <Reference Include=\"System.Core\" />\n    <Reference Include=\"System.Data.Common, Version=4.1.1.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\..\\packages\\System.Data.Common.4.3.0\\lib\\net451\\System.Data.Common.dll</HintPath>\n      <Private>True</Private>\n    </Reference>\n    <Reference Include=\"System.Data.OracleClient\" />\n    <Reference Include=\"System.Drawing\" />\n    <Reference Include=\"System.Linq.Dynamic, Version=1.0.6132.35681, Culture=neutral, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\..\\packages\\System.Linq.Dynamic.1.0.7\\lib\\net40\\System.Linq.Dynamic.dll</HintPath>\n      <Private>True</Private>\n    </Reference>\n    <Reference Include=\"System.Linq.Dynamic.Core, Version=0.0.0.0, Culture=neutral, PublicKeyToken=0f07ec44de6ac832, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\..\\packages\\System.Linq.Dynamic.Core.1.0.8.9\\lib\\net46\\System.Linq.Dynamic.Core.dll</HintPath>\n    </Reference>\n    <Reference Include=\"System.Memory, Version=4.0.1.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\..\\packages\\System.Memory.4.5.0\\lib\\netstandard2.0\\System.Memory.dll</HintPath>\n    </Reference>\n    <Reference Include=\"System.Net\" />\n    <Reference Include=\"System.Numerics\" />\n    <Reference Include=\"System.Numerics.Vectors, Version=4.1.3.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\..\\packages\\System.Numerics.Vectors.4.4.0\\lib\\net46\\System.Numerics.Vectors.dll</HintPath>\n    </Reference>\n    <Reference Include=\"System.Runtime.Caching\" />\n    <Reference Include=\"System.Runtime.CompilerServices.Unsafe, Version=4.0.4.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\..\\packages\\System.Runtime.CompilerServices.Unsafe.4.5.0\\lib\\netstandard2.0\\System.Runtime.CompilerServices.Unsafe.dll</HintPath>\n    </Reference>\n    <Reference Include=\"System.Runtime.InteropServices.RuntimeInformation, Version=4.0.1.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\..\\packages\\System.Runtime.InteropServices.RuntimeInformation.4.3.0\\lib\\net45\\System.Runtime.InteropServices.RuntimeInformation.dll</HintPath>\n      <Private>True</Private>\n    </Reference>\n    <Reference Include=\"System.Runtime.Remoting\" />\n    <Reference Include=\"System.Runtime.Serialization\" />\n    <Reference Include=\"System.Runtime.Serialization.Formatters, Version=4.0.1.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\..\\packages\\System.Runtime.Serialization.Formatters.4.3.0\\lib\\net46\\System.Runtime.Serialization.Formatters.dll</HintPath>\n      <Private>True</Private>\n    </Reference>\n    <Reference Include=\"System.Runtime.Serialization.Primitives, Version=4.1.2.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\..\\packages\\System.Runtime.Serialization.Primitives.4.3.0\\lib\\net46\\System.Runtime.Serialization.Primitives.dll</HintPath>\n      <Private>True</Private>\n    </Reference>\n    <Reference Include=\"System.Security.AccessControl, Version=4.1.1.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\..\\packages\\System.Security.AccessControl.4.5.0\\lib\\net461\\System.Security.AccessControl.dll</HintPath>\n    </Reference>\n    <Reference Include=\"System.Security.Claims, Version=4.0.2.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\..\\packages\\System.Security.Claims.4.3.0\\lib\\net46\\System.Security.Claims.dll</HintPath>\n      <Private>True</Private>\n    </Reference>\n    <Reference Include=\"System.Security.Permissions, Version=4.0.1.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\..\\packages\\System.Security.Permissions.4.5.0\\lib\\net461\\System.Security.Permissions.dll</HintPath>\n    </Reference>\n    <Reference Include=\"System.Security.Principal.Windows, Version=4.1.1.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\..\\packages\\System.Security.Principal.Windows.4.5.0\\lib\\net461\\System.Security.Principal.Windows.dll</HintPath>\n    </Reference>\n    <Reference Include=\"System.ServiceProcess\" />\n    <Reference Include=\"System.Transactions\" />\n    <Reference Include=\"System.Web\" />\n    <Reference Include=\"System.Xml.Linq\" />\n    <Reference Include=\"System.Data.DataSetExtensions\" />\n    <Reference Include=\"Microsoft.CSharp\" />\n    <Reference Include=\"System.Data\" />\n    <Reference Include=\"System.Net.Http\" />\n    <Reference Include=\"System.Xml\" />\n    <Reference Include=\"System.Xml.XmlDocument, Version=4.0.2.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\..\\packages\\System.Xml.XmlDocument.4.3.0\\lib\\net46\\System.Xml.XmlDocument.dll</HintPath>\n      <Private>True</Private>\n    </Reference>\n    <Reference Include=\"System.Xml.XPath, Version=4.0.2.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\..\\packages\\System.Xml.XPath.4.3.0\\lib\\net46\\System.Xml.XPath.dll</HintPath>\n      <Private>True</Private>\n    </Reference>\n    <Reference Include=\"System.Xml.XPath.XmlDocument, Version=4.0.2.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\..\\packages\\System.Xml.XPath.XmlDocument.4.3.0\\lib\\net46\\System.Xml.XPath.XmlDocument.dll</HintPath>\n    </Reference>\n    <Reference Include=\"TimeZoneConverter, Version=2.4.1.0, Culture=neutral, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\..\\packages\\TimeZoneConverter.2.4.1\\lib\\net45\\TimeZoneConverter.dll</HintPath>\n    </Reference>\n    <Reference Include=\"xunit.abstractions, Version=2.0.0.0, Culture=neutral, PublicKeyToken=8d05b1bb7a6fdb6c, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\..\\packages\\xunit.abstractions.2.0.1\\lib\\net35\\xunit.abstractions.dll</HintPath>\n      <Private>True</Private>\n    </Reference>\n    <Reference Include=\"xunit.assert, Version=2.3.1.3858, Culture=neutral, PublicKeyToken=8d05b1bb7a6fdb6c, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\..\\packages\\xunit.assert.2.3.1\\lib\\netstandard1.1\\xunit.assert.dll</HintPath>\n    </Reference>\n    <Reference Include=\"xunit.core, Version=2.3.1.3858, Culture=neutral, PublicKeyToken=8d05b1bb7a6fdb6c, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\..\\packages\\xunit.extensibility.core.2.3.1\\lib\\netstandard1.1\\xunit.core.dll</HintPath>\n    </Reference>\n    <Reference Include=\"xunit.execution.desktop, Version=2.3.1.3858, Culture=neutral, PublicKeyToken=8d05b1bb7a6fdb6c, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\..\\packages\\xunit.extensibility.execution.2.3.1\\lib\\net452\\xunit.execution.desktop.dll</HintPath>\n    </Reference>\n  </ItemGroup>\n  <ItemGroup>\n    <Compile Include=\"Properties\\AssemblyInfo.cs\" />\n    <Compile Include=\"TimeRanges\\TimeRange_Tests.cs\" />\n  </ItemGroup>\n  <ItemGroup>\n    <None Include=\"app.config\" />\n    <None Include=\"packages.config\" />\n  </ItemGroup>\n  <ItemGroup>\n    <ProjectReference Include=\"..\\..\\Abplus\\Abplus.csproj\">\n      <Project>{1de8d8d1-987d-4a9c-aec5-ff0a9914bbd4}</Project>\n      <Name>Abplus</Name>\n    </ProjectReference>\n  </ItemGroup>\n  <ItemGroup>\n    <Service Include=\"{82A7F48D-3B50-4B1E-B82E-3ADA8210C358}\" />\n  </ItemGroup>\n  <ItemGroup>\n    <Analyzer Include=\"..\\..\\..\\packages\\xunit.analyzers.0.8.0\\analyzers\\dotnet\\cs\\xunit.analyzers.dll\" />\n  </ItemGroup>\n  <Import Project=\"$(MSBuildToolsPath)\\Microsoft.CSharp.targets\" />\n  <Import Project=\"..\\..\\..\\packages\\Microsoft.Bcl.Build.1.0.21\\build\\Microsoft.Bcl.Build.targets\" Condition=\"Exists('..\\..\\..\\packages\\Microsoft.Bcl.Build.1.0.21\\build\\Microsoft.Bcl.Build.targets')\" />\n  <Target Name=\"EnsureNuGetPackageBuildImports\" BeforeTargets=\"PrepareForBuild\">\n    <PropertyGroup>\n      <ErrorText>这台计算机上缺少此项目引用的 NuGet 程序包。使用“NuGet 程序包还原”可下载这些程序包。有关更多信息，请参见 http://go.microsoft.com/fwlink/?LinkID=322105。缺少的文件是 {0}。</ErrorText>\n    </PropertyGroup>\n    <Error Condition=\"!Exists('..\\..\\..\\packages\\Microsoft.Bcl.Build.1.0.21\\build\\Microsoft.Bcl.Build.targets')\" Text=\"$([System.String]::Format('$(ErrorText)', '..\\..\\..\\packages\\Microsoft.Bcl.Build.1.0.21\\build\\Microsoft.Bcl.Build.targets'))\" />\n    <Error Condition=\"!Exists('..\\..\\..\\packages\\xunit.core.2.3.1\\build\\xunit.core.props')\" Text=\"$([System.String]::Format('$(ErrorText)', '..\\..\\..\\packages\\xunit.core.2.3.1\\build\\xunit.core.props'))\" />\n    <Error Condition=\"!Exists('..\\..\\..\\packages\\xunit.core.2.3.1\\build\\xunit.core.targets')\" Text=\"$([System.String]::Format('$(ErrorText)', '..\\..\\..\\packages\\xunit.core.2.3.1\\build\\xunit.core.targets'))\" />\n    <Error Condition=\"!Exists('..\\..\\..\\packages\\xunit.runner.visualstudio.2.3.1\\build\\net20\\xunit.runner.visualstudio.props')\" Text=\"$([System.String]::Format('$(ErrorText)', '..\\..\\..\\packages\\xunit.runner.visualstudio.2.3.1\\build\\net20\\xunit.runner.visualstudio.props'))\" />\n  </Target>\n  <Import Project=\"..\\..\\..\\packages\\xunit.core.2.3.1\\build\\xunit.core.targets\" Condition=\"Exists('..\\..\\..\\packages\\xunit.core.2.3.1\\build\\xunit.core.targets')\" />\n  <!-- To modify your build process, add your task inside one of the targets below and uncomment it. \n       Other similar extension points exist, see Microsoft.Common.targets.\n  <Target Name=\"BeforeBuild\">\n  </Target>\n  <Target Name=\"AfterBuild\">\n  </Target>\n  -->\n</Project>"
  },
  {
    "path": "src2/Tests/Abplus.Tests/Properties/AssemblyInfo.cs",
    "content": "﻿using System.Reflection;\nusing System.Runtime.CompilerServices;\nusing System.Runtime.InteropServices;\n\n// 有关程序集的一般信息由以下\n// 控制。更改这些特性值可修改\n// 与程序集关联的信息。\n[assembly: AssemblyTitle(\"Abplus.Tests\")]\n[assembly: AssemblyDescription(\"\")]\n[assembly: AssemblyConfiguration(\"\")]\n[assembly: AssemblyCompany(\"\")]\n[assembly: AssemblyProduct(\"Abplus.Tests\")]\n[assembly: AssemblyCopyright(\"Copyright ©  2017\")]\n[assembly: AssemblyTrademark(\"\")]\n[assembly: AssemblyCulture(\"\")]\n\n//将 ComVisible 设置为 false 将使此程序集中的类型\n//对 COM 组件不可见。  如果需要从 COM 访问此程序集中的类型，\n//请将此类型的 ComVisible 特性设置为 true。\n[assembly: ComVisible(false)]\n\n// 如果此项目向 COM 公开，则下列 GUID 用于类型库的 ID\n[assembly: Guid(\"336022e3-d481-4d09-9b97-305441ff6301\")]\n\n// 程序集的版本信息由下列四个值组成: \n//\n//      主版本\n//      次版本\n//      生成号\n//      修订号\n//\n//可以指定所有这些值，也可以使用“生成号”和“修订号”的默认值，\n// 方法是按如下所示使用“*”: :\n// [assembly: AssemblyVersion(\"1.0.*\")]\n[assembly: AssemblyVersion(\"1.0.0.0\")]\n[assembly: AssemblyFileVersion(\"1.0.0.0\")]\n"
  },
  {
    "path": "src2/Tests/Abplus.Tests/TimeRanges/TimeRange_Tests.cs",
    "content": "﻿using System;\nusing Abp.TimeRanges;\nusing Shouldly;\nusing Xunit;\n\nnamespace Abplus.Tests.TimeRanges\n{\n    public class TimeRange_Tests\n    {\n        [Fact]\n        public void 时间区间起点不应大于等于终点()\n        {\n            Should.Throw<ArgumentException>(() =>\n            {\n                var from = DateTime.Now;\n                var to = DateTime.Now.AddMinutes(-5);\n                var tr = new TimeRange(from, to);\n            });\n        }\n\n        [Fact]\n        public void 时间区间相交情况A()\n        {\n            var from = DateTime.Now;\n            var to = from.AddMinutes(5);\n            var trA = new TimeRange(from, to);\n\n            var trB = new TimeRange(to, to.AddMinutes(5));\n\n            var res = trA.IsIntersect(trB);\n            res.ShouldBe(true);\n\n            var trC = new TimeRange(from.AddMinutes(4), to.AddMinutes(5));\n            var res2 = trA.IsIntersect(trC);\n            res2.ShouldBe(true);\n\n            var trD = new TimeRange(to.AddMinutes(1), to.AddMinutes(5));\n            var res3 = trA.IsIntersect(trD);\n            res3.ShouldBe(false);\n        }\n\n        [Fact]\n        public void 时间区间相交情况B()\n        {\n            var from = DateTime.Now;\n            var to = from.AddMinutes(5);\n            var trA = new TimeRange(from, to);\n\n            var trB = new TimeRange(from, to);\n\n            var res = trA.IsIntersect(trB);\n            res.ShouldBe(true);\n\n            var trC = new TimeRange(from.AddMinutes(-1), to.AddMinutes(1));\n            var res2 = trA.IsIntersect(trC);\n            res2.ShouldBe(true);\n        }\n\n        [Fact]\n        public void 时间区间相交情况C()\n        {\n            var from = DateTime.Now;\n            var to = from.AddMinutes(5);\n            var trA = new TimeRange(from, to);\n\n            var trB = new TimeRange(from.AddMinutes(-5), from);\n\n            var res = trA.IsIntersect(trB);\n            res.ShouldBe(true);\n\n            var trC = new TimeRange(from.AddMinutes(-5), from.AddMinutes(1));\n            var res2 = trA.IsIntersect(trC);\n            res2.ShouldBe(true);\n\n            var trD = new TimeRange(from.AddMinutes(-5), from.AddMinutes(-1));\n            var res3 = trA.IsIntersect(trD);\n            res3.ShouldBe(false);\n        }\n    }\n}\n"
  },
  {
    "path": "src2/Tests/Abplus.Tests/app.config",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<configuration>\n  <runtime>\n    <assemblyBinding xmlns=\"urn:schemas-microsoft-com:asm.v1\">\n      <dependentAssembly>\n        <assemblyIdentity name=\"Newtonsoft.Json\" publicKeyToken=\"30ad4fe6b2a6aeed\" culture=\"neutral\" />\n        <bindingRedirect oldVersion=\"0.0.0.0-11.0.0.0\" newVersion=\"11.0.0.0\" />\n      </dependentAssembly>\n      <dependentAssembly>\n        <assemblyIdentity name=\"Microsoft.Extensions.Caching.Abstractions\" publicKeyToken=\"adb9793829ddae60\" culture=\"neutral\" />\n        <bindingRedirect oldVersion=\"0.0.0.0-2.0.1.0\" newVersion=\"2.0.1.0\" />\n      </dependentAssembly>\n      <dependentAssembly>\n        <assemblyIdentity name=\"Microsoft.Extensions.Caching.Memory\" publicKeyToken=\"adb9793829ddae60\" culture=\"neutral\" />\n        <bindingRedirect oldVersion=\"0.0.0.0-2.0.1.0\" newVersion=\"2.0.1.0\" />\n      </dependentAssembly>\n      <dependentAssembly>\n        <assemblyIdentity name=\"Microsoft.Extensions.Options\" publicKeyToken=\"adb9793829ddae60\" culture=\"neutral\" />\n        <bindingRedirect oldVersion=\"0.0.0.0-2.0.1.0\" newVersion=\"2.0.1.0\" />\n      </dependentAssembly>\n      <dependentAssembly>\n        <assemblyIdentity name=\"System.Runtime.InteropServices.RuntimeInformation\" publicKeyToken=\"b03f5f7f11d50a3a\" culture=\"neutral\" />\n        <bindingRedirect oldVersion=\"0.0.0.0-4.0.2.0\" newVersion=\"4.0.2.0\" />\n      </dependentAssembly>\n      <dependentAssembly>\n        <assemblyIdentity name=\"System.Collections.Immutable\" publicKeyToken=\"b03f5f7f11d50a3a\" culture=\"neutral\" />\n        <bindingRedirect oldVersion=\"0.0.0.0-1.2.3.0\" newVersion=\"1.2.3.0\" />\n      </dependentAssembly>\n      <dependentAssembly>\n        <assemblyIdentity name=\"System.ComponentModel.Annotations\" publicKeyToken=\"b03f5f7f11d50a3a\" culture=\"neutral\" />\n        <bindingRedirect oldVersion=\"0.0.0.0-4.2.1.0\" newVersion=\"4.2.1.0\" />\n      </dependentAssembly>\n    </assemblyBinding>\n  </runtime>\n</configuration>"
  },
  {
    "path": "src2/Tests/Abplus.Tests/packages.config",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<packages>\n  <package id=\"Abp\" version=\"3.7.2\" targetFramework=\"net461\" />\n  <package id=\"Castle.Core\" version=\"4.3.1\" targetFramework=\"net461\" />\n  <package id=\"Castle.LoggingFacility\" version=\"4.1.0\" targetFramework=\"net461\" />\n  <package id=\"Castle.Windsor\" version=\"4.1.0\" targetFramework=\"net461\" />\n  <package id=\"JetBrains.Annotations\" version=\"11.1.0\" targetFramework=\"net461\" />\n  <package id=\"Microsoft.Bcl\" version=\"1.1.10\" targetFramework=\"net461\" />\n  <package id=\"Microsoft.Bcl.Async\" version=\"1.0.168\" targetFramework=\"net461\" />\n  <package id=\"Microsoft.Bcl.Build\" version=\"1.0.21\" targetFramework=\"net461\" />\n  <package id=\"Microsoft.Extensions.Caching.Abstractions\" version=\"2.1.0\" targetFramework=\"net461\" />\n  <package id=\"Microsoft.Extensions.Caching.Memory\" version=\"2.1.0\" targetFramework=\"net461\" />\n  <package id=\"Microsoft.Extensions.DependencyInjection.Abstractions\" version=\"2.1.0\" targetFramework=\"net461\" />\n  <package id=\"Microsoft.Extensions.Options\" version=\"2.1.0\" targetFramework=\"net461\" />\n  <package id=\"Microsoft.Extensions.Primitives\" version=\"2.1.0\" targetFramework=\"net461\" />\n  <package id=\"Newtonsoft.Json\" version=\"11.0.2\" targetFramework=\"net461\" />\n  <package id=\"Nito.AsyncEx\" version=\"4.0.1\" targetFramework=\"net461\" />\n  <package id=\"Nito.AsyncEx.Context\" version=\"1.1.0\" targetFramework=\"net461\" />\n  <package id=\"Nito.AsyncEx.Coordination\" version=\"1.0.2\" targetFramework=\"net461\" />\n  <package id=\"Nito.AsyncEx.Tasks\" version=\"1.1.0\" targetFramework=\"net461\" />\n  <package id=\"Nito.Collections.Deque\" version=\"1.0.4\" targetFramework=\"net461\" />\n  <package id=\"Nito.Disposables\" version=\"1.2.3\" targetFramework=\"net461\" />\n  <package id=\"Shouldly\" version=\"3.0.0\" targetFramework=\"net461\" />\n  <package id=\"System.Buffers\" version=\"4.4.0\" targetFramework=\"net461\" />\n  <package id=\"System.Collections.Immutable\" version=\"1.5.0\" targetFramework=\"net461\" />\n  <package id=\"System.ComponentModel.Annotations\" version=\"4.5.0\" targetFramework=\"net461\" />\n  <package id=\"System.Configuration.ConfigurationManager\" version=\"4.5.0\" targetFramework=\"net461\" />\n  <package id=\"System.Data.Common\" version=\"4.3.0\" targetFramework=\"net461\" />\n  <package id=\"System.Linq.Dynamic\" version=\"1.0.7\" targetFramework=\"net461\" />\n  <package id=\"System.Linq.Dynamic.Core\" version=\"1.0.8.9\" targetFramework=\"net461\" />\n  <package id=\"System.Linq.Queryable\" version=\"4.3.0\" targetFramework=\"net461\" />\n  <package id=\"System.Memory\" version=\"4.5.0\" targetFramework=\"net461\" />\n  <package id=\"System.Numerics.Vectors\" version=\"4.4.0\" targetFramework=\"net461\" />\n  <package id=\"System.Runtime.CompilerServices.Unsafe\" version=\"4.5.0\" targetFramework=\"net461\" />\n  <package id=\"System.Runtime.InteropServices.RuntimeInformation\" version=\"4.3.0\" targetFramework=\"net461\" />\n  <package id=\"System.Runtime.Serialization.Formatters\" version=\"4.3.0\" targetFramework=\"net461\" />\n  <package id=\"System.Runtime.Serialization.Primitives\" version=\"4.3.0\" targetFramework=\"net461\" />\n  <package id=\"System.Security.AccessControl\" version=\"4.5.0\" targetFramework=\"net461\" />\n  <package id=\"System.Security.Claims\" version=\"4.3.0\" targetFramework=\"net461\" />\n  <package id=\"System.Security.Permissions\" version=\"4.5.0\" targetFramework=\"net461\" />\n  <package id=\"System.Security.Principal.Windows\" version=\"4.5.0\" targetFramework=\"net461\" />\n  <package id=\"System.Threading\" version=\"4.3.0\" targetFramework=\"net461\" />\n  <package id=\"System.Xml.XmlDocument\" version=\"4.3.0\" targetFramework=\"net461\" />\n  <package id=\"System.Xml.XPath\" version=\"4.3.0\" targetFramework=\"net461\" />\n  <package id=\"System.Xml.XPath.XmlDocument\" version=\"4.3.0\" targetFramework=\"net461\" />\n  <package id=\"TimeZoneConverter\" version=\"2.4.1\" targetFramework=\"net461\" />\n  <package id=\"xunit\" version=\"2.3.1\" targetFramework=\"net461\" />\n  <package id=\"xunit.abstractions\" version=\"2.0.1\" targetFramework=\"net461\" />\n  <package id=\"xunit.analyzers\" version=\"0.8.0\" targetFramework=\"net461\" />\n  <package id=\"xunit.assert\" version=\"2.3.1\" targetFramework=\"net461\" />\n  <package id=\"xunit.core\" version=\"2.3.1\" targetFramework=\"net461\" />\n  <package id=\"xunit.extensibility.core\" version=\"2.3.1\" targetFramework=\"net461\" />\n  <package id=\"xunit.extensibility.execution\" version=\"2.3.1\" targetFramework=\"net461\" />\n  <package id=\"xunit.runner.visualstudio\" version=\"2.3.1\" targetFramework=\"net461\" developmentDependency=\"true\" />\n</packages>"
  }
]