From ef6b90b8e6e6c317fcda85a392c79324f91250db Mon Sep 17 00:00:00 2001 From: Luke Pulverenti Date: Tue, 25 Oct 2016 15:02:04 -0400 Subject: make controller project portable --- MediaBrowser.Model/IO/IFileSystem.cs | 414 +++++++++++++++++++++++++++++++++++ 1 file changed, 414 insertions(+) create mode 100644 MediaBrowser.Model/IO/IFileSystem.cs (limited to 'MediaBrowser.Model/IO/IFileSystem.cs') diff --git a/MediaBrowser.Model/IO/IFileSystem.cs b/MediaBrowser.Model/IO/IFileSystem.cs new file mode 100644 index 000000000..4ff4fc604 --- /dev/null +++ b/MediaBrowser.Model/IO/IFileSystem.cs @@ -0,0 +1,414 @@ +using System; +using System.Collections.Generic; +using System.IO; +using System.Text; + +namespace MediaBrowser.Model.IO +{ + /// + /// Interface IFileSystem + /// + public interface IFileSystem + { + /// + /// Determines whether the specified filename is shortcut. + /// + /// The filename. + /// true if the specified filename is shortcut; otherwise, false. + bool IsShortcut(string filename); + + /// + /// Resolves the shortcut. + /// + /// The filename. + /// System.String. + string ResolveShortcut(string filename); + + /// + /// Creates the shortcut. + /// + /// The shortcut path. + /// The target. + void CreateShortcut(string shortcutPath, string target); + + /// + /// Returns a object for the specified file or directory path. + /// + /// A path to a file or directory. + /// A object. + /// If the specified path points to a directory, the returned object's + /// property will be set to true and all other properties will reflect the properties of the directory. + FileSystemMetadata GetFileSystemInfo(string path); + + /// + /// Returns a object for the specified file path. + /// + /// A path to a file. + /// A object. + /// If the specified path points to a directory, the returned object's + /// property and the property will both be set to false. + /// For automatic handling of files and directories, use . + FileSystemMetadata GetFileInfo(string path); + + /// + /// Returns a object for the specified directory path. + /// + /// A path to a directory. + /// A object. + /// If the specified path points to a file, the returned object's + /// property will be set to true and the property will be set to false. + /// For automatic handling of files and directories, use . + FileSystemMetadata GetDirectoryInfo(string path); + + /// + /// Gets the valid filename. + /// + /// The filename. + /// System.String. + string GetValidFilename(string filename); + + /// + /// Gets the creation time UTC. + /// + /// The information. + /// DateTime. + DateTime GetCreationTimeUtc(FileSystemMetadata info); + + /// + /// Gets the creation time UTC. + /// + /// The path. + /// DateTime. + DateTime GetCreationTimeUtc(string path); + + /// + /// Gets the last write time UTC. + /// + /// The information. + /// DateTime. + DateTime GetLastWriteTimeUtc(FileSystemMetadata info); + + /// + /// Gets the last write time UTC. + /// + /// The path. + /// DateTime. + DateTime GetLastWriteTimeUtc(string path); + + /// + /// Gets the file stream. + /// + /// The path. + /// The mode. + /// The access. + /// The share. + /// if set to true [is asynchronous]. + /// FileStream. + Stream GetFileStream(string path, FileOpenMode mode, FileAccessMode access, FileShareMode share, bool isAsync = false); + + /// + /// Opens the read. + /// + /// The path. + /// Stream. + Stream OpenRead(String path); + + /// + /// Swaps the files. + /// + /// The file1. + /// The file2. + void SwapFiles(string file1, string file2); + + /// + /// Determines whether [contains sub path] [the specified parent path]. + /// + /// The parent path. + /// The path. + /// true if [contains sub path] [the specified parent path]; otherwise, false. + bool ContainsSubPath(string parentPath, string path); + + /// + /// Determines whether [is root path] [the specified path]. + /// + /// The path. + /// true if [is root path] [the specified path]; otherwise, false. + bool IsRootPath(string path); + + /// + /// Normalizes the path. + /// + /// The path. + /// System.String. + string NormalizePath(string path); + + /// + /// Gets the file name without extension. + /// + /// The information. + /// System.String. + string GetFileNameWithoutExtension(FileSystemMetadata info); + + /// + /// Gets the file name without extension. + /// + /// The path. + /// System.String. + string GetFileNameWithoutExtension(string path); + + /// + /// Determines whether [is path file] [the specified path]. + /// + /// The path. + /// true if [is path file] [the specified path]; otherwise, false. + bool IsPathFile(string path); + + /// + /// Deletes the file. + /// + /// The path. + void DeleteFile(string path); + + /// + /// Deletes the directory. + /// + /// The path. + /// if set to true [recursive]. + void DeleteDirectory(string path, bool recursive); + + /// + /// Gets the directories. + /// + /// The path. + /// if set to true [recursive]. + /// IEnumerable<DirectoryInfo>. + IEnumerable GetDirectories(string path, bool recursive = false); + + /// + /// Gets the files. + /// + /// The path. + /// if set to true [recursive]. + /// IEnumerable<FileInfo>. + IEnumerable GetFiles(string path, bool recursive = false); + + /// + /// Gets the file system entries. + /// + /// The path. + /// if set to true [recursive]. + /// IEnumerable<FileSystemMetadata>. + IEnumerable GetFileSystemEntries(string path, bool recursive = false); + + /// + /// Creates the directory. + /// + /// The path. + void CreateDirectory(string path); + + /// + /// Copies the file. + /// + /// The source. + /// The target. + /// if set to true [overwrite]. + void CopyFile(string source, string target, bool overwrite); + + /// + /// Moves the file. + /// + /// The source. + /// The target. + void MoveFile(string source, string target); + + /// + /// Moves the directory. + /// + /// The source. + /// The target. + void MoveDirectory(string source, string target); + + /// + /// Directories the exists. + /// + /// The path. + /// true if XXXX, false otherwise. + bool DirectoryExists(string path); + + /// + /// Files the exists. + /// + /// The path. + /// true if XXXX, false otherwise. + bool FileExists(string path); + + /// + /// Reads all text. + /// + /// The path. + /// System.String. + string ReadAllText(string path); + + /// + /// Writes all text. + /// + /// The path. + /// The text. + void WriteAllText(string path, string text); + + /// + /// Writes all text. + /// + /// The path. + /// The text. + /// The encoding. + void WriteAllText(string path, string text, Encoding encoding); + + /// + /// Reads all text. + /// + /// The path. + /// The encoding. + /// System.String. + string ReadAllText(string path, Encoding encoding); + + /// + /// Gets the directory paths. + /// + /// The path. + /// if set to true [recursive]. + /// IEnumerable<System.String>. + IEnumerable GetDirectoryPaths(string path, bool recursive = false); + + /// + /// Gets the file paths. + /// + /// The path. + /// if set to true [recursive]. + /// IEnumerable<System.String>. + IEnumerable GetFilePaths(string path, bool recursive = false); + + /// + /// Gets the file system entry paths. + /// + /// The path. + /// if set to true [recursive]. + /// IEnumerable<System.String>. + IEnumerable GetFileSystemEntryPaths(string path, bool recursive = false); + + void SetHidden(string path, bool isHidden); + } + + public enum FileOpenMode + { + // + // Summary: + // Specifies that the operating system should create a new file. This requires System.Security.Permissions.FileIOPermissionAccess.Write + // permission. If the file already exists, an System.IO.IOException exception is + // thrown. + CreateNew = 1, + // + // Summary: + // Specifies that the operating system should create a new file. If the file already + // exists, it will be overwritten. This requires System.Security.Permissions.FileIOPermissionAccess.Write + // permission. FileMode.Create is equivalent to requesting that if the file does + // not exist, use System.IO.FileMode.CreateNew; otherwise, use System.IO.FileMode.Truncate. + // If the file already exists but is a hidden file, an System.UnauthorizedAccessException + // exception is thrown. + Create = 2, + // + // Summary: + // Specifies that the operating system should open an existing file. The ability + // to open the file is dependent on the value specified by the System.IO.FileAccess + // enumeration. A System.IO.FileNotFoundException exception is thrown if the file + // does not exist. + Open = 3, + // + // Summary: + // Specifies that the operating system should open a file if it exists; otherwise, + // a new file should be created. If the file is opened with FileAccess.Read, System.Security.Permissions.FileIOPermissionAccess.Read + // permission is required. If the file access is FileAccess.Write, System.Security.Permissions.FileIOPermissionAccess.Write + // permission is required. If the file is opened with FileAccess.ReadWrite, both + // System.Security.Permissions.FileIOPermissionAccess.Read and System.Security.Permissions.FileIOPermissionAccess.Write + // permissions are required. + OpenOrCreate = 4, + // + // Summary: + // Specifies that the operating system should open an existing file. When the file + // is opened, it should be truncated so that its size is zero bytes. This requires + // System.Security.Permissions.FileIOPermissionAccess.Write permission. Attempts + // to read from a file opened with FileMode.Truncate cause an System.ArgumentException + // exception. + Truncate = 5, + // + // Summary: + // Opens the file if it exists and seeks to the end of the file, or creates a new + // file. This requires System.Security.Permissions.FileIOPermissionAccess.Append + // permission. FileMode.Append can be used only in conjunction with FileAccess.Write. + // Trying to seek to a position before the end of the file throws an System.IO.IOException + // exception, and any attempt to read fails and throws a System.NotSupportedException + // exception. + Append = 6 + } + + [Flags] + public enum FileAccessMode + { + // + // Summary: + // Read access to the file. Data can be read from the file. Combine with Write for + // read/write access. + Read = 1, + // + // Summary: + // Write access to the file. Data can be written to the file. Combine with Read + // for read/write access. + Write = 2, + // + // Summary: + // Read and write access to the file. Data can be written to and read from the file. + ReadWrite = 3 + } + + [Flags] + public enum FileShareMode + { + // + // Summary: + // Declines sharing of the current file. Any request to open the file (by this process + // or another process) will fail until the file is closed. + None = 0, + // + // Summary: + // Allows subsequent opening of the file for reading. If this flag is not specified, + // any request to open the file for reading (by this process or another process) + // will fail until the file is closed. However, even if this flag is specified, + // additional permissions might still be needed to access the file. + Read = 1, + // + // Summary: + // Allows subsequent opening of the file for writing. If this flag is not specified, + // any request to open the file for writing (by this process or another process) + // will fail until the file is closed. However, even if this flag is specified, + // additional permissions might still be needed to access the file. + Write = 2, + // + // Summary: + // Allows subsequent opening of the file for reading or writing. If this flag is + // not specified, any request to open the file for reading or writing (by this process + // or another process) will fail until the file is closed. However, even if this + // flag is specified, additional permissions might still be needed to access the + // file. + ReadWrite = 3, + // + // Summary: + // Allows subsequent deleting of a file. + Delete = 4, + // + // Summary: + // Makes the file handle inheritable by child processes. This is not directly supported + // by Win32. + Inheritable = 16 + } + +} -- cgit v1.2.3 From b30c58f82580a82586526114858fa0ca791f096e Mon Sep 17 00:00:00 2001 From: Luke Pulverenti Date: Tue, 25 Oct 2016 22:04:49 -0400 Subject: retarget dashboard project --- .../IO/ManagedFileSystem.cs | 13 + MediaBrowser.Model/IO/IFileSystem.cs | 4 + MediaBrowser.WebDashboard/Api/DashboardService.cs | 10 +- MediaBrowser.WebDashboard/Api/PackageCreator.cs | 60 +- .../MediaBrowser.WebDashboard.csproj | 5 +- MediaBrowser.WebDashboard/project.json | 17 +- MediaBrowser.WebDashboard/project.lock.json | 17475 +------------------ 7 files changed, 40 insertions(+), 17544 deletions(-) (limited to 'MediaBrowser.Model/IO/IFileSystem.cs') diff --git a/MediaBrowser.Common.Implementations/IO/ManagedFileSystem.cs b/MediaBrowser.Common.Implementations/IO/ManagedFileSystem.cs index 34d2ddbad..ffb1e4234 100644 --- a/MediaBrowser.Common.Implementations/IO/ManagedFileSystem.cs +++ b/MediaBrowser.Common.Implementations/IO/ManagedFileSystem.cs @@ -49,6 +49,19 @@ namespace MediaBrowser.Common.Implementations.IO } } + public char DirectorySeparatorChar + { + get + { + return Path.DirectorySeparatorChar; + } + } + + public string GetFullPath(string path) + { + return Path.GetFullPath(path); + } + /// /// Determines whether the specified filename is shortcut. /// diff --git a/MediaBrowser.Model/IO/IFileSystem.cs b/MediaBrowser.Model/IO/IFileSystem.cs index 4ff4fc604..b2ca6924f 100644 --- a/MediaBrowser.Model/IO/IFileSystem.cs +++ b/MediaBrowser.Model/IO/IFileSystem.cs @@ -297,6 +297,10 @@ namespace MediaBrowser.Model.IO IEnumerable GetFileSystemEntryPaths(string path, bool recursive = false); void SetHidden(string path, bool isHidden); + + char DirectorySeparatorChar { get; } + + string GetFullPath(string path); } public enum FileOpenMode diff --git a/MediaBrowser.WebDashboard/Api/DashboardService.cs b/MediaBrowser.WebDashboard/Api/DashboardService.cs index b329c92a8..5af580340 100644 --- a/MediaBrowser.WebDashboard/Api/DashboardService.cs +++ b/MediaBrowser.WebDashboard/Api/DashboardService.cs @@ -334,11 +334,17 @@ namespace MediaBrowser.WebDashboard.Api // Try to trim the output size a bit var bowerPath = Path.Combine(path, "bower_components"); - GetDeployIgnoreExtensions().ForEach(i => DeleteFilesByExtension(bowerPath, i)); + foreach (var ext in GetDeployIgnoreExtensions()) + { + DeleteFilesByExtension(bowerPath, ext); + } DeleteFilesByExtension(bowerPath, ".json", "strings\\"); - GetDeployIgnoreFilenames().ForEach(i => DeleteFilesByName(bowerPath, i.Item1, i.Item2)); + foreach (var ignore in GetDeployIgnoreFilenames()) + { + DeleteFilesByName(bowerPath, ignore.Item1, ignore.Item2); + } DeleteFoldersByName(bowerPath, "demo"); DeleteFoldersByName(bowerPath, "test"); diff --git a/MediaBrowser.WebDashboard/Api/PackageCreator.cs b/MediaBrowser.WebDashboard/Api/PackageCreator.cs index ff22f1fff..260352c7e 100644 --- a/MediaBrowser.WebDashboard/Api/PackageCreator.cs +++ b/MediaBrowser.WebDashboard/Api/PackageCreator.cs @@ -59,20 +59,6 @@ namespace MediaBrowser.WebDashboard.Api resourceStream = await ModifyHtml(path, resourceStream, mode, appVersion, localizationCulture, enableMinification).ConfigureAwait(false); } } - else if (IsFormat(path, "js")) - { - if (path.IndexOf(".min.", StringComparison.OrdinalIgnoreCase) == -1 && path.IndexOf("bower_components", StringComparison.OrdinalIgnoreCase) == -1) - { - resourceStream = await ModifyJs(resourceStream, enableMinification).ConfigureAwait(false); - } - } - else if (IsFormat(path, "css")) - { - if (path.IndexOf(".min.", StringComparison.OrdinalIgnoreCase) == -1 && path.IndexOf("bower_components", StringComparison.OrdinalIgnoreCase) == -1) - { - resourceStream = await ModifyCss(resourceStream, enableMinification).ConfigureAwait(false); - } - } } return resourceStream; @@ -115,11 +101,11 @@ namespace MediaBrowser.WebDashboard.Api { var rootPath = DashboardUIPath; - var fullPath = Path.Combine(rootPath, virtualPath.Replace('/', Path.DirectorySeparatorChar)); + var fullPath = Path.Combine(rootPath, virtualPath.Replace('/', _fileSystem.DirectorySeparatorChar)); try { - fullPath = Path.GetFullPath(fullPath); + fullPath = _fileSystem.GetFullPath(fullPath); } catch (Exception ex) { @@ -135,44 +121,6 @@ namespace MediaBrowser.WebDashboard.Api return fullPath; } - public async Task ModifyCss(Stream sourceStream, bool enableMinification) - { - using (sourceStream) - { - string content; - - using (var memoryStream = new MemoryStream()) - { - await sourceStream.CopyToAsync(memoryStream).ConfigureAwait(false); - - content = Encoding.UTF8.GetString(memoryStream.ToArray()); - } - - var bytes = Encoding.UTF8.GetBytes(content); - - return new MemoryStream(bytes); - } - } - - public async Task ModifyJs(Stream sourceStream, bool enableMinification) - { - using (sourceStream) - { - string content; - - using (var memoryStream = new MemoryStream()) - { - await sourceStream.CopyToAsync(memoryStream).ConfigureAwait(false); - - content = Encoding.UTF8.GetString(memoryStream.ToArray()); - } - - var bytes = Encoding.UTF8.GetBytes(content); - - return new MemoryStream(bytes); - } - } - public bool IsCoreHtml(string path) { if (path.IndexOf(".template.html", StringComparison.OrdinalIgnoreCase) != -1) @@ -209,7 +157,9 @@ namespace MediaBrowser.WebDashboard.Api { await sourceStream.CopyToAsync(memoryStream).ConfigureAwait(false); - html = Encoding.UTF8.GetString(memoryStream.ToArray()); + var originalBytes = memoryStream.ToArray(); + + html = Encoding.UTF8.GetString(originalBytes, 0, originalBytes.Length); if (string.Equals(mode, "cordova", StringComparison.OrdinalIgnoreCase)) { diff --git a/MediaBrowser.WebDashboard/MediaBrowser.WebDashboard.csproj b/MediaBrowser.WebDashboard/MediaBrowser.WebDashboard.csproj index 996b9efad..a3b1da7d7 100644 --- a/MediaBrowser.WebDashboard/MediaBrowser.WebDashboard.csproj +++ b/MediaBrowser.WebDashboard/MediaBrowser.WebDashboard.csproj @@ -14,9 +14,8 @@ 10.0.0 2.0 {786C830F-07A1-408B-BD7F-6EE04809D6DB};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC} - - - v5.0 + Profile7 + v4.5 true diff --git a/MediaBrowser.WebDashboard/project.json b/MediaBrowser.WebDashboard/project.json index 3d0dd3227..61c570126 100644 --- a/MediaBrowser.WebDashboard/project.json +++ b/MediaBrowser.WebDashboard/project.json @@ -1,16 +1,7 @@ -{ - "supports": { - "net46.app": {}, - "uwp.10.0.app": {}, - "dnxcore50.app": {} - }, - "dependencies": { - "Microsoft.NETCore": "5.0.0", - "Microsoft.NETCore.Portable.Compatibility": "1.0.0" - }, +{ + "supports": {}, + "dependencies": {}, "frameworks": { - "dotnet": { - "imports": "portable-net452+win81" - } + ".NETPortable,Version=v4.5,Profile=Profile7": {} } } \ No newline at end of file diff --git a/MediaBrowser.WebDashboard/project.lock.json b/MediaBrowser.WebDashboard/project.lock.json index 04e4b17d4..c14072cdb 100644 --- a/MediaBrowser.WebDashboard/project.lock.json +++ b/MediaBrowser.WebDashboard/project.lock.json @@ -2,17478 +2,11 @@ "locked": false, "version": 1, "targets": { - ".NETFramework,Version=v4.6": { - "Microsoft.CSharp/4.0.0": { - "frameworkAssemblies": [ - "Microsoft.CSharp" - ], - "compile": { - "ref/net45/_._": {} - }, - "runtime": { - "lib/net45/_._": {} - } - }, - "Microsoft.NETCore/5.0.0": { - "dependencies": { - "Microsoft.CSharp": "4.0.0", - "Microsoft.NETCore.Targets": "1.0.0", - "Microsoft.VisualBasic": "10.0.0", - "System.AppContext": "4.0.0", - "System.Collections": "4.0.10", - "System.Collections.Concurrent": "4.0.10", - "System.Collections.Immutable": "1.1.37", - "System.ComponentModel": "4.0.0", - "System.ComponentModel.Annotations": "4.0.10", - "System.Diagnostics.Debug": "4.0.10", - "System.Diagnostics.Tools": "4.0.0", - "System.Diagnostics.Tracing": "4.0.20", - "System.Dynamic.Runtime": "4.0.10", - "System.Globalization": "4.0.10", - "System.Globalization.Calendars": "4.0.0", - "System.Globalization.Extensions": "4.0.0", - "System.IO": "4.0.10", - "System.IO.Compression": "4.0.0", - "System.IO.Compression.ZipFile": "4.0.0", - "System.IO.FileSystem": "4.0.0", - "System.IO.FileSystem.Primitives": "4.0.0", - "System.IO.UnmanagedMemoryStream": "4.0.0", - "System.Linq": "4.0.0", - "System.Linq.Expressions": "4.0.10", - "System.Linq.Parallel": "4.0.0", - "System.Linq.Queryable": "4.0.0", - "System.Net.Http": "4.0.0", - "System.Net.NetworkInformation": "4.0.0", - "System.Net.Primitives": "4.0.10", - "System.Numerics.Vectors": "4.1.0", - "System.ObjectModel": "4.0.10", - "System.Reflection": "4.0.10", - "System.Reflection.DispatchProxy": "4.0.0", - "System.Reflection.Extensions": "4.0.0", - "System.Reflection.Metadata": "1.0.22", - "System.Reflection.Primitives": "4.0.0", - "System.Reflection.TypeExtensions": "4.0.0", - "System.Resources.ResourceManager": "4.0.0", - "System.Runtime": "4.0.20", - "System.Runtime.Extensions": "4.0.10", - "System.Runtime.Handles": "4.0.0", - "System.Runtime.InteropServices": "4.0.20", - "System.Runtime.Numerics": "4.0.0", - "System.Security.Claims": "4.0.0", - "System.Security.Principal": "4.0.0", - "System.Text.Encoding": "4.0.10", - "System.Text.Encoding.Extensions": "4.0.10", - "System.Text.RegularExpressions": "4.0.10", - "System.Threading": "4.0.10", - "System.Threading.Tasks": "4.0.10", - "System.Threading.Tasks.Dataflow": "4.5.25", - "System.Threading.Tasks.Parallel": "4.0.0", - "System.Threading.Timer": "4.0.0", - "System.Xml.ReaderWriter": "4.0.10", - "System.Xml.XDocument": "4.0.10" - } - }, - "Microsoft.NETCore.Platforms/1.0.0": {}, - "Microsoft.NETCore.Portable.Compatibility/1.0.0": { - "compile": { - "ref/net45/_._": {} - }, - "runtime": { - "lib/net45/_._": {} - } - }, - "Microsoft.NETCore.Targets/1.0.0": { - "dependencies": { - "Microsoft.NETCore.Platforms": "1.0.0", - "Microsoft.NETCore.Targets.NETFramework": "4.6.0" - } - }, - "Microsoft.NETCore.Targets.NETFramework/4.6.0": {}, - "Microsoft.VisualBasic/10.0.0": { - "frameworkAssemblies": [ - "Microsoft.VisualBasic" - ], - "compile": { - "ref/net45/_._": {} - }, - "runtime": { - "lib/net45/_._": {} - } - }, - "System.AppContext/4.0.0": { - "dependencies": { - "System.Runtime": "4.0.0" - }, - "frameworkAssemblies": [ - "mscorlib" - ], - "compile": { - "ref/net46/System.AppContext.dll": {} - }, - "runtime": { - "lib/net46/System.AppContext.dll": {} - } - }, - "System.Collections/4.0.10": { - "compile": { - "ref/net46/_._": {} - }, - "runtime": { - "lib/net46/_._": {} - } - }, - "System.Collections.Concurrent/4.0.10": { - "compile": { - "ref/net46/_._": {} - }, - "runtime": { - "lib/net46/_._": {} - } - }, - "System.Collections.Immutable/1.1.37": { - "dependencies": { - "System.Collections": "4.0.0", - "System.Diagnostics.Debug": "4.0.0", - "System.Globalization": "4.0.0", - "System.Linq": "4.0.0", - "System.Resources.ResourceManager": "4.0.0", - "System.Runtime": "4.0.0", - "System.Runtime.Extensions": "4.0.0", - "System.Threading": "4.0.0" - }, - "compile": { - "lib/dotnet/System.Collections.Immutable.dll": {} - }, - "runtime": { - "lib/dotnet/System.Collections.Immutable.dll": {} - } - }, - "System.ComponentModel/4.0.0": { - "compile": { - "ref/net45/_._": {} - }, - "runtime": { - "lib/net45/_._": {} - } - }, - "System.ComponentModel.Annotations/4.0.10": { - "compile": { - "ref/net46/_._": {} - }, - "runtime": { - "lib/net46/_._": {} - } - }, - "System.Diagnostics.Debug/4.0.10": { - "compile": { - "ref/net46/_._": {} - }, - "runtime": { - "lib/net46/_._": {} - } - }, - "System.Diagnostics.Tools/4.0.0": { - "compile": { - "ref/net45/_._": {} - }, - "runtime": { - "lib/net45/_._": {} - } - }, - "System.Diagnostics.Tracing/4.0.20": { - "compile": { - "ref/net46/_._": {} - }, - "runtime": { - "lib/net46/_._": {} - } - }, - "System.Dynamic.Runtime/4.0.10": { - "compile": { - "ref/net46/_._": {} - }, - "runtime": { - "lib/net46/_._": {} - } - }, - "System.Globalization/4.0.10": { - "compile": { - "ref/net46/_._": {} - }, - "runtime": { - "lib/net46/_._": {} - } - }, - "System.Globalization.Calendars/4.0.0": { - "dependencies": { - "System.Globalization": "4.0.0", - "System.Runtime": "4.0.0" - }, - "frameworkAssemblies": [ - "mscorlib" - ], - "compile": { - "ref/net46/System.Globalization.Calendars.dll": {} - }, - "runtime": { - "lib/net46/System.Globalization.Calendars.dll": {} - } - }, - "System.Globalization.Extensions/4.0.0": { - "dependencies": { - "System.Globalization": "4.0.10", - "System.Resources.ResourceManager": "4.0.0", - "System.Runtime": "4.0.20", - "System.Runtime.Extensions": "4.0.10", - "System.Runtime.InteropServices": "4.0.20" - }, - "frameworkAssemblies": [ - "mscorlib" - ], - "compile": { - "ref/net46/System.Globalization.Extensions.dll": {} - }, - "runtime": { - "lib/net46/System.Globalization.Extensions.dll": {} - } - }, - "System.IO/4.0.10": { - "compile": { - "ref/net46/_._": {} - }, - "runtime": { - "lib/net46/_._": {} - } - }, - "System.IO.Compression/4.0.0": { - "frameworkAssemblies": [ - "System.IO.Compression" - ], - "compile": { - "ref/net45/_._": {} - }, - "runtime": { - "lib/net45/_._": {} - } - }, - "System.IO.Compression.ZipFile/4.0.0": { - "dependencies": { - "System.IO": "4.0.10", - "System.IO.Compression": "4.0.0", - "System.IO.FileSystem": "4.0.0", - "System.IO.FileSystem.Primitives": "4.0.0", - "System.Resources.ResourceManager": "4.0.0", - "System.Runtime": "4.0.20", - "System.Runtime.Extensions": "4.0.10", - "System.Text.Encoding": "4.0.10" - }, - "frameworkAssemblies": [ - "System.IO.Compression.FileSystem", - "mscorlib" - ], - "compile": { - "ref/net46/System.IO.Compression.ZipFile.dll": {} - }, - "runtime": { - "lib/net46/System.IO.Compression.ZipFile.dll": {} - } - }, - "System.IO.FileSystem/4.0.0": { - "dependencies": { - "System.IO": "4.0.0", - "System.IO.FileSystem.Primitives": "4.0.0", - "System.Runtime": "4.0.0", - "System.Runtime.Handles": "4.0.0", - "System.Text.Encoding": "4.0.0", - "System.Threading.Tasks": "4.0.0" - }, - "frameworkAssemblies": [ - "mscorlib" - ], - "compile": { - "ref/net46/System.IO.FileSystem.dll": {} - }, - "runtime": { - "lib/net46/System.IO.FileSystem.dll": {} - } - }, - "System.IO.FileSystem.Primitives/4.0.0": { - "dependencies": { - "System.Runtime": "4.0.20" - }, - "frameworkAssemblies": [ - "mscorlib" - ], - "compile": { - "ref/net46/System.IO.FileSystem.Primitives.dll": {} - }, - "runtime": { - "lib/net46/System.IO.FileSystem.Primitives.dll": {} - } - }, - "System.IO.UnmanagedMemoryStream/4.0.0": { - "dependencies": { - "System.IO": "4.0.10", - "System.IO.FileSystem.Primitives": "4.0.0", - "System.Resources.ResourceManager": "4.0.0", - "System.Runtime": "4.0.20", - "System.Runtime.InteropServices": "4.0.20", - "System.Threading": "4.0.10", - "System.Threading.Tasks": "4.0.10" - }, - "frameworkAssemblies": [ - "mscorlib" - ], - "compile": { - "ref/net46/System.IO.UnmanagedMemoryStream.dll": {} - }, - "runtime": { - "lib/net46/System.IO.UnmanagedMemoryStream.dll": {} - } - }, - "System.Linq/4.0.0": { - "compile": { - "ref/net45/_._": {} - }, - "runtime": { - "lib/net45/_._": {} - } - }, - "System.Linq.Expressions/4.0.10": { - "compile": { - "ref/net46/_._": {} - }, - "runtime": { - "lib/net46/_._": {} - } - }, - "System.Linq.Parallel/4.0.0": { - "compile": { - "ref/net45/_._": {} - }, - "runtime": { - "lib/net45/_._": {} - } - }, - "System.Linq.Queryable/4.0.0": { - "compile": { - "ref/net45/_._": {} - }, - "runtime": { - "lib/net45/_._": {} - } - }, - "System.Net.Http/4.0.0": { - "frameworkAssemblies": [ - "System.Net.Http" - ], - "compile": { - "ref/net45/_._": {} - }, - "runtime": { - "lib/net45/_._": {} - } - }, - "System.Net.NetworkInformation/4.0.0": { - "compile": { - "ref/net45/_._": {} - }, - "runtime": { - "lib/net45/_._": {} - } - }, - "System.Net.Primitives/4.0.10": { - "compile": { - "ref/net46/_._": {} - }, - "runtime": { - "lib/net46/_._": {} - } - }, - "System.Numerics.Vectors/4.1.0": { - "dependencies": { - "System.Globalization": "4.0.10", - "System.Resources.ResourceManager": "4.0.0", - "System.Runtime": "4.0.20", - "System.Runtime.Extensions": "4.0.10" - }, - "frameworkAssemblies": [ - "System.Numerics", - "mscorlib" - ], - "compile": { - "ref/net46/System.Numerics.Vectors.dll": {} - }, - "runtime": { - "lib/net46/System.Numerics.Vectors.dll": {} - } - }, - "System.ObjectModel/4.0.10": { - "compile": { - "ref/net46/_._": {} - }, - "runtime": { - "lib/net46/_._": {} - } - }, - "System.Reflection/4.0.10": { - "compile": { - "ref/net46/_._": {} - }, - "runtime": { - "lib/net46/_._": {} - } - }, - "System.Reflection.DispatchProxy/4.0.0": { - "dependencies": { - "System.Collections": "4.0.10", - "System.Linq": "4.0.0", - "System.Reflection": "4.0.10", - "System.Reflection.Extensions": "4.0.0", - "System.Reflection.Primitives": "4.0.0", - "System.Resources.ResourceManager": "4.0.0", - "System.Runtime": "4.0.20", - "System.Threading": "4.0.10" - }, - "compile": { - "ref/dotnet/System.Reflection.DispatchProxy.dll": {} - }, - "runtime": { - "lib/net46/System.Reflection.DispatchProxy.dll": {} - } - }, - "System.Reflection.Extensions/4.0.0": { - "compile": { - "ref/net45/_._": {} - }, - "runtime": { - "lib/net45/_._": {} - } - }, - "System.Reflection.Metadata/1.0.22": { - "dependencies": { - "System.Collections": "4.0.0", - "System.Collections.Immutable": "1.1.37", - "System.Diagnostics.Debug": "4.0.0", - "System.IO": "4.0.0", - "System.Reflection": "4.0.0", - "System.Reflection.Extensions": "4.0.0", - "System.Reflection.Primitives": "4.0.0", - "System.Resources.ResourceManager": "4.0.0", - "System.Runtime": "4.0.0", - "System.Runtime.Extensions": "4.0.0", - "System.Runtime.InteropServices": "4.0.0", - "System.Text.Encoding": "4.0.0", - "System.Text.Encoding.Extensions": "4.0.0", - "System.Threading": "4.0.0" - }, - "compile": { - "lib/dotnet/System.Reflection.Metadata.dll": {} - }, - "runtime": { - "lib/dotnet/System.Reflection.Metadata.dll": {} - } - }, - "System.Reflection.Primitives/4.0.0": { - "compile": { - "ref/net45/_._": {} - }, - "runtime": { - "lib/net45/_._": {} - } - }, - "System.Reflection.TypeExtensions/4.0.0": { - "dependencies": { - "System.Reflection": "4.0.0", - "System.Runtime": "4.0.0" - }, - "frameworkAssemblies": [ - "mscorlib" - ], - "compile": { - "ref/net46/System.Reflection.TypeExtensions.dll": {} - }, - "runtime": { - "lib/net46/System.Reflection.TypeExtensions.dll": {} - } - }, - "System.Resources.ResourceManager/4.0.0": { - "compile": { - "ref/net45/_._": {} - }, - "runtime": { - "lib/net45/_._": {} - } - }, - "System.Runtime/4.0.20": { - "compile": { - "ref/net46/_._": {} - }, - "runtime": { - "lib/net46/_._": {} - } - }, - "System.Runtime.Extensions/4.0.10": { - "compile": { - "ref/net46/_._": {} - }, - "runtime": { - "lib/net46/_._": {} - } - }, - "System.Runtime.Handles/4.0.0": { - "compile": { - "ref/net46/_._": {} - }, - "runtime": { - "lib/net46/_._": {} - } - }, - "System.Runtime.InteropServices/4.0.20": { - "compile": { - "ref/net46/_._": {} - }, - "runtime": { - "lib/net46/_._": {} - } - }, - "System.Runtime.Numerics/4.0.0": { - "compile": { - "ref/net45/_._": {} - }, - "runtime": { - "lib/net45/_._": {} - } - }, - "System.Security.Claims/4.0.0": { - "dependencies": { - "System.Collections": "4.0.0", - "System.Diagnostics.Debug": "4.0.0", - "System.Globalization": "4.0.0", - "System.IO": "4.0.0", - "System.Resources.ResourceManager": "4.0.0", - "System.Runtime": "4.0.20", - "System.Runtime.Extensions": "4.0.0", - "System.Security.Principal": "4.0.0" - }, - "frameworkAssemblies": [ - "mscorlib" - ], - "compile": { - "ref/net46/System.Security.Claims.dll": {} - }, - "runtime": { - "lib/net46/System.Security.Claims.dll": {} - } - }, - "System.Security.Principal/4.0.0": { - "compile": { - "ref/net45/_._": {} - }, - "runtime": { - "lib/net45/_._": {} - } - }, - "System.Text.Encoding/4.0.10": { - "compile": { - "ref/net46/_._": {} - }, - "runtime": { - "lib/net46/_._": {} - } - }, - "System.Text.Encoding.Extensions/4.0.10": { - "compile": { - "ref/net46/_._": {} - }, - "runtime": { - "lib/net46/_._": {} - } - }, - "System.Text.RegularExpressions/4.0.10": { - "compile": { - "ref/net46/_._": {} - }, - "runtime": { - "lib/net46/_._": {} - } - }, - "System.Threading/4.0.10": { - "compile": { - "ref/net46/_._": {} - }, - "runtime": { - "lib/net46/_._": {} - } - }, - "System.Threading.Tasks/4.0.10": { - "compile": { - "ref/net46/_._": {} - }, - "runtime": { - "lib/net46/_._": {} - } - }, - "System.Threading.Tasks.Dataflow/4.5.25": { - "dependencies": { - "System.Collections": "4.0.0", - "System.Collections.Concurrent": "4.0.0", - "System.Diagnostics.Debug": "4.0.0", - "System.Diagnostics.Tracing": "4.0.0", - "System.Dynamic.Runtime": "4.0.0", - "System.Linq": "4.0.0", - "System.Resources.ResourceManager": "4.0.0", - "System.Runtime": "4.0.0", - "System.Runtime.Extensions": "4.0.0", - "System.Threading": "4.0.0", - "System.Threading.Tasks": "4.0.0" - }, - "compile": { - "lib/dotnet/System.Threading.Tasks.Dataflow.dll": {} - }, - "runtime": { - "lib/dotnet/System.Threading.Tasks.Dataflow.dll": {} - } - }, - "System.Threading.Tasks.Parallel/4.0.0": { - "compile": { - "ref/net45/_._": {} - }, - "runtime": { - "lib/net45/_._": {} - } - }, - "System.Threading.Timer/4.0.0": { - "compile": { - "ref/net451/_._": {} - }, - "runtime": { - "lib/net451/_._": {} - } - }, - "System.Xml.ReaderWriter/4.0.10": { - "compile": { - "ref/net46/_._": {} - }, - "runtime": { - "lib/net46/_._": {} - } - }, - "System.Xml.XDocument/4.0.10": { - "compile": { - "ref/net46/_._": {} - }, - "runtime": { - "lib/net46/_._": {} - } - } - }, - ".NETFramework,Version=v4.6/win-x64": { - "Microsoft.CSharp/4.0.0": { - "frameworkAssemblies": [ - "Microsoft.CSharp" - ], - "compile": { - "ref/net45/_._": {} - }, - "runtime": { - "lib/net45/_._": {} - } - }, - "Microsoft.NETCore/5.0.0": { - "dependencies": { - "Microsoft.CSharp": "4.0.0", - "Microsoft.NETCore.Targets": "1.0.0", - "Microsoft.VisualBasic": "10.0.0", - "System.AppContext": "4.0.0", - "System.Collections": "4.0.10", - "System.Collections.Concurrent": "4.0.10", - "System.Collections.Immutable": "1.1.37", - "System.ComponentModel": "4.0.0", - "System.ComponentModel.Annotations": "4.0.10", - "System.Diagnostics.Debug": "4.0.10", - "System.Diagnostics.Tools": "4.0.0", - "System.Diagnostics.Tracing": "4.0.20", - "System.Dynamic.Runtime": "4.0.10", - "System.Globalization": "4.0.10", - "System.Globalization.Calendars": "4.0.0", - "System.Globalization.Extensions": "4.0.0", - "System.IO": "4.0.10", - "System.IO.Compression": "4.0.0", - "System.IO.Compression.ZipFile": "4.0.0", - "System.IO.FileSystem": "4.0.0", - "System.IO.FileSystem.Primitives": "4.0.0", - "System.IO.UnmanagedMemoryStream": "4.0.0", - "System.Linq": "4.0.0", - "System.Linq.Expressions": "4.0.10", - "System.Linq.Parallel": "4.0.0", - "System.Linq.Queryable": "4.0.0", - "System.Net.Http": "4.0.0", - "System.Net.NetworkInformation": "4.0.0", - "System.Net.Primitives": "4.0.10", - "System.Numerics.Vectors": "4.1.0", - "System.ObjectModel": "4.0.10", - "System.Reflection": "4.0.10", - "System.Reflection.DispatchProxy": "4.0.0", - "System.Reflection.Extensions": "4.0.0", - "System.Reflection.Metadata": "1.0.22", - "System.Reflection.Primitives": "4.0.0", - "System.Reflection.TypeExtensions": "4.0.0", - "System.Resources.ResourceManager": "4.0.0", - "System.Runtime": "4.0.20", - "System.Runtime.Extensions": "4.0.10", - "System.Runtime.Handles": "4.0.0", - "System.Runtime.InteropServices": "4.0.20", - "System.Runtime.Numerics": "4.0.0", - "System.Security.Claims": "4.0.0", - "System.Security.Principal": "4.0.0", - "System.Text.Encoding": "4.0.10", - "System.Text.Encoding.Extensions": "4.0.10", - "System.Text.RegularExpressions": "4.0.10", - "System.Threading": "4.0.10", - "System.Threading.Tasks": "4.0.10", - "System.Threading.Tasks.Dataflow": "4.5.25", - "System.Threading.Tasks.Parallel": "4.0.0", - "System.Threading.Timer": "4.0.0", - "System.Xml.ReaderWriter": "4.0.10", - "System.Xml.XDocument": "4.0.10" - } - }, - "Microsoft.NETCore.Platforms/1.0.0": {}, - "Microsoft.NETCore.Portable.Compatibility/1.0.0": { - "compile": { - "ref/net45/_._": {} - }, - "runtime": { - "lib/net45/_._": {} - } - }, - "Microsoft.NETCore.Targets/1.0.0": { - "dependencies": { - "Microsoft.NETCore.Platforms": "1.0.0", - "Microsoft.NETCore.Targets.NETFramework": "4.6.0" - } - }, - "Microsoft.NETCore.Targets.NETFramework/4.6.0": {}, - "Microsoft.VisualBasic/10.0.0": { - "frameworkAssemblies": [ - "Microsoft.VisualBasic" - ], - "compile": { - "ref/net45/_._": {} - }, - "runtime": { - "lib/net45/_._": {} - } - }, - "System.AppContext/4.0.0": { - "dependencies": { - "System.Runtime": "4.0.0" - }, - "frameworkAssemblies": [ - "mscorlib" - ], - "compile": { - "ref/net46/System.AppContext.dll": {} - }, - "runtime": { - "lib/net46/System.AppContext.dll": {} - } - }, - "System.Collections/4.0.10": { - "compile": { - "ref/net46/_._": {} - }, - "runtime": { - "lib/net46/_._": {} - } - }, - "System.Collections.Concurrent/4.0.10": { - "compile": { - "ref/net46/_._": {} - }, - "runtime": { - "lib/net46/_._": {} - } - }, - "System.Collections.Immutable/1.1.37": { - "dependencies": { - "System.Collections": "4.0.0", - "System.Diagnostics.Debug": "4.0.0", - "System.Globalization": "4.0.0", - "System.Linq": "4.0.0", - "System.Resources.ResourceManager": "4.0.0", - "System.Runtime": "4.0.0", - "System.Runtime.Extensions": "4.0.0", - "System.Threading": "4.0.0" - }, - "compile": { - "lib/dotnet/System.Collections.Immutable.dll": {} - }, - "runtime": { - "lib/dotnet/System.Collections.Immutable.dll": {} - } - }, - "System.ComponentModel/4.0.0": { - "compile": { - "ref/net45/_._": {} - }, - "runtime": { - "lib/net45/_._": {} - } - }, - "System.ComponentModel.Annotations/4.0.10": { - "compile": { - "ref/net46/_._": {} - }, - "runtime": { - "lib/net46/_._": {} - } - }, - "System.Diagnostics.Debug/4.0.10": { - "compile": { - "ref/net46/_._": {} - }, - "runtime": { - "lib/net46/_._": {} - } - }, - "System.Diagnostics.Tools/4.0.0": { - "compile": { - "ref/net45/_._": {} - }, - "runtime": { - "lib/net45/_._": {} - } - }, - "System.Diagnostics.Tracing/4.0.20": { - "compile": { - "ref/net46/_._": {} - }, - "runtime": { - "lib/net46/_._": {} - } - }, - "System.Dynamic.Runtime/4.0.10": { - "dependencies": { - "System.Reflection.Emit.ILGeneration": "4.0.0", - "System.Reflection.Emit.Lightweight": "4.0.0" - }, - "compile": { - "ref/net46/_._": {} - }, - "runtime": { - "lib/net46/_._": {} - } - }, - "System.Globalization/4.0.10": { - "compile": { - "ref/net46/_._": {} - }, - "runtime": { - "lib/net46/_._": {} - } - }, - "System.Globalization.Calendars/4.0.0": { - "dependencies": { - "System.Globalization": "4.0.0", - "System.Runtime": "4.0.0" - }, - "frameworkAssemblies": [ - "mscorlib" - ], - "compile": { - "ref/net46/System.Globalization.Calendars.dll": {} - }, - "runtime": { - "lib/net46/System.Globalization.Calendars.dll": {} - } - }, - "System.Globalization.Extensions/4.0.0": { - "dependencies": { - "System.Globalization": "4.0.10", - "System.Resources.ResourceManager": "4.0.0", - "System.Runtime": "4.0.20", - "System.Runtime.Extensions": "4.0.10", - "System.Runtime.InteropServices": "4.0.20" - }, - "frameworkAssemblies": [ - "mscorlib" - ], - "compile": { - "ref/net46/System.Globalization.Extensions.dll": {} - }, - "runtime": { - "lib/net46/System.Globalization.Extensions.dll": {} - } - }, - "System.IO/4.0.10": { - "compile": { - "ref/net46/_._": {} - }, - "runtime": { - "lib/net46/_._": {} - } - }, - "System.IO.Compression/4.0.0": { - "frameworkAssemblies": [ - "System.IO.Compression" - ], - "compile": { - "ref/net45/_._": {} - }, - "runtime": { - "lib/net45/_._": {} - } - }, - "System.IO.Compression.ZipFile/4.0.0": { - "dependencies": { - "System.IO": "4.0.10", - "System.IO.Compression": "4.0.0", - "System.IO.FileSystem": "4.0.0", - "System.IO.FileSystem.Primitives": "4.0.0", - "System.Resources.ResourceManager": "4.0.0", - "System.Runtime": "4.0.20", - "System.Runtime.Extensions": "4.0.10", - "System.Text.Encoding": "4.0.10" - }, - "frameworkAssemblies": [ - "System.IO.Compression.FileSystem", - "mscorlib" - ], - "compile": { - "ref/net46/System.IO.Compression.ZipFile.dll": {} - }, - "runtime": { - "lib/net46/System.IO.Compression.ZipFile.dll": {} - } - }, - "System.IO.FileSystem/4.0.0": { - "dependencies": { - "System.IO": "4.0.0", - "System.IO.FileSystem.Primitives": "4.0.0", - "System.Runtime": "4.0.0", - "System.Runtime.Handles": "4.0.0", - "System.Text.Encoding": "4.0.0", - "System.Threading.Tasks": "4.0.0" - }, - "frameworkAssemblies": [ - "mscorlib" - ], - "compile": { - "ref/net46/System.IO.FileSystem.dll": {} - }, - "runtime": { - "lib/net46/System.IO.FileSystem.dll": {} - } - }, - "System.IO.FileSystem.Primitives/4.0.0": { - "dependencies": { - "System.Runtime": "4.0.20" - }, - "frameworkAssemblies": [ - "mscorlib" - ], - "compile": { - "ref/net46/System.IO.FileSystem.Primitives.dll": {} - }, - "runtime": { - "lib/net46/System.IO.FileSystem.Primitives.dll": {} - } - }, - "System.IO.UnmanagedMemoryStream/4.0.0": { - "dependencies": { - "System.IO": "4.0.10", - "System.IO.FileSystem.Primitives": "4.0.0", - "System.Resources.ResourceManager": "4.0.0", - "System.Runtime": "4.0.20", - "System.Runtime.InteropServices": "4.0.20", - "System.Threading": "4.0.10", - "System.Threading.Tasks": "4.0.10" - }, - "frameworkAssemblies": [ - "mscorlib" - ], - "compile": { - "ref/net46/System.IO.UnmanagedMemoryStream.dll": {} - }, - "runtime": { - "lib/net46/System.IO.UnmanagedMemoryStream.dll": {} - } - }, - "System.Linq/4.0.0": { - "compile": { - "ref/net45/_._": {} - }, - "runtime": { - "lib/net45/_._": {} - } - }, - "System.Linq.Expressions/4.0.10": { - "dependencies": { - "System.Reflection.Emit.ILGeneration": "4.0.0", - "System.Reflection.Emit.Lightweight": "4.0.0" - }, - "compile": { - "ref/net46/_._": {} - }, - "runtime": { - "lib/net46/_._": {} - } - }, - "System.Linq.Parallel/4.0.0": { - "compile": { - "ref/net45/_._": {} - }, - "runtime": { - "lib/net45/_._": {} - } - }, - "System.Linq.Queryable/4.0.0": { - "compile": { - "ref/net45/_._": {} - }, - "runtime": { - "lib/net45/_._": {} - } - }, - "System.Net.Http/4.0.0": { - "frameworkAssemblies": [ - "System.Net.Http" - ], - "compile": { - "ref/net45/_._": {} - }, - "runtime": { - "lib/net45/_._": {} - } - }, - "System.Net.NetworkInformation/4.0.10-beta-23123": { - "compile": { - "ref/net46/_._": {} - }, - "runtime": { - "lib/net46/_._": {} - } - }, - "System.Net.Primitives/4.0.10": { - "compile": { - "ref/net46/_._": {} - }, - "runtime": { - "lib/net46/_._": {} - } - }, - "System.Numerics.Vectors/4.1.0": { - "dependencies": { - "System.Globalization": "4.0.10", - "System.Resources.ResourceManager": "4.0.0", - "System.Runtime": "4.0.20", - "System.Runtime.Extensions": "4.0.10" - }, - "frameworkAssemblies": [ - "System.Numerics", - "mscorlib" - ], - "compile": { - "ref/net46/System.Numerics.Vectors.dll": {} - }, - "runtime": { - "lib/net46/System.Numerics.Vectors.dll": {} - } - }, - "System.ObjectModel/4.0.10": { - "compile": { - "ref/net46/_._": {} - }, - "runtime": { - "lib/net46/_._": {} - } - }, - "System.Reflection/4.0.10": { - "compile": { - "ref/net46/_._": {} - }, - "runtime": { - "lib/net46/_._": {} - } - }, - "System.Reflection.DispatchProxy/4.0.0": { - "dependencies": { - "System.Collections": "4.0.10", - "System.Linq": "4.0.0", - "System.Reflection": "4.0.10", - "System.Reflection.Emit": "4.0.0", - "System.Reflection.Emit.ILGeneration": "4.0.0", - "System.Reflection.Extensions": "4.0.0", - "System.Reflection.Primitives": "4.0.0", - "System.Resources.ResourceManager": "4.0.0", - "System.Runtime": "4.0.20", - "System.Threading": "4.0.10" - }, - "compile": { - "ref/dotnet/System.Reflection.DispatchProxy.dll": {} - }, - "runtime": { - "lib/net46/System.Reflection.DispatchProxy.dll": {} - } - }, - "System.Reflection.Emit/4.0.0": { - "compile": { - "ref/net45/_._": {} - }, - "runtime": { - "lib/net45/_._": {} - } - }, - "System.Reflection.Emit.ILGeneration/4.0.0": { - "compile": { - "ref/net45/_._": {} - }, - "runtime": { - "lib/net45/_._": {} - } - }, - "System.Reflection.Emit.Lightweight/4.0.0": { - "compile": { - "ref/net45/_._": {} - }, - "runtime": { - "lib/net45/_._": {} - } - }, - "System.Reflection.Extensions/4.0.0": { - "compile": { - "ref/net45/_._": {} - }, - "runtime": { - "lib/net45/_._": {} - } - }, - "System.Reflection.Metadata/1.0.22": { - "dependencies": { - "System.Collections": "4.0.0", - "System.Collections.Immutable": "1.1.37", - "System.Diagnostics.Debug": "4.0.0", - "System.IO": "4.0.0", - "System.Reflection": "4.0.0", - "System.Reflection.Extensions": "4.0.0", - "System.Reflection.Primitives": "4.0.0", - "System.Resources.ResourceManager": "4.0.0", - "System.Runtime": "4.0.0", - "System.Runtime.Extensions": "4.0.0", - "System.Runtime.InteropServices": "4.0.0", - "System.Text.Encoding": "4.0.0", - "System.Text.Encoding.Extensions": "4.0.0", - "System.Threading": "4.0.0" - }, - "compile": { - "lib/dotnet/System.Reflection.Metadata.dll": {} - }, - "runtime": { - "lib/dotnet/System.Reflection.Metadata.dll": {} - } - }, - "System.Reflection.Primitives/4.0.0": { - "compile": { - "ref/net45/_._": {} - }, - "runtime": { - "lib/net45/_._": {} - } - }, - "System.Reflection.TypeExtensions/4.0.0": { - "dependencies": { - "System.Reflection": "4.0.0", - "System.Runtime": "4.0.0" - }, - "frameworkAssemblies": [ - "mscorlib" - ], - "compile": { - "ref/net46/System.Reflection.TypeExtensions.dll": {} - }, - "runtime": { - "lib/net46/System.Reflection.TypeExtensions.dll": {} - } - }, - "System.Resources.ResourceManager/4.0.0": { - "compile": { - "ref/net45/_._": {} - }, - "runtime": { - "lib/net45/_._": {} - } - }, - "System.Runtime/4.0.20": { - "compile": { - "ref/net46/_._": {} - }, - "runtime": { - "lib/net46/_._": {} - } - }, - "System.Runtime.Extensions/4.0.10": { - "compile": { - "ref/net46/_._": {} - }, - "runtime": { - "lib/net46/_._": {} - } - }, - "System.Runtime.Handles/4.0.0": { - "compile": { - "ref/net46/_._": {} - }, - "runtime": { - "lib/net46/_._": {} - } - }, - "System.Runtime.InteropServices/4.0.20": { - "compile": { - "ref/net46/_._": {} - }, - "runtime": { - "lib/net46/_._": {} - } - }, - "System.Runtime.Numerics/4.0.0": { - "compile": { - "ref/net45/_._": {} - }, - "runtime": { - "lib/net45/_._": {} - } - }, - "System.Security.Claims/4.0.0": { - "dependencies": { - "System.Collections": "4.0.0", - "System.Diagnostics.Debug": "4.0.0", - "System.Globalization": "4.0.0", - "System.IO": "4.0.0", - "System.Resources.ResourceManager": "4.0.0", - "System.Runtime": "4.0.20", - "System.Runtime.Extensions": "4.0.0", - "System.Security.Principal": "4.0.0" - }, - "frameworkAssemblies": [ - "mscorlib" - ], - "compile": { - "ref/net46/System.Security.Claims.dll": {} - }, - "runtime": { - "lib/net46/System.Security.Claims.dll": {} - } - }, - "System.Security.Principal/4.0.0": { - "compile": { - "ref/net45/_._": {} - }, - "runtime": { - "lib/net45/_._": {} - } - }, - "System.Text.Encoding/4.0.10": { - "compile": { - "ref/net46/_._": {} - }, - "runtime": { - "lib/net46/_._": {} - } - }, - "System.Text.Encoding.Extensions/4.0.10": { - "compile": { - "ref/net46/_._": {} - }, - "runtime": { - "lib/net46/_._": {} - } - }, - "System.Text.RegularExpressions/4.0.10": { - "compile": { - "ref/net46/_._": {} - }, - "runtime": { - "lib/net46/_._": {} - } - }, - "System.Threading/4.0.10": { - "compile": { - "ref/net46/_._": {} - }, - "runtime": { - "lib/net46/_._": {} - } - }, - "System.Threading.Tasks/4.0.10": { - "compile": { - "ref/net46/_._": {} - }, - "runtime": { - "lib/net46/_._": {} - } - }, - "System.Threading.Tasks.Dataflow/4.5.25": { - "dependencies": { - "System.Collections": "4.0.0", - "System.Collections.Concurrent": "4.0.0", - "System.Diagnostics.Debug": "4.0.0", - "System.Diagnostics.Tracing": "4.0.0", - "System.Dynamic.Runtime": "4.0.0", - "System.Linq": "4.0.0", - "System.Resources.ResourceManager": "4.0.0", - "System.Runtime": "4.0.0", - "System.Runtime.Extensions": "4.0.0", - "System.Threading": "4.0.0", - "System.Threading.Tasks": "4.0.0" - }, - "compile": { - "lib/dotnet/System.Threading.Tasks.Dataflow.dll": {} - }, - "runtime": { - "lib/dotnet/System.Threading.Tasks.Dataflow.dll": {} - } - }, - "System.Threading.Tasks.Parallel/4.0.0": { - "compile": { - "ref/net45/_._": {} - }, - "runtime": { - "lib/net45/_._": {} - } - }, - "System.Threading.Timer/4.0.0": { - "compile": { - "ref/net451/_._": {} - }, - "runtime": { - "lib/net451/_._": {} - } - }, - "System.Xml.ReaderWriter/4.0.10": { - "compile": { - "ref/net46/_._": {} - }, - "runtime": { - "lib/net46/_._": {} - } - }, - "System.Xml.XDocument/4.0.10": { - "compile": { - "ref/net46/_._": {} - }, - "runtime": { - "lib/net46/_._": {} - } - } - }, - ".NETFramework,Version=v4.6/win-x86": { - "Microsoft.CSharp/4.0.0": { - "frameworkAssemblies": [ - "Microsoft.CSharp" - ], - "compile": { - "ref/net45/_._": {} - }, - "runtime": { - "lib/net45/_._": {} - } - }, - "Microsoft.NETCore/5.0.0": { - "dependencies": { - "Microsoft.CSharp": "4.0.0", - "Microsoft.NETCore.Targets": "1.0.0", - "Microsoft.VisualBasic": "10.0.0", - "System.AppContext": "4.0.0", - "System.Collections": "4.0.10", - "System.Collections.Concurrent": "4.0.10", - "System.Collections.Immutable": "1.1.37", - "System.ComponentModel": "4.0.0", - "System.ComponentModel.Annotations": "4.0.10", - "System.Diagnostics.Debug": "4.0.10", - "System.Diagnostics.Tools": "4.0.0", - "System.Diagnostics.Tracing": "4.0.20", - "System.Dynamic.Runtime": "4.0.10", - "System.Globalization": "4.0.10", - "System.Globalization.Calendars": "4.0.0", - "System.Globalization.Extensions": "4.0.0", - "System.IO": "4.0.10", - "System.IO.Compression": "4.0.0", - "System.IO.Compression.ZipFile": "4.0.0", - "System.IO.FileSystem": "4.0.0", - "System.IO.FileSystem.Primitives": "4.0.0", - "System.IO.UnmanagedMemoryStream": "4.0.0", - "System.Linq": "4.0.0", - "System.Linq.Expressions": "4.0.10", - "System.Linq.Parallel": "4.0.0", - "System.Linq.Queryable": "4.0.0", - "System.Net.Http": "4.0.0", - "System.Net.NetworkInformation": "4.0.0", - "System.Net.Primitives": "4.0.10", - "System.Numerics.Vectors": "4.1.0", - "System.ObjectModel": "4.0.10", - "System.Reflection": "4.0.10", - "System.Reflection.DispatchProxy": "4.0.0", - "System.Reflection.Extensions": "4.0.0", - "System.Reflection.Metadata": "1.0.22", - "System.Reflection.Primitives": "4.0.0", - "System.Reflection.TypeExtensions": "4.0.0", - "System.Resources.ResourceManager": "4.0.0", - "System.Runtime": "4.0.20", - "System.Runtime.Extensions": "4.0.10", - "System.Runtime.Handles": "4.0.0", - "System.Runtime.InteropServices": "4.0.20", - "System.Runtime.Numerics": "4.0.0", - "System.Security.Claims": "4.0.0", - "System.Security.Principal": "4.0.0", - "System.Text.Encoding": "4.0.10", - "System.Text.Encoding.Extensions": "4.0.10", - "System.Text.RegularExpressions": "4.0.10", - "System.Threading": "4.0.10", - "System.Threading.Tasks": "4.0.10", - "System.Threading.Tasks.Dataflow": "4.5.25", - "System.Threading.Tasks.Parallel": "4.0.0", - "System.Threading.Timer": "4.0.0", - "System.Xml.ReaderWriter": "4.0.10", - "System.Xml.XDocument": "4.0.10" - } - }, - "Microsoft.NETCore.Platforms/1.0.0": {}, - "Microsoft.NETCore.Portable.Compatibility/1.0.0": { - "compile": { - "ref/net45/_._": {} - }, - "runtime": { - "lib/net45/_._": {} - } - }, - "Microsoft.NETCore.Targets/1.0.0": { - "dependencies": { - "Microsoft.NETCore.Platforms": "1.0.0", - "Microsoft.NETCore.Targets.NETFramework": "4.6.0" - } - }, - "Microsoft.NETCore.Targets.NETFramework/4.6.0": {}, - "Microsoft.VisualBasic/10.0.0": { - "frameworkAssemblies": [ - "Microsoft.VisualBasic" - ], - "compile": { - "ref/net45/_._": {} - }, - "runtime": { - "lib/net45/_._": {} - } - }, - "System.AppContext/4.0.0": { - "dependencies": { - "System.Runtime": "4.0.0" - }, - "frameworkAssemblies": [ - "mscorlib" - ], - "compile": { - "ref/net46/System.AppContext.dll": {} - }, - "runtime": { - "lib/net46/System.AppContext.dll": {} - } - }, - "System.Collections/4.0.10": { - "compile": { - "ref/net46/_._": {} - }, - "runtime": { - "lib/net46/_._": {} - } - }, - "System.Collections.Concurrent/4.0.10": { - "compile": { - "ref/net46/_._": {} - }, - "runtime": { - "lib/net46/_._": {} - } - }, - "System.Collections.Immutable/1.1.37": { - "dependencies": { - "System.Collections": "4.0.0", - "System.Diagnostics.Debug": "4.0.0", - "System.Globalization": "4.0.0", - "System.Linq": "4.0.0", - "System.Resources.ResourceManager": "4.0.0", - "System.Runtime": "4.0.0", - "System.Runtime.Extensions": "4.0.0", - "System.Threading": "4.0.0" - }, - "compile": { - "lib/dotnet/System.Collections.Immutable.dll": {} - }, - "runtime": { - "lib/dotnet/System.Collections.Immutable.dll": {} - } - }, - "System.ComponentModel/4.0.0": { - "compile": { - "ref/net45/_._": {} - }, - "runtime": { - "lib/net45/_._": {} - } - }, - "System.ComponentModel.Annotations/4.0.10": { - "compile": { - "ref/net46/_._": {} - }, - "runtime": { - "lib/net46/_._": {} - } - }, - "System.Diagnostics.Debug/4.0.10": { - "compile": { - "ref/net46/_._": {} - }, - "runtime": { - "lib/net46/_._": {} - } - }, - "System.Diagnostics.Tools/4.0.0": { - "compile": { - "ref/net45/_._": {} - }, - "runtime": { - "lib/net45/_._": {} - } - }, - "System.Diagnostics.Tracing/4.0.20": { - "compile": { - "ref/net46/_._": {} - }, - "runtime": { - "lib/net46/_._": {} - } - }, - "System.Dynamic.Runtime/4.0.10": { - "dependencies": { - "System.Reflection.Emit.ILGeneration": "4.0.0", - "System.Reflection.Emit.Lightweight": "4.0.0" - }, - "compile": { - "ref/net46/_._": {} - }, - "runtime": { - "lib/net46/_._": {} - } - }, - "System.Globalization/4.0.10": { - "compile": { - "ref/net46/_._": {} - }, - "runtime": { - "lib/net46/_._": {} - } - }, - "System.Globalization.Calendars/4.0.0": { - "dependencies": { - "System.Globalization": "4.0.0", - "System.Runtime": "4.0.0" - }, - "frameworkAssemblies": [ - "mscorlib" - ], - "compile": { - "ref/net46/System.Globalization.Calendars.dll": {} - }, - "runtime": { - "lib/net46/System.Globalization.Calendars.dll": {} - } - }, - "System.Globalization.Extensions/4.0.0": { - "dependencies": { - "System.Globalization": "4.0.10", - "System.Resources.ResourceManager": "4.0.0", - "System.Runtime": "4.0.20", - "System.Runtime.Extensions": "4.0.10", - "System.Runtime.InteropServices": "4.0.20" - }, - "frameworkAssemblies": [ - "mscorlib" - ], - "compile": { - "ref/net46/System.Globalization.Extensions.dll": {} - }, - "runtime": { - "lib/net46/System.Globalization.Extensions.dll": {} - } - }, - "System.IO/4.0.10": { - "compile": { - "ref/net46/_._": {} - }, - "runtime": { - "lib/net46/_._": {} - } - }, - "System.IO.Compression/4.0.0": { - "frameworkAssemblies": [ - "System.IO.Compression" - ], - "compile": { - "ref/net45/_._": {} - }, - "runtime": { - "lib/net45/_._": {} - } - }, - "System.IO.Compression.ZipFile/4.0.0": { - "dependencies": { - "System.IO": "4.0.10", - "System.IO.Compression": "4.0.0", - "System.IO.FileSystem": "4.0.0", - "System.IO.FileSystem.Primitives": "4.0.0", - "System.Resources.ResourceManager": "4.0.0", - "System.Runtime": "4.0.20", - "System.Runtime.Extensions": "4.0.10", - "System.Text.Encoding": "4.0.10" - }, - "frameworkAssemblies": [ - "System.IO.Compression.FileSystem", - "mscorlib" - ], - "compile": { - "ref/net46/System.IO.Compression.ZipFile.dll": {} - }, - "runtime": { - "lib/net46/System.IO.Compression.ZipFile.dll": {} - } - }, - "System.IO.FileSystem/4.0.0": { - "dependencies": { - "System.IO": "4.0.0", - "System.IO.FileSystem.Primitives": "4.0.0", - "System.Runtime": "4.0.0", - "System.Runtime.Handles": "4.0.0", - "System.Text.Encoding": "4.0.0", - "System.Threading.Tasks": "4.0.0" - }, - "frameworkAssemblies": [ - "mscorlib" - ], - "compile": { - "ref/net46/System.IO.FileSystem.dll": {} - }, - "runtime": { - "lib/net46/System.IO.FileSystem.dll": {} - } - }, - "System.IO.FileSystem.Primitives/4.0.0": { - "dependencies": { - "System.Runtime": "4.0.20" - }, - "frameworkAssemblies": [ - "mscorlib" - ], - "compile": { - "ref/net46/System.IO.FileSystem.Primitives.dll": {} - }, - "runtime": { - "lib/net46/System.IO.FileSystem.Primitives.dll": {} - } - }, - "System.IO.UnmanagedMemoryStream/4.0.0": { - "dependencies": { - "System.IO": "4.0.10", - "System.IO.FileSystem.Primitives": "4.0.0", - "System.Resources.ResourceManager": "4.0.0", - "System.Runtime": "4.0.20", - "System.Runtime.InteropServices": "4.0.20", - "System.Threading": "4.0.10", - "System.Threading.Tasks": "4.0.10" - }, - "frameworkAssemblies": [ - "mscorlib" - ], - "compile": { - "ref/net46/System.IO.UnmanagedMemoryStream.dll": {} - }, - "runtime": { - "lib/net46/System.IO.UnmanagedMemoryStream.dll": {} - } - }, - "System.Linq/4.0.0": { - "compile": { - "ref/net45/_._": {} - }, - "runtime": { - "lib/net45/_._": {} - } - }, - "System.Linq.Expressions/4.0.10": { - "dependencies": { - "System.Reflection.Emit.ILGeneration": "4.0.0", - "System.Reflection.Emit.Lightweight": "4.0.0" - }, - "compile": { - "ref/net46/_._": {} - }, - "runtime": { - "lib/net46/_._": {} - } - }, - "System.Linq.Parallel/4.0.0": { - "compile": { - "ref/net45/_._": {} - }, - "runtime": { - "lib/net45/_._": {} - } - }, - "System.Linq.Queryable/4.0.0": { - "compile": { - "ref/net45/_._": {} - }, - "runtime": { - "lib/net45/_._": {} - } - }, - "System.Net.Http/4.0.0": { - "frameworkAssemblies": [ - "System.Net.Http" - ], - "compile": { - "ref/net45/_._": {} - }, - "runtime": { - "lib/net45/_._": {} - } - }, - "System.Net.NetworkInformation/4.0.10-beta-23123": { - "compile": { - "ref/net46/_._": {} - }, - "runtime": { - "lib/net46/_._": {} - } - }, - "System.Net.Primitives/4.0.10": { - "compile": { - "ref/net46/_._": {} - }, - "runtime": { - "lib/net46/_._": {} - } - }, - "System.Numerics.Vectors/4.1.0": { - "dependencies": { - "System.Globalization": "4.0.10", - "System.Resources.ResourceManager": "4.0.0", - "System.Runtime": "4.0.20", - "System.Runtime.Extensions": "4.0.10" - }, - "frameworkAssemblies": [ - "System.Numerics", - "mscorlib" - ], - "compile": { - "ref/net46/System.Numerics.Vectors.dll": {} - }, - "runtime": { - "lib/net46/System.Numerics.Vectors.dll": {} - } - }, - "System.ObjectModel/4.0.10": { - "compile": { - "ref/net46/_._": {} - }, - "runtime": { - "lib/net46/_._": {} - } - }, - "System.Reflection/4.0.10": { - "compile": { - "ref/net46/_._": {} - }, - "runtime": { - "lib/net46/_._": {} - } - }, - "System.Reflection.DispatchProxy/4.0.0": { - "dependencies": { - "System.Collections": "4.0.10", - "System.Linq": "4.0.0", - "System.Reflection": "4.0.10", - "System.Reflection.Emit": "4.0.0", - "System.Reflection.Emit.ILGeneration": "4.0.0", - "System.Reflection.Extensions": "4.0.0", - "System.Reflection.Primitives": "4.0.0", - "System.Resources.ResourceManager": "4.0.0", - "System.Runtime": "4.0.20", - "System.Threading": "4.0.10" - }, - "compile": { - "ref/dotnet/System.Reflection.DispatchProxy.dll": {} - }, - "runtime": { - "lib/net46/System.Reflection.DispatchProxy.dll": {} - } - }, - "System.Reflection.Emit/4.0.0": { - "compile": { - "ref/net45/_._": {} - }, - "runtime": { - "lib/net45/_._": {} - } - }, - "System.Reflection.Emit.ILGeneration/4.0.0": { - "compile": { - "ref/net45/_._": {} - }, - "runtime": { - "lib/net45/_._": {} - } - }, - "System.Reflection.Emit.Lightweight/4.0.0": { - "compile": { - "ref/net45/_._": {} - }, - "runtime": { - "lib/net45/_._": {} - } - }, - "System.Reflection.Extensions/4.0.0": { - "compile": { - "ref/net45/_._": {} - }, - "runtime": { - "lib/net45/_._": {} - } - }, - "System.Reflection.Metadata/1.0.22": { - "dependencies": { - "System.Collections": "4.0.0", - "System.Collections.Immutable": "1.1.37", - "System.Diagnostics.Debug": "4.0.0", - "System.IO": "4.0.0", - "System.Reflection": "4.0.0", - "System.Reflection.Extensions": "4.0.0", - "System.Reflection.Primitives": "4.0.0", - "System.Resources.ResourceManager": "4.0.0", - "System.Runtime": "4.0.0", - "System.Runtime.Extensions": "4.0.0", - "System.Runtime.InteropServices": "4.0.0", - "System.Text.Encoding": "4.0.0", - "System.Text.Encoding.Extensions": "4.0.0", - "System.Threading": "4.0.0" - }, - "compile": { - "lib/dotnet/System.Reflection.Metadata.dll": {} - }, - "runtime": { - "lib/dotnet/System.Reflection.Metadata.dll": {} - } - }, - "System.Reflection.Primitives/4.0.0": { - "compile": { - "ref/net45/_._": {} - }, - "runtime": { - "lib/net45/_._": {} - } - }, - "System.Reflection.TypeExtensions/4.0.0": { - "dependencies": { - "System.Reflection": "4.0.0", - "System.Runtime": "4.0.0" - }, - "frameworkAssemblies": [ - "mscorlib" - ], - "compile": { - "ref/net46/System.Reflection.TypeExtensions.dll": {} - }, - "runtime": { - "lib/net46/System.Reflection.TypeExtensions.dll": {} - } - }, - "System.Resources.ResourceManager/4.0.0": { - "compile": { - "ref/net45/_._": {} - }, - "runtime": { - "lib/net45/_._": {} - } - }, - "System.Runtime/4.0.20": { - "compile": { - "ref/net46/_._": {} - }, - "runtime": { - "lib/net46/_._": {} - } - }, - "System.Runtime.Extensions/4.0.10": { - "compile": { - "ref/net46/_._": {} - }, - "runtime": { - "lib/net46/_._": {} - } - }, - "System.Runtime.Handles/4.0.0": { - "compile": { - "ref/net46/_._": {} - }, - "runtime": { - "lib/net46/_._": {} - } - }, - "System.Runtime.InteropServices/4.0.20": { - "compile": { - "ref/net46/_._": {} - }, - "runtime": { - "lib/net46/_._": {} - } - }, - "System.Runtime.Numerics/4.0.0": { - "compile": { - "ref/net45/_._": {} - }, - "runtime": { - "lib/net45/_._": {} - } - }, - "System.Security.Claims/4.0.0": { - "dependencies": { - "System.Collections": "4.0.0", - "System.Diagnostics.Debug": "4.0.0", - "System.Globalization": "4.0.0", - "System.IO": "4.0.0", - "System.Resources.ResourceManager": "4.0.0", - "System.Runtime": "4.0.20", - "System.Runtime.Extensions": "4.0.0", - "System.Security.Principal": "4.0.0" - }, - "frameworkAssemblies": [ - "mscorlib" - ], - "compile": { - "ref/net46/System.Security.Claims.dll": {} - }, - "runtime": { - "lib/net46/System.Security.Claims.dll": {} - } - }, - "System.Security.Principal/4.0.0": { - "compile": { - "ref/net45/_._": {} - }, - "runtime": { - "lib/net45/_._": {} - } - }, - "System.Text.Encoding/4.0.10": { - "compile": { - "ref/net46/_._": {} - }, - "runtime": { - "lib/net46/_._": {} - } - }, - "System.Text.Encoding.Extensions/4.0.10": { - "compile": { - "ref/net46/_._": {} - }, - "runtime": { - "lib/net46/_._": {} - } - }, - "System.Text.RegularExpressions/4.0.10": { - "compile": { - "ref/net46/_._": {} - }, - "runtime": { - "lib/net46/_._": {} - } - }, - "System.Threading/4.0.10": { - "compile": { - "ref/net46/_._": {} - }, - "runtime": { - "lib/net46/_._": {} - } - }, - "System.Threading.Tasks/4.0.10": { - "compile": { - "ref/net46/_._": {} - }, - "runtime": { - "lib/net46/_._": {} - } - }, - "System.Threading.Tasks.Dataflow/4.5.25": { - "dependencies": { - "System.Collections": "4.0.0", - "System.Collections.Concurrent": "4.0.0", - "System.Diagnostics.Debug": "4.0.0", - "System.Diagnostics.Tracing": "4.0.0", - "System.Dynamic.Runtime": "4.0.0", - "System.Linq": "4.0.0", - "System.Resources.ResourceManager": "4.0.0", - "System.Runtime": "4.0.0", - "System.Runtime.Extensions": "4.0.0", - "System.Threading": "4.0.0", - "System.Threading.Tasks": "4.0.0" - }, - "compile": { - "lib/dotnet/System.Threading.Tasks.Dataflow.dll": {} - }, - "runtime": { - "lib/dotnet/System.Threading.Tasks.Dataflow.dll": {} - } - }, - "System.Threading.Tasks.Parallel/4.0.0": { - "compile": { - "ref/net45/_._": {} - }, - "runtime": { - "lib/net45/_._": {} - } - }, - "System.Threading.Timer/4.0.0": { - "compile": { - "ref/net451/_._": {} - }, - "runtime": { - "lib/net451/_._": {} - } - }, - "System.Xml.ReaderWriter/4.0.10": { - "compile": { - "ref/net46/_._": {} - }, - "runtime": { - "lib/net46/_._": {} - } - }, - "System.Xml.XDocument/4.0.10": { - "compile": { - "ref/net46/_._": {} - }, - "runtime": { - "lib/net46/_._": {} - } - } - }, - ".NETPlatform,Version=v5.0": { - "Microsoft.CSharp/4.0.0": { - "dependencies": { - "System.Collections": "4.0.10", - "System.Diagnostics.Debug": "4.0.10", - "System.Dynamic.Runtime": "4.0.0", - "System.Globalization": "4.0.10", - "System.Linq": "4.0.0", - "System.Linq.Expressions": "4.0.0", - "System.ObjectModel": "4.0.10", - "System.Reflection": "4.0.10", - "System.Reflection.Extensions": "4.0.0", - "System.Reflection.Primitives": "4.0.0", - "System.Reflection.TypeExtensions": "4.0.0", - "System.Resources.ResourceManager": "4.0.0", - "System.Runtime": "4.0.20", - "System.Runtime.Extensions": "4.0.10", - "System.Runtime.InteropServices": "4.0.20", - "System.Threading": "4.0.10" - }, - "compile": { - "ref/dotnet/Microsoft.CSharp.dll": {} - }, - "runtime": { - "lib/dotnet/Microsoft.CSharp.dll": {} - } - }, - "Microsoft.NETCore/5.0.0": { - "dependencies": { - "Microsoft.CSharp": "4.0.0", - "Microsoft.NETCore.Targets": "1.0.0", - "Microsoft.VisualBasic": "10.0.0", - "System.AppContext": "4.0.0", - "System.Collections": "4.0.10", - "System.Collections.Concurrent": "4.0.10", - "System.Collections.Immutable": "1.1.37", - "System.ComponentModel": "4.0.0", - "System.ComponentModel.Annotations": "4.0.10", - "System.Diagnostics.Debug": "4.0.10", - "System.Diagnostics.Tools": "4.0.0", - "System.Diagnostics.Tracing": "4.0.20", - "System.Dynamic.Runtime": "4.0.10", - "System.Globalization": "4.0.10", - "System.Globalization.Calendars": "4.0.0", - "System.Globalization.Extensions": "4.0.0", - "System.IO": "4.0.10", - "System.IO.Compression": "4.0.0", - "System.IO.Compression.ZipFile": "4.0.0", - "System.IO.FileSystem": "4.0.0", - "System.IO.FileSystem.Primitives": "4.0.0", - "System.IO.UnmanagedMemoryStream": "4.0.0", - "System.Linq": "4.0.0", - "System.Linq.Expressions": "4.0.10", - "System.Linq.Parallel": "4.0.0", - "System.Linq.Queryable": "4.0.0", - "System.Net.Http": "4.0.0", - "System.Net.NetworkInformation": "4.0.0", - "System.Net.Primitives": "4.0.10", - "System.Numerics.Vectors": "4.1.0", - "System.ObjectModel": "4.0.10", - "System.Reflection": "4.0.10", - "System.Reflection.DispatchProxy": "4.0.0", - "System.Reflection.Extensions": "4.0.0", - "System.Reflection.Metadata": "1.0.22", - "System.Reflection.Primitives": "4.0.0", - "System.Reflection.TypeExtensions": "4.0.0", - "System.Resources.ResourceManager": "4.0.0", - "System.Runtime": "4.0.20", - "System.Runtime.Extensions": "4.0.10", - "System.Runtime.Handles": "4.0.0", - "System.Runtime.InteropServices": "4.0.20", - "System.Runtime.Numerics": "4.0.0", - "System.Security.Claims": "4.0.0", - "System.Security.Principal": "4.0.0", - "System.Text.Encoding": "4.0.10", - "System.Text.Encoding.Extensions": "4.0.10", - "System.Text.RegularExpressions": "4.0.10", - "System.Threading": "4.0.10", - "System.Threading.Tasks": "4.0.10", - "System.Threading.Tasks.Dataflow": "4.5.25", - "System.Threading.Tasks.Parallel": "4.0.0", - "System.Threading.Timer": "4.0.0", - "System.Xml.ReaderWriter": "4.0.10", - "System.Xml.XDocument": "4.0.10" - } - }, - "Microsoft.NETCore.Platforms/1.0.0": {}, - "Microsoft.NETCore.Portable.Compatibility/1.0.0": { - "compile": { - "ref/dotnet/System.ComponentModel.DataAnnotations.dll": {}, - "ref/dotnet/System.Core.dll": {}, - "ref/dotnet/System.Net.dll": {}, - "ref/dotnet/System.Numerics.dll": {}, - "ref/dotnet/System.Runtime.Serialization.dll": {}, - "ref/dotnet/System.ServiceModel.Web.dll": {}, - "ref/dotnet/System.ServiceModel.dll": {}, - "ref/dotnet/System.Windows.dll": {}, - "ref/dotnet/System.Xml.Linq.dll": {}, - "ref/dotnet/System.Xml.Serialization.dll": {}, - "ref/dotnet/System.Xml.dll": {}, - "ref/dotnet/System.dll": {}, - "ref/dotnet/mscorlib.dll": {} - } - }, - "Microsoft.NETCore.Targets/1.0.0": { - "dependencies": { - "Microsoft.NETCore.Platforms": "1.0.0" - } - }, - "Microsoft.VisualBasic/10.0.0": { - "dependencies": { - "System.Collections": "4.0.10", - "System.Diagnostics.Debug": "4.0.10", - "System.Dynamic.Runtime": "4.0.10", - "System.Globalization": "4.0.10", - "System.Linq": "4.0.0", - "System.Linq.Expressions": "4.0.10", - "System.ObjectModel": "4.0.10", - "System.Reflection": "4.0.10", - "System.Reflection.Extensions": "4.0.0", - "System.Reflection.Primitives": "4.0.0", - "System.Reflection.TypeExtensions": "4.0.0", - "System.Resources.ResourceManager": "4.0.0", - "System.Runtime": "4.0.20", - "System.Runtime.Extensions": "4.0.10", - "System.Runtime.InteropServices": "4.0.20", - "System.Threading": "4.0.10" - }, - "compile": { - "ref/dotnet/Microsoft.VisualBasic.dll": {} - }, - "runtime": { - "lib/dotnet/Microsoft.VisualBasic.dll": {} - } - }, - "System.AppContext/4.0.0": { - "dependencies": { - "System.Runtime": "4.0.0" - }, - "compile": { - "ref/dotnet/System.AppContext.dll": {} - } - }, - "System.Collections/4.0.10": { - "dependencies": { - "System.Runtime": "4.0.0" - }, - "compile": { - "ref/dotnet/System.Collections.dll": {} - } - }, - "System.Collections.Concurrent/4.0.10": { - "dependencies": { - "System.Collections": "4.0.10", - "System.Diagnostics.Debug": "4.0.10", - "System.Diagnostics.Tracing": "4.0.20", - "System.Globalization": "4.0.10", - "System.Resources.ResourceManager": "4.0.0", - "System.Runtime": "4.0.20", - "System.Runtime.Extensions": "4.0.10", - "System.Threading": "4.0.10", - "System.Threading.Tasks": "4.0.10" - }, - "compile": { - "ref/dotnet/System.Collections.Concurrent.dll": {} - }, - "runtime": { - "lib/dotnet/System.Collections.Concurrent.dll": {} - } - }, - "System.Collections.Immutable/1.1.37": { - "dependencies": { - "System.Collections": "4.0.0", - "System.Diagnostics.Debug": "4.0.0", - "System.Globalization": "4.0.0", - "System.Linq": "4.0.0", - "System.Resources.ResourceManager": "4.0.0", - "System.Runtime": "4.0.0", - "System.Runtime.Extensions": "4.0.0", - "System.Threading": "4.0.0" - }, - "compile": { - "lib/dotnet/System.Collections.Immutable.dll": {} - }, - "runtime": { - "lib/dotnet/System.Collections.Immutable.dll": {} - } - }, - "System.ComponentModel/4.0.0": { - "dependencies": { - "System.Runtime": "4.0.20" - }, - "compile": { - "ref/dotnet/System.ComponentModel.dll": {} - }, - "runtime": { - "lib/dotnet/System.ComponentModel.dll": {} - } - }, - "System.ComponentModel.Annotations/4.0.10": { - "dependencies": { - "System.Collections": "4.0.10", - "System.ComponentModel": "4.0.0", - "System.Globalization": "4.0.10", - "System.Linq": "4.0.0", - "System.Reflection": "4.0.10", - "System.Reflection.Extensions": "4.0.0", - "System.Resources.ResourceManager": "4.0.0", - "System.Runtime": "4.0.20", - "System.Runtime.Extensions": "4.0.10", - "System.Text.RegularExpressions": "4.0.10", - "System.Threading": "4.0.10" - }, - "compile": { - "ref/dotnet/System.ComponentModel.Annotations.dll": {} - }, - "runtime": { - "lib/dotnet/System.ComponentModel.Annotations.dll": {} - } - }, - "System.Diagnostics.Debug/4.0.10": { - "dependencies": { - "System.Runtime": "4.0.0" - }, - "compile": { - "ref/dotnet/System.Diagnostics.Debug.dll": {} - } - }, - "System.Diagnostics.Tools/4.0.0": { - "dependencies": { - "System.Runtime": "4.0.0" - }, - "compile": { - "ref/dotnet/System.Diagnostics.Tools.dll": {} - } - }, - "System.Diagnostics.Tracing/4.0.20": { - "dependencies": { - "System.Runtime": "4.0.0" - }, - "compile": { - "ref/dotnet/System.Diagnostics.Tracing.dll": {} - } - }, - "System.Dynamic.Runtime/4.0.10": { - "dependencies": { - "System.Linq.Expressions": "4.0.10", - "System.ObjectModel": "4.0.0", - "System.Reflection": "4.0.0", - "System.Runtime": "4.0.20" - }, - "compile": { - "ref/dotnet/System.Dynamic.Runtime.dll": {} - } - }, - "System.Globalization/4.0.10": { - "dependencies": { - "System.Runtime": "4.0.0" - }, - "compile": { - "ref/dotnet/System.Globalization.dll": {} - } - }, - "System.Globalization.Calendars/4.0.0": { - "dependencies": { - "System.Globalization": "4.0.0", - "System.Runtime": "4.0.0" - }, - "compile": { - "ref/dotnet/System.Globalization.Calendars.dll": {} - } - }, - "System.Globalization.Extensions/4.0.0": { - "dependencies": { - "System.Globalization": "4.0.10", - "System.Resources.ResourceManager": "4.0.0", - "System.Runtime": "4.0.20", - "System.Runtime.Extensions": "4.0.10", - "System.Runtime.InteropServices": "4.0.20" - }, - "compile": { - "ref/dotnet/System.Globalization.Extensions.dll": {} - }, - "runtime": { - "lib/dotnet/System.Globalization.Extensions.dll": {} - } - }, - "System.IO/4.0.10": { - "dependencies": { - "System.Runtime": "4.0.20", - "System.Text.Encoding": "4.0.0", - "System.Threading.Tasks": "4.0.0" - }, - "compile": { - "ref/dotnet/System.IO.dll": {} - } - }, - "System.IO.Compression/4.0.0": { - "dependencies": { - "System.Collections": "4.0.0", - "System.IO": "4.0.0", - "System.Resources.ResourceManager": "4.0.0", - "System.Runtime": "4.0.0", - "System.Runtime.Extensions": "4.0.0", - "System.Runtime.InteropServices": "4.0.0", - "System.Text.Encoding": "4.0.0", - "System.Threading": "4.0.0", - "System.Threading.Tasks": "4.0.0" - }, - "compile": { - "ref/dotnet/System.IO.Compression.dll": {} - }, - "runtime": { - "lib/dotnet/System.IO.Compression.dll": {} - } - }, - "System.IO.Compression.ZipFile/4.0.0": { - "dependencies": { - "System.IO": "4.0.10", - "System.IO.Compression": "4.0.0", - "System.IO.FileSystem": "4.0.0", - "System.IO.FileSystem.Primitives": "4.0.0", - "System.Resources.ResourceManager": "4.0.0", - "System.Runtime": "4.0.20", - "System.Runtime.Extensions": "4.0.10", - "System.Text.Encoding": "4.0.10" - }, - "compile": { - "ref/dotnet/System.IO.Compression.ZipFile.dll": {} - }, - "runtime": { - "lib/dotnet/System.IO.Compression.ZipFile.dll": {} - } - }, - "System.IO.FileSystem/4.0.0": { - "dependencies": { - "System.IO": "4.0.0", - "System.IO.FileSystem.Primitives": "4.0.0", - "System.Runtime": "4.0.0", - "System.Runtime.Handles": "4.0.0", - "System.Text.Encoding": "4.0.0", - "System.Threading.Tasks": "4.0.0" - }, - "compile": { - "ref/dotnet/System.IO.FileSystem.dll": {} - } - }, - "System.IO.FileSystem.Primitives/4.0.0": { - "dependencies": { - "System.Runtime": "4.0.20" - }, - "compile": { - "ref/dotnet/System.IO.FileSystem.Primitives.dll": {} - }, - "runtime": { - "lib/dotnet/System.IO.FileSystem.Primitives.dll": {} - } - }, - "System.IO.UnmanagedMemoryStream/4.0.0": { - "dependencies": { - "System.IO": "4.0.10", - "System.IO.FileSystem.Primitives": "4.0.0", - "System.Resources.ResourceManager": "4.0.0", - "System.Runtime": "4.0.20", - "System.Runtime.InteropServices": "4.0.20", - "System.Threading": "4.0.10", - "System.Threading.Tasks": "4.0.10" - }, - "compile": { - "ref/dotnet/System.IO.UnmanagedMemoryStream.dll": {} - }, - "runtime": { - "lib/dotnet/System.IO.UnmanagedMemoryStream.dll": {} - } - }, - "System.Linq/4.0.0": { - "dependencies": { - "System.Collections": "4.0.10", - "System.Diagnostics.Debug": "4.0.10", - "System.Resources.ResourceManager": "4.0.0", - "System.Runtime": "4.0.20", - "System.Runtime.Extensions": "4.0.10" - }, - "compile": { - "ref/dotnet/System.Linq.dll": {} - }, - "runtime": { - "lib/dotnet/System.Linq.dll": {} - } - }, - "System.Linq.Expressions/4.0.10": { - "dependencies": { - "System.Reflection": "4.0.0", - "System.Runtime": "4.0.0" - }, - "compile": { - "ref/dotnet/System.Linq.Expressions.dll": {} - } - }, - "System.Linq.Parallel/4.0.0": { - "dependencies": { - "System.Collections": "4.0.10", - "System.Collections.Concurrent": "4.0.10", - "System.Diagnostics.Debug": "4.0.10", - "System.Diagnostics.Tracing": "4.0.20", - "System.Linq": "4.0.0", - "System.Resources.ResourceManager": "4.0.0", - "System.Runtime": "4.0.20", - "System.Runtime.Extensions": "4.0.10", - "System.Threading": "4.0.10", - "System.Threading.Tasks": "4.0.10" - }, - "compile": { - "ref/dotnet/System.Linq.Parallel.dll": {} - }, - "runtime": { - "lib/dotnet/System.Linq.Parallel.dll": {} - } - }, - "System.Linq.Queryable/4.0.0": { - "dependencies": { - "System.Collections": "4.0.10", - "System.Linq": "4.0.0", - "System.Linq.Expressions": "4.0.10", - "System.Reflection": "4.0.10", - "System.Reflection.Extensions": "4.0.0", - "System.Resources.ResourceManager": "4.0.0", - "System.Runtime": "4.0.20" - }, - "compile": { - "ref/dotnet/System.Linq.Queryable.dll": {} - }, - "runtime": { - "lib/dotnet/System.Linq.Queryable.dll": {} - } - }, - "System.Net.Http/4.0.0": { - "dependencies": { - "System.IO": "4.0.0", - "System.Net.Primitives": "4.0.0", - "System.Runtime": "4.0.0", - "System.Text.Encoding": "4.0.0", - "System.Threading.Tasks": "4.0.0" - }, - "compile": { - "ref/dotnet/System.Net.Http.dll": {} - } - }, - "System.Net.NetworkInformation/4.0.0": { - "dependencies": { - "System.Runtime": "4.0.0" - }, - "compile": { - "ref/dotnet/System.Net.NetworkInformation.dll": {} - } - }, - "System.Net.Primitives/4.0.10": { - "dependencies": { - "System.Runtime": "4.0.0", - "System.Runtime.Handles": "4.0.0" - }, - "compile": { - "ref/dotnet/System.Net.Primitives.dll": {} - } - }, - "System.Numerics.Vectors/4.1.0": { - "dependencies": { - "System.Globalization": "4.0.10", - "System.Resources.ResourceManager": "4.0.0", - "System.Runtime": "4.0.20", - "System.Runtime.Extensions": "4.0.10" - }, - "compile": { - "ref/dotnet/System.Numerics.Vectors.dll": {} - }, - "runtime": { - "lib/dotnet/System.Numerics.Vectors.dll": {} - } - }, - "System.ObjectModel/4.0.10": { - "dependencies": { - "System.Collections": "4.0.10", - "System.Diagnostics.Debug": "4.0.10", - "System.Resources.ResourceManager": "4.0.0", - "System.Runtime": "4.0.20", - "System.Threading": "4.0.10" - }, - "compile": { - "ref/dotnet/System.ObjectModel.dll": {} - }, - "runtime": { - "lib/dotnet/System.ObjectModel.dll": {} - } - }, - "System.Reflection/4.0.10": { - "dependencies": { - "System.IO": "4.0.0", - "System.Reflection.Primitives": "4.0.0", - "System.Runtime": "4.0.20" - }, - "compile": { - "ref/dotnet/System.Reflection.dll": {} - } - }, - "System.Reflection.DispatchProxy/4.0.0": { - "dependencies": { - "System.Reflection": "4.0.0", - "System.Runtime": "4.0.0" - }, - "compile": { - "ref/dotnet/System.Reflection.DispatchProxy.dll": {} - } - }, - "System.Reflection.Extensions/4.0.0": { - "dependencies": { - "System.Reflection": "4.0.0", - "System.Runtime": "4.0.0" - }, - "compile": { - "ref/dotnet/System.Reflection.Extensions.dll": {} - } - }, - "System.Reflection.Metadata/1.0.22": { - "dependencies": { - "System.Collections": "4.0.0", - "System.Collections.Immutable": "1.1.37", - "System.Diagnostics.Debug": "4.0.0", - "System.IO": "4.0.0", - "System.Reflection": "4.0.0", - "System.Reflection.Extensions": "4.0.0", - "System.Reflection.Primitives": "4.0.0", - "System.Resources.ResourceManager": "4.0.0", - "System.Runtime": "4.0.0", - "System.Runtime.Extensions": "4.0.0", - "System.Runtime.InteropServices": "4.0.0", - "System.Text.Encoding": "4.0.0", - "System.Text.Encoding.Extensions": "4.0.0", - "System.Threading": "4.0.0" - }, - "compile": { - "lib/dotnet/System.Reflection.Metadata.dll": {} - }, - "runtime": { - "lib/dotnet/System.Reflection.Metadata.dll": {} - } - }, - "System.Reflection.Primitives/4.0.0": { - "dependencies": { - "System.Runtime": "4.0.0" - }, - "compile": { - "ref/dotnet/System.Reflection.Primitives.dll": {} - } - }, - "System.Reflection.TypeExtensions/4.0.0": { - "dependencies": { - "System.Reflection": "4.0.0", - "System.Runtime": "4.0.0" - }, - "compile": { - "ref/dotnet/System.Reflection.TypeExtensions.dll": {} - } - }, - "System.Resources.ResourceManager/4.0.0": { - "dependencies": { - "System.Globalization": "4.0.0", - "System.Reflection": "4.0.0", - "System.Runtime": "4.0.0" - }, - "compile": { - "ref/dotnet/System.Resources.ResourceManager.dll": {} - } - }, - "System.Runtime/4.0.20": { - "compile": { - "ref/dotnet/System.Runtime.dll": {} - } - }, - "System.Runtime.Extensions/4.0.10": { - "dependencies": { - "System.Runtime": "4.0.20" - }, - "compile": { - "ref/dotnet/System.Runtime.Extensions.dll": {} - } - }, - "System.Runtime.Handles/4.0.0": { - "dependencies": { - "System.Runtime": "4.0.0" - }, - "compile": { - "ref/dotnet/System.Runtime.Handles.dll": {} - } - }, - "System.Runtime.InteropServices/4.0.20": { - "dependencies": { - "System.Reflection": "4.0.0", - "System.Reflection.Primitives": "4.0.0", - "System.Runtime": "4.0.0", - "System.Runtime.Handles": "4.0.0" - }, - "compile": { - "ref/dotnet/System.Runtime.InteropServices.dll": {} - } - }, - "System.Runtime.Numerics/4.0.0": { - "dependencies": { - "System.Globalization": "4.0.10", - "System.Resources.ResourceManager": "4.0.0", - "System.Runtime": "4.0.20", - "System.Runtime.Extensions": "4.0.10" - }, - "compile": { - "ref/dotnet/System.Runtime.Numerics.dll": {} - }, - "runtime": { - "lib/dotnet/System.Runtime.Numerics.dll": {} - } - }, - "System.Security.Claims/4.0.0": { - "dependencies": { - "System.Collections": "4.0.0", - "System.Diagnostics.Debug": "4.0.0", - "System.Globalization": "4.0.0", - "System.IO": "4.0.0", - "System.Resources.ResourceManager": "4.0.0", - "System.Runtime": "4.0.20", - "System.Runtime.Extensions": "4.0.0", - "System.Security.Principal": "4.0.0" - }, - "compile": { - "ref/dotnet/System.Security.Claims.dll": {} - }, - "runtime": { - "lib/dotnet/System.Security.Claims.dll": {} - } - }, - "System.Security.Principal/4.0.0": { - "dependencies": { - "System.Runtime": "4.0.0" - }, - "compile": { - "ref/dotnet/System.Security.Principal.dll": {} - }, - "runtime": { - "lib/dotnet/System.Security.Principal.dll": {} - } - }, - "System.Text.Encoding/4.0.10": { - "dependencies": { - "System.Runtime": "4.0.0" - }, - "compile": { - "ref/dotnet/System.Text.Encoding.dll": {} - } - }, - "System.Text.Encoding.Extensions/4.0.10": { - "dependencies": { - "System.Runtime": "4.0.0", - "System.Text.Encoding": "4.0.10" - }, - "compile": { - "ref/dotnet/System.Text.Encoding.Extensions.dll": {} - } - }, - "System.Text.RegularExpressions/4.0.10": { - "dependencies": { - "System.Collections": "4.0.10", - "System.Globalization": "4.0.10", - "System.Resources.ResourceManager": "4.0.0", - "System.Runtime": "4.0.20", - "System.Runtime.Extensions": "4.0.10", - "System.Threading": "4.0.10" - }, - "compile": { - "ref/dotnet/System.Text.RegularExpressions.dll": {} - }, - "runtime": { - "lib/dotnet/System.Text.RegularExpressions.dll": {} - } - }, - "System.Threading/4.0.10": { - "dependencies": { - "System.Runtime": "4.0.0", - "System.Threading.Tasks": "4.0.0" - }, - "compile": { - "ref/dotnet/System.Threading.dll": {} - } - }, - "System.Threading.Tasks/4.0.10": { - "dependencies": { - "System.Runtime": "4.0.0" - }, - "compile": { - "ref/dotnet/System.Threading.Tasks.dll": {} - } - }, - "System.Threading.Tasks.Dataflow/4.5.25": { - "dependencies": { - "System.Collections": "4.0.0", - "System.Collections.Concurrent": "4.0.0", - "System.Diagnostics.Debug": "4.0.0", - "System.Diagnostics.Tracing": "4.0.0", - "System.Dynamic.Runtime": "4.0.0", - "System.Linq": "4.0.0", - "System.Resources.ResourceManager": "4.0.0", - "System.Runtime": "4.0.0", - "System.Runtime.Extensions": "4.0.0", - "System.Threading": "4.0.0", - "System.Threading.Tasks": "4.0.0" - }, - "compile": { - "lib/dotnet/System.Threading.Tasks.Dataflow.dll": {} - }, - "runtime": { - "lib/dotnet/System.Threading.Tasks.Dataflow.dll": {} - } - }, - "System.Threading.Tasks.Parallel/4.0.0": { - "dependencies": { - "System.Collections.Concurrent": "4.0.10", - "System.Diagnostics.Debug": "4.0.10", - "System.Diagnostics.Tracing": "4.0.20", - "System.Resources.ResourceManager": "4.0.0", - "System.Runtime": "4.0.20", - "System.Runtime.Extensions": "4.0.10", - "System.Threading": "4.0.10", - "System.Threading.Tasks": "4.0.10" - }, - "compile": { - "ref/dotnet/System.Threading.Tasks.Parallel.dll": {} - }, - "runtime": { - "lib/dotnet/System.Threading.Tasks.Parallel.dll": {} - } - }, - "System.Threading.Timer/4.0.0": { - "dependencies": { - "System.Runtime": "4.0.0" - }, - "compile": { - "ref/dotnet/System.Threading.Timer.dll": {} - } - }, - "System.Xml.ReaderWriter/4.0.10": { - "dependencies": { - "System.Collections": "4.0.10", - "System.Diagnostics.Debug": "4.0.10", - "System.Globalization": "4.0.10", - "System.IO": "4.0.10", - "System.IO.FileSystem": "4.0.0", - "System.IO.FileSystem.Primitives": "4.0.0", - "System.Resources.ResourceManager": "4.0.0", - "System.Runtime": "4.0.20", - "System.Runtime.Extensions": "4.0.10", - "System.Runtime.InteropServices": "4.0.20", - "System.Text.Encoding": "4.0.10", - "System.Text.Encoding.Extensions": "4.0.10", - "System.Text.RegularExpressions": "4.0.10", - "System.Threading.Tasks": "4.0.10" - }, - "compile": { - "ref/dotnet/System.Xml.ReaderWriter.dll": {} - }, - "runtime": { - "lib/dotnet/System.Xml.ReaderWriter.dll": {} - } - }, - "System.Xml.XDocument/4.0.10": { - "dependencies": { - "System.Collections": "4.0.10", - "System.Diagnostics.Debug": "4.0.10", - "System.Globalization": "4.0.10", - "System.IO": "4.0.10", - "System.Reflection": "4.0.10", - "System.Resources.ResourceManager": "4.0.0", - "System.Runtime": "4.0.20", - "System.Runtime.Extensions": "4.0.10", - "System.Text.Encoding": "4.0.10", - "System.Threading": "4.0.10", - "System.Xml.ReaderWriter": "4.0.10" - }, - "compile": { - "ref/dotnet/System.Xml.XDocument.dll": {} - }, - "runtime": { - "lib/dotnet/System.Xml.XDocument.dll": {} - } - } - }, - "DNXCore,Version=v5.0": { - "Microsoft.CSharp/4.0.0": { - "dependencies": { - "System.Collections": "4.0.10", - "System.Diagnostics.Debug": "4.0.10", - "System.Dynamic.Runtime": "4.0.0", - "System.Globalization": "4.0.10", - "System.Linq": "4.0.0", - "System.Linq.Expressions": "4.0.0", - "System.ObjectModel": "4.0.10", - "System.Reflection": "4.0.10", - "System.Reflection.Extensions": "4.0.0", - "System.Reflection.Primitives": "4.0.0", - "System.Reflection.TypeExtensions": "4.0.0", - "System.Resources.ResourceManager": "4.0.0", - "System.Runtime": "4.0.20", - "System.Runtime.Extensions": "4.0.10", - "System.Runtime.InteropServices": "4.0.20", - "System.Threading": "4.0.10" - }, - "compile": { - "ref/dotnet/Microsoft.CSharp.dll": {} - }, - "runtime": { - "lib/dotnet/Microsoft.CSharp.dll": {} - } - }, - "Microsoft.NETCore/5.0.0": { - "dependencies": { - "Microsoft.CSharp": "4.0.0", - "Microsoft.NETCore.Targets": "1.0.0", - "Microsoft.VisualBasic": "10.0.0", - "System.AppContext": "4.0.0", - "System.Collections": "4.0.10", - "System.Collections.Concurrent": "4.0.10", - "System.Collections.Immutable": "1.1.37", - "System.ComponentModel": "4.0.0", - "System.ComponentModel.Annotations": "4.0.10", - "System.Diagnostics.Debug": "4.0.10", - "System.Diagnostics.Tools": "4.0.0", - "System.Diagnostics.Tracing": "4.0.20", - "System.Dynamic.Runtime": "4.0.10", - "System.Globalization": "4.0.10", - "System.Globalization.Calendars": "4.0.0", - "System.Globalization.Extensions": "4.0.0", - "System.IO": "4.0.10", - "System.IO.Compression": "4.0.0", - "System.IO.Compression.ZipFile": "4.0.0", - "System.IO.FileSystem": "4.0.0", - "System.IO.FileSystem.Primitives": "4.0.0", - "System.IO.UnmanagedMemoryStream": "4.0.0", - "System.Linq": "4.0.0", - "System.Linq.Expressions": "4.0.10", - "System.Linq.Parallel": "4.0.0", - "System.Linq.Queryable": "4.0.0", - "System.Net.Http": "4.0.0", - "System.Net.NetworkInformation": "4.0.0", - "System.Net.Primitives": "4.0.10", - "System.Numerics.Vectors": "4.1.0", - "System.ObjectModel": "4.0.10", - "System.Reflection": "4.0.10", - "System.Reflection.DispatchProxy": "4.0.0", - "System.Reflection.Extensions": "4.0.0", - "System.Reflection.Metadata": "1.0.22", - "System.Reflection.Primitives": "4.0.0", - "System.Reflection.TypeExtensions": "4.0.0", - "System.Resources.ResourceManager": "4.0.0", - "System.Runtime": "4.0.20", - "System.Runtime.Extensions": "4.0.10", - "System.Runtime.Handles": "4.0.0", - "System.Runtime.InteropServices": "4.0.20", - "System.Runtime.Numerics": "4.0.0", - "System.Security.Claims": "4.0.0", - "System.Security.Principal": "4.0.0", - "System.Text.Encoding": "4.0.10", - "System.Text.Encoding.Extensions": "4.0.10", - "System.Text.RegularExpressions": "4.0.10", - "System.Threading": "4.0.10", - "System.Threading.Tasks": "4.0.10", - "System.Threading.Tasks.Dataflow": "4.5.25", - "System.Threading.Tasks.Parallel": "4.0.0", - "System.Threading.Timer": "4.0.0", - "System.Xml.ReaderWriter": "4.0.10", - "System.Xml.XDocument": "4.0.10" - } - }, - "Microsoft.NETCore.Platforms/1.0.0": {}, - "Microsoft.NETCore.Portable.Compatibility/1.0.0": { - "dependencies": { - "Microsoft.NETCore.Runtime": "1.0.0" - }, - "compile": { - "ref/dotnet/System.ComponentModel.DataAnnotations.dll": {}, - "ref/dotnet/System.Core.dll": {}, - "ref/dotnet/System.Net.dll": {}, - "ref/dotnet/System.Numerics.dll": {}, - "ref/dotnet/System.Runtime.Serialization.dll": {}, - "ref/dotnet/System.ServiceModel.Web.dll": {}, - "ref/dotnet/System.ServiceModel.dll": {}, - "ref/dotnet/System.Windows.dll": {}, - "ref/dotnet/System.Xml.Linq.dll": {}, - "ref/dotnet/System.Xml.Serialization.dll": {}, - "ref/dotnet/System.Xml.dll": {}, - "ref/dotnet/System.dll": {}, - "ref/dotnet/mscorlib.dll": {} - }, - "runtime": { - "lib/dnxcore50/System.ComponentModel.DataAnnotations.dll": {}, - "lib/dnxcore50/System.Core.dll": {}, - "lib/dnxcore50/System.Net.dll": {}, - "lib/dnxcore50/System.Numerics.dll": {}, - "lib/dnxcore50/System.Runtime.Serialization.dll": {}, - "lib/dnxcore50/System.ServiceModel.Web.dll": {}, - "lib/dnxcore50/System.ServiceModel.dll": {}, - "lib/dnxcore50/System.Windows.dll": {}, - "lib/dnxcore50/System.Xml.Linq.dll": {}, - "lib/dnxcore50/System.Xml.Serialization.dll": {}, - "lib/dnxcore50/System.Xml.dll": {}, - "lib/dnxcore50/System.dll": {} - } - }, - "Microsoft.NETCore.Runtime/1.0.0": {}, - "Microsoft.NETCore.Targets/1.0.0": { - "dependencies": { - "Microsoft.NETCore.Platforms": "1.0.0", - "Microsoft.NETCore.Targets.DNXCore": "4.9.0" - } - }, - "Microsoft.NETCore.Targets.DNXCore/4.9.0": {}, - "Microsoft.VisualBasic/10.0.0": { - "dependencies": { - "System.Collections": "4.0.10", - "System.Diagnostics.Debug": "4.0.10", - "System.Dynamic.Runtime": "4.0.10", - "System.Globalization": "4.0.10", - "System.Linq": "4.0.0", - "System.Linq.Expressions": "4.0.10", - "System.ObjectModel": "4.0.10", - "System.Reflection": "4.0.10", - "System.Reflection.Extensions": "4.0.0", - "System.Reflection.Primitives": "4.0.0", - "System.Reflection.TypeExtensions": "4.0.0", - "System.Resources.ResourceManager": "4.0.0", - "System.Runtime": "4.0.20", - "System.Runtime.Extensions": "4.0.10", - "System.Runtime.InteropServices": "4.0.20", - "System.Threading": "4.0.10" - }, - "compile": { - "ref/dotnet/Microsoft.VisualBasic.dll": {} - }, - "runtime": { - "lib/dotnet/Microsoft.VisualBasic.dll": {} - } - }, - "Microsoft.Win32.Primitives/4.0.0": { - "dependencies": { - "System.Runtime": "4.0.20", - "System.Runtime.InteropServices": "4.0.20" - }, - "compile": { - "ref/dotnet/Microsoft.Win32.Primitives.dll": {} - }, - "runtime": { - "lib/dotnet/Microsoft.Win32.Primitives.dll": {} - } - }, - "System.AppContext/4.0.0": { - "dependencies": { - "System.Runtime": "4.0.0" - }, - "compile": { - "ref/dotnet/System.AppContext.dll": {} - }, - "runtime": { - "lib/DNXCore50/System.AppContext.dll": {} - } - }, - "System.Collections/4.0.10": { - "dependencies": { - "System.Runtime": "4.0.20" - }, - "compile": { - "ref/dotnet/System.Collections.dll": {} - }, - "runtime": { - "lib/DNXCore50/System.Collections.dll": {} - } - }, - "System.Collections.Concurrent/4.0.10": { - "dependencies": { - "System.Collections": "4.0.10", - "System.Diagnostics.Debug": "4.0.10", - "System.Diagnostics.Tracing": "4.0.20", - "System.Globalization": "4.0.10", - "System.Resources.ResourceManager": "4.0.0", - "System.Runtime": "4.0.20", - "System.Runtime.Extensions": "4.0.10", - "System.Threading": "4.0.10", - "System.Threading.Tasks": "4.0.10" - }, - "compile": { - "ref/dotnet/System.Collections.Concurrent.dll": {} - }, - "runtime": { - "lib/dotnet/System.Collections.Concurrent.dll": {} - } - }, - "System.Collections.Immutable/1.1.37": { - "dependencies": { - "System.Collections": "4.0.0", - "System.Diagnostics.Debug": "4.0.0", - "System.Globalization": "4.0.0", - "System.Linq": "4.0.0", - "System.Resources.ResourceManager": "4.0.0", - "System.Runtime": "4.0.0", - "System.Runtime.Extensions": "4.0.0", - "System.Threading": "4.0.0" - }, - "compile": { - "lib/dotnet/System.Collections.Immutable.dll": {} - }, - "runtime": { - "lib/dotnet/System.Collections.Immutable.dll": {} - } - }, - "System.Collections.NonGeneric/4.0.0": { - "dependencies": { - "System.Diagnostics.Debug": "4.0.10", - "System.Globalization": "4.0.10", - "System.Resources.ResourceManager": "4.0.0", - "System.Runtime": "4.0.20", - "System.Runtime.Extensions": "4.0.10", - "System.Threading": "4.0.10" - }, - "compile": { - "ref/dotnet/System.Collections.NonGeneric.dll": {} - }, - "runtime": { - "lib/dotnet/System.Collections.NonGeneric.dll": {} - } - }, - "System.ComponentModel/4.0.0": { - "dependencies": { - "System.Runtime": "4.0.20" - }, - "compile": { - "ref/dotnet/System.ComponentModel.dll": {} - }, - "runtime": { - "lib/dotnet/System.ComponentModel.dll": {} - } - }, - "System.ComponentModel.Annotations/4.0.10": { - "dependencies": { - "System.Collections": "4.0.10", - "System.ComponentModel": "4.0.0", - "System.Globalization": "4.0.10", - "System.Linq": "4.0.0", - "System.Reflection": "4.0.10", - "System.Reflection.Extensions": "4.0.0", - "System.Resources.ResourceManager": "4.0.0", - "System.Runtime": "4.0.20", - "System.Runtime.Extensions": "4.0.10", - "System.Text.RegularExpressions": "4.0.10", - "System.Threading": "4.0.10" - }, - "compile": { - "ref/dotnet/System.ComponentModel.Annotations.dll": {} - }, - "runtime": { - "lib/dotnet/System.ComponentModel.Annotations.dll": {} - } - }, - "System.ComponentModel.EventBasedAsync/4.0.10": { - "dependencies": { - "System.Resources.ResourceManager": "4.0.0", - "System.Runtime": "4.0.20", - "System.Threading": "4.0.10", - "System.Threading.Tasks": "4.0.10" - }, - "compile": { - "ref/dotnet/System.ComponentModel.EventBasedAsync.dll": {} - }, - "runtime": { - "lib/dotnet/System.ComponentModel.EventBasedAsync.dll": {} - } - }, - "System.Diagnostics.Debug/4.0.10": { - "dependencies": { - "System.Runtime": "4.0.0" - }, - "compile": { - "ref/dotnet/System.Diagnostics.Debug.dll": {} - }, - "runtime": { - "lib/DNXCore50/System.Diagnostics.Debug.dll": {} - } - }, - "System.Diagnostics.Tools/4.0.0": { - "dependencies": { - "System.Runtime": "4.0.0" - }, - "compile": { - "ref/dotnet/System.Diagnostics.Tools.dll": {} - }, - "runtime": { - "lib/DNXCore50/System.Diagnostics.Tools.dll": {} - } - }, - "System.Diagnostics.Tracing/4.0.20": { - "dependencies": { - "System.Runtime": "4.0.0" - }, - "compile": { - "ref/dotnet/System.Diagnostics.Tracing.dll": {} - }, - "runtime": { - "lib/DNXCore50/System.Diagnostics.Tracing.dll": {} - } - }, - "System.Dynamic.Runtime/4.0.10": { - "dependencies": { - "System.Collections": "4.0.0", - "System.Diagnostics.Debug": "4.0.0", - "System.Globalization": "4.0.0", - "System.Linq": "4.0.0", - "System.Linq.Expressions": "4.0.10", - "System.ObjectModel": "4.0.0", - "System.Reflection": "4.0.0", - "System.Reflection.Emit": "4.0.0", - "System.Reflection.Primitives": "4.0.0", - "System.Reflection.TypeExtensions": "4.0.0", - "System.Resources.ResourceManager": "4.0.0", - "System.Runtime": "4.0.20", - "System.Runtime.Extensions": "4.0.0", - "System.Threading": "4.0.0" - }, - "compile": { - "ref/dotnet/System.Dynamic.Runtime.dll": {} - }, - "runtime": { - "lib/DNXCore50/System.Dynamic.Runtime.dll": {} - } - }, - "System.Globalization/4.0.10": { - "dependencies": { - "System.Runtime": "4.0.0" - }, - "compile": { - "ref/dotnet/System.Globalization.dll": {} - }, - "runtime": { - "lib/DNXCore50/System.Globalization.dll": {} - } - }, - "System.Globalization.Calendars/4.0.0": { - "dependencies": { - "System.Globalization": "4.0.0", - "System.Runtime": "4.0.0" - }, - "compile": { - "ref/dotnet/System.Globalization.Calendars.dll": {} - }, - "runtime": { - "lib/DNXCore50/System.Globalization.Calendars.dll": {} - } - }, - "System.Globalization.Extensions/4.0.0": { - "dependencies": { - "System.Globalization": "4.0.10", - "System.Resources.ResourceManager": "4.0.0", - "System.Runtime": "4.0.20", - "System.Runtime.Extensions": "4.0.10", - "System.Runtime.InteropServices": "4.0.20" - }, - "compile": { - "ref/dotnet/System.Globalization.Extensions.dll": {} - }, - "runtime": { - "lib/dotnet/System.Globalization.Extensions.dll": {} - } - }, - "System.IO/4.0.10": { - "dependencies": { - "System.Runtime": "4.0.20", - "System.Text.Encoding": "4.0.0", - "System.Threading.Tasks": "4.0.0" - }, - "compile": { - "ref/dotnet/System.IO.dll": {} - }, - "runtime": { - "lib/DNXCore50/System.IO.dll": {} - } - }, - "System.IO.Compression/4.0.0": { - "dependencies": { - "System.Collections": "4.0.0", - "System.IO": "4.0.0", - "System.Resources.ResourceManager": "4.0.0", - "System.Runtime": "4.0.0", - "System.Runtime.Extensions": "4.0.0", - "System.Runtime.InteropServices": "4.0.0", - "System.Text.Encoding": "4.0.0", - "System.Threading": "4.0.0", - "System.Threading.Tasks": "4.0.0" - }, - "compile": { - "ref/dotnet/System.IO.Compression.dll": {} - }, - "runtime": { - "lib/dotnet/System.IO.Compression.dll": {} - } - }, - "System.IO.Compression.ZipFile/4.0.0": { - "dependencies": { - "System.IO": "4.0.10", - "System.IO.Compression": "4.0.0", - "System.IO.FileSystem": "4.0.0", - "System.IO.FileSystem.Primitives": "4.0.0", - "System.Resources.ResourceManager": "4.0.0", - "System.Runtime": "4.0.20", - "System.Runtime.Extensions": "4.0.10", - "System.Text.Encoding": "4.0.10" - }, - "compile": { - "ref/dotnet/System.IO.Compression.ZipFile.dll": {} - }, - "runtime": { - "lib/dotnet/System.IO.Compression.ZipFile.dll": {} - } - }, - "System.IO.FileSystem/4.0.0": { - "dependencies": { - "System.Collections": "4.0.10", - "System.IO": "4.0.10", - "System.IO.FileSystem.Primitives": "4.0.0", - "System.Resources.ResourceManager": "4.0.0", - "System.Runtime": "4.0.20", - "System.Runtime.Extensions": "4.0.10", - "System.Runtime.Handles": "4.0.0", - "System.Runtime.InteropServices": "4.0.20", - "System.Text.Encoding": "4.0.10", - "System.Text.Encoding.Extensions": "4.0.10", - "System.Threading": "4.0.10", - "System.Threading.Overlapped": "4.0.0", - "System.Threading.Tasks": "4.0.10" - }, - "compile": { - "ref/dotnet/System.IO.FileSystem.dll": {} - }, - "runtime": { - "lib/DNXCore50/System.IO.FileSystem.dll": {} - } - }, - "System.IO.FileSystem.Primitives/4.0.0": { - "dependencies": { - "System.Runtime": "4.0.20" - }, - "compile": { - "ref/dotnet/System.IO.FileSystem.Primitives.dll": {} - }, - "runtime": { - "lib/dotnet/System.IO.FileSystem.Primitives.dll": {} - } - }, - "System.IO.UnmanagedMemoryStream/4.0.0": { - "dependencies": { - "System.IO": "4.0.10", - "System.IO.FileSystem.Primitives": "4.0.0", - "System.Resources.ResourceManager": "4.0.0", - "System.Runtime": "4.0.20", - "System.Runtime.InteropServices": "4.0.20", - "System.Threading": "4.0.10", - "System.Threading.Tasks": "4.0.10" - }, - "compile": { - "ref/dotnet/System.IO.UnmanagedMemoryStream.dll": {} - }, - "runtime": { - "lib/dotnet/System.IO.UnmanagedMemoryStream.dll": {} - } - }, - "System.Linq/4.0.0": { - "dependencies": { - "System.Collections": "4.0.10", - "System.Diagnostics.Debug": "4.0.10", - "System.Resources.ResourceManager": "4.0.0", - "System.Runtime": "4.0.20", - "System.Runtime.Extensions": "4.0.10" - }, - "compile": { - "ref/dotnet/System.Linq.dll": {} - }, - "runtime": { - "lib/dotnet/System.Linq.dll": {} - } - }, - "System.Linq.Expressions/4.0.10": { - "dependencies": { - "System.Collections": "4.0.0", - "System.Diagnostics.Debug": "4.0.0", - "System.Globalization": "4.0.0", - "System.IO": "4.0.0", - "System.Linq": "4.0.0", - "System.ObjectModel": "4.0.0", - "System.Reflection": "4.0.0", - "System.Reflection.Emit": "4.0.0", - "System.Reflection.Extensions": "4.0.0", - "System.Reflection.Primitives": "4.0.0", - "System.Reflection.TypeExtensions": "4.0.0", - "System.Resources.ResourceManager": "4.0.0", - "System.Runtime": "4.0.20", - "System.Runtime.Extensions": "4.0.0", - "System.Threading": "4.0.0" - }, - "compile": { - "ref/dotnet/System.Linq.Expressions.dll": {} - }, - "runtime": { - "lib/DNXCore50/System.Linq.Expressions.dll": {} - } - }, - "System.Linq.Parallel/4.0.0": { - "dependencies": { - "System.Collections": "4.0.10", - "System.Collections.Concurrent": "4.0.10", - "System.Diagnostics.Debug": "4.0.10", - "System.Diagnostics.Tracing": "4.0.20", - "System.Linq": "4.0.0", - "System.Resources.ResourceManager": "4.0.0", - "System.Runtime": "4.0.20", - "System.Runtime.Extensions": "4.0.10", - "System.Threading": "4.0.10", - "System.Threading.Tasks": "4.0.10" - }, - "compile": { - "ref/dotnet/System.Linq.Parallel.dll": {} - }, - "runtime": { - "lib/dotnet/System.Linq.Parallel.dll": {} - } - }, - "System.Linq.Queryable/4.0.0": { - "dependencies": { - "System.Collections": "4.0.10", - "System.Linq": "4.0.0", - "System.Linq.Expressions": "4.0.10", - "System.Reflection": "4.0.10", - "System.Reflection.Extensions": "4.0.0", - "System.Resources.ResourceManager": "4.0.0", - "System.Runtime": "4.0.20" - }, - "compile": { - "ref/dotnet/System.Linq.Queryable.dll": {} - }, - "runtime": { - "lib/dotnet/System.Linq.Queryable.dll": {} - } - }, - "System.Net.Http/4.0.0": { - "dependencies": { - "Microsoft.Win32.Primitives": "4.0.0", - "System.Collections": "4.0.10", - "System.Diagnostics.Debug": "4.0.10", - "System.Globalization": "4.0.10", - "System.IO": "4.0.10", - "System.IO.Compression": "4.0.0", - "System.Net.Primitives": "4.0.10", - "System.Resources.ResourceManager": "4.0.0", - "System.Runtime": "4.0.20", - "System.Runtime.Extensions": "4.0.10", - "System.Runtime.Handles": "4.0.0", - "System.Runtime.InteropServices": "4.0.20", - "System.Text.Encoding": "4.0.10", - "System.Threading": "4.0.10", - "System.Threading.Tasks": "4.0.10" - }, - "compile": { - "ref/dotnet/System.Net.Http.dll": {} - }, - "runtime": { - "lib/DNXCore50/System.Net.Http.dll": {} - } - }, - "System.Net.NetworkInformation/4.0.0": { - "dependencies": { - "System.Runtime": "4.0.0" - }, - "compile": { - "ref/dotnet/System.Net.NetworkInformation.dll": {} - } - }, - "System.Net.Primitives/4.0.10": { - "dependencies": { - "System.Private.Networking": "4.0.0" - }, - "compile": { - "ref/dotnet/System.Net.Primitives.dll": {} - }, - "runtime": { - "lib/DNXCore50/System.Net.Primitives.dll": {} - } - }, - "System.Numerics.Vectors/4.1.0": { - "dependencies": { - "System.Globalization": "4.0.10", - "System.Resources.ResourceManager": "4.0.0", - "System.Runtime": "4.0.20", - "System.Runtime.Extensions": "4.0.10" - }, - "compile": { - "ref/dotnet/System.Numerics.Vectors.dll": {} - }, - "runtime": { - "lib/dotnet/System.Numerics.Vectors.dll": {} - } - }, - "System.ObjectModel/4.0.10": { - "dependencies": { - "System.Collections": "4.0.10", - "System.Diagnostics.Debug": "4.0.10", - "System.Resources.ResourceManager": "4.0.0", - "System.Runtime": "4.0.20", - "System.Threading": "4.0.10" - }, - "compile": { - "ref/dotnet/System.ObjectModel.dll": {} - }, - "runtime": { - "lib/dotnet/System.ObjectModel.dll": {} - } - }, - "System.Private.Networking/4.0.0": { - "dependencies": { - "Microsoft.Win32.Primitives": "4.0.0", - "System.Collections": "4.0.10", - "System.Collections.Concurrent": "4.0.0", - "System.Collections.NonGeneric": "4.0.0", - "System.ComponentModel.EventBasedAsync": "4.0.10", - "System.Diagnostics.Debug": "4.0.10", - "System.Diagnostics.Tracing": "4.0.20", - "System.Globalization": "4.0.10", - "System.IO": "4.0.10", - "System.IO.FileSystem": "4.0.0", - "System.IO.FileSystem.Primitives": "4.0.0", - "System.Resources.ResourceManager": "4.0.0", - "System.Runtime": "4.0.20", - "System.Runtime.Extensions": "4.0.10", - "System.Runtime.Handles": "4.0.0", - "System.Runtime.InteropServices": "4.0.20", - "System.Threading": "4.0.10", - "System.Threading.Overlapped": "4.0.0", - "System.Threading.Tasks": "4.0.10" - }, - "compile": { - "ref/dnxcore50/_._": {} - }, - "runtime": { - "lib/DNXCore50/System.Private.Networking.dll": {} - } - }, - "System.Private.Uri/4.0.0": { - "compile": { - "ref/dnxcore50/_._": {} - }, - "runtime": { - "lib/DNXCore50/System.Private.Uri.dll": {} - } - }, - "System.Reflection/4.0.10": { - "dependencies": { - "System.IO": "4.0.0", - "System.Reflection.Primitives": "4.0.0", - "System.Runtime": "4.0.20" - }, - "compile": { - "ref/dotnet/System.Reflection.dll": {} - }, - "runtime": { - "lib/DNXCore50/System.Reflection.dll": {} - } - }, - "System.Reflection.DispatchProxy/4.0.0": { - "dependencies": { - "System.Collections": "4.0.10", - "System.Linq": "4.0.0", - "System.Reflection": "4.0.10", - "System.Reflection.Extensions": "4.0.0", - "System.Reflection.Primitives": "4.0.0", - "System.Resources.ResourceManager": "4.0.0", - "System.Runtime": "4.0.20", - "System.Threading": "4.0.10" - }, - "compile": { - "ref/dotnet/System.Reflection.DispatchProxy.dll": {} - }, - "runtime": { - "lib/DNXCore50/System.Reflection.DispatchProxy.dll": {} - } - }, - "System.Reflection.Emit/4.0.0": { - "dependencies": { - "System.IO": "4.0.0", - "System.Reflection": "4.0.0", - "System.Reflection.Emit.ILGeneration": "4.0.0", - "System.Reflection.Primitives": "4.0.0", - "System.Runtime": "4.0.0" - }, - "compile": { - "ref/dotnet/System.Reflection.Emit.dll": {} - }, - "runtime": { - "lib/DNXCore50/System.Reflection.Emit.dll": {} - } - }, - "System.Reflection.Emit.ILGeneration/4.0.0": { - "dependencies": { - "System.Reflection": "4.0.0", - "System.Reflection.Primitives": "4.0.0", - "System.Runtime": "4.0.0" - }, - "compile": { - "ref/dotnet/System.Reflection.Emit.ILGeneration.dll": {} - }, - "runtime": { - "lib/DNXCore50/System.Reflection.Emit.ILGeneration.dll": {} - } - }, - "System.Reflection.Extensions/4.0.0": { - "dependencies": { - "System.Reflection": "4.0.0", - "System.Runtime": "4.0.0" - }, - "compile": { - "ref/dotnet/System.Reflection.Extensions.dll": {} - }, - "runtime": { - "lib/DNXCore50/System.Reflection.Extensions.dll": {} - } - }, - "System.Reflection.Metadata/1.0.22": { - "dependencies": { - "System.Collections": "4.0.0", - "System.Collections.Immutable": "1.1.37", - "System.Diagnostics.Debug": "4.0.0", - "System.IO": "4.0.0", - "System.Reflection": "4.0.0", - "System.Reflection.Extensions": "4.0.0", - "System.Reflection.Primitives": "4.0.0", - "System.Resources.ResourceManager": "4.0.0", - "System.Runtime": "4.0.0", - "System.Runtime.Extensions": "4.0.0", - "System.Runtime.InteropServices": "4.0.0", - "System.Text.Encoding": "4.0.0", - "System.Text.Encoding.Extensions": "4.0.0", - "System.Threading": "4.0.0" - }, - "compile": { - "lib/dotnet/System.Reflection.Metadata.dll": {} - }, - "runtime": { - "lib/dotnet/System.Reflection.Metadata.dll": {} - } - }, - "System.Reflection.Primitives/4.0.0": { - "dependencies": { - "System.Runtime": "4.0.0" - }, - "compile": { - "ref/dotnet/System.Reflection.Primitives.dll": {} - }, - "runtime": { - "lib/DNXCore50/System.Reflection.Primitives.dll": {} - } - }, - "System.Reflection.TypeExtensions/4.0.0": { - "dependencies": { - "System.Reflection": "4.0.0", - "System.Runtime": "4.0.0" - }, - "compile": { - "ref/dotnet/System.Reflection.TypeExtensions.dll": {} - }, - "runtime": { - "lib/DNXCore50/System.Reflection.TypeExtensions.dll": {} - } - }, - "System.Resources.ResourceManager/4.0.0": { - "dependencies": { - "System.Globalization": "4.0.0", - "System.Reflection": "4.0.0", - "System.Runtime": "4.0.0" - }, - "compile": { - "ref/dotnet/System.Resources.ResourceManager.dll": {} - }, - "runtime": { - "lib/DNXCore50/System.Resources.ResourceManager.dll": {} - } - }, - "System.Runtime/4.0.20": { - "dependencies": { - "System.Private.Uri": "4.0.0" - }, - "compile": { - "ref/dotnet/System.Runtime.dll": {} - }, - "runtime": { - "lib/DNXCore50/System.Runtime.dll": {} - } - }, - "System.Runtime.Extensions/4.0.10": { - "dependencies": { - "System.Runtime": "4.0.20" - }, - "compile": { - "ref/dotnet/System.Runtime.Extensions.dll": {} - }, - "runtime": { - "lib/DNXCore50/System.Runtime.Extensions.dll": {} - } - }, - "System.Runtime.Handles/4.0.0": { - "dependencies": { - "System.Runtime": "4.0.0" - }, - "compile": { - "ref/dotnet/System.Runtime.Handles.dll": {} - }, - "runtime": { - "lib/DNXCore50/System.Runtime.Handles.dll": {} - } - }, - "System.Runtime.InteropServices/4.0.20": { - "dependencies": { - "System.Reflection": "4.0.0", - "System.Reflection.Primitives": "4.0.0", - "System.Runtime": "4.0.0", - "System.Runtime.Handles": "4.0.0" - }, - "compile": { - "ref/dotnet/System.Runtime.InteropServices.dll": {} - }, - "runtime": { - "lib/DNXCore50/System.Runtime.InteropServices.dll": {} - } - }, - "System.Runtime.Numerics/4.0.0": { - "dependencies": { - "System.Globalization": "4.0.10", - "System.Resources.ResourceManager": "4.0.0", - "System.Runtime": "4.0.20", - "System.Runtime.Extensions": "4.0.10" - }, - "compile": { - "ref/dotnet/System.Runtime.Numerics.dll": {} - }, - "runtime": { - "lib/dotnet/System.Runtime.Numerics.dll": {} - } - }, - "System.Security.Claims/4.0.0": { - "dependencies": { - "System.Collections": "4.0.0", - "System.Diagnostics.Debug": "4.0.0", - "System.Globalization": "4.0.0", - "System.IO": "4.0.0", - "System.Resources.ResourceManager": "4.0.0", - "System.Runtime": "4.0.20", - "System.Runtime.Extensions": "4.0.0", - "System.Security.Principal": "4.0.0" - }, - "compile": { - "ref/dotnet/System.Security.Claims.dll": {} - }, - "runtime": { - "lib/dotnet/System.Security.Claims.dll": {} - } - }, - "System.Security.Principal/4.0.0": { - "dependencies": { - "System.Runtime": "4.0.0" - }, - "compile": { - "ref/dotnet/System.Security.Principal.dll": {} - }, - "runtime": { - "lib/dotnet/System.Security.Principal.dll": {} - } - }, - "System.Text.Encoding/4.0.10": { - "dependencies": { - "System.Runtime": "4.0.0" - }, - "compile": { - "ref/dotnet/System.Text.Encoding.dll": {} - }, - "runtime": { - "lib/DNXCore50/System.Text.Encoding.dll": {} - } - }, - "System.Text.Encoding.Extensions/4.0.10": { - "dependencies": { - "System.Runtime": "4.0.0", - "System.Text.Encoding": "4.0.10" - }, - "compile": { - "ref/dotnet/System.Text.Encoding.Extensions.dll": {} - }, - "runtime": { - "lib/DNXCore50/System.Text.Encoding.Extensions.dll": {} - } - }, - "System.Text.RegularExpressions/4.0.10": { - "dependencies": { - "System.Collections": "4.0.10", - "System.Globalization": "4.0.10", - "System.Resources.ResourceManager": "4.0.0", - "System.Runtime": "4.0.20", - "System.Runtime.Extensions": "4.0.10", - "System.Threading": "4.0.10" - }, - "compile": { - "ref/dotnet/System.Text.RegularExpressions.dll": {} - }, - "runtime": { - "lib/dotnet/System.Text.RegularExpressions.dll": {} - } - }, - "System.Threading/4.0.10": { - "dependencies": { - "System.Runtime": "4.0.0", - "System.Threading.Tasks": "4.0.0" - }, - "compile": { - "ref/dotnet/System.Threading.dll": {} - }, - "runtime": { - "lib/DNXCore50/System.Threading.dll": {} - } - }, - "System.Threading.Overlapped/4.0.0": { - "dependencies": { - "System.Runtime": "4.0.0", - "System.Runtime.Handles": "4.0.0" - }, - "compile": { - "ref/dotnet/System.Threading.Overlapped.dll": {} - }, - "runtime": { - "lib/DNXCore50/System.Threading.Overlapped.dll": {} - } - }, - "System.Threading.Tasks/4.0.10": { - "dependencies": { - "System.Runtime": "4.0.0" - }, - "compile": { - "ref/dotnet/System.Threading.Tasks.dll": {} - }, - "runtime": { - "lib/DNXCore50/System.Threading.Tasks.dll": {} - } - }, - "System.Threading.Tasks.Dataflow/4.5.25": { - "dependencies": { - "System.Collections": "4.0.0", - "System.Collections.Concurrent": "4.0.0", - "System.Diagnostics.Debug": "4.0.0", - "System.Diagnostics.Tracing": "4.0.0", - "System.Dynamic.Runtime": "4.0.0", - "System.Linq": "4.0.0", - "System.Resources.ResourceManager": "4.0.0", - "System.Runtime": "4.0.0", - "System.Runtime.Extensions": "4.0.0", - "System.Threading": "4.0.0", - "System.Threading.Tasks": "4.0.0" - }, - "compile": { - "lib/dotnet/System.Threading.Tasks.Dataflow.dll": {} - }, - "runtime": { - "lib/dotnet/System.Threading.Tasks.Dataflow.dll": {} - } - }, - "System.Threading.Tasks.Parallel/4.0.0": { - "dependencies": { - "System.Collections.Concurrent": "4.0.10", - "System.Diagnostics.Debug": "4.0.10", - "System.Diagnostics.Tracing": "4.0.20", - "System.Resources.ResourceManager": "4.0.0", - "System.Runtime": "4.0.20", - "System.Runtime.Extensions": "4.0.10", - "System.Threading": "4.0.10", - "System.Threading.Tasks": "4.0.10" - }, - "compile": { - "ref/dotnet/System.Threading.Tasks.Parallel.dll": {} - }, - "runtime": { - "lib/dotnet/System.Threading.Tasks.Parallel.dll": {} - } - }, - "System.Threading.Timer/4.0.0": { - "dependencies": { - "System.Runtime": "4.0.0" - }, - "compile": { - "ref/dotnet/System.Threading.Timer.dll": {} - }, - "runtime": { - "lib/DNXCore50/System.Threading.Timer.dll": {} - } - }, - "System.Xml.ReaderWriter/4.0.10": { - "dependencies": { - "System.Collections": "4.0.10", - "System.Diagnostics.Debug": "4.0.10", - "System.Globalization": "4.0.10", - "System.IO": "4.0.10", - "System.IO.FileSystem": "4.0.0", - "System.IO.FileSystem.Primitives": "4.0.0", - "System.Resources.ResourceManager": "4.0.0", - "System.Runtime": "4.0.20", - "System.Runtime.Extensions": "4.0.10", - "System.Runtime.InteropServices": "4.0.20", - "System.Text.Encoding": "4.0.10", - "System.Text.Encoding.Extensions": "4.0.10", - "System.Text.RegularExpressions": "4.0.10", - "System.Threading.Tasks": "4.0.10" - }, - "compile": { - "ref/dotnet/System.Xml.ReaderWriter.dll": {} - }, - "runtime": { - "lib/dotnet/System.Xml.ReaderWriter.dll": {} - } - }, - "System.Xml.XDocument/4.0.10": { - "dependencies": { - "System.Collections": "4.0.10", - "System.Diagnostics.Debug": "4.0.10", - "System.Globalization": "4.0.10", - "System.IO": "4.0.10", - "System.Reflection": "4.0.10", - "System.Resources.ResourceManager": "4.0.0", - "System.Runtime": "4.0.20", - "System.Runtime.Extensions": "4.0.10", - "System.Text.Encoding": "4.0.10", - "System.Threading": "4.0.10", - "System.Xml.ReaderWriter": "4.0.10" - }, - "compile": { - "ref/dotnet/System.Xml.XDocument.dll": {} - }, - "runtime": { - "lib/dotnet/System.Xml.XDocument.dll": {} - } - } - }, - "DNXCore,Version=v5.0/win7-x64": { - "Microsoft.CSharp/4.0.0": { - "dependencies": { - "System.Collections": "4.0.10", - "System.Diagnostics.Debug": "4.0.10", - "System.Dynamic.Runtime": "4.0.0", - "System.Globalization": "4.0.10", - "System.Linq": "4.0.0", - "System.Linq.Expressions": "4.0.0", - "System.ObjectModel": "4.0.10", - "System.Reflection": "4.0.10", - "System.Reflection.Extensions": "4.0.0", - "System.Reflection.Primitives": "4.0.0", - "System.Reflection.TypeExtensions": "4.0.0", - "System.Resources.ResourceManager": "4.0.0", - "System.Runtime": "4.0.20", - "System.Runtime.Extensions": "4.0.10", - "System.Runtime.InteropServices": "4.0.20", - "System.Threading": "4.0.10" - }, - "compile": { - "ref/dotnet/Microsoft.CSharp.dll": {} - }, - "runtime": { - "lib/dotnet/Microsoft.CSharp.dll": {} - } - }, - "Microsoft.NETCore/5.0.0": { - "dependencies": { - "Microsoft.CSharp": "4.0.0", - "Microsoft.NETCore.Targets": "1.0.0", - "Microsoft.VisualBasic": "10.0.0", - "System.AppContext": "4.0.0", - "System.Collections": "4.0.10", - "System.Collections.Concurrent": "4.0.10", - "System.Collections.Immutable": "1.1.37", - "System.ComponentModel": "4.0.0", - "System.ComponentModel.Annotations": "4.0.10", - "System.Diagnostics.Debug": "4.0.10", - "System.Diagnostics.Tools": "4.0.0", - "System.Diagnostics.Tracing": "4.0.20", - "System.Dynamic.Runtime": "4.0.10", - "System.Globalization": "4.0.10", - "System.Globalization.Calendars": "4.0.0", - "System.Globalization.Extensions": "4.0.0", - "System.IO": "4.0.10", - "System.IO.Compression": "4.0.0", - "System.IO.Compression.ZipFile": "4.0.0", - "System.IO.FileSystem": "4.0.0", - "System.IO.FileSystem.Primitives": "4.0.0", - "System.IO.UnmanagedMemoryStream": "4.0.0", - "System.Linq": "4.0.0", - "System.Linq.Expressions": "4.0.10", - "System.Linq.Parallel": "4.0.0", - "System.Linq.Queryable": "4.0.0", - "System.Net.Http": "4.0.0", - "System.Net.NetworkInformation": "4.0.0", - "System.Net.Primitives": "4.0.10", - "System.Numerics.Vectors": "4.1.0", - "System.ObjectModel": "4.0.10", - "System.Reflection": "4.0.10", - "System.Reflection.DispatchProxy": "4.0.0", - "System.Reflection.Extensions": "4.0.0", - "System.Reflection.Metadata": "1.0.22", - "System.Reflection.Primitives": "4.0.0", - "System.Reflection.TypeExtensions": "4.0.0", - "System.Resources.ResourceManager": "4.0.0", - "System.Runtime": "4.0.20", - "System.Runtime.Extensions": "4.0.10", - "System.Runtime.Handles": "4.0.0", - "System.Runtime.InteropServices": "4.0.20", - "System.Runtime.Numerics": "4.0.0", - "System.Security.Claims": "4.0.0", - "System.Security.Principal": "4.0.0", - "System.Text.Encoding": "4.0.10", - "System.Text.Encoding.Extensions": "4.0.10", - "System.Text.RegularExpressions": "4.0.10", - "System.Threading": "4.0.10", - "System.Threading.Tasks": "4.0.10", - "System.Threading.Tasks.Dataflow": "4.5.25", - "System.Threading.Tasks.Parallel": "4.0.0", - "System.Threading.Timer": "4.0.0", - "System.Xml.ReaderWriter": "4.0.10", - "System.Xml.XDocument": "4.0.10" - } - }, - "Microsoft.NETCore.Platforms/1.0.0": {}, - "Microsoft.NETCore.Portable.Compatibility/1.0.0": { - "dependencies": { - "Microsoft.NETCore.Runtime": "1.0.0" - }, - "compile": { - "ref/dotnet/System.ComponentModel.DataAnnotations.dll": {}, - "ref/dotnet/System.Core.dll": {}, - "ref/dotnet/System.Net.dll": {}, - "ref/dotnet/System.Numerics.dll": {}, - "ref/dotnet/System.Runtime.Serialization.dll": {}, - "ref/dotnet/System.ServiceModel.Web.dll": {}, - "ref/dotnet/System.ServiceModel.dll": {}, - "ref/dotnet/System.Windows.dll": {}, - "ref/dotnet/System.Xml.Linq.dll": {}, - "ref/dotnet/System.Xml.Serialization.dll": {}, - "ref/dotnet/System.Xml.dll": {}, - "ref/dotnet/System.dll": {}, - "ref/dotnet/mscorlib.dll": {} - }, - "runtime": { - "lib/dnxcore50/System.ComponentModel.DataAnnotations.dll": {}, - "lib/dnxcore50/System.Core.dll": {}, - "lib/dnxcore50/System.Net.dll": {}, - "lib/dnxcore50/System.Numerics.dll": {}, - "lib/dnxcore50/System.Runtime.Serialization.dll": {}, - "lib/dnxcore50/System.ServiceModel.Web.dll": {}, - "lib/dnxcore50/System.ServiceModel.dll": {}, - "lib/dnxcore50/System.Windows.dll": {}, - "lib/dnxcore50/System.Xml.Linq.dll": {}, - "lib/dnxcore50/System.Xml.Serialization.dll": {}, - "lib/dnxcore50/System.Xml.dll": {}, - "lib/dnxcore50/System.dll": {} - } - }, - "Microsoft.NETCore.Runtime/1.0.0": { - "dependencies": { - "Microsoft.NETCore.Runtime.CoreCLR-x64": "1.0.0", - "Microsoft.NETCore.Windows.ApiSets-x64": "1.0.0" - } - }, - "Microsoft.NETCore.Runtime.CoreCLR-x64/1.0.0": { - "dependencies": { - "System.Collections": "[4.0.10]", - "System.Diagnostics.Contracts": "[4.0.0]", - "System.Diagnostics.Debug": "[4.0.10]", - "System.Diagnostics.StackTrace": "[4.0.0]", - "System.Diagnostics.Tools": "[4.0.0]", - "System.Diagnostics.Tracing": "[4.0.20]", - "System.Globalization": "[4.0.10]", - "System.Globalization.Calendars": "[4.0.0]", - "System.IO": "[4.0.10]", - "System.ObjectModel": "[4.0.10]", - "System.Private.Uri": "[4.0.0]", - "System.Reflection": "[4.0.10]", - "System.Reflection.Extensions": "[4.0.0]", - "System.Reflection.Primitives": "[4.0.0]", - "System.Resources.ResourceManager": "[4.0.0]", - "System.Runtime": "[4.0.20]", - "System.Runtime.Extensions": "[4.0.10]", - "System.Runtime.Handles": "[4.0.0]", - "System.Runtime.InteropServices": "[4.0.20]", - "System.Text.Encoding": "[4.0.10]", - "System.Text.Encoding.Extensions": "[4.0.10]", - "System.Threading": "[4.0.10]", - "System.Threading.Tasks": "[4.0.10]", - "System.Threading.Timer": "[4.0.0]" - }, - "compile": { - "ref/dotnet/_._": {} - }, - "runtime": { - "runtimes/win7-x64/lib/dotnet/mscorlib.ni.dll": {} - }, - "native": { - "runtimes/win7-x64/native/clretwrc.dll": {}, - "runtimes/win7-x64/native/coreclr.dll": {}, - "runtimes/win7-x64/native/dbgshim.dll": {}, - "runtimes/win7-x64/native/mscordaccore.dll": {}, - "runtimes/win7-x64/native/mscordbi.dll": {}, - "runtimes/win7-x64/native/mscorrc.debug.dll": {}, - "runtimes/win7-x64/native/mscorrc.dll": {} - } - }, - "Microsoft.NETCore.Targets/1.0.0": { - "dependencies": { - "Microsoft.NETCore.Platforms": "1.0.0", - "Microsoft.NETCore.Targets.DNXCore": "4.9.0" - } - }, - "Microsoft.NETCore.Targets.DNXCore/4.9.0": {}, - "Microsoft.NETCore.Windows.ApiSets-x64/1.0.0": { - "native": { - "runtimes/win7-x64/native/API-MS-Win-Base-Util-L1-1-0.dll": {}, - "runtimes/win7-x64/native/API-MS-Win-Core-Kernel32-Private-L1-1-0.dll": {}, - "runtimes/win7-x64/native/API-MS-Win-Core-Kernel32-Private-L1-1-1.dll": {}, - "runtimes/win7-x64/native/API-MS-Win-Core-Kernel32-Private-L1-1-2.dll": {}, - "runtimes/win7-x64/native/API-MS-Win-Core-PrivateProfile-L1-1-0.dll": {}, - "runtimes/win7-x64/native/API-MS-Win-Core-ProcessTopology-Obsolete-L1-1-0.dll": {}, - "runtimes/win7-x64/native/API-MS-Win-Core-String-L2-1-0.dll": {}, - "runtimes/win7-x64/native/API-MS-Win-Core-StringAnsi-L1-1-0.dll": {}, - "runtimes/win7-x64/native/API-MS-Win-EventLog-Legacy-L1-1-0.dll": {}, - "runtimes/win7-x64/native/API-MS-Win-Eventing-ClassicProvider-L1-1-0.dll": {}, - "runtimes/win7-x64/native/API-MS-Win-Eventing-Consumer-L1-1-0.dll": {}, - "runtimes/win7-x64/native/API-MS-Win-Eventing-Controller-L1-1-0.dll": {}, - "runtimes/win7-x64/native/API-MS-Win-Eventing-Legacy-L1-1-0.dll": {}, - "runtimes/win7-x64/native/API-MS-Win-Eventing-Provider-L1-1-0.dll": {}, - "runtimes/win7-x64/native/API-MS-Win-Security-LsaPolicy-L1-1-0.dll": {}, - "runtimes/win7-x64/native/API-MS-Win-devices-config-L1-1-0.dll": {}, - "runtimes/win7-x64/native/API-MS-Win-devices-config-L1-1-1.dll": {}, - "runtimes/win7-x64/native/api-ms-win-core-com-l1-1-0.dll": {}, - "runtimes/win7-x64/native/api-ms-win-core-com-private-l1-1-0.dll": {}, - "runtimes/win7-x64/native/api-ms-win-core-comm-l1-1-0.dll": {}, - "runtimes/win7-x64/native/api-ms-win-core-console-l1-1-0.dll": {}, - "runtimes/win7-x64/native/api-ms-win-core-console-l2-1-0.dll": {}, - "runtimes/win7-x64/native/api-ms-win-core-datetime-l1-1-0.dll": {}, - "runtimes/win7-x64/native/api-ms-win-core-datetime-l1-1-1.dll": {}, - "runtimes/win7-x64/native/api-ms-win-core-debug-l1-1-0.dll": {}, - "runtimes/win7-x64/native/api-ms-win-core-debug-l1-1-1.dll": {}, - "runtimes/win7-x64/native/api-ms-win-core-delayload-l1-1-0.dll": {}, - "runtimes/win7-x64/native/api-ms-win-core-errorhandling-l1-1-0.dll": {}, - "runtimes/win7-x64/native/api-ms-win-core-errorhandling-l1-1-1.dll": {}, - "runtimes/win7-x64/native/api-ms-win-core-fibers-l1-1-0.dll": {}, - "runtimes/win7-x64/native/api-ms-win-core-fibers-l1-1-1.dll": {}, - "runtimes/win7-x64/native/api-ms-win-core-file-l1-1-0.dll": {}, - "runtimes/win7-x64/native/api-ms-win-core-file-l1-2-0.dll": {}, - "runtimes/win7-x64/native/api-ms-win-core-file-l1-2-1.dll": {}, - "runtimes/win7-x64/native/api-ms-win-core-file-l2-1-0.dll": {}, - "runtimes/win7-x64/native/api-ms-win-core-file-l2-1-1.dll": {}, - "runtimes/win7-x64/native/api-ms-win-core-handle-l1-1-0.dll": {}, - "runtimes/win7-x64/native/api-ms-win-core-heap-l1-1-0.dll": {}, - "runtimes/win7-x64/native/api-ms-win-core-heap-obsolete-l1-1-0.dll": {}, - "runtimes/win7-x64/native/api-ms-win-core-interlocked-l1-1-0.dll": {}, - "runtimes/win7-x64/native/api-ms-win-core-io-l1-1-0.dll": {}, - "runtimes/win7-x64/native/api-ms-win-core-io-l1-1-1.dll": {}, - "runtimes/win7-x64/native/api-ms-win-core-kernel32-legacy-l1-1-0.dll": {}, - "runtimes/win7-x64/native/api-ms-win-core-kernel32-legacy-l1-1-1.dll": {}, - "runtimes/win7-x64/native/api-ms-win-core-kernel32-legacy-l1-1-2.dll": {}, - "runtimes/win7-x64/native/api-ms-win-core-libraryloader-l1-1-0.dll": {}, - "runtimes/win7-x64/native/api-ms-win-core-libraryloader-l1-1-1.dll": {}, - "runtimes/win7-x64/native/api-ms-win-core-localization-l1-2-0.dll": {}, - "runtimes/win7-x64/native/api-ms-win-core-localization-l1-2-1.dll": {}, - "runtimes/win7-x64/native/api-ms-win-core-localization-l2-1-0.dll": {}, - "runtimes/win7-x64/native/api-ms-win-core-localization-obsolete-l1-2-0.dll": {}, - "runtimes/win7-x64/native/api-ms-win-core-memory-l1-1-0.dll": {}, - "runtimes/win7-x64/native/api-ms-win-core-memory-l1-1-1.dll": {}, - "runtimes/win7-x64/native/api-ms-win-core-memory-l1-1-2.dll": {}, - "runtimes/win7-x64/native/api-ms-win-core-memory-l1-1-3.dll": {}, - "runtimes/win7-x64/native/api-ms-win-core-namedpipe-l1-1-0.dll": {}, - "runtimes/win7-x64/native/api-ms-win-core-namedpipe-l1-2-1.dll": {}, - "runtimes/win7-x64/native/api-ms-win-core-normalization-l1-1-0.dll": {}, - "runtimes/win7-x64/native/api-ms-win-core-privateprofile-l1-1-1.dll": {}, - "runtimes/win7-x64/native/api-ms-win-core-processenvironment-l1-1-0.dll": {}, - "runtimes/win7-x64/native/api-ms-win-core-processenvironment-l1-2-0.dll": {}, - "runtimes/win7-x64/native/api-ms-win-core-processsecurity-l1-1-0.dll": {}, - "runtimes/win7-x64/native/api-ms-win-core-processthreads-l1-1-0.dll": {}, - "runtimes/win7-x64/native/api-ms-win-core-processthreads-l1-1-1.dll": {}, - "runtimes/win7-x64/native/api-ms-win-core-processthreads-l1-1-2.dll": {}, - "runtimes/win7-x64/native/api-ms-win-core-profile-l1-1-0.dll": {}, - "runtimes/win7-x64/native/api-ms-win-core-psapi-ansi-l1-1-0.dll": {}, - "runtimes/win7-x64/native/api-ms-win-core-psapi-l1-1-0.dll": {}, - "runtimes/win7-x64/native/api-ms-win-core-psapi-obsolete-l1-1-0.dll": {}, - "runtimes/win7-x64/native/api-ms-win-core-realtime-l1-1-0.dll": {}, - "runtimes/win7-x64/native/api-ms-win-core-registry-l1-1-0.dll": {}, - "runtimes/win7-x64/native/api-ms-win-core-registry-l2-1-0.dll": {}, - "runtimes/win7-x64/native/api-ms-win-core-rtlsupport-l1-1-0.dll": {}, - "runtimes/win7-x64/native/api-ms-win-core-shlwapi-legacy-l1-1-0.dll": {}, - "runtimes/win7-x64/native/api-ms-win-core-shlwapi-obsolete-l1-1-0.dll": {}, - "runtimes/win7-x64/native/api-ms-win-core-shutdown-l1-1-0.dll": {}, - "runtimes/win7-x64/native/api-ms-win-core-shutdown-l1-1-1.dll": {}, - "runtimes/win7-x64/native/api-ms-win-core-string-l1-1-0.dll": {}, - "runtimes/win7-x64/native/api-ms-win-core-string-obsolete-l1-1-0.dll": {}, - "runtimes/win7-x64/native/api-ms-win-core-string-obsolete-l1-1-1.dll": {}, - "runtimes/win7-x64/native/api-ms-win-core-stringloader-l1-1-0.dll": {}, - "runtimes/win7-x64/native/api-ms-win-core-stringloader-l1-1-1.dll": {}, - "runtimes/win7-x64/native/api-ms-win-core-synch-l1-1-0.dll": {}, - "runtimes/win7-x64/native/api-ms-win-core-synch-l1-2-0.dll": {}, - "runtimes/win7-x64/native/api-ms-win-core-sysinfo-l1-1-0.dll": {}, - "runtimes/win7-x64/native/api-ms-win-core-sysinfo-l1-2-0.dll": {}, - "runtimes/win7-x64/native/api-ms-win-core-sysinfo-l1-2-1.dll": {}, - "runtimes/win7-x64/native/api-ms-win-core-sysinfo-l1-2-2.dll": {}, - "runtimes/win7-x64/native/api-ms-win-core-sysinfo-l1-2-3.dll": {}, - "runtimes/win7-x64/native/api-ms-win-core-threadpool-l1-2-0.dll": {}, - "runtimes/win7-x64/native/api-ms-win-core-threadpool-legacy-l1-1-0.dll": {}, - "runtimes/win7-x64/native/api-ms-win-core-threadpool-private-l1-1-0.dll": {}, - "runtimes/win7-x64/native/api-ms-win-core-timezone-l1-1-0.dll": {}, - "runtimes/win7-x64/native/api-ms-win-core-url-l1-1-0.dll": {}, - "runtimes/win7-x64/native/api-ms-win-core-util-l1-1-0.dll": {}, - "runtimes/win7-x64/native/api-ms-win-core-version-l1-1-0.dll": {}, - "runtimes/win7-x64/native/api-ms-win-core-winrt-error-l1-1-0.dll": {}, - "runtimes/win7-x64/native/api-ms-win-core-winrt-error-l1-1-1.dll": {}, - "runtimes/win7-x64/native/api-ms-win-core-winrt-l1-1-0.dll": {}, - "runtimes/win7-x64/native/api-ms-win-core-winrt-registration-l1-1-0.dll": {}, - "runtimes/win7-x64/native/api-ms-win-core-winrt-robuffer-l1-1-0.dll": {}, - "runtimes/win7-x64/native/api-ms-win-core-winrt-roparameterizediid-l1-1-0.dll": {}, - "runtimes/win7-x64/native/api-ms-win-core-winrt-string-l1-1-0.dll": {}, - "runtimes/win7-x64/native/api-ms-win-core-wow64-l1-1-0.dll": {}, - "runtimes/win7-x64/native/api-ms-win-core-xstate-l1-1-0.dll": {}, - "runtimes/win7-x64/native/api-ms-win-core-xstate-l2-1-0.dll": {}, - "runtimes/win7-x64/native/api-ms-win-ro-typeresolution-l1-1-0.dll": {}, - "runtimes/win7-x64/native/api-ms-win-security-base-l1-1-0.dll": {}, - "runtimes/win7-x64/native/api-ms-win-security-cpwl-l1-1-0.dll": {}, - "runtimes/win7-x64/native/api-ms-win-security-cryptoapi-l1-1-0.dll": {}, - "runtimes/win7-x64/native/api-ms-win-security-lsalookup-l2-1-0.dll": {}, - "runtimes/win7-x64/native/api-ms-win-security-lsalookup-l2-1-1.dll": {}, - "runtimes/win7-x64/native/api-ms-win-security-provider-l1-1-0.dll": {}, - "runtimes/win7-x64/native/api-ms-win-security-sddl-l1-1-0.dll": {}, - "runtimes/win7-x64/native/api-ms-win-service-core-l1-1-0.dll": {}, - "runtimes/win7-x64/native/api-ms-win-service-core-l1-1-1.dll": {}, - "runtimes/win7-x64/native/api-ms-win-service-management-l1-1-0.dll": {}, - "runtimes/win7-x64/native/api-ms-win-service-management-l2-1-0.dll": {}, - "runtimes/win7-x64/native/api-ms-win-service-private-l1-1-0.dll": {}, - "runtimes/win7-x64/native/api-ms-win-service-private-l1-1-1.dll": {}, - "runtimes/win7-x64/native/api-ms-win-service-winsvc-l1-1-0.dll": {}, - "runtimes/win7-x64/native/ext-ms-win-advapi32-encryptedfile-l1-1-0.dll": {} - } - }, - "Microsoft.VisualBasic/10.0.0": { - "dependencies": { - "System.Collections": "4.0.10", - "System.Diagnostics.Debug": "4.0.10", - "System.Dynamic.Runtime": "4.0.10", - "System.Globalization": "4.0.10", - "System.Linq": "4.0.0", - "System.Linq.Expressions": "4.0.10", - "System.ObjectModel": "4.0.10", - "System.Reflection": "4.0.10", - "System.Reflection.Extensions": "4.0.0", - "System.Reflection.Primitives": "4.0.0", - "System.Reflection.TypeExtensions": "4.0.0", - "System.Resources.ResourceManager": "4.0.0", - "System.Runtime": "4.0.20", - "System.Runtime.Extensions": "4.0.10", - "System.Runtime.InteropServices": "4.0.20", - "System.Threading": "4.0.10" - }, - "compile": { - "ref/dotnet/Microsoft.VisualBasic.dll": {} - }, - "runtime": { - "lib/dotnet/Microsoft.VisualBasic.dll": {} - } - }, - "Microsoft.Win32.Primitives/4.0.0": { - "dependencies": { - "System.Runtime": "4.0.20", - "System.Runtime.InteropServices": "4.0.20" - }, - "compile": { - "ref/dotnet/Microsoft.Win32.Primitives.dll": {} - }, - "runtime": { - "lib/dotnet/Microsoft.Win32.Primitives.dll": {} - } - }, - "System.AppContext/4.0.0": { - "dependencies": { - "System.Runtime": "4.0.0" - }, - "compile": { - "ref/dotnet/System.AppContext.dll": {} - }, - "runtime": { - "lib/DNXCore50/System.AppContext.dll": {} - } - }, - "System.Collections/4.0.10": { - "dependencies": { - "System.Runtime": "4.0.20" - }, - "compile": { - "ref/dotnet/System.Collections.dll": {} - }, - "runtime": { - "lib/DNXCore50/System.Collections.dll": {} - } - }, - "System.Collections.Concurrent/4.0.10": { - "dependencies": { - "System.Collections": "4.0.10", - "System.Diagnostics.Debug": "4.0.10", - "System.Diagnostics.Tracing": "4.0.20", - "System.Globalization": "4.0.10", - "System.Resources.ResourceManager": "4.0.0", - "System.Runtime": "4.0.20", - "System.Runtime.Extensions": "4.0.10", - "System.Threading": "4.0.10", - "System.Threading.Tasks": "4.0.10" - }, - "compile": { - "ref/dotnet/System.Collections.Concurrent.dll": {} - }, - "runtime": { - "lib/dotnet/System.Collections.Concurrent.dll": {} - } - }, - "System.Collections.Immutable/1.1.37": { - "dependencies": { - "System.Collections": "4.0.0", - "System.Diagnostics.Debug": "4.0.0", - "System.Globalization": "4.0.0", - "System.Linq": "4.0.0", - "System.Resources.ResourceManager": "4.0.0", - "System.Runtime": "4.0.0", - "System.Runtime.Extensions": "4.0.0", - "System.Threading": "4.0.0" - }, - "compile": { - "lib/dotnet/System.Collections.Immutable.dll": {} - }, - "runtime": { - "lib/dotnet/System.Collections.Immutable.dll": {} - } - }, - "System.Collections.NonGeneric/4.0.0": { - "dependencies": { - "System.Diagnostics.Debug": "4.0.10", - "System.Globalization": "4.0.10", - "System.Resources.ResourceManager": "4.0.0", - "System.Runtime": "4.0.20", - "System.Runtime.Extensions": "4.0.10", - "System.Threading": "4.0.10" - }, - "compile": { - "ref/dotnet/System.Collections.NonGeneric.dll": {} - }, - "runtime": { - "lib/dotnet/System.Collections.NonGeneric.dll": {} - } - }, - "System.ComponentModel/4.0.0": { - "dependencies": { - "System.Runtime": "4.0.20" - }, - "compile": { - "ref/dotnet/System.ComponentModel.dll": {} - }, - "runtime": { - "lib/dotnet/System.ComponentModel.dll": {} - } - }, - "System.ComponentModel.Annotations/4.0.10": { - "dependencies": { - "System.Collections": "4.0.10", - "System.ComponentModel": "4.0.0", - "System.Globalization": "4.0.10", - "System.Linq": "4.0.0", - "System.Reflection": "4.0.10", - "System.Reflection.Extensions": "4.0.0", - "System.Resources.ResourceManager": "4.0.0", - "System.Runtime": "4.0.20", - "System.Runtime.Extensions": "4.0.10", - "System.Text.RegularExpressions": "4.0.10", - "System.Threading": "4.0.10" - }, - "compile": { - "ref/dotnet/System.ComponentModel.Annotations.dll": {} - }, - "runtime": { - "lib/dotnet/System.ComponentModel.Annotations.dll": {} - } - }, - "System.ComponentModel.EventBasedAsync/4.0.10": { - "dependencies": { - "System.Resources.ResourceManager": "4.0.0", - "System.Runtime": "4.0.20", - "System.Threading": "4.0.10", - "System.Threading.Tasks": "4.0.10" - }, - "compile": { - "ref/dotnet/System.ComponentModel.EventBasedAsync.dll": {} - }, - "runtime": { - "lib/dotnet/System.ComponentModel.EventBasedAsync.dll": {} - } - }, - "System.Diagnostics.Contracts/4.0.0": { - "dependencies": { - "System.Runtime": "4.0.0" - }, - "compile": { - "ref/dotnet/System.Diagnostics.Contracts.dll": {} - }, - "runtime": { - "lib/DNXCore50/System.Diagnostics.Contracts.dll": {} - } - }, - "System.Diagnostics.Debug/4.0.10": { - "dependencies": { - "System.Runtime": "4.0.0" - }, - "compile": { - "ref/dotnet/System.Diagnostics.Debug.dll": {} - }, - "runtime": { - "lib/DNXCore50/System.Diagnostics.Debug.dll": {} - } - }, - "System.Diagnostics.StackTrace/4.0.0": { - "dependencies": { - "System.Reflection": "4.0.0", - "System.Runtime": "4.0.0" - }, - "compile": { - "ref/dotnet/System.Diagnostics.StackTrace.dll": {} - }, - "runtime": { - "lib/DNXCore50/System.Diagnostics.StackTrace.dll": {} - } - }, - "System.Diagnostics.Tools/4.0.0": { - "dependencies": { - "System.Runtime": "4.0.0" - }, - "compile": { - "ref/dotnet/System.Diagnostics.Tools.dll": {} - }, - "runtime": { - "lib/DNXCore50/System.Diagnostics.Tools.dll": {} - } - }, - "System.Diagnostics.Tracing/4.0.20": { - "dependencies": { - "System.Runtime": "4.0.0" - }, - "compile": { - "ref/dotnet/System.Diagnostics.Tracing.dll": {} - }, - "runtime": { - "lib/DNXCore50/System.Diagnostics.Tracing.dll": {} - } - }, - "System.Dynamic.Runtime/4.0.10": { - "dependencies": { - "System.Collections": "4.0.0", - "System.Diagnostics.Debug": "4.0.0", - "System.Globalization": "4.0.0", - "System.Linq": "4.0.0", - "System.Linq.Expressions": "4.0.10", - "System.ObjectModel": "4.0.0", - "System.Reflection": "4.0.0", - "System.Reflection.Emit": "4.0.0", - "System.Reflection.Emit.ILGeneration": "4.0.0", - "System.Reflection.Emit.Lightweight": "4.0.0", - "System.Reflection.Primitives": "4.0.0", - "System.Reflection.TypeExtensions": "4.0.0", - "System.Resources.ResourceManager": "4.0.0", - "System.Runtime": "4.0.20", - "System.Runtime.Extensions": "4.0.0", - "System.Threading": "4.0.0" - }, - "compile": { - "ref/dotnet/System.Dynamic.Runtime.dll": {} - }, - "runtime": { - "lib/DNXCore50/System.Dynamic.Runtime.dll": {} - } - }, - "System.Globalization/4.0.10": { - "dependencies": { - "System.Runtime": "4.0.0" - }, - "compile": { - "ref/dotnet/System.Globalization.dll": {} - }, - "runtime": { - "lib/DNXCore50/System.Globalization.dll": {} - } - }, - "System.Globalization.Calendars/4.0.0": { - "dependencies": { - "System.Globalization": "4.0.0", - "System.Runtime": "4.0.0" - }, - "compile": { - "ref/dotnet/System.Globalization.Calendars.dll": {} - }, - "runtime": { - "lib/DNXCore50/System.Globalization.Calendars.dll": {} - } - }, - "System.Globalization.Extensions/4.0.0": { - "dependencies": { - "System.Globalization": "4.0.10", - "System.Resources.ResourceManager": "4.0.0", - "System.Runtime": "4.0.20", - "System.Runtime.Extensions": "4.0.10", - "System.Runtime.InteropServices": "4.0.20" - }, - "compile": { - "ref/dotnet/System.Globalization.Extensions.dll": {} - }, - "runtime": { - "lib/dotnet/System.Globalization.Extensions.dll": {} - } - }, - "System.IO/4.0.10": { - "dependencies": { - "System.Runtime": "4.0.20", - "System.Text.Encoding": "4.0.0", - "System.Threading.Tasks": "4.0.0" - }, - "compile": { - "ref/dotnet/System.IO.dll": {} - }, - "runtime": { - "lib/DNXCore50/System.IO.dll": {} - } - }, - "System.IO.Compression/4.0.0": { - "dependencies": { - "System.Collections": "4.0.0", - "System.IO": "4.0.0", - "System.IO.Compression.clrcompression-x64": "4.0.0", - "System.Resources.ResourceManager": "4.0.0", - "System.Runtime": "4.0.0", - "System.Runtime.Extensions": "4.0.0", - "System.Runtime.InteropServices": "4.0.0", - "System.Text.Encoding": "4.0.0", - "System.Threading": "4.0.0", - "System.Threading.Tasks": "4.0.0" - }, - "compile": { - "ref/dotnet/System.IO.Compression.dll": {} - }, - "runtime": { - "lib/dotnet/System.IO.Compression.dll": {} - } - }, - "System.IO.Compression.clrcompression-x64/4.0.0": { - "native": { - "runtimes/win7-x64/native/clrcompression.dll": {} - } - }, - "System.IO.Compression.ZipFile/4.0.0": { - "dependencies": { - "System.IO": "4.0.10", - "System.IO.Compression": "4.0.0", - "System.IO.FileSystem": "4.0.0", - "System.IO.FileSystem.Primitives": "4.0.0", - "System.Resources.ResourceManager": "4.0.0", - "System.Runtime": "4.0.20", - "System.Runtime.Extensions": "4.0.10", - "System.Text.Encoding": "4.0.10" - }, - "compile": { - "ref/dotnet/System.IO.Compression.ZipFile.dll": {} - }, - "runtime": { - "lib/dotnet/System.IO.Compression.ZipFile.dll": {} - } - }, - "System.IO.FileSystem/4.0.0": { - "dependencies": { - "System.Collections": "4.0.10", - "System.IO": "4.0.10", - "System.IO.FileSystem.Primitives": "4.0.0", - "System.Resources.ResourceManager": "4.0.0", - "System.Runtime": "4.0.20", - "System.Runtime.Extensions": "4.0.10", - "System.Runtime.Handles": "4.0.0", - "System.Runtime.InteropServices": "4.0.20", - "System.Text.Encoding": "4.0.10", - "System.Text.Encoding.Extensions": "4.0.10", - "System.Threading": "4.0.10", - "System.Threading.Overlapped": "4.0.0", - "System.Threading.Tasks": "4.0.10" - }, - "compile": { - "ref/dotnet/System.IO.FileSystem.dll": {} - }, - "runtime": { - "lib/DNXCore50/System.IO.FileSystem.dll": {} - } - }, - "System.IO.FileSystem.Primitives/4.0.0": { - "dependencies": { - "System.Runtime": "4.0.20" - }, - "compile": { - "ref/dotnet/System.IO.FileSystem.Primitives.dll": {} - }, - "runtime": { - "lib/dotnet/System.IO.FileSystem.Primitives.dll": {} - } - }, - "System.IO.UnmanagedMemoryStream/4.0.0": { - "dependencies": { - "System.IO": "4.0.10", - "System.IO.FileSystem.Primitives": "4.0.0", - "System.Resources.ResourceManager": "4.0.0", - "System.Runtime": "4.0.20", - "System.Runtime.InteropServices": "4.0.20", - "System.Threading": "4.0.10", - "System.Threading.Tasks": "4.0.10" - }, - "compile": { - "ref/dotnet/System.IO.UnmanagedMemoryStream.dll": {} - }, - "runtime": { - "lib/dotnet/System.IO.UnmanagedMemoryStream.dll": {} - } - }, - "System.Linq/4.0.0": { - "dependencies": { - "System.Collections": "4.0.10", - "System.Diagnostics.Debug": "4.0.10", - "System.Resources.ResourceManager": "4.0.0", - "System.Runtime": "4.0.20", - "System.Runtime.Extensions": "4.0.10" - }, - "compile": { - "ref/dotnet/System.Linq.dll": {} - }, - "runtime": { - "lib/dotnet/System.Linq.dll": {} - } - }, - "System.Linq.Expressions/4.0.10": { - "dependencies": { - "System.Collections": "4.0.0", - "System.Diagnostics.Debug": "4.0.0", - "System.Globalization": "4.0.0", - "System.IO": "4.0.0", - "System.Linq": "4.0.0", - "System.ObjectModel": "4.0.0", - "System.Reflection": "4.0.0", - "System.Reflection.Emit": "4.0.0", - "System.Reflection.Emit.ILGeneration": "4.0.0", - "System.Reflection.Emit.Lightweight": "4.0.0", - "System.Reflection.Extensions": "4.0.0", - "System.Reflection.Primitives": "4.0.0", - "System.Reflection.TypeExtensions": "4.0.0", - "System.Resources.ResourceManager": "4.0.0", - "System.Runtime": "4.0.20", - "System.Runtime.Extensions": "4.0.0", - "System.Threading": "4.0.0" - }, - "compile": { - "ref/dotnet/System.Linq.Expressions.dll": {} - }, - "runtime": { - "lib/DNXCore50/System.Linq.Expressions.dll": {} - } - }, - "System.Linq.Parallel/4.0.0": { - "dependencies": { - "System.Collections": "4.0.10", - "System.Collections.Concurrent": "4.0.10", - "System.Diagnostics.Debug": "4.0.10", - "System.Diagnostics.Tracing": "4.0.20", - "System.Linq": "4.0.0", - "System.Resources.ResourceManager": "4.0.0", - "System.Runtime": "4.0.20", - "System.Runtime.Extensions": "4.0.10", - "System.Threading": "4.0.10", - "System.Threading.Tasks": "4.0.10" - }, - "compile": { - "ref/dotnet/System.Linq.Parallel.dll": {} - }, - "runtime": { - "lib/dotnet/System.Linq.Parallel.dll": {} - } - }, - "System.Linq.Queryable/4.0.0": { - "dependencies": { - "System.Collections": "4.0.10", - "System.Linq": "4.0.0", - "System.Linq.Expressions": "4.0.10", - "System.Reflection": "4.0.10", - "System.Reflection.Extensions": "4.0.0", - "System.Resources.ResourceManager": "4.0.0", - "System.Runtime": "4.0.20" - }, - "compile": { - "ref/dotnet/System.Linq.Queryable.dll": {} - }, - "runtime": { - "lib/dotnet/System.Linq.Queryable.dll": {} - } - }, - "System.Net.Http/4.0.0": { - "dependencies": { - "Microsoft.Win32.Primitives": "4.0.0", - "System.Collections": "4.0.10", - "System.Diagnostics.Debug": "4.0.10", - "System.Globalization": "4.0.10", - "System.IO": "4.0.10", - "System.IO.Compression": "4.0.0", - "System.Net.Primitives": "4.0.10", - "System.Resources.ResourceManager": "4.0.0", - "System.Runtime": "4.0.20", - "System.Runtime.Extensions": "4.0.10", - "System.Runtime.Handles": "4.0.0", - "System.Runtime.InteropServices": "4.0.20", - "System.Text.Encoding": "4.0.10", - "System.Threading": "4.0.10", - "System.Threading.Tasks": "4.0.10" - }, - "compile": { - "ref/dotnet/System.Net.Http.dll": {} - }, - "runtime": { - "lib/DNXCore50/System.Net.Http.dll": {} - } - }, - "System.Net.NetworkInformation/4.0.10-beta-23123": { - "dependencies": { - "System.Private.Networking": "4.0.0" - }, - "compile": { - "ref/dotnet/System.Net.NetworkInformation.dll": {} - }, - "runtime": { - "lib/DNXCore50/System.Net.NetworkInformation.dll": {} - } - }, - "System.Net.Primitives/4.0.10": { - "dependencies": { - "System.Private.Networking": "4.0.0" - }, - "compile": { - "ref/dotnet/System.Net.Primitives.dll": {} - }, - "runtime": { - "lib/DNXCore50/System.Net.Primitives.dll": {} - } - }, - "System.Numerics.Vectors/4.1.0": { - "dependencies": { - "System.Globalization": "4.0.10", - "System.Resources.ResourceManager": "4.0.0", - "System.Runtime": "4.0.20", - "System.Runtime.Extensions": "4.0.10" - }, - "compile": { - "ref/dotnet/System.Numerics.Vectors.dll": {} - }, - "runtime": { - "lib/dotnet/System.Numerics.Vectors.dll": {} - } - }, - "System.ObjectModel/4.0.10": { - "dependencies": { - "System.Collections": "4.0.10", - "System.Diagnostics.Debug": "4.0.10", - "System.Resources.ResourceManager": "4.0.0", - "System.Runtime": "4.0.20", - "System.Threading": "4.0.10" - }, - "compile": { - "ref/dotnet/System.ObjectModel.dll": {} - }, - "runtime": { - "lib/dotnet/System.ObjectModel.dll": {} - } - }, - "System.Private.Networking/4.0.0": { - "dependencies": { - "Microsoft.Win32.Primitives": "4.0.0", - "System.Collections": "4.0.10", - "System.Collections.Concurrent": "4.0.0", - "System.Collections.NonGeneric": "4.0.0", - "System.ComponentModel.EventBasedAsync": "4.0.10", - "System.Diagnostics.Debug": "4.0.10", - "System.Diagnostics.Tracing": "4.0.20", - "System.Globalization": "4.0.10", - "System.IO": "4.0.10", - "System.IO.FileSystem": "4.0.0", - "System.IO.FileSystem.Primitives": "4.0.0", - "System.Resources.ResourceManager": "4.0.0", - "System.Runtime": "4.0.20", - "System.Runtime.Extensions": "4.0.10", - "System.Runtime.Handles": "4.0.0", - "System.Runtime.InteropServices": "4.0.20", - "System.Threading": "4.0.10", - "System.Threading.Overlapped": "4.0.0", - "System.Threading.Tasks": "4.0.10" - }, - "compile": { - "ref/dnxcore50/_._": {} - }, - "runtime": { - "lib/DNXCore50/System.Private.Networking.dll": {} - } - }, - "System.Private.Uri/4.0.0": { - "compile": { - "ref/dnxcore50/_._": {} - }, - "runtime": { - "lib/DNXCore50/System.Private.Uri.dll": {} - } - }, - "System.Reflection/4.0.10": { - "dependencies": { - "System.IO": "4.0.0", - "System.Reflection.Primitives": "4.0.0", - "System.Runtime": "4.0.20" - }, - "compile": { - "ref/dotnet/System.Reflection.dll": {} - }, - "runtime": { - "lib/DNXCore50/System.Reflection.dll": {} - } - }, - "System.Reflection.DispatchProxy/4.0.0": { - "dependencies": { - "System.Collections": "4.0.10", - "System.Linq": "4.0.0", - "System.Reflection": "4.0.10", - "System.Reflection.Emit": "4.0.0", - "System.Reflection.Emit.ILGeneration": "4.0.0", - "System.Reflection.Extensions": "4.0.0", - "System.Reflection.Primitives": "4.0.0", - "System.Resources.ResourceManager": "4.0.0", - "System.Runtime": "4.0.20", - "System.Threading": "4.0.10" - }, - "compile": { - "ref/dotnet/System.Reflection.DispatchProxy.dll": {} - }, - "runtime": { - "lib/DNXCore50/System.Reflection.DispatchProxy.dll": {} - } - }, - "System.Reflection.Emit/4.0.0": { - "dependencies": { - "System.IO": "4.0.0", - "System.Reflection": "4.0.0", - "System.Reflection.Emit.ILGeneration": "4.0.0", - "System.Reflection.Primitives": "4.0.0", - "System.Runtime": "4.0.0" - }, - "compile": { - "ref/dotnet/System.Reflection.Emit.dll": {} - }, - "runtime": { - "lib/DNXCore50/System.Reflection.Emit.dll": {} - } - }, - "System.Reflection.Emit.ILGeneration/4.0.0": { - "dependencies": { - "System.Reflection": "4.0.0", - "System.Reflection.Primitives": "4.0.0", - "System.Runtime": "4.0.0" - }, - "compile": { - "ref/dotnet/System.Reflection.Emit.ILGeneration.dll": {} - }, - "runtime": { - "lib/DNXCore50/System.Reflection.Emit.ILGeneration.dll": {} - } - }, - "System.Reflection.Emit.Lightweight/4.0.0": { - "dependencies": { - "System.Reflection": "4.0.0", - "System.Reflection.Emit.ILGeneration": "4.0.0", - "System.Reflection.Primitives": "4.0.0", - "System.Runtime": "4.0.0" - }, - "compile": { - "ref/dotnet/System.Reflection.Emit.Lightweight.dll": {} - }, - "runtime": { - "lib/DNXCore50/System.Reflection.Emit.Lightweight.dll": {} - } - }, - "System.Reflection.Extensions/4.0.0": { - "dependencies": { - "System.Reflection": "4.0.0", - "System.Runtime": "4.0.0" - }, - "compile": { - "ref/dotnet/System.Reflection.Extensions.dll": {} - }, - "runtime": { - "lib/DNXCore50/System.Reflection.Extensions.dll": {} - } - }, - "System.Reflection.Metadata/1.0.22": { - "dependencies": { - "System.Collections": "4.0.0", - "System.Collections.Immutable": "1.1.37", - "System.Diagnostics.Debug": "4.0.0", - "System.IO": "4.0.0", - "System.Reflection": "4.0.0", - "System.Reflection.Extensions": "4.0.0", - "System.Reflection.Primitives": "4.0.0", - "System.Resources.ResourceManager": "4.0.0", - "System.Runtime": "4.0.0", - "System.Runtime.Extensions": "4.0.0", - "System.Runtime.InteropServices": "4.0.0", - "System.Text.Encoding": "4.0.0", - "System.Text.Encoding.Extensions": "4.0.0", - "System.Threading": "4.0.0" - }, - "compile": { - "lib/dotnet/System.Reflection.Metadata.dll": {} - }, - "runtime": { - "lib/dotnet/System.Reflection.Metadata.dll": {} - } - }, - "System.Reflection.Primitives/4.0.0": { - "dependencies": { - "System.Runtime": "4.0.0" - }, - "compile": { - "ref/dotnet/System.Reflection.Primitives.dll": {} - }, - "runtime": { - "lib/DNXCore50/System.Reflection.Primitives.dll": {} - } - }, - "System.Reflection.TypeExtensions/4.0.0": { - "dependencies": { - "System.Reflection": "4.0.0", - "System.Runtime": "4.0.0" - }, - "compile": { - "ref/dotnet/System.Reflection.TypeExtensions.dll": {} - }, - "runtime": { - "lib/DNXCore50/System.Reflection.TypeExtensions.dll": {} - } - }, - "System.Resources.ResourceManager/4.0.0": { - "dependencies": { - "System.Globalization": "4.0.0", - "System.Reflection": "4.0.0", - "System.Runtime": "4.0.0" - }, - "compile": { - "ref/dotnet/System.Resources.ResourceManager.dll": {} - }, - "runtime": { - "lib/DNXCore50/System.Resources.ResourceManager.dll": {} - } - }, - "System.Runtime/4.0.20": { - "dependencies": { - "System.Private.Uri": "4.0.0" - }, - "compile": { - "ref/dotnet/System.Runtime.dll": {} - }, - "runtime": { - "lib/DNXCore50/System.Runtime.dll": {} - } - }, - "System.Runtime.Extensions/4.0.10": { - "dependencies": { - "System.Runtime": "4.0.20" - }, - "compile": { - "ref/dotnet/System.Runtime.Extensions.dll": {} - }, - "runtime": { - "lib/DNXCore50/System.Runtime.Extensions.dll": {} - } - }, - "System.Runtime.Handles/4.0.0": { - "dependencies": { - "System.Runtime": "4.0.0" - }, - "compile": { - "ref/dotnet/System.Runtime.Handles.dll": {} - }, - "runtime": { - "lib/DNXCore50/System.Runtime.Handles.dll": {} - } - }, - "System.Runtime.InteropServices/4.0.20": { - "dependencies": { - "System.Reflection": "4.0.0", - "System.Reflection.Primitives": "4.0.0", - "System.Runtime": "4.0.0", - "System.Runtime.Handles": "4.0.0" - }, - "compile": { - "ref/dotnet/System.Runtime.InteropServices.dll": {} - }, - "runtime": { - "lib/DNXCore50/System.Runtime.InteropServices.dll": {} - } - }, - "System.Runtime.Numerics/4.0.0": { - "dependencies": { - "System.Globalization": "4.0.10", - "System.Resources.ResourceManager": "4.0.0", - "System.Runtime": "4.0.20", - "System.Runtime.Extensions": "4.0.10" - }, - "compile": { - "ref/dotnet/System.Runtime.Numerics.dll": {} - }, - "runtime": { - "lib/dotnet/System.Runtime.Numerics.dll": {} - } - }, - "System.Security.Claims/4.0.0": { - "dependencies": { - "System.Collections": "4.0.0", - "System.Diagnostics.Debug": "4.0.0", - "System.Globalization": "4.0.0", - "System.IO": "4.0.0", - "System.Resources.ResourceManager": "4.0.0", - "System.Runtime": "4.0.20", - "System.Runtime.Extensions": "4.0.0", - "System.Security.Principal": "4.0.0" - }, - "compile": { - "ref/dotnet/System.Security.Claims.dll": {} - }, - "runtime": { - "lib/dotnet/System.Security.Claims.dll": {} - } - }, - "System.Security.Principal/4.0.0": { - "dependencies": { - "System.Runtime": "4.0.0" - }, - "compile": { - "ref/dotnet/System.Security.Principal.dll": {} - }, - "runtime": { - "lib/dotnet/System.Security.Principal.dll": {} - } - }, - "System.Text.Encoding/4.0.10": { - "dependencies": { - "System.Runtime": "4.0.0" - }, - "compile": { - "ref/dotnet/System.Text.Encoding.dll": {} - }, - "runtime": { - "lib/DNXCore50/System.Text.Encoding.dll": {} - } - }, - "System.Text.Encoding.Extensions/4.0.10": { - "dependencies": { - "System.Runtime": "4.0.0", - "System.Text.Encoding": "4.0.10" - }, - "compile": { - "ref/dotnet/System.Text.Encoding.Extensions.dll": {} - }, - "runtime": { - "lib/DNXCore50/System.Text.Encoding.Extensions.dll": {} - } - }, - "System.Text.RegularExpressions/4.0.10": { - "dependencies": { - "System.Collections": "4.0.10", - "System.Globalization": "4.0.10", - "System.Resources.ResourceManager": "4.0.0", - "System.Runtime": "4.0.20", - "System.Runtime.Extensions": "4.0.10", - "System.Threading": "4.0.10" - }, - "compile": { - "ref/dotnet/System.Text.RegularExpressions.dll": {} - }, - "runtime": { - "lib/dotnet/System.Text.RegularExpressions.dll": {} - } - }, - "System.Threading/4.0.10": { - "dependencies": { - "System.Runtime": "4.0.0", - "System.Threading.Tasks": "4.0.0" - }, - "compile": { - "ref/dotnet/System.Threading.dll": {} - }, - "runtime": { - "lib/DNXCore50/System.Threading.dll": {} - } - }, - "System.Threading.Overlapped/4.0.0": { - "dependencies": { - "System.Runtime": "4.0.0", - "System.Runtime.Handles": "4.0.0" - }, - "compile": { - "ref/dotnet/System.Threading.Overlapped.dll": {} - }, - "runtime": { - "lib/DNXCore50/System.Threading.Overlapped.dll": {} - } - }, - "System.Threading.Tasks/4.0.10": { - "dependencies": { - "System.Runtime": "4.0.0" - }, - "compile": { - "ref/dotnet/System.Threading.Tasks.dll": {} - }, - "runtime": { - "lib/DNXCore50/System.Threading.Tasks.dll": {} - } - }, - "System.Threading.Tasks.Dataflow/4.5.25": { - "dependencies": { - "System.Collections": "4.0.0", - "System.Collections.Concurrent": "4.0.0", - "System.Diagnostics.Debug": "4.0.0", - "System.Diagnostics.Tracing": "4.0.0", - "System.Dynamic.Runtime": "4.0.0", - "System.Linq": "4.0.0", - "System.Resources.ResourceManager": "4.0.0", - "System.Runtime": "4.0.0", - "System.Runtime.Extensions": "4.0.0", - "System.Threading": "4.0.0", - "System.Threading.Tasks": "4.0.0" - }, - "compile": { - "lib/dotnet/System.Threading.Tasks.Dataflow.dll": {} - }, - "runtime": { - "lib/dotnet/System.Threading.Tasks.Dataflow.dll": {} - } - }, - "System.Threading.Tasks.Parallel/4.0.0": { - "dependencies": { - "System.Collections.Concurrent": "4.0.10", - "System.Diagnostics.Debug": "4.0.10", - "System.Diagnostics.Tracing": "4.0.20", - "System.Resources.ResourceManager": "4.0.0", - "System.Runtime": "4.0.20", - "System.Runtime.Extensions": "4.0.10", - "System.Threading": "4.0.10", - "System.Threading.Tasks": "4.0.10" - }, - "compile": { - "ref/dotnet/System.Threading.Tasks.Parallel.dll": {} - }, - "runtime": { - "lib/dotnet/System.Threading.Tasks.Parallel.dll": {} - } - }, - "System.Threading.Timer/4.0.0": { - "dependencies": { - "System.Runtime": "4.0.0" - }, - "compile": { - "ref/dotnet/System.Threading.Timer.dll": {} - }, - "runtime": { - "lib/DNXCore50/System.Threading.Timer.dll": {} - } - }, - "System.Xml.ReaderWriter/4.0.10": { - "dependencies": { - "System.Collections": "4.0.10", - "System.Diagnostics.Debug": "4.0.10", - "System.Globalization": "4.0.10", - "System.IO": "4.0.10", - "System.IO.FileSystem": "4.0.0", - "System.IO.FileSystem.Primitives": "4.0.0", - "System.Resources.ResourceManager": "4.0.0", - "System.Runtime": "4.0.20", - "System.Runtime.Extensions": "4.0.10", - "System.Runtime.InteropServices": "4.0.20", - "System.Text.Encoding": "4.0.10", - "System.Text.Encoding.Extensions": "4.0.10", - "System.Text.RegularExpressions": "4.0.10", - "System.Threading.Tasks": "4.0.10" - }, - "compile": { - "ref/dotnet/System.Xml.ReaderWriter.dll": {} - }, - "runtime": { - "lib/dotnet/System.Xml.ReaderWriter.dll": {} - } - }, - "System.Xml.XDocument/4.0.10": { - "dependencies": { - "System.Collections": "4.0.10", - "System.Diagnostics.Debug": "4.0.10", - "System.Globalization": "4.0.10", - "System.IO": "4.0.10", - "System.Reflection": "4.0.10", - "System.Resources.ResourceManager": "4.0.0", - "System.Runtime": "4.0.20", - "System.Runtime.Extensions": "4.0.10", - "System.Text.Encoding": "4.0.10", - "System.Threading": "4.0.10", - "System.Xml.ReaderWriter": "4.0.10" - }, - "compile": { - "ref/dotnet/System.Xml.XDocument.dll": {} - }, - "runtime": { - "lib/dotnet/System.Xml.XDocument.dll": {} - } - } - }, - "DNXCore,Version=v5.0/win7-x86": { - "Microsoft.CSharp/4.0.0": { - "dependencies": { - "System.Collections": "4.0.10", - "System.Diagnostics.Debug": "4.0.10", - "System.Dynamic.Runtime": "4.0.0", - "System.Globalization": "4.0.10", - "System.Linq": "4.0.0", - "System.Linq.Expressions": "4.0.0", - "System.ObjectModel": "4.0.10", - "System.Reflection": "4.0.10", - "System.Reflection.Extensions": "4.0.0", - "System.Reflection.Primitives": "4.0.0", - "System.Reflection.TypeExtensions": "4.0.0", - "System.Resources.ResourceManager": "4.0.0", - "System.Runtime": "4.0.20", - "System.Runtime.Extensions": "4.0.10", - "System.Runtime.InteropServices": "4.0.20", - "System.Threading": "4.0.10" - }, - "compile": { - "ref/dotnet/Microsoft.CSharp.dll": {} - }, - "runtime": { - "lib/dotnet/Microsoft.CSharp.dll": {} - } - }, - "Microsoft.NETCore/5.0.0": { - "dependencies": { - "Microsoft.CSharp": "4.0.0", - "Microsoft.NETCore.Targets": "1.0.0", - "Microsoft.VisualBasic": "10.0.0", - "System.AppContext": "4.0.0", - "System.Collections": "4.0.10", - "System.Collections.Concurrent": "4.0.10", - "System.Collections.Immutable": "1.1.37", - "System.ComponentModel": "4.0.0", - "System.ComponentModel.Annotations": "4.0.10", - "System.Diagnostics.Debug": "4.0.10", - "System.Diagnostics.Tools": "4.0.0", - "System.Diagnostics.Tracing": "4.0.20", - "System.Dynamic.Runtime": "4.0.10", - "System.Globalization": "4.0.10", - "System.Globalization.Calendars": "4.0.0", - "System.Globalization.Extensions": "4.0.0", - "System.IO": "4.0.10", - "System.IO.Compression": "4.0.0", - "System.IO.Compression.ZipFile": "4.0.0", - "System.IO.FileSystem": "4.0.0", - "System.IO.FileSystem.Primitives": "4.0.0", - "System.IO.UnmanagedMemoryStream": "4.0.0", - "System.Linq": "4.0.0", - "System.Linq.Expressions": "4.0.10", - "System.Linq.Parallel": "4.0.0", - "System.Linq.Queryable": "4.0.0", - "System.Net.Http": "4.0.0", - "System.Net.NetworkInformation": "4.0.0", - "System.Net.Primitives": "4.0.10", - "System.Numerics.Vectors": "4.1.0", - "System.ObjectModel": "4.0.10", - "System.Reflection": "4.0.10", - "System.Reflection.DispatchProxy": "4.0.0", - "System.Reflection.Extensions": "4.0.0", - "System.Reflection.Metadata": "1.0.22", - "System.Reflection.Primitives": "4.0.0", - "System.Reflection.TypeExtensions": "4.0.0", - "System.Resources.ResourceManager": "4.0.0", - "System.Runtime": "4.0.20", - "System.Runtime.Extensions": "4.0.10", - "System.Runtime.Handles": "4.0.0", - "System.Runtime.InteropServices": "4.0.20", - "System.Runtime.Numerics": "4.0.0", - "System.Security.Claims": "4.0.0", - "System.Security.Principal": "4.0.0", - "System.Text.Encoding": "4.0.10", - "System.Text.Encoding.Extensions": "4.0.10", - "System.Text.RegularExpressions": "4.0.10", - "System.Threading": "4.0.10", - "System.Threading.Tasks": "4.0.10", - "System.Threading.Tasks.Dataflow": "4.5.25", - "System.Threading.Tasks.Parallel": "4.0.0", - "System.Threading.Timer": "4.0.0", - "System.Xml.ReaderWriter": "4.0.10", - "System.Xml.XDocument": "4.0.10" - } - }, - "Microsoft.NETCore.Platforms/1.0.0": {}, - "Microsoft.NETCore.Portable.Compatibility/1.0.0": { - "dependencies": { - "Microsoft.NETCore.Runtime": "1.0.0" - }, - "compile": { - "ref/dotnet/System.ComponentModel.DataAnnotations.dll": {}, - "ref/dotnet/System.Core.dll": {}, - "ref/dotnet/System.Net.dll": {}, - "ref/dotnet/System.Numerics.dll": {}, - "ref/dotnet/System.Runtime.Serialization.dll": {}, - "ref/dotnet/System.ServiceModel.Web.dll": {}, - "ref/dotnet/System.ServiceModel.dll": {}, - "ref/dotnet/System.Windows.dll": {}, - "ref/dotnet/System.Xml.Linq.dll": {}, - "ref/dotnet/System.Xml.Serialization.dll": {}, - "ref/dotnet/System.Xml.dll": {}, - "ref/dotnet/System.dll": {}, - "ref/dotnet/mscorlib.dll": {} - }, - "runtime": { - "lib/dnxcore50/System.ComponentModel.DataAnnotations.dll": {}, - "lib/dnxcore50/System.Core.dll": {}, - "lib/dnxcore50/System.Net.dll": {}, - "lib/dnxcore50/System.Numerics.dll": {}, - "lib/dnxcore50/System.Runtime.Serialization.dll": {}, - "lib/dnxcore50/System.ServiceModel.Web.dll": {}, - "lib/dnxcore50/System.ServiceModel.dll": {}, - "lib/dnxcore50/System.Windows.dll": {}, - "lib/dnxcore50/System.Xml.Linq.dll": {}, - "lib/dnxcore50/System.Xml.Serialization.dll": {}, - "lib/dnxcore50/System.Xml.dll": {}, - "lib/dnxcore50/System.dll": {} - } - }, - "Microsoft.NETCore.Runtime/1.0.0": { - "dependencies": { - "Microsoft.NETCore.Runtime.CoreCLR-x86": "1.0.0", - "Microsoft.NETCore.Windows.ApiSets-x86": "1.0.0" - } - }, - "Microsoft.NETCore.Runtime.CoreCLR-x86/1.0.0": { - "dependencies": { - "System.Collections": "[4.0.10]", - "System.Diagnostics.Contracts": "[4.0.0]", - "System.Diagnostics.Debug": "[4.0.10]", - "System.Diagnostics.StackTrace": "[4.0.0]", - "System.Diagnostics.Tools": "[4.0.0]", - "System.Diagnostics.Tracing": "[4.0.20]", - "System.Globalization": "[4.0.10]", - "System.Globalization.Calendars": "[4.0.0]", - "System.IO": "[4.0.10]", - "System.ObjectModel": "[4.0.10]", - "System.Private.Uri": "[4.0.0]", - "System.Reflection": "[4.0.10]", - "System.Reflection.Extensions": "[4.0.0]", - "System.Reflection.Primitives": "[4.0.0]", - "System.Resources.ResourceManager": "[4.0.0]", - "System.Runtime": "[4.0.20]", - "System.Runtime.Extensions": "[4.0.10]", - "System.Runtime.Handles": "[4.0.0]", - "System.Runtime.InteropServices": "[4.0.20]", - "System.Text.Encoding": "[4.0.10]", - "System.Text.Encoding.Extensions": "[4.0.10]", - "System.Threading": "[4.0.10]", - "System.Threading.Tasks": "[4.0.10]", - "System.Threading.Timer": "[4.0.0]" - }, - "compile": { - "ref/dotnet/_._": {} - }, - "runtime": { - "runtimes/win7-x86/lib/dotnet/mscorlib.ni.dll": {} - }, - "native": { - "runtimes/win7-x86/native/clretwrc.dll": {}, - "runtimes/win7-x86/native/coreclr.dll": {}, - "runtimes/win7-x86/native/dbgshim.dll": {}, - "runtimes/win7-x86/native/mscordaccore.dll": {}, - "runtimes/win7-x86/native/mscordbi.dll": {}, - "runtimes/win7-x86/native/mscorrc.debug.dll": {}, - "runtimes/win7-x86/native/mscorrc.dll": {} - } - }, - "Microsoft.NETCore.Targets/1.0.0": { - "dependencies": { - "Microsoft.NETCore.Platforms": "1.0.0", - "Microsoft.NETCore.Targets.DNXCore": "4.9.0" - } - }, - "Microsoft.NETCore.Targets.DNXCore/4.9.0": {}, - "Microsoft.NETCore.Windows.ApiSets-x86/1.0.0": { - "native": { - "runtimes/win7-x86/native/API-MS-Win-Base-Util-L1-1-0.dll": {}, - "runtimes/win7-x86/native/API-MS-Win-Core-Kernel32-Private-L1-1-0.dll": {}, - "runtimes/win7-x86/native/API-MS-Win-Core-Kernel32-Private-L1-1-1.dll": {}, - "runtimes/win7-x86/native/API-MS-Win-Core-Kernel32-Private-L1-1-2.dll": {}, - "runtimes/win7-x86/native/API-MS-Win-Core-PrivateProfile-L1-1-0.dll": {}, - "runtimes/win7-x86/native/API-MS-Win-Core-ProcessTopology-Obsolete-L1-1-0.dll": {}, - "runtimes/win7-x86/native/API-MS-Win-Core-String-L2-1-0.dll": {}, - "runtimes/win7-x86/native/API-MS-Win-Core-StringAnsi-L1-1-0.dll": {}, - "runtimes/win7-x86/native/API-MS-Win-EventLog-Legacy-L1-1-0.dll": {}, - "runtimes/win7-x86/native/API-MS-Win-Eventing-ClassicProvider-L1-1-0.dll": {}, - "runtimes/win7-x86/native/API-MS-Win-Eventing-Consumer-L1-1-0.dll": {}, - "runtimes/win7-x86/native/API-MS-Win-Eventing-Controller-L1-1-0.dll": {}, - "runtimes/win7-x86/native/API-MS-Win-Eventing-Legacy-L1-1-0.dll": {}, - "runtimes/win7-x86/native/API-MS-Win-Eventing-Provider-L1-1-0.dll": {}, - "runtimes/win7-x86/native/API-MS-Win-Security-LsaPolicy-L1-1-0.dll": {}, - "runtimes/win7-x86/native/API-MS-Win-devices-config-L1-1-0.dll": {}, - "runtimes/win7-x86/native/API-MS-Win-devices-config-L1-1-1.dll": {}, - "runtimes/win7-x86/native/api-ms-win-core-com-l1-1-0.dll": {}, - "runtimes/win7-x86/native/api-ms-win-core-com-private-l1-1-0.dll": {}, - "runtimes/win7-x86/native/api-ms-win-core-comm-l1-1-0.dll": {}, - "runtimes/win7-x86/native/api-ms-win-core-console-l1-1-0.dll": {}, - "runtimes/win7-x86/native/api-ms-win-core-console-l2-1-0.dll": {}, - "runtimes/win7-x86/native/api-ms-win-core-datetime-l1-1-0.dll": {}, - "runtimes/win7-x86/native/api-ms-win-core-datetime-l1-1-1.dll": {}, - "runtimes/win7-x86/native/api-ms-win-core-debug-l1-1-0.dll": {}, - "runtimes/win7-x86/native/api-ms-win-core-debug-l1-1-1.dll": {}, - "runtimes/win7-x86/native/api-ms-win-core-delayload-l1-1-0.dll": {}, - "runtimes/win7-x86/native/api-ms-win-core-errorhandling-l1-1-0.dll": {}, - "runtimes/win7-x86/native/api-ms-win-core-errorhandling-l1-1-1.dll": {}, - "runtimes/win7-x86/native/api-ms-win-core-fibers-l1-1-0.dll": {}, - "runtimes/win7-x86/native/api-ms-win-core-fibers-l1-1-1.dll": {}, - "runtimes/win7-x86/native/api-ms-win-core-file-l1-1-0.dll": {}, - "runtimes/win7-x86/native/api-ms-win-core-file-l1-2-0.dll": {}, - "runtimes/win7-x86/native/api-ms-win-core-file-l1-2-1.dll": {}, - "runtimes/win7-x86/native/api-ms-win-core-file-l2-1-0.dll": {}, - "runtimes/win7-x86/native/api-ms-win-core-file-l2-1-1.dll": {}, - "runtimes/win7-x86/native/api-ms-win-core-handle-l1-1-0.dll": {}, - "runtimes/win7-x86/native/api-ms-win-core-heap-l1-1-0.dll": {}, - "runtimes/win7-x86/native/api-ms-win-core-heap-obsolete-l1-1-0.dll": {}, - "runtimes/win7-x86/native/api-ms-win-core-interlocked-l1-1-0.dll": {}, - "runtimes/win7-x86/native/api-ms-win-core-io-l1-1-0.dll": {}, - "runtimes/win7-x86/native/api-ms-win-core-io-l1-1-1.dll": {}, - "runtimes/win7-x86/native/api-ms-win-core-kernel32-legacy-l1-1-0.dll": {}, - "runtimes/win7-x86/native/api-ms-win-core-kernel32-legacy-l1-1-1.dll": {}, - "runtimes/win7-x86/native/api-ms-win-core-kernel32-legacy-l1-1-2.dll": {}, - "runtimes/win7-x86/native/api-ms-win-core-libraryloader-l1-1-0.dll": {}, - "runtimes/win7-x86/native/api-ms-win-core-libraryloader-l1-1-1.dll": {}, - "runtimes/win7-x86/native/api-ms-win-core-localization-l1-2-0.dll": {}, - "runtimes/win7-x86/native/api-ms-win-core-localization-l1-2-1.dll": {}, - "runtimes/win7-x86/native/api-ms-win-core-localization-l2-1-0.dll": {}, - "runtimes/win7-x86/native/api-ms-win-core-localization-obsolete-l1-2-0.dll": {}, - "runtimes/win7-x86/native/api-ms-win-core-memory-l1-1-0.dll": {}, - "runtimes/win7-x86/native/api-ms-win-core-memory-l1-1-1.dll": {}, - "runtimes/win7-x86/native/api-ms-win-core-memory-l1-1-2.dll": {}, - "runtimes/win7-x86/native/api-ms-win-core-memory-l1-1-3.dll": {}, - "runtimes/win7-x86/native/api-ms-win-core-namedpipe-l1-1-0.dll": {}, - "runtimes/win7-x86/native/api-ms-win-core-namedpipe-l1-2-1.dll": {}, - "runtimes/win7-x86/native/api-ms-win-core-normalization-l1-1-0.dll": {}, - "runtimes/win7-x86/native/api-ms-win-core-privateprofile-l1-1-1.dll": {}, - "runtimes/win7-x86/native/api-ms-win-core-processenvironment-l1-1-0.dll": {}, - "runtimes/win7-x86/native/api-ms-win-core-processenvironment-l1-2-0.dll": {}, - "runtimes/win7-x86/native/api-ms-win-core-processsecurity-l1-1-0.dll": {}, - "runtimes/win7-x86/native/api-ms-win-core-processthreads-l1-1-0.dll": {}, - "runtimes/win7-x86/native/api-ms-win-core-processthreads-l1-1-1.dll": {}, - "runtimes/win7-x86/native/api-ms-win-core-processthreads-l1-1-2.dll": {}, - "runtimes/win7-x86/native/api-ms-win-core-profile-l1-1-0.dll": {}, - "runtimes/win7-x86/native/api-ms-win-core-psapi-ansi-l1-1-0.dll": {}, - "runtimes/win7-x86/native/api-ms-win-core-psapi-l1-1-0.dll": {}, - "runtimes/win7-x86/native/api-ms-win-core-psapi-obsolete-l1-1-0.dll": {}, - "runtimes/win7-x86/native/api-ms-win-core-realtime-l1-1-0.dll": {}, - "runtimes/win7-x86/native/api-ms-win-core-registry-l1-1-0.dll": {}, - "runtimes/win7-x86/native/api-ms-win-core-registry-l2-1-0.dll": {}, - "runtimes/win7-x86/native/api-ms-win-core-rtlsupport-l1-1-0.dll": {}, - "runtimes/win7-x86/native/api-ms-win-core-shlwapi-legacy-l1-1-0.dll": {}, - "runtimes/win7-x86/native/api-ms-win-core-shlwapi-obsolete-l1-1-0.dll": {}, - "runtimes/win7-x86/native/api-ms-win-core-shutdown-l1-1-0.dll": {}, - "runtimes/win7-x86/native/api-ms-win-core-shutdown-l1-1-1.dll": {}, - "runtimes/win7-x86/native/api-ms-win-core-string-l1-1-0.dll": {}, - "runtimes/win7-x86/native/api-ms-win-core-string-obsolete-l1-1-0.dll": {}, - "runtimes/win7-x86/native/api-ms-win-core-string-obsolete-l1-1-1.dll": {}, - "runtimes/win7-x86/native/api-ms-win-core-stringloader-l1-1-0.dll": {}, - "runtimes/win7-x86/native/api-ms-win-core-stringloader-l1-1-1.dll": {}, - "runtimes/win7-x86/native/api-ms-win-core-synch-l1-1-0.dll": {}, - "runtimes/win7-x86/native/api-ms-win-core-synch-l1-2-0.dll": {}, - "runtimes/win7-x86/native/api-ms-win-core-sysinfo-l1-1-0.dll": {}, - "runtimes/win7-x86/native/api-ms-win-core-sysinfo-l1-2-0.dll": {}, - "runtimes/win7-x86/native/api-ms-win-core-sysinfo-l1-2-1.dll": {}, - "runtimes/win7-x86/native/api-ms-win-core-sysinfo-l1-2-2.dll": {}, - "runtimes/win7-x86/native/api-ms-win-core-sysinfo-l1-2-3.dll": {}, - "runtimes/win7-x86/native/api-ms-win-core-threadpool-l1-2-0.dll": {}, - "runtimes/win7-x86/native/api-ms-win-core-threadpool-legacy-l1-1-0.dll": {}, - "runtimes/win7-x86/native/api-ms-win-core-threadpool-private-l1-1-0.dll": {}, - "runtimes/win7-x86/native/api-ms-win-core-timezone-l1-1-0.dll": {}, - "runtimes/win7-x86/native/api-ms-win-core-url-l1-1-0.dll": {}, - "runtimes/win7-x86/native/api-ms-win-core-util-l1-1-0.dll": {}, - "runtimes/win7-x86/native/api-ms-win-core-version-l1-1-0.dll": {}, - "runtimes/win7-x86/native/api-ms-win-core-winrt-error-l1-1-0.dll": {}, - "runtimes/win7-x86/native/api-ms-win-core-winrt-error-l1-1-1.dll": {}, - "runtimes/win7-x86/native/api-ms-win-core-winrt-l1-1-0.dll": {}, - "runtimes/win7-x86/native/api-ms-win-core-winrt-registration-l1-1-0.dll": {}, - "runtimes/win7-x86/native/api-ms-win-core-winrt-robuffer-l1-1-0.dll": {}, - "runtimes/win7-x86/native/api-ms-win-core-winrt-roparameterizediid-l1-1-0.dll": {}, - "runtimes/win7-x86/native/api-ms-win-core-winrt-string-l1-1-0.dll": {}, - "runtimes/win7-x86/native/api-ms-win-core-wow64-l1-1-0.dll": {}, - "runtimes/win7-x86/native/api-ms-win-core-xstate-l1-1-0.dll": {}, - "runtimes/win7-x86/native/api-ms-win-core-xstate-l2-1-0.dll": {}, - "runtimes/win7-x86/native/api-ms-win-ro-typeresolution-l1-1-0.dll": {}, - "runtimes/win7-x86/native/api-ms-win-security-base-l1-1-0.dll": {}, - "runtimes/win7-x86/native/api-ms-win-security-cpwl-l1-1-0.dll": {}, - "runtimes/win7-x86/native/api-ms-win-security-cryptoapi-l1-1-0.dll": {}, - "runtimes/win7-x86/native/api-ms-win-security-lsalookup-l2-1-0.dll": {}, - "runtimes/win7-x86/native/api-ms-win-security-lsalookup-l2-1-1.dll": {}, - "runtimes/win7-x86/native/api-ms-win-security-provider-l1-1-0.dll": {}, - "runtimes/win7-x86/native/api-ms-win-security-sddl-l1-1-0.dll": {}, - "runtimes/win7-x86/native/api-ms-win-service-core-l1-1-0.dll": {}, - "runtimes/win7-x86/native/api-ms-win-service-core-l1-1-1.dll": {}, - "runtimes/win7-x86/native/api-ms-win-service-management-l1-1-0.dll": {}, - "runtimes/win7-x86/native/api-ms-win-service-management-l2-1-0.dll": {}, - "runtimes/win7-x86/native/api-ms-win-service-private-l1-1-0.dll": {}, - "runtimes/win7-x86/native/api-ms-win-service-private-l1-1-1.dll": {}, - "runtimes/win7-x86/native/api-ms-win-service-winsvc-l1-1-0.dll": {}, - "runtimes/win7-x86/native/ext-ms-win-advapi32-encryptedfile-l1-1-0.dll": {} - } - }, - "Microsoft.VisualBasic/10.0.0": { - "dependencies": { - "System.Collections": "4.0.10", - "System.Diagnostics.Debug": "4.0.10", - "System.Dynamic.Runtime": "4.0.10", - "System.Globalization": "4.0.10", - "System.Linq": "4.0.0", - "System.Linq.Expressions": "4.0.10", - "System.ObjectModel": "4.0.10", - "System.Reflection": "4.0.10", - "System.Reflection.Extensions": "4.0.0", - "System.Reflection.Primitives": "4.0.0", - "System.Reflection.TypeExtensions": "4.0.0", - "System.Resources.ResourceManager": "4.0.0", - "System.Runtime": "4.0.20", - "System.Runtime.Extensions": "4.0.10", - "System.Runtime.InteropServices": "4.0.20", - "System.Threading": "4.0.10" - }, - "compile": { - "ref/dotnet/Microsoft.VisualBasic.dll": {} - }, - "runtime": { - "lib/dotnet/Microsoft.VisualBasic.dll": {} - } - }, - "Microsoft.Win32.Primitives/4.0.0": { - "dependencies": { - "System.Runtime": "4.0.20", - "System.Runtime.InteropServices": "4.0.20" - }, - "compile": { - "ref/dotnet/Microsoft.Win32.Primitives.dll": {} - }, - "runtime": { - "lib/dotnet/Microsoft.Win32.Primitives.dll": {} - } - }, - "System.AppContext/4.0.0": { - "dependencies": { - "System.Runtime": "4.0.0" - }, - "compile": { - "ref/dotnet/System.AppContext.dll": {} - }, - "runtime": { - "lib/DNXCore50/System.AppContext.dll": {} - } - }, - "System.Collections/4.0.10": { - "dependencies": { - "System.Runtime": "4.0.20" - }, - "compile": { - "ref/dotnet/System.Collections.dll": {} - }, - "runtime": { - "lib/DNXCore50/System.Collections.dll": {} - } - }, - "System.Collections.Concurrent/4.0.10": { - "dependencies": { - "System.Collections": "4.0.10", - "System.Diagnostics.Debug": "4.0.10", - "System.Diagnostics.Tracing": "4.0.20", - "System.Globalization": "4.0.10", - "System.Resources.ResourceManager": "4.0.0", - "System.Runtime": "4.0.20", - "System.Runtime.Extensions": "4.0.10", - "System.Threading": "4.0.10", - "System.Threading.Tasks": "4.0.10" - }, - "compile": { - "ref/dotnet/System.Collections.Concurrent.dll": {} - }, - "runtime": { - "lib/dotnet/System.Collections.Concurrent.dll": {} - } - }, - "System.Collections.Immutable/1.1.37": { - "dependencies": { - "System.Collections": "4.0.0", - "System.Diagnostics.Debug": "4.0.0", - "System.Globalization": "4.0.0", - "System.Linq": "4.0.0", - "System.Resources.ResourceManager": "4.0.0", - "System.Runtime": "4.0.0", - "System.Runtime.Extensions": "4.0.0", - "System.Threading": "4.0.0" - }, - "compile": { - "lib/dotnet/System.Collections.Immutable.dll": {} - }, - "runtime": { - "lib/dotnet/System.Collections.Immutable.dll": {} - } - }, - "System.Collections.NonGeneric/4.0.0": { - "dependencies": { - "System.Diagnostics.Debug": "4.0.10", - "System.Globalization": "4.0.10", - "System.Resources.ResourceManager": "4.0.0", - "System.Runtime": "4.0.20", - "System.Runtime.Extensions": "4.0.10", - "System.Threading": "4.0.10" - }, - "compile": { - "ref/dotnet/System.Collections.NonGeneric.dll": {} - }, - "runtime": { - "lib/dotnet/System.Collections.NonGeneric.dll": {} - } - }, - "System.ComponentModel/4.0.0": { - "dependencies": { - "System.Runtime": "4.0.20" - }, - "compile": { - "ref/dotnet/System.ComponentModel.dll": {} - }, - "runtime": { - "lib/dotnet/System.ComponentModel.dll": {} - } - }, - "System.ComponentModel.Annotations/4.0.10": { - "dependencies": { - "System.Collections": "4.0.10", - "System.ComponentModel": "4.0.0", - "System.Globalization": "4.0.10", - "System.Linq": "4.0.0", - "System.Reflection": "4.0.10", - "System.Reflection.Extensions": "4.0.0", - "System.Resources.ResourceManager": "4.0.0", - "System.Runtime": "4.0.20", - "System.Runtime.Extensions": "4.0.10", - "System.Text.RegularExpressions": "4.0.10", - "System.Threading": "4.0.10" - }, - "compile": { - "ref/dotnet/System.ComponentModel.Annotations.dll": {} - }, - "runtime": { - "lib/dotnet/System.ComponentModel.Annotations.dll": {} - } - }, - "System.ComponentModel.EventBasedAsync/4.0.10": { - "dependencies": { - "System.Resources.ResourceManager": "4.0.0", - "System.Runtime": "4.0.20", - "System.Threading": "4.0.10", - "System.Threading.Tasks": "4.0.10" - }, - "compile": { - "ref/dotnet/System.ComponentModel.EventBasedAsync.dll": {} - }, - "runtime": { - "lib/dotnet/System.ComponentModel.EventBasedAsync.dll": {} - } - }, - "System.Diagnostics.Contracts/4.0.0": { - "dependencies": { - "System.Runtime": "4.0.0" - }, - "compile": { - "ref/dotnet/System.Diagnostics.Contracts.dll": {} - }, - "runtime": { - "lib/DNXCore50/System.Diagnostics.Contracts.dll": {} - } - }, - "System.Diagnostics.Debug/4.0.10": { - "dependencies": { - "System.Runtime": "4.0.0" - }, - "compile": { - "ref/dotnet/System.Diagnostics.Debug.dll": {} - }, - "runtime": { - "lib/DNXCore50/System.Diagnostics.Debug.dll": {} - } - }, - "System.Diagnostics.StackTrace/4.0.0": { - "dependencies": { - "System.Reflection": "4.0.0", - "System.Runtime": "4.0.0" - }, - "compile": { - "ref/dotnet/System.Diagnostics.StackTrace.dll": {} - }, - "runtime": { - "lib/DNXCore50/System.Diagnostics.StackTrace.dll": {} - } - }, - "System.Diagnostics.Tools/4.0.0": { - "dependencies": { - "System.Runtime": "4.0.0" - }, - "compile": { - "ref/dotnet/System.Diagnostics.Tools.dll": {} - }, - "runtime": { - "lib/DNXCore50/System.Diagnostics.Tools.dll": {} - } - }, - "System.Diagnostics.Tracing/4.0.20": { - "dependencies": { - "System.Runtime": "4.0.0" - }, - "compile": { - "ref/dotnet/System.Diagnostics.Tracing.dll": {} - }, - "runtime": { - "lib/DNXCore50/System.Diagnostics.Tracing.dll": {} - } - }, - "System.Dynamic.Runtime/4.0.10": { - "dependencies": { - "System.Collections": "4.0.0", - "System.Diagnostics.Debug": "4.0.0", - "System.Globalization": "4.0.0", - "System.Linq": "4.0.0", - "System.Linq.Expressions": "4.0.10", - "System.ObjectModel": "4.0.0", - "System.Reflection": "4.0.0", - "System.Reflection.Emit": "4.0.0", - "System.Reflection.Emit.ILGeneration": "4.0.0", - "System.Reflection.Emit.Lightweight": "4.0.0", - "System.Reflection.Primitives": "4.0.0", - "System.Reflection.TypeExtensions": "4.0.0", - "System.Resources.ResourceManager": "4.0.0", - "System.Runtime": "4.0.20", - "System.Runtime.Extensions": "4.0.0", - "System.Threading": "4.0.0" - }, - "compile": { - "ref/dotnet/System.Dynamic.Runtime.dll": {} - }, - "runtime": { - "lib/DNXCore50/System.Dynamic.Runtime.dll": {} - } - }, - "System.Globalization/4.0.10": { - "dependencies": { - "System.Runtime": "4.0.0" - }, - "compile": { - "ref/dotnet/System.Globalization.dll": {} - }, - "runtime": { - "lib/DNXCore50/System.Globalization.dll": {} - } - }, - "System.Globalization.Calendars/4.0.0": { - "dependencies": { - "System.Globalization": "4.0.0", - "System.Runtime": "4.0.0" - }, - "compile": { - "ref/dotnet/System.Globalization.Calendars.dll": {} - }, - "runtime": { - "lib/DNXCore50/System.Globalization.Calendars.dll": {} - } - }, - "System.Globalization.Extensions/4.0.0": { - "dependencies": { - "System.Globalization": "4.0.10", - "System.Resources.ResourceManager": "4.0.0", - "System.Runtime": "4.0.20", - "System.Runtime.Extensions": "4.0.10", - "System.Runtime.InteropServices": "4.0.20" - }, - "compile": { - "ref/dotnet/System.Globalization.Extensions.dll": {} - }, - "runtime": { - "lib/dotnet/System.Globalization.Extensions.dll": {} - } - }, - "System.IO/4.0.10": { - "dependencies": { - "System.Runtime": "4.0.20", - "System.Text.Encoding": "4.0.0", - "System.Threading.Tasks": "4.0.0" - }, - "compile": { - "ref/dotnet/System.IO.dll": {} - }, - "runtime": { - "lib/DNXCore50/System.IO.dll": {} - } - }, - "System.IO.Compression/4.0.0": { - "dependencies": { - "System.Collections": "4.0.0", - "System.IO": "4.0.0", - "System.IO.Compression.clrcompression-x86": "4.0.0", - "System.Resources.ResourceManager": "4.0.0", - "System.Runtime": "4.0.0", - "System.Runtime.Extensions": "4.0.0", - "System.Runtime.InteropServices": "4.0.0", - "System.Text.Encoding": "4.0.0", - "System.Threading": "4.0.0", - "System.Threading.Tasks": "4.0.0" - }, - "compile": { - "ref/dotnet/System.IO.Compression.dll": {} - }, - "runtime": { - "lib/dotnet/System.IO.Compression.dll": {} - } - }, - "System.IO.Compression.clrcompression-x86/4.0.0": { - "native": { - "runtimes/win7-x86/native/clrcompression.dll": {} - } - }, - "System.IO.Compression.ZipFile/4.0.0": { - "dependencies": { - "System.IO": "4.0.10", - "System.IO.Compression": "4.0.0", - "System.IO.FileSystem": "4.0.0", - "System.IO.FileSystem.Primitives": "4.0.0", - "System.Resources.ResourceManager": "4.0.0", - "System.Runtime": "4.0.20", - "System.Runtime.Extensions": "4.0.10", - "System.Text.Encoding": "4.0.10" - }, - "compile": { - "ref/dotnet/System.IO.Compression.ZipFile.dll": {} - }, - "runtime": { - "lib/dotnet/System.IO.Compression.ZipFile.dll": {} - } - }, - "System.IO.FileSystem/4.0.0": { - "dependencies": { - "System.Collections": "4.0.10", - "System.IO": "4.0.10", - "System.IO.FileSystem.Primitives": "4.0.0", - "System.Resources.ResourceManager": "4.0.0", - "System.Runtime": "4.0.20", - "System.Runtime.Extensions": "4.0.10", - "System.Runtime.Handles": "4.0.0", - "System.Runtime.InteropServices": "4.0.20", - "System.Text.Encoding": "4.0.10", - "System.Text.Encoding.Extensions": "4.0.10", - "System.Threading": "4.0.10", - "System.Threading.Overlapped": "4.0.0", - "System.Threading.Tasks": "4.0.10" - }, - "compile": { - "ref/dotnet/System.IO.FileSystem.dll": {} - }, - "runtime": { - "lib/DNXCore50/System.IO.FileSystem.dll": {} - } - }, - "System.IO.FileSystem.Primitives/4.0.0": { - "dependencies": { - "System.Runtime": "4.0.20" - }, - "compile": { - "ref/dotnet/System.IO.FileSystem.Primitives.dll": {} - }, - "runtime": { - "lib/dotnet/System.IO.FileSystem.Primitives.dll": {} - } - }, - "System.IO.UnmanagedMemoryStream/4.0.0": { - "dependencies": { - "System.IO": "4.0.10", - "System.IO.FileSystem.Primitives": "4.0.0", - "System.Resources.ResourceManager": "4.0.0", - "System.Runtime": "4.0.20", - "System.Runtime.InteropServices": "4.0.20", - "System.Threading": "4.0.10", - "System.Threading.Tasks": "4.0.10" - }, - "compile": { - "ref/dotnet/System.IO.UnmanagedMemoryStream.dll": {} - }, - "runtime": { - "lib/dotnet/System.IO.UnmanagedMemoryStream.dll": {} - } - }, - "System.Linq/4.0.0": { - "dependencies": { - "System.Collections": "4.0.10", - "System.Diagnostics.Debug": "4.0.10", - "System.Resources.ResourceManager": "4.0.0", - "System.Runtime": "4.0.20", - "System.Runtime.Extensions": "4.0.10" - }, - "compile": { - "ref/dotnet/System.Linq.dll": {} - }, - "runtime": { - "lib/dotnet/System.Linq.dll": {} - } - }, - "System.Linq.Expressions/4.0.10": { - "dependencies": { - "System.Collections": "4.0.0", - "System.Diagnostics.Debug": "4.0.0", - "System.Globalization": "4.0.0", - "System.IO": "4.0.0", - "System.Linq": "4.0.0", - "System.ObjectModel": "4.0.0", - "System.Reflection": "4.0.0", - "System.Reflection.Emit": "4.0.0", - "System.Reflection.Emit.ILGeneration": "4.0.0", - "System.Reflection.Emit.Lightweight": "4.0.0", - "System.Reflection.Extensions": "4.0.0", - "System.Reflection.Primitives": "4.0.0", - "System.Reflection.TypeExtensions": "4.0.0", - "System.Resources.ResourceManager": "4.0.0", - "System.Runtime": "4.0.20", - "System.Runtime.Extensions": "4.0.0", - "System.Threading": "4.0.0" - }, - "compile": { - "ref/dotnet/System.Linq.Expressions.dll": {} - }, - "runtime": { - "lib/DNXCore50/System.Linq.Expressions.dll": {} - } - }, - "System.Linq.Parallel/4.0.0": { - "dependencies": { - "System.Collections": "4.0.10", - "System.Collections.Concurrent": "4.0.10", - "System.Diagnostics.Debug": "4.0.10", - "System.Diagnostics.Tracing": "4.0.20", - "System.Linq": "4.0.0", - "System.Resources.ResourceManager": "4.0.0", - "System.Runtime": "4.0.20", - "System.Runtime.Extensions": "4.0.10", - "System.Threading": "4.0.10", - "System.Threading.Tasks": "4.0.10" - }, - "compile": { - "ref/dotnet/System.Linq.Parallel.dll": {} - }, - "runtime": { - "lib/dotnet/System.Linq.Parallel.dll": {} - } - }, - "System.Linq.Queryable/4.0.0": { - "dependencies": { - "System.Collections": "4.0.10", - "System.Linq": "4.0.0", - "System.Linq.Expressions": "4.0.10", - "System.Reflection": "4.0.10", - "System.Reflection.Extensions": "4.0.0", - "System.Resources.ResourceManager": "4.0.0", - "System.Runtime": "4.0.20" - }, - "compile": { - "ref/dotnet/System.Linq.Queryable.dll": {} - }, - "runtime": { - "lib/dotnet/System.Linq.Queryable.dll": {} - } - }, - "System.Net.Http/4.0.0": { - "dependencies": { - "Microsoft.Win32.Primitives": "4.0.0", - "System.Collections": "4.0.10", - "System.Diagnostics.Debug": "4.0.10", - "System.Globalization": "4.0.10", - "System.IO": "4.0.10", - "System.IO.Compression": "4.0.0", - "System.Net.Primitives": "4.0.10", - "System.Resources.ResourceManager": "4.0.0", - "System.Runtime": "4.0.20", - "System.Runtime.Extensions": "4.0.10", - "System.Runtime.Handles": "4.0.0", - "System.Runtime.InteropServices": "4.0.20", - "System.Text.Encoding": "4.0.10", - "System.Threading": "4.0.10", - "System.Threading.Tasks": "4.0.10" - }, - "compile": { - "ref/dotnet/System.Net.Http.dll": {} - }, - "runtime": { - "lib/DNXCore50/System.Net.Http.dll": {} - } - }, - "System.Net.NetworkInformation/4.0.10-beta-23123": { - "dependencies": { - "System.Private.Networking": "4.0.0" - }, - "compile": { - "ref/dotnet/System.Net.NetworkInformation.dll": {} - }, - "runtime": { - "lib/DNXCore50/System.Net.NetworkInformation.dll": {} - } - }, - "System.Net.Primitives/4.0.10": { - "dependencies": { - "System.Private.Networking": "4.0.0" - }, - "compile": { - "ref/dotnet/System.Net.Primitives.dll": {} - }, - "runtime": { - "lib/DNXCore50/System.Net.Primitives.dll": {} - } - }, - "System.Numerics.Vectors/4.1.0": { - "dependencies": { - "System.Globalization": "4.0.10", - "System.Resources.ResourceManager": "4.0.0", - "System.Runtime": "4.0.20", - "System.Runtime.Extensions": "4.0.10" - }, - "compile": { - "ref/dotnet/System.Numerics.Vectors.dll": {} - }, - "runtime": { - "lib/dotnet/System.Numerics.Vectors.dll": {} - } - }, - "System.ObjectModel/4.0.10": { - "dependencies": { - "System.Collections": "4.0.10", - "System.Diagnostics.Debug": "4.0.10", - "System.Resources.ResourceManager": "4.0.0", - "System.Runtime": "4.0.20", - "System.Threading": "4.0.10" - }, - "compile": { - "ref/dotnet/System.ObjectModel.dll": {} - }, - "runtime": { - "lib/dotnet/System.ObjectModel.dll": {} - } - }, - "System.Private.Networking/4.0.0": { - "dependencies": { - "Microsoft.Win32.Primitives": "4.0.0", - "System.Collections": "4.0.10", - "System.Collections.Concurrent": "4.0.0", - "System.Collections.NonGeneric": "4.0.0", - "System.ComponentModel.EventBasedAsync": "4.0.10", - "System.Diagnostics.Debug": "4.0.10", - "System.Diagnostics.Tracing": "4.0.20", - "System.Globalization": "4.0.10", - "System.IO": "4.0.10", - "System.IO.FileSystem": "4.0.0", - "System.IO.FileSystem.Primitives": "4.0.0", - "System.Resources.ResourceManager": "4.0.0", - "System.Runtime": "4.0.20", - "System.Runtime.Extensions": "4.0.10", - "System.Runtime.Handles": "4.0.0", - "System.Runtime.InteropServices": "4.0.20", - "System.Threading": "4.0.10", - "System.Threading.Overlapped": "4.0.0", - "System.Threading.Tasks": "4.0.10" - }, - "compile": { - "ref/dnxcore50/_._": {} - }, - "runtime": { - "lib/DNXCore50/System.Private.Networking.dll": {} - } - }, - "System.Private.Uri/4.0.0": { - "compile": { - "ref/dnxcore50/_._": {} - }, - "runtime": { - "lib/DNXCore50/System.Private.Uri.dll": {} - } - }, - "System.Reflection/4.0.10": { - "dependencies": { - "System.IO": "4.0.0", - "System.Reflection.Primitives": "4.0.0", - "System.Runtime": "4.0.20" - }, - "compile": { - "ref/dotnet/System.Reflection.dll": {} - }, - "runtime": { - "lib/DNXCore50/System.Reflection.dll": {} - } - }, - "System.Reflection.DispatchProxy/4.0.0": { - "dependencies": { - "System.Collections": "4.0.10", - "System.Linq": "4.0.0", - "System.Reflection": "4.0.10", - "System.Reflection.Emit": "4.0.0", - "System.Reflection.Emit.ILGeneration": "4.0.0", - "System.Reflection.Extensions": "4.0.0", - "System.Reflection.Primitives": "4.0.0", - "System.Resources.ResourceManager": "4.0.0", - "System.Runtime": "4.0.20", - "System.Threading": "4.0.10" - }, - "compile": { - "ref/dotnet/System.Reflection.DispatchProxy.dll": {} - }, - "runtime": { - "lib/DNXCore50/System.Reflection.DispatchProxy.dll": {} - } - }, - "System.Reflection.Emit/4.0.0": { - "dependencies": { - "System.IO": "4.0.0", - "System.Reflection": "4.0.0", - "System.Reflection.Emit.ILGeneration": "4.0.0", - "System.Reflection.Primitives": "4.0.0", - "System.Runtime": "4.0.0" - }, - "compile": { - "ref/dotnet/System.Reflection.Emit.dll": {} - }, - "runtime": { - "lib/DNXCore50/System.Reflection.Emit.dll": {} - } - }, - "System.Reflection.Emit.ILGeneration/4.0.0": { - "dependencies": { - "System.Reflection": "4.0.0", - "System.Reflection.Primitives": "4.0.0", - "System.Runtime": "4.0.0" - }, - "compile": { - "ref/dotnet/System.Reflection.Emit.ILGeneration.dll": {} - }, - "runtime": { - "lib/DNXCore50/System.Reflection.Emit.ILGeneration.dll": {} - } - }, - "System.Reflection.Emit.Lightweight/4.0.0": { - "dependencies": { - "System.Reflection": "4.0.0", - "System.Reflection.Emit.ILGeneration": "4.0.0", - "System.Reflection.Primitives": "4.0.0", - "System.Runtime": "4.0.0" - }, - "compile": { - "ref/dotnet/System.Reflection.Emit.Lightweight.dll": {} - }, - "runtime": { - "lib/DNXCore50/System.Reflection.Emit.Lightweight.dll": {} - } - }, - "System.Reflection.Extensions/4.0.0": { - "dependencies": { - "System.Reflection": "4.0.0", - "System.Runtime": "4.0.0" - }, - "compile": { - "ref/dotnet/System.Reflection.Extensions.dll": {} - }, - "runtime": { - "lib/DNXCore50/System.Reflection.Extensions.dll": {} - } - }, - "System.Reflection.Metadata/1.0.22": { - "dependencies": { - "System.Collections": "4.0.0", - "System.Collections.Immutable": "1.1.37", - "System.Diagnostics.Debug": "4.0.0", - "System.IO": "4.0.0", - "System.Reflection": "4.0.0", - "System.Reflection.Extensions": "4.0.0", - "System.Reflection.Primitives": "4.0.0", - "System.Resources.ResourceManager": "4.0.0", - "System.Runtime": "4.0.0", - "System.Runtime.Extensions": "4.0.0", - "System.Runtime.InteropServices": "4.0.0", - "System.Text.Encoding": "4.0.0", - "System.Text.Encoding.Extensions": "4.0.0", - "System.Threading": "4.0.0" - }, - "compile": { - "lib/dotnet/System.Reflection.Metadata.dll": {} - }, - "runtime": { - "lib/dotnet/System.Reflection.Metadata.dll": {} - } - }, - "System.Reflection.Primitives/4.0.0": { - "dependencies": { - "System.Runtime": "4.0.0" - }, - "compile": { - "ref/dotnet/System.Reflection.Primitives.dll": {} - }, - "runtime": { - "lib/DNXCore50/System.Reflection.Primitives.dll": {} - } - }, - "System.Reflection.TypeExtensions/4.0.0": { - "dependencies": { - "System.Reflection": "4.0.0", - "System.Runtime": "4.0.0" - }, - "compile": { - "ref/dotnet/System.Reflection.TypeExtensions.dll": {} - }, - "runtime": { - "lib/DNXCore50/System.Reflection.TypeExtensions.dll": {} - } - }, - "System.Resources.ResourceManager/4.0.0": { - "dependencies": { - "System.Globalization": "4.0.0", - "System.Reflection": "4.0.0", - "System.Runtime": "4.0.0" - }, - "compile": { - "ref/dotnet/System.Resources.ResourceManager.dll": {} - }, - "runtime": { - "lib/DNXCore50/System.Resources.ResourceManager.dll": {} - } - }, - "System.Runtime/4.0.20": { - "dependencies": { - "System.Private.Uri": "4.0.0" - }, - "compile": { - "ref/dotnet/System.Runtime.dll": {} - }, - "runtime": { - "lib/DNXCore50/System.Runtime.dll": {} - } - }, - "System.Runtime.Extensions/4.0.10": { - "dependencies": { - "System.Runtime": "4.0.20" - }, - "compile": { - "ref/dotnet/System.Runtime.Extensions.dll": {} - }, - "runtime": { - "lib/DNXCore50/System.Runtime.Extensions.dll": {} - } - }, - "System.Runtime.Handles/4.0.0": { - "dependencies": { - "System.Runtime": "4.0.0" - }, - "compile": { - "ref/dotnet/System.Runtime.Handles.dll": {} - }, - "runtime": { - "lib/DNXCore50/System.Runtime.Handles.dll": {} - } - }, - "System.Runtime.InteropServices/4.0.20": { - "dependencies": { - "System.Reflection": "4.0.0", - "System.Reflection.Primitives": "4.0.0", - "System.Runtime": "4.0.0", - "System.Runtime.Handles": "4.0.0" - }, - "compile": { - "ref/dotnet/System.Runtime.InteropServices.dll": {} - }, - "runtime": { - "lib/DNXCore50/System.Runtime.InteropServices.dll": {} - } - }, - "System.Runtime.Numerics/4.0.0": { - "dependencies": { - "System.Globalization": "4.0.10", - "System.Resources.ResourceManager": "4.0.0", - "System.Runtime": "4.0.20", - "System.Runtime.Extensions": "4.0.10" - }, - "compile": { - "ref/dotnet/System.Runtime.Numerics.dll": {} - }, - "runtime": { - "lib/dotnet/System.Runtime.Numerics.dll": {} - } - }, - "System.Security.Claims/4.0.0": { - "dependencies": { - "System.Collections": "4.0.0", - "System.Diagnostics.Debug": "4.0.0", - "System.Globalization": "4.0.0", - "System.IO": "4.0.0", - "System.Resources.ResourceManager": "4.0.0", - "System.Runtime": "4.0.20", - "System.Runtime.Extensions": "4.0.0", - "System.Security.Principal": "4.0.0" - }, - "compile": { - "ref/dotnet/System.Security.Claims.dll": {} - }, - "runtime": { - "lib/dotnet/System.Security.Claims.dll": {} - } - }, - "System.Security.Principal/4.0.0": { - "dependencies": { - "System.Runtime": "4.0.0" - }, - "compile": { - "ref/dotnet/System.Security.Principal.dll": {} - }, - "runtime": { - "lib/dotnet/System.Security.Principal.dll": {} - } - }, - "System.Text.Encoding/4.0.10": { - "dependencies": { - "System.Runtime": "4.0.0" - }, - "compile": { - "ref/dotnet/System.Text.Encoding.dll": {} - }, - "runtime": { - "lib/DNXCore50/System.Text.Encoding.dll": {} - } - }, - "System.Text.Encoding.Extensions/4.0.10": { - "dependencies": { - "System.Runtime": "4.0.0", - "System.Text.Encoding": "4.0.10" - }, - "compile": { - "ref/dotnet/System.Text.Encoding.Extensions.dll": {} - }, - "runtime": { - "lib/DNXCore50/System.Text.Encoding.Extensions.dll": {} - } - }, - "System.Text.RegularExpressions/4.0.10": { - "dependencies": { - "System.Collections": "4.0.10", - "System.Globalization": "4.0.10", - "System.Resources.ResourceManager": "4.0.0", - "System.Runtime": "4.0.20", - "System.Runtime.Extensions": "4.0.10", - "System.Threading": "4.0.10" - }, - "compile": { - "ref/dotnet/System.Text.RegularExpressions.dll": {} - }, - "runtime": { - "lib/dotnet/System.Text.RegularExpressions.dll": {} - } - }, - "System.Threading/4.0.10": { - "dependencies": { - "System.Runtime": "4.0.0", - "System.Threading.Tasks": "4.0.0" - }, - "compile": { - "ref/dotnet/System.Threading.dll": {} - }, - "runtime": { - "lib/DNXCore50/System.Threading.dll": {} - } - }, - "System.Threading.Overlapped/4.0.0": { - "dependencies": { - "System.Runtime": "4.0.0", - "System.Runtime.Handles": "4.0.0" - }, - "compile": { - "ref/dotnet/System.Threading.Overlapped.dll": {} - }, - "runtime": { - "lib/DNXCore50/System.Threading.Overlapped.dll": {} - } - }, - "System.Threading.Tasks/4.0.10": { - "dependencies": { - "System.Runtime": "4.0.0" - }, - "compile": { - "ref/dotnet/System.Threading.Tasks.dll": {} - }, - "runtime": { - "lib/DNXCore50/System.Threading.Tasks.dll": {} - } - }, - "System.Threading.Tasks.Dataflow/4.5.25": { - "dependencies": { - "System.Collections": "4.0.0", - "System.Collections.Concurrent": "4.0.0", - "System.Diagnostics.Debug": "4.0.0", - "System.Diagnostics.Tracing": "4.0.0", - "System.Dynamic.Runtime": "4.0.0", - "System.Linq": "4.0.0", - "System.Resources.ResourceManager": "4.0.0", - "System.Runtime": "4.0.0", - "System.Runtime.Extensions": "4.0.0", - "System.Threading": "4.0.0", - "System.Threading.Tasks": "4.0.0" - }, - "compile": { - "lib/dotnet/System.Threading.Tasks.Dataflow.dll": {} - }, - "runtime": { - "lib/dotnet/System.Threading.Tasks.Dataflow.dll": {} - } - }, - "System.Threading.Tasks.Parallel/4.0.0": { - "dependencies": { - "System.Collections.Concurrent": "4.0.10", - "System.Diagnostics.Debug": "4.0.10", - "System.Diagnostics.Tracing": "4.0.20", - "System.Resources.ResourceManager": "4.0.0", - "System.Runtime": "4.0.20", - "System.Runtime.Extensions": "4.0.10", - "System.Threading": "4.0.10", - "System.Threading.Tasks": "4.0.10" - }, - "compile": { - "ref/dotnet/System.Threading.Tasks.Parallel.dll": {} - }, - "runtime": { - "lib/dotnet/System.Threading.Tasks.Parallel.dll": {} - } - }, - "System.Threading.Timer/4.0.0": { - "dependencies": { - "System.Runtime": "4.0.0" - }, - "compile": { - "ref/dotnet/System.Threading.Timer.dll": {} - }, - "runtime": { - "lib/DNXCore50/System.Threading.Timer.dll": {} - } - }, - "System.Xml.ReaderWriter/4.0.10": { - "dependencies": { - "System.Collections": "4.0.10", - "System.Diagnostics.Debug": "4.0.10", - "System.Globalization": "4.0.10", - "System.IO": "4.0.10", - "System.IO.FileSystem": "4.0.0", - "System.IO.FileSystem.Primitives": "4.0.0", - "System.Resources.ResourceManager": "4.0.0", - "System.Runtime": "4.0.20", - "System.Runtime.Extensions": "4.0.10", - "System.Runtime.InteropServices": "4.0.20", - "System.Text.Encoding": "4.0.10", - "System.Text.Encoding.Extensions": "4.0.10", - "System.Text.RegularExpressions": "4.0.10", - "System.Threading.Tasks": "4.0.10" - }, - "compile": { - "ref/dotnet/System.Xml.ReaderWriter.dll": {} - }, - "runtime": { - "lib/dotnet/System.Xml.ReaderWriter.dll": {} - } - }, - "System.Xml.XDocument/4.0.10": { - "dependencies": { - "System.Collections": "4.0.10", - "System.Diagnostics.Debug": "4.0.10", - "System.Globalization": "4.0.10", - "System.IO": "4.0.10", - "System.Reflection": "4.0.10", - "System.Resources.ResourceManager": "4.0.0", - "System.Runtime": "4.0.20", - "System.Runtime.Extensions": "4.0.10", - "System.Text.Encoding": "4.0.10", - "System.Threading": "4.0.10", - "System.Xml.ReaderWriter": "4.0.10" - }, - "compile": { - "ref/dotnet/System.Xml.XDocument.dll": {} - }, - "runtime": { - "lib/dotnet/System.Xml.XDocument.dll": {} - } - } - }, - "UAP,Version=v10.0": { - "Microsoft.CSharp/4.0.0": { - "dependencies": { - "System.Collections": "4.0.10", - "System.Diagnostics.Debug": "4.0.10", - "System.Dynamic.Runtime": "4.0.0", - "System.Globalization": "4.0.10", - "System.Linq": "4.0.0", - "System.Linq.Expressions": "4.0.0", - "System.ObjectModel": "4.0.10", - "System.Reflection": "4.0.10", - "System.Reflection.Extensions": "4.0.0", - "System.Reflection.Primitives": "4.0.0", - "System.Reflection.TypeExtensions": "4.0.0", - "System.Resources.ResourceManager": "4.0.0", - "System.Runtime": "4.0.20", - "System.Runtime.Extensions": "4.0.10", - "System.Runtime.InteropServices": "4.0.20", - "System.Threading": "4.0.10" - }, - "compile": { - "ref/netcore50/Microsoft.CSharp.dll": {} - }, - "runtime": { - "lib/netcore50/Microsoft.CSharp.dll": {} - } - }, - "Microsoft.NETCore/5.0.0": { - "dependencies": { - "Microsoft.CSharp": "4.0.0", - "Microsoft.NETCore.Targets": "1.0.0", - "Microsoft.VisualBasic": "10.0.0", - "System.AppContext": "4.0.0", - "System.Collections": "4.0.10", - "System.Collections.Concurrent": "4.0.10", - "System.Collections.Immutable": "1.1.37", - "System.ComponentModel": "4.0.0", - "System.ComponentModel.Annotations": "4.0.10", - "System.Diagnostics.Debug": "4.0.10", - "System.Diagnostics.Tools": "4.0.0", - "System.Diagnostics.Tracing": "4.0.20", - "System.Dynamic.Runtime": "4.0.10", - "System.Globalization": "4.0.10", - "System.Globalization.Calendars": "4.0.0", - "System.Globalization.Extensions": "4.0.0", - "System.IO": "4.0.10", - "System.IO.Compression": "4.0.0", - "System.IO.Compression.ZipFile": "4.0.0", - "System.IO.FileSystem": "4.0.0", - "System.IO.FileSystem.Primitives": "4.0.0", - "System.IO.UnmanagedMemoryStream": "4.0.0", - "System.Linq": "4.0.0", - "System.Linq.Expressions": "4.0.10", - "System.Linq.Parallel": "4.0.0", - "System.Linq.Queryable": "4.0.0", - "System.Net.Http": "4.0.0", - "System.Net.NetworkInformation": "4.0.0", - "System.Net.Primitives": "4.0.10", - "System.Numerics.Vectors": "4.1.0", - "System.ObjectModel": "4.0.10", - "System.Reflection": "4.0.10", - "System.Reflection.DispatchProxy": "4.0.0", - "System.Reflection.Extensions": "4.0.0", - "System.Reflection.Metadata": "1.0.22", - "System.Reflection.Primitives": "4.0.0", - "System.Reflection.TypeExtensions": "4.0.0", - "System.Resources.ResourceManager": "4.0.0", - "System.Runtime": "4.0.20", - "System.Runtime.Extensions": "4.0.10", - "System.Runtime.Handles": "4.0.0", - "System.Runtime.InteropServices": "4.0.20", - "System.Runtime.Numerics": "4.0.0", - "System.Security.Claims": "4.0.0", - "System.Security.Principal": "4.0.0", - "System.Text.Encoding": "4.0.10", - "System.Text.Encoding.Extensions": "4.0.10", - "System.Text.RegularExpressions": "4.0.10", - "System.Threading": "4.0.10", - "System.Threading.Tasks": "4.0.10", - "System.Threading.Tasks.Dataflow": "4.5.25", - "System.Threading.Tasks.Parallel": "4.0.0", - "System.Threading.Timer": "4.0.0", - "System.Xml.ReaderWriter": "4.0.10", - "System.Xml.XDocument": "4.0.10" - } - }, - "Microsoft.NETCore.Platforms/1.0.0": {}, - "Microsoft.NETCore.Portable.Compatibility/1.0.0": { - "dependencies": { - "Microsoft.NETCore.Runtime": "1.0.0" - }, - "compile": { - "ref/netcore50/System.ComponentModel.DataAnnotations.dll": {}, - "ref/netcore50/System.Core.dll": {}, - "ref/netcore50/System.Net.dll": {}, - "ref/netcore50/System.Numerics.dll": {}, - "ref/netcore50/System.Runtime.Serialization.dll": {}, - "ref/netcore50/System.ServiceModel.Web.dll": {}, - "ref/netcore50/System.ServiceModel.dll": {}, - "ref/netcore50/System.Windows.dll": {}, - "ref/netcore50/System.Xml.Linq.dll": {}, - "ref/netcore50/System.Xml.Serialization.dll": {}, - "ref/netcore50/System.Xml.dll": {}, - "ref/netcore50/System.dll": {}, - "ref/netcore50/mscorlib.dll": {} - }, - "runtime": { - "lib/netcore50/System.ComponentModel.DataAnnotations.dll": {}, - "lib/netcore50/System.Core.dll": {}, - "lib/netcore50/System.Net.dll": {}, - "lib/netcore50/System.Numerics.dll": {}, - "lib/netcore50/System.Runtime.Serialization.dll": {}, - "lib/netcore50/System.ServiceModel.Web.dll": {}, - "lib/netcore50/System.ServiceModel.dll": {}, - "lib/netcore50/System.Windows.dll": {}, - "lib/netcore50/System.Xml.Linq.dll": {}, - "lib/netcore50/System.Xml.Serialization.dll": {}, - "lib/netcore50/System.Xml.dll": {}, - "lib/netcore50/System.dll": {} - }, - "runtimeTargets": { - "runtimes/aot/lib/netcore50/System.ComponentModel.DataAnnotations.dll": { - "assetType": "runtime", - "rid": "aot" - }, - "runtimes/aot/lib/netcore50/System.Core.dll": { - "assetType": "runtime", - "rid": "aot" - }, - "runtimes/aot/lib/netcore50/System.Net.dll": { - "assetType": "runtime", - "rid": "aot" - }, - "runtimes/aot/lib/netcore50/System.Numerics.dll": { - "assetType": "runtime", - "rid": "aot" - }, - "runtimes/aot/lib/netcore50/System.Runtime.Serialization.dll": { - "assetType": "runtime", - "rid": "aot" - }, - "runtimes/aot/lib/netcore50/System.ServiceModel.Web.dll": { - "assetType": "runtime", - "rid": "aot" - }, - "runtimes/aot/lib/netcore50/System.ServiceModel.dll": { - "assetType": "runtime", - "rid": "aot" - }, - "runtimes/aot/lib/netcore50/System.Windows.dll": { - "assetType": "runtime", - "rid": "aot" - }, - "runtimes/aot/lib/netcore50/System.Xml.Linq.dll": { - "assetType": "runtime", - "rid": "aot" - }, - "runtimes/aot/lib/netcore50/System.Xml.Serialization.dll": { - "assetType": "runtime", - "rid": "aot" - }, - "runtimes/aot/lib/netcore50/System.Xml.dll": { - "assetType": "runtime", - "rid": "aot" - }, - "runtimes/aot/lib/netcore50/System.dll": { - "assetType": "runtime", - "rid": "aot" - }, - "runtimes/aot/lib/netcore50/mscorlib.dll": { - "assetType": "runtime", - "rid": "aot" - } - } - }, - "Microsoft.NETCore.Runtime/1.0.0": {}, - "Microsoft.NETCore.Targets/1.0.0": { - "dependencies": { - "Microsoft.NETCore.Platforms": "1.0.0", - "Microsoft.NETCore.Targets.UniversalWindowsPlatform": "5.0.0" - } - }, - "Microsoft.NETCore.Targets.UniversalWindowsPlatform/5.0.0": {}, - "Microsoft.VisualBasic/10.0.0": { - "dependencies": { - "System.Collections": "4.0.10", - "System.Diagnostics.Debug": "4.0.10", - "System.Dynamic.Runtime": "4.0.10", - "System.Globalization": "4.0.10", - "System.Linq": "4.0.0", - "System.Linq.Expressions": "4.0.10", - "System.ObjectModel": "4.0.10", - "System.Reflection": "4.0.10", - "System.Reflection.Extensions": "4.0.0", - "System.Reflection.Primitives": "4.0.0", - "System.Reflection.TypeExtensions": "4.0.0", - "System.Resources.ResourceManager": "4.0.0", - "System.Runtime": "4.0.20", - "System.Runtime.Extensions": "4.0.10", - "System.Runtime.InteropServices": "4.0.20", - "System.Threading": "4.0.10" - }, - "compile": { - "ref/netcore50/Microsoft.VisualBasic.dll": {} - }, - "runtime": { - "lib/netcore50/Microsoft.VisualBasic.dll": {} - } - }, - "Microsoft.Win32.Primitives/4.0.0": { - "dependencies": { - "System.Runtime": "4.0.20", - "System.Runtime.InteropServices": "4.0.20" - }, - "compile": { - "ref/dotnet/Microsoft.Win32.Primitives.dll": {} - }, - "runtime": { - "lib/dotnet/Microsoft.Win32.Primitives.dll": {} - } - }, - "System.AppContext/4.0.0": { - "dependencies": { - "System.Collections": "4.0.0", - "System.Resources.ResourceManager": "4.0.0", - "System.Runtime": "4.0.20", - "System.Threading": "4.0.0" - }, - "compile": { - "ref/dotnet/System.AppContext.dll": {} - }, - "runtime": { - "lib/netcore50/System.AppContext.dll": {} - } - }, - "System.Collections/4.0.10": { - "dependencies": { - "System.Diagnostics.Debug": "4.0.0", - "System.Resources.ResourceManager": "4.0.0", - "System.Runtime": "4.0.20", - "System.Runtime.Extensions": "4.0.0", - "System.Threading": "4.0.0" - }, - "compile": { - "ref/dotnet/System.Collections.dll": {} - }, - "runtime": { - "lib/netcore50/System.Collections.dll": {} - }, - "runtimeTargets": { - "runtimes/win8-aot/lib/netcore50/System.Collections.dll": { - "assetType": "runtime", - "rid": "win8-aot" - } - } - }, - "System.Collections.Concurrent/4.0.10": { - "dependencies": { - "System.Collections": "4.0.10", - "System.Diagnostics.Debug": "4.0.10", - "System.Diagnostics.Tracing": "4.0.20", - "System.Globalization": "4.0.10", - "System.Resources.ResourceManager": "4.0.0", - "System.Runtime": "4.0.20", - "System.Runtime.Extensions": "4.0.10", - "System.Threading": "4.0.10", - "System.Threading.Tasks": "4.0.10" - }, - "compile": { - "ref/dotnet/System.Collections.Concurrent.dll": {} - }, - "runtime": { - "lib/dotnet/System.Collections.Concurrent.dll": {} - } - }, - "System.Collections.Immutable/1.1.37": { - "dependencies": { - "System.Collections": "4.0.0", - "System.Diagnostics.Debug": "4.0.0", - "System.Globalization": "4.0.0", - "System.Linq": "4.0.0", - "System.Resources.ResourceManager": "4.0.0", - "System.Runtime": "4.0.0", - "System.Runtime.Extensions": "4.0.0", - "System.Threading": "4.0.0" - }, - "compile": { - "lib/dotnet/System.Collections.Immutable.dll": {} - }, - "runtime": { - "lib/dotnet/System.Collections.Immutable.dll": {} - } - }, - "System.Collections.NonGeneric/4.0.0": { - "dependencies": { - "System.Diagnostics.Debug": "4.0.10", - "System.Globalization": "4.0.10", - "System.Resources.ResourceManager": "4.0.0", - "System.Runtime": "4.0.20", - "System.Runtime.Extensions": "4.0.10", - "System.Threading": "4.0.10" - }, - "compile": { - "ref/dotnet/System.Collections.NonGeneric.dll": {} - }, - "runtime": { - "lib/dotnet/System.Collections.NonGeneric.dll": {} - } - }, - "System.ComponentModel/4.0.0": { - "dependencies": { - "System.Runtime": "4.0.20" - }, - "compile": { - "ref/netcore50/System.ComponentModel.dll": {} - }, - "runtime": { - "lib/netcore50/System.ComponentModel.dll": {} - } - }, - "System.ComponentModel.Annotations/4.0.10": { - "dependencies": { - "System.Collections": "4.0.10", - "System.ComponentModel": "4.0.0", - "System.Globalization": "4.0.10", - "System.Linq": "4.0.0", - "System.Reflection": "4.0.10", - "System.Reflection.Extensions": "4.0.0", - "System.Resources.ResourceManager": "4.0.0", - "System.Runtime": "4.0.20", - "System.Runtime.Extensions": "4.0.10", - "System.Text.RegularExpressions": "4.0.10", - "System.Threading": "4.0.10" - }, - "compile": { - "ref/dotnet/System.ComponentModel.Annotations.dll": {} - }, - "runtime": { - "lib/dotnet/System.ComponentModel.Annotations.dll": {} - } - }, - "System.Diagnostics.Contracts/4.0.0": { - "compile": { - "ref/netcore50/System.Diagnostics.Contracts.dll": {} - }, - "runtime": { - "lib/netcore50/System.Diagnostics.Contracts.dll": {} - }, - "runtimeTargets": { - "runtimes/win8-aot/lib/netcore50/System.Diagnostics.Contracts.dll": { - "assetType": "runtime", - "rid": "win8-aot" - } - } - }, - "System.Diagnostics.Debug/4.0.10": { - "dependencies": { - "System.Runtime": "4.0.0" - }, - "compile": { - "ref/dotnet/System.Diagnostics.Debug.dll": {} - }, - "runtime": { - "lib/netcore50/System.Diagnostics.Debug.dll": {} - }, - "runtimeTargets": { - "runtimes/win8-aot/lib/netcore50/System.Diagnostics.Debug.dll": { - "assetType": "runtime", - "rid": "win8-aot" - } - } - }, - "System.Diagnostics.Tools/4.0.0": { - "compile": { - "ref/netcore50/System.Diagnostics.Tools.dll": {} - }, - "runtime": { - "lib/netcore50/System.Diagnostics.Tools.dll": {} - }, - "runtimeTargets": { - "runtimes/win8-aot/lib/netcore50/System.Diagnostics.Tools.dll": { - "assetType": "runtime", - "rid": "win8-aot" - } - } - }, - "System.Diagnostics.Tracing/4.0.20": { - "dependencies": { - "System.Collections": "4.0.10", - "System.Globalization": "4.0.0", - "System.Reflection": "4.0.10", - "System.Reflection.Extensions": "4.0.0", - "System.Resources.ResourceManager": "4.0.0", - "System.Runtime": "4.0.20", - "System.Runtime.Extensions": "4.0.10", - "System.Runtime.InteropServices": "4.0.0", - "System.Text.Encoding": "4.0.0", - "System.Threading": "4.0.10" - }, - "compile": { - "ref/dotnet/System.Diagnostics.Tracing.dll": {} - }, - "runtime": { - "lib/netcore50/System.Diagnostics.Tracing.dll": {} - }, - "runtimeTargets": { - "runtimes/win8-aot/lib/netcore50/System.Diagnostics.Tracing.dll": { - "assetType": "runtime", - "rid": "win8-aot" - } - } - }, - "System.Dynamic.Runtime/4.0.10": { - "dependencies": { - "System.Collections": "4.0.0", - "System.Diagnostics.Debug": "4.0.0", - "System.Globalization": "4.0.0", - "System.Linq": "4.0.0", - "System.Linq.Expressions": "4.0.10", - "System.ObjectModel": "4.0.0", - "System.Reflection": "4.0.0", - "System.Reflection.TypeExtensions": "4.0.0", - "System.Resources.ResourceManager": "4.0.0", - "System.Runtime": "4.0.20", - "System.Runtime.Extensions": "4.0.0", - "System.Threading": "4.0.0" - }, - "compile": { - "ref/dotnet/System.Dynamic.Runtime.dll": {} - }, - "runtime": { - "lib/netcore50/System.Dynamic.Runtime.dll": {} - }, - "runtimeTargets": { - "runtimes/win8-aot/lib/netcore50/System.Dynamic.Runtime.dll": { - "assetType": "runtime", - "rid": "win8-aot" - } - } - }, - "System.Globalization/4.0.10": { - "dependencies": { - "System.Runtime": "4.0.0" - }, - "compile": { - "ref/dotnet/System.Globalization.dll": {} - }, - "runtime": { - "lib/netcore50/System.Globalization.dll": {} - }, - "runtimeTargets": { - "runtimes/win8-aot/lib/netcore50/System.Globalization.dll": { - "assetType": "runtime", - "rid": "win8-aot" - } - } - }, - "System.Globalization.Calendars/4.0.0": { - "dependencies": { - "System.Globalization": "4.0.0", - "System.Runtime": "4.0.0" - }, - "compile": { - "ref/dotnet/System.Globalization.Calendars.dll": {} - }, - "runtime": { - "lib/netcore50/System.Globalization.Calendars.dll": {} - }, - "runtimeTargets": { - "runtimes/win8-aot/lib/netcore50/System.Globalization.Calendars.dll": { - "assetType": "runtime", - "rid": "win8-aot" - } - } - }, - "System.Globalization.Extensions/4.0.0": { - "dependencies": { - "System.Globalization": "4.0.10", - "System.Resources.ResourceManager": "4.0.0", - "System.Runtime": "4.0.20", - "System.Runtime.Extensions": "4.0.10", - "System.Runtime.InteropServices": "4.0.20" - }, - "compile": { - "ref/dotnet/System.Globalization.Extensions.dll": {} - }, - "runtime": { - "lib/dotnet/System.Globalization.Extensions.dll": {} - } - }, - "System.IO/4.0.10": { - "dependencies": { - "System.Globalization": "4.0.0", - "System.Runtime": "4.0.20", - "System.Text.Encoding": "4.0.10", - "System.Text.Encoding.Extensions": "4.0.0", - "System.Threading": "4.0.0", - "System.Threading.Tasks": "4.0.0" - }, - "compile": { - "ref/dotnet/System.IO.dll": {} - }, - "runtime": { - "lib/netcore50/System.IO.dll": {} - }, - "runtimeTargets": { - "runtimes/win8-aot/lib/netcore50/System.IO.dll": { - "assetType": "runtime", - "rid": "win8-aot" - } - } - }, - "System.IO.Compression/4.0.0": { - "dependencies": { - "System.Collections": "4.0.0", - "System.IO": "4.0.0", - "System.Resources.ResourceManager": "4.0.0", - "System.Runtime": "4.0.0", - "System.Runtime.Extensions": "4.0.0", - "System.Runtime.InteropServices": "4.0.0", - "System.Text.Encoding": "4.0.0", - "System.Threading": "4.0.0", - "System.Threading.Tasks": "4.0.0" - }, - "compile": { - "ref/netcore50/System.IO.Compression.dll": {} - }, - "runtime": { - "lib/netcore50/System.IO.Compression.dll": {} - } - }, - "System.IO.Compression.ZipFile/4.0.0": { - "dependencies": { - "System.IO": "4.0.10", - "System.IO.Compression": "4.0.0", - "System.IO.FileSystem": "4.0.0", - "System.IO.FileSystem.Primitives": "4.0.0", - "System.Resources.ResourceManager": "4.0.0", - "System.Runtime": "4.0.20", - "System.Runtime.Extensions": "4.0.10", - "System.Text.Encoding": "4.0.10" - }, - "compile": { - "ref/dotnet/System.IO.Compression.ZipFile.dll": {} - }, - "runtime": { - "lib/dotnet/System.IO.Compression.ZipFile.dll": {} - } - }, - "System.IO.FileSystem/4.0.0": { - "dependencies": { - "System.Collections": "4.0.10", - "System.Diagnostics.Debug": "4.0.10", - "System.IO": "4.0.10", - "System.IO.FileSystem.Primitives": "4.0.0", - "System.Resources.ResourceManager": "4.0.0", - "System.Runtime": "4.0.20", - "System.Runtime.Extensions": "4.0.10", - "System.Runtime.Handles": "4.0.0", - "System.Runtime.InteropServices": "4.0.20", - "System.Runtime.WindowsRuntime": "4.0.0", - "System.Text.Encoding": "4.0.10", - "System.Text.Encoding.Extensions": "4.0.10", - "System.Threading": "4.0.10", - "System.Threading.Overlapped": "4.0.0", - "System.Threading.Tasks": "4.0.10" - }, - "compile": { - "ref/dotnet/System.IO.FileSystem.dll": {} - }, - "runtime": { - "lib/netcore50/System.IO.FileSystem.dll": {} - } - }, - "System.IO.FileSystem.Primitives/4.0.0": { - "dependencies": { - "System.Runtime": "4.0.20" - }, - "compile": { - "ref/dotnet/System.IO.FileSystem.Primitives.dll": {} - }, - "runtime": { - "lib/dotnet/System.IO.FileSystem.Primitives.dll": {} - } - }, - "System.IO.UnmanagedMemoryStream/4.0.0": { - "dependencies": { - "System.IO": "4.0.10", - "System.IO.FileSystem.Primitives": "4.0.0", - "System.Resources.ResourceManager": "4.0.0", - "System.Runtime": "4.0.20", - "System.Runtime.InteropServices": "4.0.20", - "System.Threading": "4.0.10", - "System.Threading.Tasks": "4.0.10" - }, - "compile": { - "ref/dotnet/System.IO.UnmanagedMemoryStream.dll": {} - }, - "runtime": { - "lib/dotnet/System.IO.UnmanagedMemoryStream.dll": {} - } - }, - "System.Linq/4.0.0": { - "dependencies": { - "System.Collections": "4.0.10", - "System.Diagnostics.Debug": "4.0.10", - "System.Resources.ResourceManager": "4.0.0", - "System.Runtime": "4.0.20", - "System.Runtime.Extensions": "4.0.10" - }, - "compile": { - "ref/netcore50/System.Linq.dll": {} - }, - "runtime": { - "lib/netcore50/System.Linq.dll": {} - } - }, - "System.Linq.Expressions/4.0.10": { - "dependencies": { - "System.Collections": "4.0.0", - "System.Diagnostics.Debug": "4.0.0", - "System.Globalization": "4.0.0", - "System.IO": "4.0.0", - "System.Linq": "4.0.0", - "System.Reflection": "4.0.0", - "System.Reflection.Extensions": "4.0.0", - "System.Reflection.Primitives": "4.0.0", - "System.Reflection.TypeExtensions": "4.0.0", - "System.Resources.ResourceManager": "4.0.0", - "System.Runtime": "4.0.20", - "System.Runtime.Extensions": "4.0.0", - "System.Threading": "4.0.0" - }, - "compile": { - "ref/dotnet/System.Linq.Expressions.dll": {} - }, - "runtime": { - "lib/netcore50/System.Linq.Expressions.dll": {} - }, - "runtimeTargets": { - "runtimes/win8-aot/lib/netcore50/System.Linq.Expressions.dll": { - "assetType": "runtime", - "rid": "win8-aot" - } - } - }, - "System.Linq.Parallel/4.0.0": { - "dependencies": { - "System.Collections": "4.0.10", - "System.Collections.Concurrent": "4.0.10", - "System.Diagnostics.Debug": "4.0.10", - "System.Diagnostics.Tracing": "4.0.20", - "System.Linq": "4.0.0", - "System.Resources.ResourceManager": "4.0.0", - "System.Runtime": "4.0.20", - "System.Runtime.Extensions": "4.0.10", - "System.Threading": "4.0.10", - "System.Threading.Tasks": "4.0.10" - }, - "compile": { - "ref/netcore50/System.Linq.Parallel.dll": {} - }, - "runtime": { - "lib/netcore50/System.Linq.Parallel.dll": {} - } - }, - "System.Linq.Queryable/4.0.0": { - "dependencies": { - "System.Collections": "4.0.10", - "System.Linq": "4.0.0", - "System.Linq.Expressions": "4.0.10", - "System.Reflection": "4.0.10", - "System.Reflection.Extensions": "4.0.0", - "System.Resources.ResourceManager": "4.0.0", - "System.Runtime": "4.0.20" - }, - "compile": { - "ref/netcore50/System.Linq.Queryable.dll": {} - }, - "runtime": { - "lib/netcore50/System.Linq.Queryable.dll": {} - } - }, - "System.Net.Http/4.0.0": { - "dependencies": { - "System.Collections": "4.0.10", - "System.Diagnostics.Debug": "4.0.10", - "System.Globalization": "4.0.10", - "System.IO": "4.0.10", - "System.Net.Primitives": "4.0.0", - "System.Resources.ResourceManager": "4.0.0", - "System.Runtime": "4.0.20", - "System.Runtime.Extensions": "4.0.10", - "System.Runtime.InteropServices": "4.0.20", - "System.Runtime.WindowsRuntime": "4.0.10", - "System.Text.Encoding": "4.0.10", - "System.Text.Encoding.Extensions": "4.0.10", - "System.Threading": "4.0.10", - "System.Threading.Tasks": "4.0.10" - }, - "compile": { - "ref/netcore50/System.Net.Http.dll": {} - }, - "runtime": { - "lib/netcore50/System.Net.Http.dll": {} - } - }, - "System.Net.NetworkInformation/4.0.0": { - "dependencies": { - "System.Runtime": "4.0.0", - "System.Runtime.InteropServices.WindowsRuntime": "4.0.0", - "System.Threading": "4.0.0" - }, - "compile": { - "ref/netcore50/System.Net.NetworkInformation.dll": {} - }, - "runtime": { - "lib/netcore50/System.Net.NetworkInformation.dll": {} - } - }, - "System.Net.Primitives/4.0.10": { - "dependencies": { - "System.Private.Networking": "4.0.0", - "System.Runtime": "4.0.20" - }, - "compile": { - "ref/dotnet/System.Net.Primitives.dll": {} - }, - "runtime": { - "lib/netcore50/System.Net.Primitives.dll": {} - } - }, - "System.Numerics.Vectors/4.1.0": { - "dependencies": { - "System.Globalization": "4.0.10", - "System.Resources.ResourceManager": "4.0.0", - "System.Runtime": "4.0.20", - "System.Runtime.Extensions": "4.0.10" - }, - "compile": { - "ref/dotnet/System.Numerics.Vectors.dll": {} - }, - "runtime": { - "lib/dotnet/System.Numerics.Vectors.dll": {} - } - }, - "System.ObjectModel/4.0.10": { - "dependencies": { - "System.Collections": "4.0.10", - "System.Diagnostics.Debug": "4.0.10", - "System.Resources.ResourceManager": "4.0.0", - "System.Runtime": "4.0.20", - "System.Threading": "4.0.10" - }, - "compile": { - "ref/dotnet/System.ObjectModel.dll": {} - }, - "runtime": { - "lib/dotnet/System.ObjectModel.dll": {} - } - }, - "System.Private.Networking/4.0.0": { - "dependencies": { - "Microsoft.Win32.Primitives": "4.0.0", - "System.Collections": "4.0.10", - "System.Collections.NonGeneric": "4.0.0", - "System.Diagnostics.Debug": "4.0.10", - "System.Diagnostics.Tracing": "4.0.20", - "System.Globalization": "4.0.10", - "System.IO": "4.0.10", - "System.IO.FileSystem": "4.0.0", - "System.IO.FileSystem.Primitives": "4.0.0", - "System.Resources.ResourceManager": "4.0.0", - "System.Runtime": "4.0.20", - "System.Runtime.Extensions": "4.0.10", - "System.Runtime.Handles": "4.0.0", - "System.Runtime.InteropServices": "4.0.20", - "System.Threading": "4.0.10", - "System.Threading.Overlapped": "4.0.0", - "System.Threading.Tasks": "4.0.10" - }, - "compile": { - "ref/netcore50/_._": {} - }, - "runtime": { - "lib/netcore50/System.Private.Networking.dll": {} - } - }, - "System.Private.Uri/4.0.0": { - "compile": { - "ref/netcore50/_._": {} - }, - "runtime": { - "lib/netcore50/System.Private.Uri.dll": {} - }, - "runtimeTargets": { - "runtimes/win8-aot/lib/netcore50/System.Private.Uri.dll": { - "assetType": "runtime", - "rid": "win8-aot" - } - } - }, - "System.Reflection/4.0.10": { - "dependencies": { - "System.IO": "4.0.0", - "System.Reflection.Primitives": "4.0.0", - "System.Runtime": "4.0.20" - }, - "compile": { - "ref/dotnet/System.Reflection.dll": {} - }, - "runtime": { - "lib/netcore50/System.Reflection.dll": {} - }, - "runtimeTargets": { - "runtimes/win8-aot/lib/netcore50/System.Reflection.dll": { - "assetType": "runtime", - "rid": "win8-aot" - } - } - }, - "System.Reflection.DispatchProxy/4.0.0": { - "dependencies": { - "System.Collections": "4.0.10", - "System.Linq": "4.0.0", - "System.Reflection": "4.0.10", - "System.Reflection.Extensions": "4.0.0", - "System.Reflection.Primitives": "4.0.0", - "System.Resources.ResourceManager": "4.0.0", - "System.Runtime": "4.0.20", - "System.Threading": "4.0.10" - }, - "compile": { - "ref/dotnet/System.Reflection.DispatchProxy.dll": {} - }, - "runtime": { - "lib/netcore50/System.Reflection.DispatchProxy.dll": {} - }, - "runtimeTargets": { - "runtimes/win8-aot/lib/netcore50/System.Reflection.DispatchProxy.dll": { - "assetType": "runtime", - "rid": "win8-aot" - } - } - }, - "System.Reflection.Extensions/4.0.0": { - "dependencies": { - "System.Diagnostics.Debug": "4.0.10", - "System.Reflection": "4.0.10", - "System.Reflection.Primitives": "4.0.0", - "System.Reflection.TypeExtensions": "4.0.0", - "System.Resources.ResourceManager": "4.0.0", - "System.Runtime": "4.0.20", - "System.Runtime.Extensions": "4.0.10" - }, - "compile": { - "ref/netcore50/System.Reflection.Extensions.dll": {} - }, - "runtime": { - "lib/netcore50/System.Reflection.Extensions.dll": {} - }, - "runtimeTargets": { - "runtimes/win8-aot/lib/netcore50/System.Reflection.Extensions.dll": { - "assetType": "runtime", - "rid": "win8-aot" - } - } - }, - "System.Reflection.Metadata/1.0.22": { - "dependencies": { - "System.Collections": "4.0.0", - "System.Collections.Immutable": "1.1.37", - "System.Diagnostics.Debug": "4.0.0", - "System.IO": "4.0.0", - "System.Reflection": "4.0.0", - "System.Reflection.Extensions": "4.0.0", - "System.Reflection.Primitives": "4.0.0", - "System.Resources.ResourceManager": "4.0.0", - "System.Runtime": "4.0.0", - "System.Runtime.Extensions": "4.0.0", - "System.Runtime.InteropServices": "4.0.0", - "System.Text.Encoding": "4.0.0", - "System.Text.Encoding.Extensions": "4.0.0", - "System.Threading": "4.0.0" - }, - "compile": { - "lib/dotnet/System.Reflection.Metadata.dll": {} - }, - "runtime": { - "lib/dotnet/System.Reflection.Metadata.dll": {} - } - }, - "System.Reflection.Primitives/4.0.0": { - "dependencies": { - "System.Runtime": "4.0.0", - "System.Threading": "4.0.0" - }, - "compile": { - "ref/netcore50/System.Reflection.Primitives.dll": {} - }, - "runtime": { - "lib/netcore50/System.Reflection.Primitives.dll": {} - }, - "runtimeTargets": { - "runtimes/win8-aot/lib/netcore50/System.Reflection.Primitives.dll": { - "assetType": "runtime", - "rid": "win8-aot" - } - } - }, - "System.Reflection.TypeExtensions/4.0.0": { - "dependencies": { - "System.Diagnostics.Contracts": "4.0.0", - "System.Diagnostics.Debug": "4.0.10", - "System.Linq": "4.0.0", - "System.Reflection": "4.0.10", - "System.Reflection.Primitives": "4.0.0", - "System.Resources.ResourceManager": "4.0.0", - "System.Runtime": "4.0.20", - "System.Runtime.Extensions": "4.0.10" - }, - "compile": { - "ref/dotnet/System.Reflection.TypeExtensions.dll": {} - }, - "runtime": { - "lib/netcore50/System.Reflection.TypeExtensions.dll": {} - }, - "runtimeTargets": { - "runtimes/win8-aot/lib/netcore50/System.Reflection.TypeExtensions.dll": { - "assetType": "runtime", - "rid": "win8-aot" - } - } - }, - "System.Resources.ResourceManager/4.0.0": { - "dependencies": { - "System.Globalization": "4.0.0", - "System.Reflection": "4.0.10", - "System.Runtime": "4.0.20" - }, - "compile": { - "ref/netcore50/System.Resources.ResourceManager.dll": {} - }, - "runtime": { - "lib/netcore50/System.Resources.ResourceManager.dll": {} - }, - "runtimeTargets": { - "runtimes/win8-aot/lib/netcore50/System.Resources.ResourceManager.dll": { - "assetType": "runtime", - "rid": "win8-aot" - } - } - }, - "System.Runtime/4.0.20": { - "dependencies": { - "System.Private.Uri": "4.0.0" - }, - "compile": { - "ref/dotnet/System.Runtime.dll": {} - }, - "runtime": { - "lib/netcore50/System.Runtime.dll": {} - }, - "runtimeTargets": { - "runtimes/win8-aot/lib/netcore50/System.Runtime.dll": { - "assetType": "runtime", - "rid": "win8-aot" - } - } - }, - "System.Runtime.Extensions/4.0.10": { - "dependencies": { - "System.Runtime": "4.0.20" - }, - "compile": { - "ref/dotnet/System.Runtime.Extensions.dll": {} - }, - "runtime": { - "lib/netcore50/System.Runtime.Extensions.dll": {} - }, - "runtimeTargets": { - "runtimes/win8-aot/lib/netcore50/System.Runtime.Extensions.dll": { - "assetType": "runtime", - "rid": "win8-aot" - } - } - }, - "System.Runtime.Handles/4.0.0": { - "dependencies": { - "System.Runtime": "4.0.0" - }, - "compile": { - "ref/dotnet/System.Runtime.Handles.dll": {} - }, - "runtime": { - "lib/netcore50/System.Runtime.Handles.dll": {} - }, - "runtimeTargets": { - "runtimes/win8-aot/lib/netcore50/System.Runtime.Handles.dll": { - "assetType": "runtime", - "rid": "win8-aot" - } - } - }, - "System.Runtime.InteropServices/4.0.20": { - "dependencies": { - "System.Reflection": "4.0.0", - "System.Reflection.Primitives": "4.0.0", - "System.Runtime": "4.0.0", - "System.Runtime.Handles": "4.0.0" - }, - "compile": { - "ref/dotnet/System.Runtime.InteropServices.dll": {} - }, - "runtime": { - "lib/netcore50/System.Runtime.InteropServices.dll": {} - }, - "runtimeTargets": { - "runtimes/win8-aot/lib/netcore50/System.Runtime.InteropServices.dll": { - "assetType": "runtime", - "rid": "win8-aot" - } - } - }, - "System.Runtime.InteropServices.WindowsRuntime/4.0.0": { - "compile": { - "ref/netcore50/System.Runtime.InteropServices.WindowsRuntime.dll": {} - }, - "runtime": { - "lib/netcore50/System.Runtime.InteropServices.WindowsRuntime.dll": {} - }, - "runtimeTargets": { - "runtimes/win8-aot/lib/netcore50/System.Runtime.InteropServices.WindowsRuntime.dll": { - "assetType": "runtime", - "rid": "win8-aot" - } - } - }, - "System.Runtime.Numerics/4.0.0": { - "dependencies": { - "System.Globalization": "4.0.10", - "System.Resources.ResourceManager": "4.0.0", - "System.Runtime": "4.0.20", - "System.Runtime.Extensions": "4.0.10" - }, - "compile": { - "ref/netcore50/System.Runtime.Numerics.dll": {} - }, - "runtime": { - "lib/netcore50/System.Runtime.Numerics.dll": {} - } - }, - "System.Runtime.WindowsRuntime/4.0.10": { - "dependencies": { - "System.Diagnostics.Debug": "4.0.10", - "System.Globalization": "4.0.0", - "System.IO": "4.0.10", - "System.ObjectModel": "4.0.0", - "System.Resources.ResourceManager": "4.0.0", - "System.Runtime": "4.0.20", - "System.Runtime.Extensions": "4.0.0", - "System.Runtime.InteropServices": "4.0.20", - "System.Threading": "4.0.10", - "System.Threading.Tasks": "4.0.10" - }, - "compile": { - "ref/netcore50/System.Runtime.WindowsRuntime.dll": {} - }, - "runtime": { - "lib/netcore50/System.Runtime.WindowsRuntime.dll": {} - }, - "runtimeTargets": { - "runtimes/win8-aot/lib/netcore50/System.Runtime.WindowsRuntime.dll": { - "assetType": "runtime", - "rid": "win8-aot" - } - } - }, - "System.Security.Claims/4.0.0": { - "dependencies": { - "System.Collections": "4.0.0", - "System.Diagnostics.Debug": "4.0.0", - "System.Globalization": "4.0.0", - "System.IO": "4.0.0", - "System.Resources.ResourceManager": "4.0.0", - "System.Runtime": "4.0.20", - "System.Runtime.Extensions": "4.0.0", - "System.Security.Principal": "4.0.0" - }, - "compile": { - "ref/dotnet/System.Security.Claims.dll": {} - }, - "runtime": { - "lib/dotnet/System.Security.Claims.dll": {} - } - }, - "System.Security.Principal/4.0.0": { - "dependencies": { - "System.Runtime": "4.0.0" - }, - "compile": { - "ref/netcore50/System.Security.Principal.dll": {} - }, - "runtime": { - "lib/netcore50/System.Security.Principal.dll": {} - } - }, - "System.Text.Encoding/4.0.10": { - "dependencies": { - "System.Runtime": "4.0.0" - }, - "compile": { - "ref/dotnet/System.Text.Encoding.dll": {} - }, - "runtime": { - "lib/netcore50/System.Text.Encoding.dll": {} - }, - "runtimeTargets": { - "runtimes/win8-aot/lib/netcore50/System.Text.Encoding.dll": { - "assetType": "runtime", - "rid": "win8-aot" - } - } - }, - "System.Text.Encoding.Extensions/4.0.10": { - "dependencies": { - "System.Runtime": "4.0.0", - "System.Text.Encoding": "4.0.10" - }, - "compile": { - "ref/dotnet/System.Text.Encoding.Extensions.dll": {} - }, - "runtime": { - "lib/netcore50/System.Text.Encoding.Extensions.dll": {} - }, - "runtimeTargets": { - "runtimes/win8-aot/lib/netcore50/System.Text.Encoding.Extensions.dll": { - "assetType": "runtime", - "rid": "win8-aot" - } - } - }, - "System.Text.RegularExpressions/4.0.10": { - "dependencies": { - "System.Collections": "4.0.10", - "System.Globalization": "4.0.10", - "System.Resources.ResourceManager": "4.0.0", - "System.Runtime": "4.0.20", - "System.Runtime.Extensions": "4.0.10", - "System.Threading": "4.0.10" - }, - "compile": { - "ref/dotnet/System.Text.RegularExpressions.dll": {} - }, - "runtime": { - "lib/dotnet/System.Text.RegularExpressions.dll": {} - } - }, - "System.Threading/4.0.10": { - "dependencies": { - "System.Runtime": "4.0.0", - "System.Threading.Tasks": "4.0.0" - }, - "compile": { - "ref/dotnet/System.Threading.dll": {} - }, - "runtime": { - "lib/netcore50/System.Threading.dll": {} - }, - "runtimeTargets": { - "runtimes/win8-aot/lib/netcore50/System.Threading.dll": { - "assetType": "runtime", - "rid": "win8-aot" - } - } - }, - "System.Threading.Overlapped/4.0.0": { - "dependencies": { - "System.Resources.ResourceManager": "4.0.0", - "System.Runtime": "4.0.20", - "System.Runtime.Extensions": "4.0.0", - "System.Runtime.Handles": "4.0.0", - "System.Runtime.InteropServices": "4.0.20", - "System.Threading": "4.0.10" - }, - "compile": { - "ref/dotnet/System.Threading.Overlapped.dll": {} - }, - "runtime": { - "lib/netcore50/System.Threading.Overlapped.dll": {} - } - }, - "System.Threading.Tasks/4.0.10": { - "dependencies": { - "System.Runtime": "4.0.0" - }, - "compile": { - "ref/dotnet/System.Threading.Tasks.dll": {} - }, - "runtime": { - "lib/netcore50/System.Threading.Tasks.dll": {} - }, - "runtimeTargets": { - "runtimes/win8-aot/lib/netcore50/System.Threading.Tasks.dll": { - "assetType": "runtime", - "rid": "win8-aot" - } - } - }, - "System.Threading.Tasks.Dataflow/4.5.25": { - "dependencies": { - "System.Collections": "4.0.0", - "System.Collections.Concurrent": "4.0.0", - "System.Diagnostics.Debug": "4.0.0", - "System.Diagnostics.Tracing": "4.0.0", - "System.Dynamic.Runtime": "4.0.0", - "System.Linq": "4.0.0", - "System.Resources.ResourceManager": "4.0.0", - "System.Runtime": "4.0.0", - "System.Runtime.Extensions": "4.0.0", - "System.Threading": "4.0.0", - "System.Threading.Tasks": "4.0.0" - }, - "compile": { - "lib/dotnet/System.Threading.Tasks.Dataflow.dll": {} - }, - "runtime": { - "lib/dotnet/System.Threading.Tasks.Dataflow.dll": {} - } - }, - "System.Threading.Tasks.Parallel/4.0.0": { - "dependencies": { - "System.Collections.Concurrent": "4.0.10", - "System.Diagnostics.Debug": "4.0.10", - "System.Diagnostics.Tracing": "4.0.20", - "System.Resources.ResourceManager": "4.0.0", - "System.Runtime": "4.0.20", - "System.Runtime.Extensions": "4.0.10", - "System.Threading": "4.0.10", - "System.Threading.Tasks": "4.0.10" - }, - "compile": { - "ref/netcore50/System.Threading.Tasks.Parallel.dll": {} - }, - "runtime": { - "lib/netcore50/System.Threading.Tasks.Parallel.dll": {} - } - }, - "System.Threading.Timer/4.0.0": { - "compile": { - "ref/netcore50/System.Threading.Timer.dll": {} - }, - "runtime": { - "lib/netcore50/System.Threading.Timer.dll": {} - }, - "runtimeTargets": { - "runtimes/win8-aot/lib/netcore50/System.Threading.Timer.dll": { - "assetType": "runtime", - "rid": "win8-aot" - } - } - }, - "System.Xml.ReaderWriter/4.0.10": { - "dependencies": { - "System.Collections": "4.0.10", - "System.Diagnostics.Debug": "4.0.10", - "System.Globalization": "4.0.10", - "System.IO": "4.0.10", - "System.IO.FileSystem": "4.0.0", - "System.IO.FileSystem.Primitives": "4.0.0", - "System.Resources.ResourceManager": "4.0.0", - "System.Runtime": "4.0.20", - "System.Runtime.Extensions": "4.0.10", - "System.Runtime.InteropServices": "4.0.20", - "System.Text.Encoding": "4.0.10", - "System.Text.Encoding.Extensions": "4.0.10", - "System.Text.RegularExpressions": "4.0.10", - "System.Threading.Tasks": "4.0.10" - }, - "compile": { - "ref/dotnet/System.Xml.ReaderWriter.dll": {} - }, - "runtime": { - "lib/dotnet/System.Xml.ReaderWriter.dll": {} - } - }, - "System.Xml.XDocument/4.0.10": { - "dependencies": { - "System.Collections": "4.0.10", - "System.Diagnostics.Debug": "4.0.10", - "System.Globalization": "4.0.10", - "System.IO": "4.0.10", - "System.Reflection": "4.0.10", - "System.Resources.ResourceManager": "4.0.0", - "System.Runtime": "4.0.20", - "System.Runtime.Extensions": "4.0.10", - "System.Text.Encoding": "4.0.10", - "System.Threading": "4.0.10", - "System.Xml.ReaderWriter": "4.0.10" - }, - "compile": { - "ref/dotnet/System.Xml.XDocument.dll": {} - }, - "runtime": { - "lib/dotnet/System.Xml.XDocument.dll": {} - } - } - }, - "UAP,Version=v10.0/win10-arm": { - "Microsoft.CSharp/4.0.0": { - "dependencies": { - "System.Collections": "4.0.10", - "System.Diagnostics.Debug": "4.0.10", - "System.Dynamic.Runtime": "4.0.0", - "System.Globalization": "4.0.10", - "System.Linq": "4.0.0", - "System.Linq.Expressions": "4.0.0", - "System.ObjectModel": "4.0.10", - "System.Reflection": "4.0.10", - "System.Reflection.Extensions": "4.0.0", - "System.Reflection.Primitives": "4.0.0", - "System.Reflection.TypeExtensions": "4.0.0", - "System.Resources.ResourceManager": "4.0.0", - "System.Runtime": "4.0.20", - "System.Runtime.Extensions": "4.0.10", - "System.Runtime.InteropServices": "4.0.20", - "System.Threading": "4.0.10" - }, - "compile": { - "ref/netcore50/Microsoft.CSharp.dll": {} - }, - "runtime": { - "lib/netcore50/Microsoft.CSharp.dll": {} - } - }, - "Microsoft.NETCore/5.0.0": { - "dependencies": { - "Microsoft.CSharp": "4.0.0", - "Microsoft.NETCore.Targets": "1.0.0", - "Microsoft.VisualBasic": "10.0.0", - "System.AppContext": "4.0.0", - "System.Collections": "4.0.10", - "System.Collections.Concurrent": "4.0.10", - "System.Collections.Immutable": "1.1.37", - "System.ComponentModel": "4.0.0", - "System.ComponentModel.Annotations": "4.0.10", - "System.Diagnostics.Debug": "4.0.10", - "System.Diagnostics.Tools": "4.0.0", - "System.Diagnostics.Tracing": "4.0.20", - "System.Dynamic.Runtime": "4.0.10", - "System.Globalization": "4.0.10", - "System.Globalization.Calendars": "4.0.0", - "System.Globalization.Extensions": "4.0.0", - "System.IO": "4.0.10", - "System.IO.Compression": "4.0.0", - "System.IO.Compression.ZipFile": "4.0.0", - "System.IO.FileSystem": "4.0.0", - "System.IO.FileSystem.Primitives": "4.0.0", - "System.IO.UnmanagedMemoryStream": "4.0.0", - "System.Linq": "4.0.0", - "System.Linq.Expressions": "4.0.10", - "System.Linq.Parallel": "4.0.0", - "System.Linq.Queryable": "4.0.0", - "System.Net.Http": "4.0.0", - "System.Net.NetworkInformation": "4.0.0", - "System.Net.Primitives": "4.0.10", - "System.Numerics.Vectors": "4.1.0", - "System.ObjectModel": "4.0.10", - "System.Reflection": "4.0.10", - "System.Reflection.DispatchProxy": "4.0.0", - "System.Reflection.Extensions": "4.0.0", - "System.Reflection.Metadata": "1.0.22", - "System.Reflection.Primitives": "4.0.0", - "System.Reflection.TypeExtensions": "4.0.0", - "System.Resources.ResourceManager": "4.0.0", - "System.Runtime": "4.0.20", - "System.Runtime.Extensions": "4.0.10", - "System.Runtime.Handles": "4.0.0", - "System.Runtime.InteropServices": "4.0.20", - "System.Runtime.Numerics": "4.0.0", - "System.Security.Claims": "4.0.0", - "System.Security.Principal": "4.0.0", - "System.Text.Encoding": "4.0.10", - "System.Text.Encoding.Extensions": "4.0.10", - "System.Text.RegularExpressions": "4.0.10", - "System.Threading": "4.0.10", - "System.Threading.Tasks": "4.0.10", - "System.Threading.Tasks.Dataflow": "4.5.25", - "System.Threading.Tasks.Parallel": "4.0.0", - "System.Threading.Timer": "4.0.0", - "System.Xml.ReaderWriter": "4.0.10", - "System.Xml.XDocument": "4.0.10" - } - }, - "Microsoft.NETCore.Platforms/1.0.0": {}, - "Microsoft.NETCore.Portable.Compatibility/1.0.0": { - "dependencies": { - "Microsoft.NETCore.Runtime": "1.0.0" - }, - "compile": { - "ref/netcore50/System.ComponentModel.DataAnnotations.dll": {}, - "ref/netcore50/System.Core.dll": {}, - "ref/netcore50/System.Net.dll": {}, - "ref/netcore50/System.Numerics.dll": {}, - "ref/netcore50/System.Runtime.Serialization.dll": {}, - "ref/netcore50/System.ServiceModel.Web.dll": {}, - "ref/netcore50/System.ServiceModel.dll": {}, - "ref/netcore50/System.Windows.dll": {}, - "ref/netcore50/System.Xml.Linq.dll": {}, - "ref/netcore50/System.Xml.Serialization.dll": {}, - "ref/netcore50/System.Xml.dll": {}, - "ref/netcore50/System.dll": {}, - "ref/netcore50/mscorlib.dll": {} - }, - "runtime": { - "lib/netcore50/System.ComponentModel.DataAnnotations.dll": {}, - "lib/netcore50/System.Core.dll": {}, - "lib/netcore50/System.Net.dll": {}, - "lib/netcore50/System.Numerics.dll": {}, - "lib/netcore50/System.Runtime.Serialization.dll": {}, - "lib/netcore50/System.ServiceModel.Web.dll": {}, - "lib/netcore50/System.ServiceModel.dll": {}, - "lib/netcore50/System.Windows.dll": {}, - "lib/netcore50/System.Xml.Linq.dll": {}, - "lib/netcore50/System.Xml.Serialization.dll": {}, - "lib/netcore50/System.Xml.dll": {}, - "lib/netcore50/System.dll": {} - } - }, - "Microsoft.NETCore.Runtime/1.0.0": { - "dependencies": { - "Microsoft.NETCore.Runtime.CoreCLR-arm": "1.0.0" - } - }, - "Microsoft.NETCore.Runtime.CoreCLR-arm/1.0.0": { - "dependencies": { - "System.Collections": "[4.0.10]", - "System.Diagnostics.Contracts": "[4.0.0]", - "System.Diagnostics.Debug": "[4.0.10]", - "System.Diagnostics.StackTrace": "[4.0.0]", - "System.Diagnostics.Tools": "[4.0.0]", - "System.Diagnostics.Tracing": "[4.0.20]", - "System.Globalization": "[4.0.10]", - "System.Globalization.Calendars": "[4.0.0]", - "System.IO": "[4.0.10]", - "System.ObjectModel": "[4.0.10]", - "System.Private.Uri": "[4.0.0]", - "System.Reflection": "[4.0.10]", - "System.Reflection.Extensions": "[4.0.0]", - "System.Reflection.Primitives": "[4.0.0]", - "System.Resources.ResourceManager": "[4.0.0]", - "System.Runtime": "[4.0.20]", - "System.Runtime.Extensions": "[4.0.10]", - "System.Runtime.Handles": "[4.0.0]", - "System.Runtime.InteropServices": "[4.0.20]", - "System.Text.Encoding": "[4.0.10]", - "System.Text.Encoding.Extensions": "[4.0.10]", - "System.Threading": "[4.0.10]", - "System.Threading.Tasks": "[4.0.10]", - "System.Threading.Timer": "[4.0.0]" - }, - "compile": { - "ref/dotnet/_._": {} - }, - "runtime": { - "runtimes/win8-arm/lib/dotnet/mscorlib.ni.dll": {} - }, - "native": { - "runtimes/win8-arm/native/clretwrc.dll": {}, - "runtimes/win8-arm/native/coreclr.dll": {}, - "runtimes/win8-arm/native/dbgshim.dll": {}, - "runtimes/win8-arm/native/mscordaccore.dll": {}, - "runtimes/win8-arm/native/mscordbi.dll": {}, - "runtimes/win8-arm/native/mscorrc.debug.dll": {}, - "runtimes/win8-arm/native/mscorrc.dll": {} - } - }, - "Microsoft.NETCore.Targets/1.0.0": { - "dependencies": { - "Microsoft.NETCore.Platforms": "1.0.0", - "Microsoft.NETCore.Targets.UniversalWindowsPlatform": "5.0.0" - } - }, - "Microsoft.NETCore.Targets.UniversalWindowsPlatform/5.0.0": {}, - "Microsoft.VisualBasic/10.0.0": { - "dependencies": { - "System.Collections": "4.0.10", - "System.Diagnostics.Debug": "4.0.10", - "System.Dynamic.Runtime": "4.0.10", - "System.Globalization": "4.0.10", - "System.Linq": "4.0.0", - "System.Linq.Expressions": "4.0.10", - "System.ObjectModel": "4.0.10", - "System.Reflection": "4.0.10", - "System.Reflection.Extensions": "4.0.0", - "System.Reflection.Primitives": "4.0.0", - "System.Reflection.TypeExtensions": "4.0.0", - "System.Resources.ResourceManager": "4.0.0", - "System.Runtime": "4.0.20", - "System.Runtime.Extensions": "4.0.10", - "System.Runtime.InteropServices": "4.0.20", - "System.Threading": "4.0.10" - }, - "compile": { - "ref/netcore50/Microsoft.VisualBasic.dll": {} - }, - "runtime": { - "lib/netcore50/Microsoft.VisualBasic.dll": {} - } - }, - "Microsoft.Win32.Primitives/4.0.0": { - "dependencies": { - "System.Runtime": "4.0.20", - "System.Runtime.InteropServices": "4.0.20" - }, - "compile": { - "ref/dotnet/Microsoft.Win32.Primitives.dll": {} - }, - "runtime": { - "lib/dotnet/Microsoft.Win32.Primitives.dll": {} - } - }, - "System.AppContext/4.0.0": { - "dependencies": { - "System.Collections": "4.0.0", - "System.Resources.ResourceManager": "4.0.0", - "System.Runtime": "4.0.20", - "System.Threading": "4.0.0" - }, - "compile": { - "ref/dotnet/System.AppContext.dll": {} - }, - "runtime": { - "lib/netcore50/System.AppContext.dll": {} - } - }, - "System.Collections/4.0.10": { - "dependencies": { - "System.Diagnostics.Debug": "4.0.0", - "System.Resources.ResourceManager": "4.0.0", - "System.Runtime": "4.0.20", - "System.Runtime.Extensions": "4.0.0", - "System.Threading": "4.0.0" - }, - "compile": { - "ref/dotnet/System.Collections.dll": {} - }, - "runtime": { - "lib/netcore50/System.Collections.dll": {} - } - }, - "System.Collections.Concurrent/4.0.10": { - "dependencies": { - "System.Collections": "4.0.10", - "System.Diagnostics.Debug": "4.0.10", - "System.Diagnostics.Tracing": "4.0.20", - "System.Globalization": "4.0.10", - "System.Resources.ResourceManager": "4.0.0", - "System.Runtime": "4.0.20", - "System.Runtime.Extensions": "4.0.10", - "System.Threading": "4.0.10", - "System.Threading.Tasks": "4.0.10" - }, - "compile": { - "ref/dotnet/System.Collections.Concurrent.dll": {} - }, - "runtime": { - "lib/dotnet/System.Collections.Concurrent.dll": {} - } - }, - "System.Collections.Immutable/1.1.37": { - "dependencies": { - "System.Collections": "4.0.0", - "System.Diagnostics.Debug": "4.0.0", - "System.Globalization": "4.0.0", - "System.Linq": "4.0.0", - "System.Resources.ResourceManager": "4.0.0", - "System.Runtime": "4.0.0", - "System.Runtime.Extensions": "4.0.0", - "System.Threading": "4.0.0" - }, - "compile": { - "lib/dotnet/System.Collections.Immutable.dll": {} - }, - "runtime": { - "lib/dotnet/System.Collections.Immutable.dll": {} - } - }, - "System.Collections.NonGeneric/4.0.0": { - "dependencies": { - "System.Diagnostics.Debug": "4.0.10", - "System.Globalization": "4.0.10", - "System.Resources.ResourceManager": "4.0.0", - "System.Runtime": "4.0.20", - "System.Runtime.Extensions": "4.0.10", - "System.Threading": "4.0.10" - }, - "compile": { - "ref/dotnet/System.Collections.NonGeneric.dll": {} - }, - "runtime": { - "lib/dotnet/System.Collections.NonGeneric.dll": {} - } - }, - "System.ComponentModel/4.0.0": { - "dependencies": { - "System.Runtime": "4.0.20" - }, - "compile": { - "ref/netcore50/System.ComponentModel.dll": {} - }, - "runtime": { - "lib/netcore50/System.ComponentModel.dll": {} - } - }, - "System.ComponentModel.Annotations/4.0.10": { - "dependencies": { - "System.Collections": "4.0.10", - "System.ComponentModel": "4.0.0", - "System.Globalization": "4.0.10", - "System.Linq": "4.0.0", - "System.Reflection": "4.0.10", - "System.Reflection.Extensions": "4.0.0", - "System.Resources.ResourceManager": "4.0.0", - "System.Runtime": "4.0.20", - "System.Runtime.Extensions": "4.0.10", - "System.Text.RegularExpressions": "4.0.10", - "System.Threading": "4.0.10" - }, - "compile": { - "ref/dotnet/System.ComponentModel.Annotations.dll": {} - }, - "runtime": { - "lib/dotnet/System.ComponentModel.Annotations.dll": {} - } - }, - "System.Diagnostics.Contracts/4.0.0": { - "compile": { - "ref/netcore50/System.Diagnostics.Contracts.dll": {} - }, - "runtime": { - "lib/netcore50/System.Diagnostics.Contracts.dll": {} - } - }, - "System.Diagnostics.Debug/4.0.10": { - "dependencies": { - "System.Runtime": "4.0.0" - }, - "compile": { - "ref/dotnet/System.Diagnostics.Debug.dll": {} - }, - "runtime": { - "lib/netcore50/System.Diagnostics.Debug.dll": {} - } - }, - "System.Diagnostics.StackTrace/4.0.0": { - "dependencies": { - "System.Runtime": "4.0.20" - }, - "compile": { - "ref/dotnet/System.Diagnostics.StackTrace.dll": {} - }, - "runtime": { - "lib/netcore50/System.Diagnostics.StackTrace.dll": {} - } - }, - "System.Diagnostics.Tools/4.0.0": { - "compile": { - "ref/netcore50/System.Diagnostics.Tools.dll": {} - }, - "runtime": { - "lib/netcore50/System.Diagnostics.Tools.dll": {} - } - }, - "System.Diagnostics.Tracing/4.0.20": { - "dependencies": { - "System.Collections": "4.0.10", - "System.Globalization": "4.0.0", - "System.Reflection": "4.0.10", - "System.Reflection.Extensions": "4.0.0", - "System.Resources.ResourceManager": "4.0.0", - "System.Runtime": "4.0.20", - "System.Runtime.Extensions": "4.0.10", - "System.Runtime.InteropServices": "4.0.0", - "System.Text.Encoding": "4.0.0", - "System.Threading": "4.0.10" - }, - "compile": { - "ref/dotnet/System.Diagnostics.Tracing.dll": {} - }, - "runtime": { - "lib/netcore50/System.Diagnostics.Tracing.dll": {} - } - }, - "System.Dynamic.Runtime/4.0.10": { - "dependencies": { - "System.Collections": "4.0.0", - "System.Diagnostics.Debug": "4.0.0", - "System.Globalization": "4.0.0", - "System.Linq": "4.0.0", - "System.Linq.Expressions": "4.0.10", - "System.ObjectModel": "4.0.0", - "System.Reflection": "4.0.0", - "System.Reflection.Emit.ILGeneration": "4.0.0", - "System.Reflection.Emit.Lightweight": "4.0.0", - "System.Reflection.TypeExtensions": "4.0.0", - "System.Resources.ResourceManager": "4.0.0", - "System.Runtime": "4.0.20", - "System.Runtime.Extensions": "4.0.0", - "System.Threading": "4.0.0" - }, - "compile": { - "ref/dotnet/System.Dynamic.Runtime.dll": {} - }, - "runtime": { - "lib/netcore50/System.Dynamic.Runtime.dll": {} - } - }, - "System.Globalization/4.0.10": { - "dependencies": { - "System.Runtime": "4.0.0" - }, - "compile": { - "ref/dotnet/System.Globalization.dll": {} - }, - "runtime": { - "lib/netcore50/System.Globalization.dll": {} - } - }, - "System.Globalization.Calendars/4.0.0": { - "dependencies": { - "System.Globalization": "4.0.0", - "System.Runtime": "4.0.0" - }, - "compile": { - "ref/dotnet/System.Globalization.Calendars.dll": {} - }, - "runtime": { - "lib/netcore50/System.Globalization.Calendars.dll": {} - } - }, - "System.Globalization.Extensions/4.0.0": { - "dependencies": { - "System.Globalization": "4.0.10", - "System.Resources.ResourceManager": "4.0.0", - "System.Runtime": "4.0.20", - "System.Runtime.Extensions": "4.0.10", - "System.Runtime.InteropServices": "4.0.20" - }, - "compile": { - "ref/dotnet/System.Globalization.Extensions.dll": {} - }, - "runtime": { - "lib/dotnet/System.Globalization.Extensions.dll": {} - } - }, - "System.IO/4.0.10": { - "dependencies": { - "System.Globalization": "4.0.0", - "System.Runtime": "4.0.20", - "System.Text.Encoding": "4.0.10", - "System.Text.Encoding.Extensions": "4.0.0", - "System.Threading": "4.0.0", - "System.Threading.Tasks": "4.0.0" - }, - "compile": { - "ref/dotnet/System.IO.dll": {} - }, - "runtime": { - "lib/netcore50/System.IO.dll": {} - } - }, - "System.IO.Compression/4.0.0": { - "dependencies": { - "System.Collections": "4.0.0", - "System.IO": "4.0.0", - "System.IO.Compression.clrcompression-arm": "4.0.0", - "System.Resources.ResourceManager": "4.0.0", - "System.Runtime": "4.0.0", - "System.Runtime.Extensions": "4.0.0", - "System.Runtime.InteropServices": "4.0.0", - "System.Text.Encoding": "4.0.0", - "System.Threading": "4.0.0", - "System.Threading.Tasks": "4.0.0" - }, - "compile": { - "ref/netcore50/System.IO.Compression.dll": {} - }, - "runtime": { - "lib/netcore50/System.IO.Compression.dll": {} - } - }, - "System.IO.Compression.clrcompression-arm/4.0.0": { - "native": { - "runtimes/win10-arm/native/ClrCompression.dll": {} - } - }, - "System.IO.Compression.ZipFile/4.0.0": { - "dependencies": { - "System.IO": "4.0.10", - "System.IO.Compression": "4.0.0", - "System.IO.FileSystem": "4.0.0", - "System.IO.FileSystem.Primitives": "4.0.0", - "System.Resources.ResourceManager": "4.0.0", - "System.Runtime": "4.0.20", - "System.Runtime.Extensions": "4.0.10", - "System.Text.Encoding": "4.0.10" - }, - "compile": { - "ref/dotnet/System.IO.Compression.ZipFile.dll": {} - }, - "runtime": { - "lib/dotnet/System.IO.Compression.ZipFile.dll": {} - } - }, - "System.IO.FileSystem/4.0.0": { - "dependencies": { - "System.Collections": "4.0.10", - "System.Diagnostics.Debug": "4.0.10", - "System.IO": "4.0.10", - "System.IO.FileSystem.Primitives": "4.0.0", - "System.Resources.ResourceManager": "4.0.0", - "System.Runtime": "4.0.20", - "System.Runtime.Extensions": "4.0.10", - "System.Runtime.Handles": "4.0.0", - "System.Runtime.InteropServices": "4.0.20", - "System.Runtime.WindowsRuntime": "4.0.0", - "System.Text.Encoding": "4.0.10", - "System.Text.Encoding.Extensions": "4.0.10", - "System.Threading": "4.0.10", - "System.Threading.Overlapped": "4.0.0", - "System.Threading.Tasks": "4.0.10" - }, - "compile": { - "ref/dotnet/System.IO.FileSystem.dll": {} - }, - "runtime": { - "lib/netcore50/System.IO.FileSystem.dll": {} - } - }, - "System.IO.FileSystem.Primitives/4.0.0": { - "dependencies": { - "System.Runtime": "4.0.20" - }, - "compile": { - "ref/dotnet/System.IO.FileSystem.Primitives.dll": {} - }, - "runtime": { - "lib/dotnet/System.IO.FileSystem.Primitives.dll": {} - } - }, - "System.IO.UnmanagedMemoryStream/4.0.0": { - "dependencies": { - "System.IO": "4.0.10", - "System.IO.FileSystem.Primitives": "4.0.0", - "System.Resources.ResourceManager": "4.0.0", - "System.Runtime": "4.0.20", - "System.Runtime.InteropServices": "4.0.20", - "System.Threading": "4.0.10", - "System.Threading.Tasks": "4.0.10" - }, - "compile": { - "ref/dotnet/System.IO.UnmanagedMemoryStream.dll": {} - }, - "runtime": { - "lib/dotnet/System.IO.UnmanagedMemoryStream.dll": {} - } - }, - "System.Linq/4.0.0": { - "dependencies": { - "System.Collections": "4.0.10", - "System.Diagnostics.Debug": "4.0.10", - "System.Resources.ResourceManager": "4.0.0", - "System.Runtime": "4.0.20", - "System.Runtime.Extensions": "4.0.10" - }, - "compile": { - "ref/netcore50/System.Linq.dll": {} - }, - "runtime": { - "lib/netcore50/System.Linq.dll": {} - } - }, - "System.Linq.Expressions/4.0.10": { - "dependencies": { - "System.Collections": "4.0.0", - "System.Diagnostics.Debug": "4.0.0", - "System.Globalization": "4.0.0", - "System.IO": "4.0.0", - "System.Linq": "4.0.0", - "System.Reflection": "4.0.0", - "System.Reflection.Emit.ILGeneration": "4.0.0", - "System.Reflection.Emit.Lightweight": "4.0.0", - "System.Reflection.Extensions": "4.0.0", - "System.Reflection.Primitives": "4.0.0", - "System.Reflection.TypeExtensions": "4.0.0", - "System.Resources.ResourceManager": "4.0.0", - "System.Runtime": "4.0.20", - "System.Runtime.Extensions": "4.0.0", - "System.Threading": "4.0.0" - }, - "compile": { - "ref/dotnet/System.Linq.Expressions.dll": {} - }, - "runtime": { - "lib/netcore50/System.Linq.Expressions.dll": {} - } - }, - "System.Linq.Parallel/4.0.0": { - "dependencies": { - "System.Collections": "4.0.10", - "System.Collections.Concurrent": "4.0.10", - "System.Diagnostics.Debug": "4.0.10", - "System.Diagnostics.Tracing": "4.0.20", - "System.Linq": "4.0.0", - "System.Resources.ResourceManager": "4.0.0", - "System.Runtime": "4.0.20", - "System.Runtime.Extensions": "4.0.10", - "System.Threading": "4.0.10", - "System.Threading.Tasks": "4.0.10" - }, - "compile": { - "ref/netcore50/System.Linq.Parallel.dll": {} - }, - "runtime": { - "lib/netcore50/System.Linq.Parallel.dll": {} - } - }, - "System.Linq.Queryable/4.0.0": { - "dependencies": { - "System.Collections": "4.0.10", - "System.Linq": "4.0.0", - "System.Linq.Expressions": "4.0.10", - "System.Reflection": "4.0.10", - "System.Reflection.Extensions": "4.0.0", - "System.Resources.ResourceManager": "4.0.0", - "System.Runtime": "4.0.20" - }, - "compile": { - "ref/netcore50/System.Linq.Queryable.dll": {} - }, - "runtime": { - "lib/netcore50/System.Linq.Queryable.dll": {} - } - }, - "System.Net.Http/4.0.0": { - "dependencies": { - "System.Collections": "4.0.10", - "System.Diagnostics.Debug": "4.0.10", - "System.Globalization": "4.0.10", - "System.IO": "4.0.10", - "System.Net.Primitives": "4.0.0", - "System.Resources.ResourceManager": "4.0.0", - "System.Runtime": "4.0.20", - "System.Runtime.Extensions": "4.0.10", - "System.Runtime.InteropServices": "4.0.20", - "System.Runtime.WindowsRuntime": "4.0.10", - "System.Text.Encoding": "4.0.10", - "System.Text.Encoding.Extensions": "4.0.10", - "System.Threading": "4.0.10", - "System.Threading.Tasks": "4.0.10" - }, - "compile": { - "ref/netcore50/System.Net.Http.dll": {} - }, - "runtime": { - "lib/netcore50/System.Net.Http.dll": {} - } - }, - "System.Net.NetworkInformation/4.0.0": { - "dependencies": { - "System.Runtime": "4.0.0", - "System.Runtime.InteropServices.WindowsRuntime": "4.0.0", - "System.Threading": "4.0.0" - }, - "compile": { - "ref/netcore50/System.Net.NetworkInformation.dll": {} - }, - "runtime": { - "lib/netcore50/System.Net.NetworkInformation.dll": {} - } - }, - "System.Net.Primitives/4.0.10": { - "dependencies": { - "System.Private.Networking": "4.0.0", - "System.Runtime": "4.0.20" - }, - "compile": { - "ref/dotnet/System.Net.Primitives.dll": {} - }, - "runtime": { - "lib/netcore50/System.Net.Primitives.dll": {} - } - }, - "System.Numerics.Vectors/4.1.0": { - "dependencies": { - "System.Globalization": "4.0.10", - "System.Resources.ResourceManager": "4.0.0", - "System.Runtime": "4.0.20", - "System.Runtime.Extensions": "4.0.10" - }, - "compile": { - "ref/dotnet/System.Numerics.Vectors.dll": {} - }, - "runtime": { - "lib/dotnet/System.Numerics.Vectors.dll": {} - } - }, - "System.ObjectModel/4.0.10": { - "dependencies": { - "System.Collections": "4.0.10", - "System.Diagnostics.Debug": "4.0.10", - "System.Resources.ResourceManager": "4.0.0", - "System.Runtime": "4.0.20", - "System.Threading": "4.0.10" - }, - "compile": { - "ref/dotnet/System.ObjectModel.dll": {} - }, - "runtime": { - "lib/dotnet/System.ObjectModel.dll": {} - } - }, - "System.Private.Networking/4.0.0": { - "dependencies": { - "Microsoft.Win32.Primitives": "4.0.0", - "System.Collections": "4.0.10", - "System.Collections.NonGeneric": "4.0.0", - "System.Diagnostics.Debug": "4.0.10", - "System.Diagnostics.Tracing": "4.0.20", - "System.Globalization": "4.0.10", - "System.IO": "4.0.10", - "System.IO.FileSystem": "4.0.0", - "System.IO.FileSystem.Primitives": "4.0.0", - "System.Resources.ResourceManager": "4.0.0", - "System.Runtime": "4.0.20", - "System.Runtime.Extensions": "4.0.10", - "System.Runtime.Handles": "4.0.0", - "System.Runtime.InteropServices": "4.0.20", - "System.Threading": "4.0.10", - "System.Threading.Overlapped": "4.0.0", - "System.Threading.Tasks": "4.0.10" - }, - "compile": { - "ref/netcore50/_._": {} - }, - "runtime": { - "lib/netcore50/System.Private.Networking.dll": {} - } - }, - "System.Private.Uri/4.0.0": { - "compile": { - "ref/netcore50/_._": {} - }, - "runtime": { - "lib/netcore50/System.Private.Uri.dll": {} - } - }, - "System.Reflection/4.0.10": { - "dependencies": { - "System.IO": "4.0.0", - "System.Reflection.Primitives": "4.0.0", - "System.Runtime": "4.0.20" - }, - "compile": { - "ref/dotnet/System.Reflection.dll": {} - }, - "runtime": { - "lib/netcore50/System.Reflection.dll": {} - } - }, - "System.Reflection.DispatchProxy/4.0.0": { - "dependencies": { - "System.Collections": "4.0.10", - "System.Linq": "4.0.0", - "System.Reflection": "4.0.10", - "System.Reflection.Emit": "4.0.0", - "System.Reflection.Emit.ILGeneration": "4.0.0", - "System.Reflection.Extensions": "4.0.0", - "System.Reflection.Primitives": "4.0.0", - "System.Resources.ResourceManager": "4.0.0", - "System.Runtime": "4.0.20", - "System.Threading": "4.0.10" - }, - "compile": { - "ref/dotnet/System.Reflection.DispatchProxy.dll": {} - }, - "runtime": { - "lib/netcore50/System.Reflection.DispatchProxy.dll": {} - } - }, - "System.Reflection.Emit/4.0.0": { - "dependencies": { - "System.IO": "4.0.0", - "System.Reflection": "4.0.0", - "System.Reflection.Emit.ILGeneration": "4.0.0", - "System.Reflection.Primitives": "4.0.0", - "System.Runtime": "4.0.0" - }, - "compile": { - "ref/dotnet/System.Reflection.Emit.dll": {} - }, - "runtime": { - "lib/netcore50/System.Reflection.Emit.dll": {} - } - }, - "System.Reflection.Emit.ILGeneration/4.0.0": { - "dependencies": { - "System.Reflection": "4.0.0", - "System.Reflection.Primitives": "4.0.0", - "System.Runtime": "4.0.0" - }, - "compile": { - "ref/dotnet/System.Reflection.Emit.ILGeneration.dll": {} - }, - "runtime": { - "lib/netcore50/System.Reflection.Emit.ILGeneration.dll": {} - } - }, - "System.Reflection.Emit.Lightweight/4.0.0": { - "dependencies": { - "System.Reflection": "4.0.0", - "System.Reflection.Emit.ILGeneration": "4.0.0", - "System.Reflection.Primitives": "4.0.0", - "System.Runtime": "4.0.0" - }, - "compile": { - "ref/dotnet/System.Reflection.Emit.Lightweight.dll": {} - }, - "runtime": { - "lib/netcore50/System.Reflection.Emit.Lightweight.dll": {} - } - }, - "System.Reflection.Extensions/4.0.0": { - "dependencies": { - "System.Diagnostics.Debug": "4.0.10", - "System.Reflection": "4.0.10", - "System.Reflection.Primitives": "4.0.0", - "System.Reflection.TypeExtensions": "4.0.0", - "System.Resources.ResourceManager": "4.0.0", - "System.Runtime": "4.0.20", - "System.Runtime.Extensions": "4.0.10" - }, - "compile": { - "ref/netcore50/System.Reflection.Extensions.dll": {} - }, - "runtime": { - "lib/netcore50/System.Reflection.Extensions.dll": {} - } - }, - "System.Reflection.Metadata/1.0.22": { - "dependencies": { - "System.Collections": "4.0.0", - "System.Collections.Immutable": "1.1.37", - "System.Diagnostics.Debug": "4.0.0", - "System.IO": "4.0.0", - "System.Reflection": "4.0.0", - "System.Reflection.Extensions": "4.0.0", - "System.Reflection.Primitives": "4.0.0", - "System.Resources.ResourceManager": "4.0.0", - "System.Runtime": "4.0.0", - "System.Runtime.Extensions": "4.0.0", - "System.Runtime.InteropServices": "4.0.0", - "System.Text.Encoding": "4.0.0", - "System.Text.Encoding.Extensions": "4.0.0", - "System.Threading": "4.0.0" - }, - "compile": { - "lib/dotnet/System.Reflection.Metadata.dll": {} - }, - "runtime": { - "lib/dotnet/System.Reflection.Metadata.dll": {} - } - }, - "System.Reflection.Primitives/4.0.0": { - "dependencies": { - "System.Runtime": "4.0.0", - "System.Threading": "4.0.0" - }, - "compile": { - "ref/netcore50/System.Reflection.Primitives.dll": {} - }, - "runtime": { - "lib/netcore50/System.Reflection.Primitives.dll": {} - } - }, - "System.Reflection.TypeExtensions/4.0.0": { - "dependencies": { - "System.Diagnostics.Contracts": "4.0.0", - "System.Diagnostics.Debug": "4.0.10", - "System.Linq": "4.0.0", - "System.Reflection": "4.0.10", - "System.Reflection.Primitives": "4.0.0", - "System.Resources.ResourceManager": "4.0.0", - "System.Runtime": "4.0.20", - "System.Runtime.Extensions": "4.0.10" - }, - "compile": { - "ref/dotnet/System.Reflection.TypeExtensions.dll": {} - }, - "runtime": { - "lib/netcore50/System.Reflection.TypeExtensions.dll": {} - } - }, - "System.Resources.ResourceManager/4.0.0": { - "dependencies": { - "System.Globalization": "4.0.0", - "System.Reflection": "4.0.10", - "System.Runtime": "4.0.20" - }, - "compile": { - "ref/netcore50/System.Resources.ResourceManager.dll": {} - }, - "runtime": { - "lib/netcore50/System.Resources.ResourceManager.dll": {} - } - }, - "System.Runtime/4.0.20": { - "dependencies": { - "System.Private.Uri": "4.0.0" - }, - "compile": { - "ref/dotnet/System.Runtime.dll": {} - }, - "runtime": { - "lib/netcore50/System.Runtime.dll": {} - } - }, - "System.Runtime.Extensions/4.0.10": { - "dependencies": { - "System.Runtime": "4.0.20" - }, - "compile": { - "ref/dotnet/System.Runtime.Extensions.dll": {} - }, - "runtime": { - "lib/netcore50/System.Runtime.Extensions.dll": {} - } - }, - "System.Runtime.Handles/4.0.0": { - "dependencies": { - "System.Runtime": "4.0.0" - }, - "compile": { - "ref/dotnet/System.Runtime.Handles.dll": {} - }, - "runtime": { - "lib/netcore50/System.Runtime.Handles.dll": {} - } - }, - "System.Runtime.InteropServices/4.0.20": { - "dependencies": { - "System.Reflection": "4.0.0", - "System.Reflection.Primitives": "4.0.0", - "System.Runtime": "4.0.0", - "System.Runtime.Handles": "4.0.0" - }, - "compile": { - "ref/dotnet/System.Runtime.InteropServices.dll": {} - }, - "runtime": { - "lib/netcore50/System.Runtime.InteropServices.dll": {} - } - }, - "System.Runtime.InteropServices.WindowsRuntime/4.0.0": { - "compile": { - "ref/netcore50/System.Runtime.InteropServices.WindowsRuntime.dll": {} - }, - "runtime": { - "lib/netcore50/System.Runtime.InteropServices.WindowsRuntime.dll": {} - } - }, - "System.Runtime.Numerics/4.0.0": { - "dependencies": { - "System.Globalization": "4.0.10", - "System.Resources.ResourceManager": "4.0.0", - "System.Runtime": "4.0.20", - "System.Runtime.Extensions": "4.0.10" - }, - "compile": { - "ref/netcore50/System.Runtime.Numerics.dll": {} - }, - "runtime": { - "lib/netcore50/System.Runtime.Numerics.dll": {} - } - }, - "System.Runtime.WindowsRuntime/4.0.10": { - "dependencies": { - "System.Diagnostics.Debug": "4.0.10", - "System.Globalization": "4.0.0", - "System.IO": "4.0.10", - "System.ObjectModel": "4.0.0", - "System.Resources.ResourceManager": "4.0.0", - "System.Runtime": "4.0.20", - "System.Runtime.Extensions": "4.0.0", - "System.Runtime.InteropServices": "4.0.20", - "System.Threading": "4.0.10", - "System.Threading.Tasks": "4.0.10" - }, - "compile": { - "ref/netcore50/System.Runtime.WindowsRuntime.dll": {} - }, - "runtime": { - "lib/netcore50/System.Runtime.WindowsRuntime.dll": {} - } - }, - "System.Security.Claims/4.0.0": { - "dependencies": { - "System.Collections": "4.0.0", - "System.Diagnostics.Debug": "4.0.0", - "System.Globalization": "4.0.0", - "System.IO": "4.0.0", - "System.Resources.ResourceManager": "4.0.0", - "System.Runtime": "4.0.20", - "System.Runtime.Extensions": "4.0.0", - "System.Security.Principal": "4.0.0" - }, - "compile": { - "ref/dotnet/System.Security.Claims.dll": {} - }, - "runtime": { - "lib/dotnet/System.Security.Claims.dll": {} - } - }, - "System.Security.Principal/4.0.0": { - "dependencies": { - "System.Runtime": "4.0.0" - }, - "compile": { - "ref/netcore50/System.Security.Principal.dll": {} - }, - "runtime": { - "lib/netcore50/System.Security.Principal.dll": {} - } - }, - "System.Text.Encoding/4.0.10": { - "dependencies": { - "System.Runtime": "4.0.0" - }, - "compile": { - "ref/dotnet/System.Text.Encoding.dll": {} - }, - "runtime": { - "lib/netcore50/System.Text.Encoding.dll": {} - } - }, - "System.Text.Encoding.Extensions/4.0.10": { - "dependencies": { - "System.Runtime": "4.0.0", - "System.Text.Encoding": "4.0.10" - }, - "compile": { - "ref/dotnet/System.Text.Encoding.Extensions.dll": {} - }, - "runtime": { - "lib/netcore50/System.Text.Encoding.Extensions.dll": {} - } - }, - "System.Text.RegularExpressions/4.0.10": { - "dependencies": { - "System.Collections": "4.0.10", - "System.Globalization": "4.0.10", - "System.Resources.ResourceManager": "4.0.0", - "System.Runtime": "4.0.20", - "System.Runtime.Extensions": "4.0.10", - "System.Threading": "4.0.10" - }, - "compile": { - "ref/dotnet/System.Text.RegularExpressions.dll": {} - }, - "runtime": { - "lib/dotnet/System.Text.RegularExpressions.dll": {} - } - }, - "System.Threading/4.0.10": { - "dependencies": { - "System.Runtime": "4.0.0", - "System.Threading.Tasks": "4.0.0" - }, - "compile": { - "ref/dotnet/System.Threading.dll": {} - }, - "runtime": { - "lib/netcore50/System.Threading.dll": {} - } - }, - "System.Threading.Overlapped/4.0.0": { - "dependencies": { - "System.Resources.ResourceManager": "4.0.0", - "System.Runtime": "4.0.20", - "System.Runtime.Extensions": "4.0.0", - "System.Runtime.Handles": "4.0.0", - "System.Runtime.InteropServices": "4.0.20", - "System.Threading": "4.0.10" - }, - "compile": { - "ref/dotnet/System.Threading.Overlapped.dll": {} - }, - "runtime": { - "lib/netcore50/System.Threading.Overlapped.dll": {} - } - }, - "System.Threading.Tasks/4.0.10": { - "dependencies": { - "System.Runtime": "4.0.0" - }, - "compile": { - "ref/dotnet/System.Threading.Tasks.dll": {} - }, - "runtime": { - "lib/netcore50/System.Threading.Tasks.dll": {} - } - }, - "System.Threading.Tasks.Dataflow/4.5.25": { - "dependencies": { - "System.Collections": "4.0.0", - "System.Collections.Concurrent": "4.0.0", - "System.Diagnostics.Debug": "4.0.0", - "System.Diagnostics.Tracing": "4.0.0", - "System.Dynamic.Runtime": "4.0.0", - "System.Linq": "4.0.0", - "System.Resources.ResourceManager": "4.0.0", - "System.Runtime": "4.0.0", - "System.Runtime.Extensions": "4.0.0", - "System.Threading": "4.0.0", - "System.Threading.Tasks": "4.0.0" - }, - "compile": { - "lib/dotnet/System.Threading.Tasks.Dataflow.dll": {} - }, - "runtime": { - "lib/dotnet/System.Threading.Tasks.Dataflow.dll": {} - } - }, - "System.Threading.Tasks.Parallel/4.0.0": { - "dependencies": { - "System.Collections.Concurrent": "4.0.10", - "System.Diagnostics.Debug": "4.0.10", - "System.Diagnostics.Tracing": "4.0.20", - "System.Resources.ResourceManager": "4.0.0", - "System.Runtime": "4.0.20", - "System.Runtime.Extensions": "4.0.10", - "System.Threading": "4.0.10", - "System.Threading.Tasks": "4.0.10" - }, - "compile": { - "ref/netcore50/System.Threading.Tasks.Parallel.dll": {} - }, - "runtime": { - "lib/netcore50/System.Threading.Tasks.Parallel.dll": {} - } - }, - "System.Threading.Timer/4.0.0": { - "compile": { - "ref/netcore50/System.Threading.Timer.dll": {} - }, - "runtime": { - "lib/netcore50/System.Threading.Timer.dll": {} - } - }, - "System.Xml.ReaderWriter/4.0.10": { - "dependencies": { - "System.Collections": "4.0.10", - "System.Diagnostics.Debug": "4.0.10", - "System.Globalization": "4.0.10", - "System.IO": "4.0.10", - "System.IO.FileSystem": "4.0.0", - "System.IO.FileSystem.Primitives": "4.0.0", - "System.Resources.ResourceManager": "4.0.0", - "System.Runtime": "4.0.20", - "System.Runtime.Extensions": "4.0.10", - "System.Runtime.InteropServices": "4.0.20", - "System.Text.Encoding": "4.0.10", - "System.Text.Encoding.Extensions": "4.0.10", - "System.Text.RegularExpressions": "4.0.10", - "System.Threading.Tasks": "4.0.10" - }, - "compile": { - "ref/dotnet/System.Xml.ReaderWriter.dll": {} - }, - "runtime": { - "lib/dotnet/System.Xml.ReaderWriter.dll": {} - } - }, - "System.Xml.XDocument/4.0.10": { - "dependencies": { - "System.Collections": "4.0.10", - "System.Diagnostics.Debug": "4.0.10", - "System.Globalization": "4.0.10", - "System.IO": "4.0.10", - "System.Reflection": "4.0.10", - "System.Resources.ResourceManager": "4.0.0", - "System.Runtime": "4.0.20", - "System.Runtime.Extensions": "4.0.10", - "System.Text.Encoding": "4.0.10", - "System.Threading": "4.0.10", - "System.Xml.ReaderWriter": "4.0.10" - }, - "compile": { - "ref/dotnet/System.Xml.XDocument.dll": {} - }, - "runtime": { - "lib/dotnet/System.Xml.XDocument.dll": {} - } - } - }, - "UAP,Version=v10.0/win10-arm-aot": { - "Microsoft.CSharp/4.0.0": { - "dependencies": { - "System.Collections": "4.0.10", - "System.Diagnostics.Debug": "4.0.10", - "System.Dynamic.Runtime": "4.0.0", - "System.Globalization": "4.0.10", - "System.Linq": "4.0.0", - "System.Linq.Expressions": "4.0.0", - "System.ObjectModel": "4.0.10", - "System.Reflection": "4.0.10", - "System.Reflection.Extensions": "4.0.0", - "System.Reflection.Primitives": "4.0.0", - "System.Reflection.TypeExtensions": "4.0.0", - "System.Resources.ResourceManager": "4.0.0", - "System.Runtime": "4.0.20", - "System.Runtime.Extensions": "4.0.10", - "System.Runtime.InteropServices": "4.0.20", - "System.Threading": "4.0.10" - }, - "compile": { - "ref/netcore50/Microsoft.CSharp.dll": {} - }, - "runtime": { - "lib/netcore50/Microsoft.CSharp.dll": {} - } - }, - "Microsoft.NETCore/5.0.0": { - "dependencies": { - "Microsoft.CSharp": "4.0.0", - "Microsoft.NETCore.Targets": "1.0.0", - "Microsoft.VisualBasic": "10.0.0", - "System.AppContext": "4.0.0", - "System.Collections": "4.0.10", - "System.Collections.Concurrent": "4.0.10", - "System.Collections.Immutable": "1.1.37", - "System.ComponentModel": "4.0.0", - "System.ComponentModel.Annotations": "4.0.10", - "System.Diagnostics.Debug": "4.0.10", - "System.Diagnostics.Tools": "4.0.0", - "System.Diagnostics.Tracing": "4.0.20", - "System.Dynamic.Runtime": "4.0.10", - "System.Globalization": "4.0.10", - "System.Globalization.Calendars": "4.0.0", - "System.Globalization.Extensions": "4.0.0", - "System.IO": "4.0.10", - "System.IO.Compression": "4.0.0", - "System.IO.Compression.ZipFile": "4.0.0", - "System.IO.FileSystem": "4.0.0", - "System.IO.FileSystem.Primitives": "4.0.0", - "System.IO.UnmanagedMemoryStream": "4.0.0", - "System.Linq": "4.0.0", - "System.Linq.Expressions": "4.0.10", - "System.Linq.Parallel": "4.0.0", - "System.Linq.Queryable": "4.0.0", - "System.Net.Http": "4.0.0", - "System.Net.NetworkInformation": "4.0.0", - "System.Net.Primitives": "4.0.10", - "System.Numerics.Vectors": "4.1.0", - "System.ObjectModel": "4.0.10", - "System.Reflection": "4.0.10", - "System.Reflection.DispatchProxy": "4.0.0", - "System.Reflection.Extensions": "4.0.0", - "System.Reflection.Metadata": "1.0.22", - "System.Reflection.Primitives": "4.0.0", - "System.Reflection.TypeExtensions": "4.0.0", - "System.Resources.ResourceManager": "4.0.0", - "System.Runtime": "4.0.20", - "System.Runtime.Extensions": "4.0.10", - "System.Runtime.Handles": "4.0.0", - "System.Runtime.InteropServices": "4.0.20", - "System.Runtime.Numerics": "4.0.0", - "System.Security.Claims": "4.0.0", - "System.Security.Principal": "4.0.0", - "System.Text.Encoding": "4.0.10", - "System.Text.Encoding.Extensions": "4.0.10", - "System.Text.RegularExpressions": "4.0.10", - "System.Threading": "4.0.10", - "System.Threading.Tasks": "4.0.10", - "System.Threading.Tasks.Dataflow": "4.5.25", - "System.Threading.Tasks.Parallel": "4.0.0", - "System.Threading.Timer": "4.0.0", - "System.Xml.ReaderWriter": "4.0.10", - "System.Xml.XDocument": "4.0.10" - } - }, - "Microsoft.NETCore.Platforms/1.0.0": {}, - "Microsoft.NETCore.Portable.Compatibility/1.0.0": { - "dependencies": { - "Microsoft.NETCore.Runtime": "1.0.0" - }, - "compile": { - "ref/netcore50/System.ComponentModel.DataAnnotations.dll": {}, - "ref/netcore50/System.Core.dll": {}, - "ref/netcore50/System.Net.dll": {}, - "ref/netcore50/System.Numerics.dll": {}, - "ref/netcore50/System.Runtime.Serialization.dll": {}, - "ref/netcore50/System.ServiceModel.Web.dll": {}, - "ref/netcore50/System.ServiceModel.dll": {}, - "ref/netcore50/System.Windows.dll": {}, - "ref/netcore50/System.Xml.Linq.dll": {}, - "ref/netcore50/System.Xml.Serialization.dll": {}, - "ref/netcore50/System.Xml.dll": {}, - "ref/netcore50/System.dll": {}, - "ref/netcore50/mscorlib.dll": {} - }, - "runtime": { - "runtimes/aot/lib/netcore50/System.ComponentModel.DataAnnotations.dll": {}, - "runtimes/aot/lib/netcore50/System.Core.dll": {}, - "runtimes/aot/lib/netcore50/System.Net.dll": {}, - "runtimes/aot/lib/netcore50/System.Numerics.dll": {}, - "runtimes/aot/lib/netcore50/System.Runtime.Serialization.dll": {}, - "runtimes/aot/lib/netcore50/System.ServiceModel.Web.dll": {}, - "runtimes/aot/lib/netcore50/System.ServiceModel.dll": {}, - "runtimes/aot/lib/netcore50/System.Windows.dll": {}, - "runtimes/aot/lib/netcore50/System.Xml.Linq.dll": {}, - "runtimes/aot/lib/netcore50/System.Xml.Serialization.dll": {}, - "runtimes/aot/lib/netcore50/System.Xml.dll": {}, - "runtimes/aot/lib/netcore50/System.dll": {}, - "runtimes/aot/lib/netcore50/mscorlib.dll": {} - } - }, - "Microsoft.NETCore.Runtime/1.0.0": { - "dependencies": { - "Microsoft.NETCore.Runtime.Native": "1.0.0" - } - }, - "Microsoft.NETCore.Runtime.Native/1.0.0": { - "dependencies": { - "System.Collections": "[4.0.10]", - "System.Diagnostics.Contracts": "[4.0.0]", - "System.Diagnostics.Debug": "[4.0.10]", - "System.Diagnostics.StackTrace": "[4.0.0]", - "System.Diagnostics.Tools": "[4.0.0]", - "System.Diagnostics.Tracing": "[4.0.20]", - "System.Globalization": "[4.0.10]", - "System.Globalization.Calendars": "[4.0.0]", - "System.IO": "[4.0.10]", - "System.ObjectModel": "[4.0.10]", - "System.Private.Uri": "[4.0.0]", - "System.Reflection": "[4.0.10]", - "System.Reflection.Extensions": "[4.0.0]", - "System.Reflection.Primitives": "[4.0.0]", - "System.Resources.ResourceManager": "[4.0.0]", - "System.Runtime": "[4.0.20]", - "System.Runtime.Extensions": "[4.0.10]", - "System.Runtime.Handles": "[4.0.0]", - "System.Runtime.InteropServices": "[4.0.20]", - "System.Text.Encoding": "[4.0.10]", - "System.Text.Encoding.Extensions": "[4.0.10]", - "System.Threading": "[4.0.10]", - "System.Threading.Tasks": "[4.0.10]", - "System.Threading.Timer": "[4.0.0]" - } - }, - "Microsoft.NETCore.Targets/1.0.0": { - "dependencies": { - "Microsoft.NETCore.Platforms": "1.0.0", - "Microsoft.NETCore.Targets.UniversalWindowsPlatform": "5.0.0" - } - }, - "Microsoft.NETCore.Targets.UniversalWindowsPlatform/5.0.0": {}, - "Microsoft.VisualBasic/10.0.0": { - "dependencies": { - "System.Collections": "4.0.10", - "System.Diagnostics.Debug": "4.0.10", - "System.Dynamic.Runtime": "4.0.10", - "System.Globalization": "4.0.10", - "System.Linq": "4.0.0", - "System.Linq.Expressions": "4.0.10", - "System.ObjectModel": "4.0.10", - "System.Reflection": "4.0.10", - "System.Reflection.Extensions": "4.0.0", - "System.Reflection.Primitives": "4.0.0", - "System.Reflection.TypeExtensions": "4.0.0", - "System.Resources.ResourceManager": "4.0.0", - "System.Runtime": "4.0.20", - "System.Runtime.Extensions": "4.0.10", - "System.Runtime.InteropServices": "4.0.20", - "System.Threading": "4.0.10" - }, - "compile": { - "ref/netcore50/Microsoft.VisualBasic.dll": {} - }, - "runtime": { - "lib/netcore50/Microsoft.VisualBasic.dll": {} - } - }, - "Microsoft.Win32.Primitives/4.0.0": { - "dependencies": { - "System.Runtime": "4.0.20", - "System.Runtime.InteropServices": "4.0.20" - }, - "compile": { - "ref/dotnet/Microsoft.Win32.Primitives.dll": {} - }, - "runtime": { - "lib/dotnet/Microsoft.Win32.Primitives.dll": {} - } - }, - "System.AppContext/4.0.0": { - "dependencies": { - "System.Collections": "4.0.0", - "System.Resources.ResourceManager": "4.0.0", - "System.Runtime": "4.0.20", - "System.Threading": "4.0.0" - }, - "compile": { - "ref/dotnet/System.AppContext.dll": {} - }, - "runtime": { - "lib/netcore50/System.AppContext.dll": {} - } - }, - "System.Collections/4.0.10": { - "dependencies": { - "System.Diagnostics.Debug": "4.0.0", - "System.Resources.ResourceManager": "4.0.0", - "System.Runtime": "4.0.20", - "System.Runtime.Extensions": "4.0.0", - "System.Threading": "4.0.0" - }, - "compile": { - "ref/dotnet/System.Collections.dll": {} - }, - "runtime": { - "runtimes/win8-aot/lib/netcore50/System.Collections.dll": {} - } - }, - "System.Collections.Concurrent/4.0.10": { - "dependencies": { - "System.Collections": "4.0.10", - "System.Diagnostics.Debug": "4.0.10", - "System.Diagnostics.Tracing": "4.0.20", - "System.Globalization": "4.0.10", - "System.Resources.ResourceManager": "4.0.0", - "System.Runtime": "4.0.20", - "System.Runtime.Extensions": "4.0.10", - "System.Threading": "4.0.10", - "System.Threading.Tasks": "4.0.10" - }, - "compile": { - "ref/dotnet/System.Collections.Concurrent.dll": {} - }, - "runtime": { - "lib/dotnet/System.Collections.Concurrent.dll": {} - } - }, - "System.Collections.Immutable/1.1.37": { - "dependencies": { - "System.Collections": "4.0.0", - "System.Diagnostics.Debug": "4.0.0", - "System.Globalization": "4.0.0", - "System.Linq": "4.0.0", - "System.Resources.ResourceManager": "4.0.0", - "System.Runtime": "4.0.0", - "System.Runtime.Extensions": "4.0.0", - "System.Threading": "4.0.0" - }, - "compile": { - "lib/dotnet/System.Collections.Immutable.dll": {} - }, - "runtime": { - "lib/dotnet/System.Collections.Immutable.dll": {} - } - }, - "System.Collections.NonGeneric/4.0.0": { - "dependencies": { - "System.Diagnostics.Debug": "4.0.10", - "System.Globalization": "4.0.10", - "System.Resources.ResourceManager": "4.0.0", - "System.Runtime": "4.0.20", - "System.Runtime.Extensions": "4.0.10", - "System.Threading": "4.0.10" - }, - "compile": { - "ref/dotnet/System.Collections.NonGeneric.dll": {} - }, - "runtime": { - "lib/dotnet/System.Collections.NonGeneric.dll": {} - } - }, - "System.ComponentModel/4.0.0": { - "dependencies": { - "System.Runtime": "4.0.20" - }, - "compile": { - "ref/netcore50/System.ComponentModel.dll": {} - }, - "runtime": { - "lib/netcore50/System.ComponentModel.dll": {} - } - }, - "System.ComponentModel.Annotations/4.0.10": { - "dependencies": { - "System.Collections": "4.0.10", - "System.ComponentModel": "4.0.0", - "System.Globalization": "4.0.10", - "System.Linq": "4.0.0", - "System.Reflection": "4.0.10", - "System.Reflection.Extensions": "4.0.0", - "System.Resources.ResourceManager": "4.0.0", - "System.Runtime": "4.0.20", - "System.Runtime.Extensions": "4.0.10", - "System.Text.RegularExpressions": "4.0.10", - "System.Threading": "4.0.10" - }, - "compile": { - "ref/dotnet/System.ComponentModel.Annotations.dll": {} - }, - "runtime": { - "lib/dotnet/System.ComponentModel.Annotations.dll": {} - } - }, - "System.Diagnostics.Contracts/4.0.0": { - "compile": { - "ref/netcore50/System.Diagnostics.Contracts.dll": {} - }, - "runtime": { - "runtimes/win8-aot/lib/netcore50/System.Diagnostics.Contracts.dll": {} - } - }, - "System.Diagnostics.Debug/4.0.10": { - "dependencies": { - "System.Runtime": "4.0.0" - }, - "compile": { - "ref/dotnet/System.Diagnostics.Debug.dll": {} - }, - "runtime": { - "runtimes/win8-aot/lib/netcore50/System.Diagnostics.Debug.dll": {} - } - }, - "System.Diagnostics.StackTrace/4.0.0": { - "dependencies": { - "System.Runtime": "4.0.20" - }, - "compile": { - "ref/dotnet/System.Diagnostics.StackTrace.dll": {} - }, - "runtime": { - "runtimes/win8-aot/lib/netcore50/System.Diagnostics.StackTrace.dll": {} - } - }, - "System.Diagnostics.Tools/4.0.0": { - "compile": { - "ref/netcore50/System.Diagnostics.Tools.dll": {} - }, - "runtime": { - "runtimes/win8-aot/lib/netcore50/System.Diagnostics.Tools.dll": {} - } - }, - "System.Diagnostics.Tracing/4.0.20": { - "dependencies": { - "System.Collections": "4.0.10", - "System.Globalization": "4.0.0", - "System.Reflection": "4.0.10", - "System.Reflection.Extensions": "4.0.0", - "System.Resources.ResourceManager": "4.0.0", - "System.Runtime": "4.0.20", - "System.Runtime.Extensions": "4.0.10", - "System.Runtime.InteropServices": "4.0.0", - "System.Text.Encoding": "4.0.0", - "System.Threading": "4.0.10" - }, - "compile": { - "ref/dotnet/System.Diagnostics.Tracing.dll": {} - }, - "runtime": { - "runtimes/win8-aot/lib/netcore50/System.Diagnostics.Tracing.dll": {} - } - }, - "System.Dynamic.Runtime/4.0.10": { - "dependencies": { - "System.Collections": "4.0.0", - "System.Diagnostics.Debug": "4.0.0", - "System.Globalization": "4.0.0", - "System.Linq": "4.0.0", - "System.Linq.Expressions": "4.0.10", - "System.ObjectModel": "4.0.0", - "System.Reflection": "4.0.0", - "System.Reflection.TypeExtensions": "4.0.0", - "System.Resources.ResourceManager": "4.0.0", - "System.Runtime": "4.0.20", - "System.Runtime.Extensions": "4.0.0", - "System.Threading": "4.0.0" - }, - "compile": { - "ref/dotnet/System.Dynamic.Runtime.dll": {} - }, - "runtime": { - "runtimes/win8-aot/lib/netcore50/System.Dynamic.Runtime.dll": {} - } - }, - "System.Globalization/4.0.10": { - "dependencies": { - "System.Runtime": "4.0.0" - }, - "compile": { - "ref/dotnet/System.Globalization.dll": {} - }, - "runtime": { - "runtimes/win8-aot/lib/netcore50/System.Globalization.dll": {} - } - }, - "System.Globalization.Calendars/4.0.0": { - "dependencies": { - "System.Globalization": "4.0.0", - "System.Runtime": "4.0.0" - }, - "compile": { - "ref/dotnet/System.Globalization.Calendars.dll": {} - }, - "runtime": { - "runtimes/win8-aot/lib/netcore50/System.Globalization.Calendars.dll": {} - } - }, - "System.Globalization.Extensions/4.0.0": { - "dependencies": { - "System.Globalization": "4.0.10", - "System.Resources.ResourceManager": "4.0.0", - "System.Runtime": "4.0.20", - "System.Runtime.Extensions": "4.0.10", - "System.Runtime.InteropServices": "4.0.20" - }, - "compile": { - "ref/dotnet/System.Globalization.Extensions.dll": {} - }, - "runtime": { - "lib/dotnet/System.Globalization.Extensions.dll": {} - } - }, - "System.IO/4.0.10": { - "dependencies": { - "System.Globalization": "4.0.0", - "System.Runtime": "4.0.20", - "System.Text.Encoding": "4.0.10", - "System.Text.Encoding.Extensions": "4.0.0", - "System.Threading": "4.0.0", - "System.Threading.Tasks": "4.0.0" - }, - "compile": { - "ref/dotnet/System.IO.dll": {} - }, - "runtime": { - "runtimes/win8-aot/lib/netcore50/System.IO.dll": {} - } - }, - "System.IO.Compression/4.0.0": { - "dependencies": { - "System.Collections": "4.0.0", - "System.IO": "4.0.0", - "System.IO.Compression.clrcompression-arm": "4.0.0", - "System.Resources.ResourceManager": "4.0.0", - "System.Runtime": "4.0.0", - "System.Runtime.Extensions": "4.0.0", - "System.Runtime.InteropServices": "4.0.0", - "System.Text.Encoding": "4.0.0", - "System.Threading": "4.0.0", - "System.Threading.Tasks": "4.0.0" - }, - "compile": { - "ref/netcore50/System.IO.Compression.dll": {} - }, - "runtime": { - "lib/netcore50/System.IO.Compression.dll": {} - } - }, - "System.IO.Compression.clrcompression-arm/4.0.0": { - "native": { - "runtimes/win10-arm/native/ClrCompression.dll": {} - } - }, - "System.IO.Compression.ZipFile/4.0.0": { - "dependencies": { - "System.IO": "4.0.10", - "System.IO.Compression": "4.0.0", - "System.IO.FileSystem": "4.0.0", - "System.IO.FileSystem.Primitives": "4.0.0", - "System.Resources.ResourceManager": "4.0.0", - "System.Runtime": "4.0.20", - "System.Runtime.Extensions": "4.0.10", - "System.Text.Encoding": "4.0.10" - }, - "compile": { - "ref/dotnet/System.IO.Compression.ZipFile.dll": {} - }, - "runtime": { - "lib/dotnet/System.IO.Compression.ZipFile.dll": {} - } - }, - "System.IO.FileSystem/4.0.0": { - "dependencies": { - "System.Collections": "4.0.10", - "System.Diagnostics.Debug": "4.0.10", - "System.IO": "4.0.10", - "System.IO.FileSystem.Primitives": "4.0.0", - "System.Resources.ResourceManager": "4.0.0", - "System.Runtime": "4.0.20", - "System.Runtime.Extensions": "4.0.10", - "System.Runtime.Handles": "4.0.0", - "System.Runtime.InteropServices": "4.0.20", - "System.Runtime.WindowsRuntime": "4.0.0", - "System.Text.Encoding": "4.0.10", - "System.Text.Encoding.Extensions": "4.0.10", - "System.Threading": "4.0.10", - "System.Threading.Overlapped": "4.0.0", - "System.Threading.Tasks": "4.0.10" - }, - "compile": { - "ref/dotnet/System.IO.FileSystem.dll": {} - }, - "runtime": { - "lib/netcore50/System.IO.FileSystem.dll": {} - } - }, - "System.IO.FileSystem.Primitives/4.0.0": { - "dependencies": { - "System.Runtime": "4.0.20" - }, - "compile": { - "ref/dotnet/System.IO.FileSystem.Primitives.dll": {} - }, - "runtime": { - "lib/dotnet/System.IO.FileSystem.Primitives.dll": {} - } - }, - "System.IO.UnmanagedMemoryStream/4.0.0": { - "dependencies": { - "System.IO": "4.0.10", - "System.IO.FileSystem.Primitives": "4.0.0", - "System.Resources.ResourceManager": "4.0.0", - "System.Runtime": "4.0.20", - "System.Runtime.InteropServices": "4.0.20", - "System.Threading": "4.0.10", - "System.Threading.Tasks": "4.0.10" - }, - "compile": { - "ref/dotnet/System.IO.UnmanagedMemoryStream.dll": {} - }, - "runtime": { - "lib/dotnet/System.IO.UnmanagedMemoryStream.dll": {} - } - }, - "System.Linq/4.0.0": { - "dependencies": { - "System.Collections": "4.0.10", - "System.Diagnostics.Debug": "4.0.10", - "System.Resources.ResourceManager": "4.0.0", - "System.Runtime": "4.0.20", - "System.Runtime.Extensions": "4.0.10" - }, - "compile": { - "ref/netcore50/System.Linq.dll": {} - }, - "runtime": { - "lib/netcore50/System.Linq.dll": {} - } - }, - "System.Linq.Expressions/4.0.10": { - "dependencies": { - "System.Collections": "4.0.0", - "System.Diagnostics.Debug": "4.0.0", - "System.Globalization": "4.0.0", - "System.IO": "4.0.0", - "System.Linq": "4.0.0", - "System.Reflection": "4.0.0", - "System.Reflection.Extensions": "4.0.0", - "System.Reflection.Primitives": "4.0.0", - "System.Reflection.TypeExtensions": "4.0.0", - "System.Resources.ResourceManager": "4.0.0", - "System.Runtime": "4.0.20", - "System.Runtime.Extensions": "4.0.0", - "System.Threading": "4.0.0" - }, - "compile": { - "ref/dotnet/System.Linq.Expressions.dll": {} - }, - "runtime": { - "runtimes/win8-aot/lib/netcore50/System.Linq.Expressions.dll": {} - } - }, - "System.Linq.Parallel/4.0.0": { - "dependencies": { - "System.Collections": "4.0.10", - "System.Collections.Concurrent": "4.0.10", - "System.Diagnostics.Debug": "4.0.10", - "System.Diagnostics.Tracing": "4.0.20", - "System.Linq": "4.0.0", - "System.Resources.ResourceManager": "4.0.0", - "System.Runtime": "4.0.20", - "System.Runtime.Extensions": "4.0.10", - "System.Threading": "4.0.10", - "System.Threading.Tasks": "4.0.10" - }, - "compile": { - "ref/netcore50/System.Linq.Parallel.dll": {} - }, - "runtime": { - "lib/netcore50/System.Linq.Parallel.dll": {} - } - }, - "System.Linq.Queryable/4.0.0": { - "dependencies": { - "System.Collections": "4.0.10", - "System.Linq": "4.0.0", - "System.Linq.Expressions": "4.0.10", - "System.Reflection": "4.0.10", - "System.Reflection.Extensions": "4.0.0", - "System.Resources.ResourceManager": "4.0.0", - "System.Runtime": "4.0.20" - }, - "compile": { - "ref/netcore50/System.Linq.Queryable.dll": {} - }, - "runtime": { - "lib/netcore50/System.Linq.Queryable.dll": {} - } - }, - "System.Net.Http/4.0.0": { - "dependencies": { - "System.Collections": "4.0.10", - "System.Diagnostics.Debug": "4.0.10", - "System.Globalization": "4.0.10", - "System.IO": "4.0.10", - "System.Net.Primitives": "4.0.0", - "System.Resources.ResourceManager": "4.0.0", - "System.Runtime": "4.0.20", - "System.Runtime.Extensions": "4.0.10", - "System.Runtime.InteropServices": "4.0.20", - "System.Runtime.WindowsRuntime": "4.0.10", - "System.Text.Encoding": "4.0.10", - "System.Text.Encoding.Extensions": "4.0.10", - "System.Threading": "4.0.10", - "System.Threading.Tasks": "4.0.10" - }, - "compile": { - "ref/netcore50/System.Net.Http.dll": {} - }, - "runtime": { - "lib/netcore50/System.Net.Http.dll": {} - } - }, - "System.Net.NetworkInformation/4.0.0": { - "dependencies": { - "System.Runtime": "4.0.0", - "System.Runtime.InteropServices.WindowsRuntime": "4.0.0", - "System.Threading": "4.0.0" - }, - "compile": { - "ref/netcore50/System.Net.NetworkInformation.dll": {} - }, - "runtime": { - "lib/netcore50/System.Net.NetworkInformation.dll": {} - } - }, - "System.Net.Primitives/4.0.10": { - "dependencies": { - "System.Private.Networking": "4.0.0", - "System.Runtime": "4.0.20" - }, - "compile": { - "ref/dotnet/System.Net.Primitives.dll": {} - }, - "runtime": { - "lib/netcore50/System.Net.Primitives.dll": {} - } - }, - "System.Numerics.Vectors/4.1.0": { - "dependencies": { - "System.Globalization": "4.0.10", - "System.Resources.ResourceManager": "4.0.0", - "System.Runtime": "4.0.20", - "System.Runtime.Extensions": "4.0.10" - }, - "compile": { - "ref/dotnet/System.Numerics.Vectors.dll": {} - }, - "runtime": { - "lib/dotnet/System.Numerics.Vectors.dll": {} - } - }, - "System.ObjectModel/4.0.10": { - "dependencies": { - "System.Collections": "4.0.10", - "System.Diagnostics.Debug": "4.0.10", - "System.Resources.ResourceManager": "4.0.0", - "System.Runtime": "4.0.20", - "System.Threading": "4.0.10" - }, - "compile": { - "ref/dotnet/System.ObjectModel.dll": {} - }, - "runtime": { - "lib/dotnet/System.ObjectModel.dll": {} - } - }, - "System.Private.Networking/4.0.0": { - "dependencies": { - "Microsoft.Win32.Primitives": "4.0.0", - "System.Collections": "4.0.10", - "System.Collections.NonGeneric": "4.0.0", - "System.Diagnostics.Debug": "4.0.10", - "System.Diagnostics.Tracing": "4.0.20", - "System.Globalization": "4.0.10", - "System.IO": "4.0.10", - "System.IO.FileSystem": "4.0.0", - "System.IO.FileSystem.Primitives": "4.0.0", - "System.Resources.ResourceManager": "4.0.0", - "System.Runtime": "4.0.20", - "System.Runtime.Extensions": "4.0.10", - "System.Runtime.Handles": "4.0.0", - "System.Runtime.InteropServices": "4.0.20", - "System.Threading": "4.0.10", - "System.Threading.Overlapped": "4.0.0", - "System.Threading.Tasks": "4.0.10" - }, - "compile": { - "ref/netcore50/_._": {} - }, - "runtime": { - "lib/netcore50/System.Private.Networking.dll": {} - } - }, - "System.Private.Uri/4.0.0": { - "compile": { - "ref/netcore50/_._": {} - }, - "runtime": { - "runtimes/win8-aot/lib/netcore50/System.Private.Uri.dll": {} - } - }, - "System.Reflection/4.0.10": { - "dependencies": { - "System.IO": "4.0.0", - "System.Reflection.Primitives": "4.0.0", - "System.Runtime": "4.0.20" - }, - "compile": { - "ref/dotnet/System.Reflection.dll": {} - }, - "runtime": { - "runtimes/win8-aot/lib/netcore50/System.Reflection.dll": {} - } - }, - "System.Reflection.DispatchProxy/4.0.0": { - "dependencies": { - "System.Collections": "4.0.10", - "System.Linq": "4.0.0", - "System.Reflection": "4.0.10", - "System.Reflection.Extensions": "4.0.0", - "System.Reflection.Primitives": "4.0.0", - "System.Resources.ResourceManager": "4.0.0", - "System.Runtime": "4.0.20", - "System.Threading": "4.0.10" - }, - "compile": { - "ref/dotnet/System.Reflection.DispatchProxy.dll": {} - }, - "runtime": { - "runtimes/win8-aot/lib/netcore50/System.Reflection.DispatchProxy.dll": {} - } - }, - "System.Reflection.Extensions/4.0.0": { - "dependencies": { - "System.Diagnostics.Debug": "4.0.10", - "System.Reflection": "4.0.10", - "System.Reflection.Primitives": "4.0.0", - "System.Reflection.TypeExtensions": "4.0.0", - "System.Resources.ResourceManager": "4.0.0", - "System.Runtime": "4.0.20", - "System.Runtime.Extensions": "4.0.10" - }, - "compile": { - "ref/netcore50/System.Reflection.Extensions.dll": {} - }, - "runtime": { - "runtimes/win8-aot/lib/netcore50/System.Reflection.Extensions.dll": {} - } - }, - "System.Reflection.Metadata/1.0.22": { - "dependencies": { - "System.Collections": "4.0.0", - "System.Collections.Immutable": "1.1.37", - "System.Diagnostics.Debug": "4.0.0", - "System.IO": "4.0.0", - "System.Reflection": "4.0.0", - "System.Reflection.Extensions": "4.0.0", - "System.Reflection.Primitives": "4.0.0", - "System.Resources.ResourceManager": "4.0.0", - "System.Runtime": "4.0.0", - "System.Runtime.Extensions": "4.0.0", - "System.Runtime.InteropServices": "4.0.0", - "System.Text.Encoding": "4.0.0", - "System.Text.Encoding.Extensions": "4.0.0", - "System.Threading": "4.0.0" - }, - "compile": { - "lib/dotnet/System.Reflection.Metadata.dll": {} - }, - "runtime": { - "lib/dotnet/System.Reflection.Metadata.dll": {} - } - }, - "System.Reflection.Primitives/4.0.0": { - "dependencies": { - "System.Runtime": "4.0.0", - "System.Threading": "4.0.0" - }, - "compile": { - "ref/netcore50/System.Reflection.Primitives.dll": {} - }, - "runtime": { - "runtimes/win8-aot/lib/netcore50/System.Reflection.Primitives.dll": {} - } - }, - "System.Reflection.TypeExtensions/4.0.0": { - "dependencies": { - "System.Diagnostics.Contracts": "4.0.0", - "System.Diagnostics.Debug": "4.0.10", - "System.Linq": "4.0.0", - "System.Reflection": "4.0.10", - "System.Reflection.Primitives": "4.0.0", - "System.Resources.ResourceManager": "4.0.0", - "System.Runtime": "4.0.20", - "System.Runtime.Extensions": "4.0.10" - }, - "compile": { - "ref/dotnet/System.Reflection.TypeExtensions.dll": {} - }, - "runtime": { - "runtimes/win8-aot/lib/netcore50/System.Reflection.TypeExtensions.dll": {} - } - }, - "System.Resources.ResourceManager/4.0.0": { - "dependencies": { - "System.Globalization": "4.0.0", - "System.Reflection": "4.0.10", - "System.Runtime": "4.0.20" - }, - "compile": { - "ref/netcore50/System.Resources.ResourceManager.dll": {} - }, - "runtime": { - "runtimes/win8-aot/lib/netcore50/System.Resources.ResourceManager.dll": {} - } - }, - "System.Runtime/4.0.20": { - "dependencies": { - "System.Private.Uri": "4.0.0" - }, - "compile": { - "ref/dotnet/System.Runtime.dll": {} - }, - "runtime": { - "runtimes/win8-aot/lib/netcore50/System.Runtime.dll": {} - } - }, - "System.Runtime.Extensions/4.0.10": { - "dependencies": { - "System.Runtime": "4.0.20" - }, - "compile": { - "ref/dotnet/System.Runtime.Extensions.dll": {} - }, - "runtime": { - "runtimes/win8-aot/lib/netcore50/System.Runtime.Extensions.dll": {} - } - }, - "System.Runtime.Handles/4.0.0": { - "dependencies": { - "System.Runtime": "4.0.0" - }, - "compile": { - "ref/dotnet/System.Runtime.Handles.dll": {} - }, - "runtime": { - "runtimes/win8-aot/lib/netcore50/System.Runtime.Handles.dll": {} - } - }, - "System.Runtime.InteropServices/4.0.20": { - "dependencies": { - "System.Reflection": "4.0.0", - "System.Reflection.Primitives": "4.0.0", - "System.Runtime": "4.0.0", - "System.Runtime.Handles": "4.0.0" - }, - "compile": { - "ref/dotnet/System.Runtime.InteropServices.dll": {} - }, - "runtime": { - "runtimes/win8-aot/lib/netcore50/System.Runtime.InteropServices.dll": {} - } - }, - "System.Runtime.InteropServices.WindowsRuntime/4.0.0": { - "compile": { - "ref/netcore50/System.Runtime.InteropServices.WindowsRuntime.dll": {} - }, - "runtime": { - "runtimes/win8-aot/lib/netcore50/System.Runtime.InteropServices.WindowsRuntime.dll": {} - } - }, - "System.Runtime.Numerics/4.0.0": { - "dependencies": { - "System.Globalization": "4.0.10", - "System.Resources.ResourceManager": "4.0.0", - "System.Runtime": "4.0.20", - "System.Runtime.Extensions": "4.0.10" - }, - "compile": { - "ref/netcore50/System.Runtime.Numerics.dll": {} - }, - "runtime": { - "lib/netcore50/System.Runtime.Numerics.dll": {} - } - }, - "System.Runtime.WindowsRuntime/4.0.10": { - "dependencies": { - "System.Diagnostics.Debug": "4.0.10", - "System.Globalization": "4.0.0", - "System.IO": "4.0.10", - "System.ObjectModel": "4.0.0", - "System.Resources.ResourceManager": "4.0.0", - "System.Runtime": "4.0.20", - "System.Runtime.Extensions": "4.0.0", - "System.Runtime.InteropServices": "4.0.20", - "System.Threading": "4.0.10", - "System.Threading.Tasks": "4.0.10" - }, - "compile": { - "ref/netcore50/System.Runtime.WindowsRuntime.dll": {} - }, - "runtime": { - "runtimes/win8-aot/lib/netcore50/System.Runtime.WindowsRuntime.dll": {} - } - }, - "System.Security.Claims/4.0.0": { - "dependencies": { - "System.Collections": "4.0.0", - "System.Diagnostics.Debug": "4.0.0", - "System.Globalization": "4.0.0", - "System.IO": "4.0.0", - "System.Resources.ResourceManager": "4.0.0", - "System.Runtime": "4.0.20", - "System.Runtime.Extensions": "4.0.0", - "System.Security.Principal": "4.0.0" - }, - "compile": { - "ref/dotnet/System.Security.Claims.dll": {} - }, - "runtime": { - "lib/dotnet/System.Security.Claims.dll": {} - } - }, - "System.Security.Principal/4.0.0": { - "dependencies": { - "System.Runtime": "4.0.0" - }, - "compile": { - "ref/netcore50/System.Security.Principal.dll": {} - }, - "runtime": { - "lib/netcore50/System.Security.Principal.dll": {} - } - }, - "System.Text.Encoding/4.0.10": { - "dependencies": { - "System.Runtime": "4.0.0" - }, - "compile": { - "ref/dotnet/System.Text.Encoding.dll": {} - }, - "runtime": { - "runtimes/win8-aot/lib/netcore50/System.Text.Encoding.dll": {} - } - }, - "System.Text.Encoding.Extensions/4.0.10": { - "dependencies": { - "System.Runtime": "4.0.0", - "System.Text.Encoding": "4.0.10" - }, - "compile": { - "ref/dotnet/System.Text.Encoding.Extensions.dll": {} - }, - "runtime": { - "runtimes/win8-aot/lib/netcore50/System.Text.Encoding.Extensions.dll": {} - } - }, - "System.Text.RegularExpressions/4.0.10": { - "dependencies": { - "System.Collections": "4.0.10", - "System.Globalization": "4.0.10", - "System.Resources.ResourceManager": "4.0.0", - "System.Runtime": "4.0.20", - "System.Runtime.Extensions": "4.0.10", - "System.Threading": "4.0.10" - }, - "compile": { - "ref/dotnet/System.Text.RegularExpressions.dll": {} - }, - "runtime": { - "lib/dotnet/System.Text.RegularExpressions.dll": {} - } - }, - "System.Threading/4.0.10": { - "dependencies": { - "System.Runtime": "4.0.0", - "System.Threading.Tasks": "4.0.0" - }, - "compile": { - "ref/dotnet/System.Threading.dll": {} - }, - "runtime": { - "runtimes/win8-aot/lib/netcore50/System.Threading.dll": {} - } - }, - "System.Threading.Overlapped/4.0.0": { - "dependencies": { - "System.Resources.ResourceManager": "4.0.0", - "System.Runtime": "4.0.20", - "System.Runtime.Extensions": "4.0.0", - "System.Runtime.Handles": "4.0.0", - "System.Runtime.InteropServices": "4.0.20", - "System.Threading": "4.0.10" - }, - "compile": { - "ref/dotnet/System.Threading.Overlapped.dll": {} - }, - "runtime": { - "lib/netcore50/System.Threading.Overlapped.dll": {} - } - }, - "System.Threading.Tasks/4.0.10": { - "dependencies": { - "System.Runtime": "4.0.0" - }, - "compile": { - "ref/dotnet/System.Threading.Tasks.dll": {} - }, - "runtime": { - "runtimes/win8-aot/lib/netcore50/System.Threading.Tasks.dll": {} - } - }, - "System.Threading.Tasks.Dataflow/4.5.25": { - "dependencies": { - "System.Collections": "4.0.0", - "System.Collections.Concurrent": "4.0.0", - "System.Diagnostics.Debug": "4.0.0", - "System.Diagnostics.Tracing": "4.0.0", - "System.Dynamic.Runtime": "4.0.0", - "System.Linq": "4.0.0", - "System.Resources.ResourceManager": "4.0.0", - "System.Runtime": "4.0.0", - "System.Runtime.Extensions": "4.0.0", - "System.Threading": "4.0.0", - "System.Threading.Tasks": "4.0.0" - }, - "compile": { - "lib/dotnet/System.Threading.Tasks.Dataflow.dll": {} - }, - "runtime": { - "lib/dotnet/System.Threading.Tasks.Dataflow.dll": {} - } - }, - "System.Threading.Tasks.Parallel/4.0.0": { - "dependencies": { - "System.Collections.Concurrent": "4.0.10", - "System.Diagnostics.Debug": "4.0.10", - "System.Diagnostics.Tracing": "4.0.20", - "System.Resources.ResourceManager": "4.0.0", - "System.Runtime": "4.0.20", - "System.Runtime.Extensions": "4.0.10", - "System.Threading": "4.0.10", - "System.Threading.Tasks": "4.0.10" - }, - "compile": { - "ref/netcore50/System.Threading.Tasks.Parallel.dll": {} - }, - "runtime": { - "lib/netcore50/System.Threading.Tasks.Parallel.dll": {} - } - }, - "System.Threading.Timer/4.0.0": { - "compile": { - "ref/netcore50/System.Threading.Timer.dll": {} - }, - "runtime": { - "runtimes/win8-aot/lib/netcore50/System.Threading.Timer.dll": {} - } - }, - "System.Xml.ReaderWriter/4.0.10": { - "dependencies": { - "System.Collections": "4.0.10", - "System.Diagnostics.Debug": "4.0.10", - "System.Globalization": "4.0.10", - "System.IO": "4.0.10", - "System.IO.FileSystem": "4.0.0", - "System.IO.FileSystem.Primitives": "4.0.0", - "System.Resources.ResourceManager": "4.0.0", - "System.Runtime": "4.0.20", - "System.Runtime.Extensions": "4.0.10", - "System.Runtime.InteropServices": "4.0.20", - "System.Text.Encoding": "4.0.10", - "System.Text.Encoding.Extensions": "4.0.10", - "System.Text.RegularExpressions": "4.0.10", - "System.Threading.Tasks": "4.0.10" - }, - "compile": { - "ref/dotnet/System.Xml.ReaderWriter.dll": {} - }, - "runtime": { - "lib/dotnet/System.Xml.ReaderWriter.dll": {} - } - }, - "System.Xml.XDocument/4.0.10": { - "dependencies": { - "System.Collections": "4.0.10", - "System.Diagnostics.Debug": "4.0.10", - "System.Globalization": "4.0.10", - "System.IO": "4.0.10", - "System.Reflection": "4.0.10", - "System.Resources.ResourceManager": "4.0.0", - "System.Runtime": "4.0.20", - "System.Runtime.Extensions": "4.0.10", - "System.Text.Encoding": "4.0.10", - "System.Threading": "4.0.10", - "System.Xml.ReaderWriter": "4.0.10" - }, - "compile": { - "ref/dotnet/System.Xml.XDocument.dll": {} - }, - "runtime": { - "lib/dotnet/System.Xml.XDocument.dll": {} - } - } - }, - "UAP,Version=v10.0/win10-x64": { - "Microsoft.CSharp/4.0.0": { - "dependencies": { - "System.Collections": "4.0.10", - "System.Diagnostics.Debug": "4.0.10", - "System.Dynamic.Runtime": "4.0.0", - "System.Globalization": "4.0.10", - "System.Linq": "4.0.0", - "System.Linq.Expressions": "4.0.0", - "System.ObjectModel": "4.0.10", - "System.Reflection": "4.0.10", - "System.Reflection.Extensions": "4.0.0", - "System.Reflection.Primitives": "4.0.0", - "System.Reflection.TypeExtensions": "4.0.0", - "System.Resources.ResourceManager": "4.0.0", - "System.Runtime": "4.0.20", - "System.Runtime.Extensions": "4.0.10", - "System.Runtime.InteropServices": "4.0.20", - "System.Threading": "4.0.10" - }, - "compile": { - "ref/netcore50/Microsoft.CSharp.dll": {} - }, - "runtime": { - "lib/netcore50/Microsoft.CSharp.dll": {} - } - }, - "Microsoft.NETCore/5.0.0": { - "dependencies": { - "Microsoft.CSharp": "4.0.0", - "Microsoft.NETCore.Targets": "1.0.0", - "Microsoft.VisualBasic": "10.0.0", - "System.AppContext": "4.0.0", - "System.Collections": "4.0.10", - "System.Collections.Concurrent": "4.0.10", - "System.Collections.Immutable": "1.1.37", - "System.ComponentModel": "4.0.0", - "System.ComponentModel.Annotations": "4.0.10", - "System.Diagnostics.Debug": "4.0.10", - "System.Diagnostics.Tools": "4.0.0", - "System.Diagnostics.Tracing": "4.0.20", - "System.Dynamic.Runtime": "4.0.10", - "System.Globalization": "4.0.10", - "System.Globalization.Calendars": "4.0.0", - "System.Globalization.Extensions": "4.0.0", - "System.IO": "4.0.10", - "System.IO.Compression": "4.0.0", - "System.IO.Compression.ZipFile": "4.0.0", - "System.IO.FileSystem": "4.0.0", - "System.IO.FileSystem.Primitives": "4.0.0", - "System.IO.UnmanagedMemoryStream": "4.0.0", - "System.Linq": "4.0.0", - "System.Linq.Expressions": "4.0.10", - "System.Linq.Parallel": "4.0.0", - "System.Linq.Queryable": "4.0.0", - "System.Net.Http": "4.0.0", - "System.Net.NetworkInformation": "4.0.0", - "System.Net.Primitives": "4.0.10", - "System.Numerics.Vectors": "4.1.0", - "System.ObjectModel": "4.0.10", - "System.Reflection": "4.0.10", - "System.Reflection.DispatchProxy": "4.0.0", - "System.Reflection.Extensions": "4.0.0", - "System.Reflection.Metadata": "1.0.22", - "System.Reflection.Primitives": "4.0.0", - "System.Reflection.TypeExtensions": "4.0.0", - "System.Resources.ResourceManager": "4.0.0", - "System.Runtime": "4.0.20", - "System.Runtime.Extensions": "4.0.10", - "System.Runtime.Handles": "4.0.0", - "System.Runtime.InteropServices": "4.0.20", - "System.Runtime.Numerics": "4.0.0", - "System.Security.Claims": "4.0.0", - "System.Security.Principal": "4.0.0", - "System.Text.Encoding": "4.0.10", - "System.Text.Encoding.Extensions": "4.0.10", - "System.Text.RegularExpressions": "4.0.10", - "System.Threading": "4.0.10", - "System.Threading.Tasks": "4.0.10", - "System.Threading.Tasks.Dataflow": "4.5.25", - "System.Threading.Tasks.Parallel": "4.0.0", - "System.Threading.Timer": "4.0.0", - "System.Xml.ReaderWriter": "4.0.10", - "System.Xml.XDocument": "4.0.10" - } - }, - "Microsoft.NETCore.Platforms/1.0.0": {}, - "Microsoft.NETCore.Portable.Compatibility/1.0.0": { - "dependencies": { - "Microsoft.NETCore.Runtime": "1.0.0" - }, - "compile": { - "ref/netcore50/System.ComponentModel.DataAnnotations.dll": {}, - "ref/netcore50/System.Core.dll": {}, - "ref/netcore50/System.Net.dll": {}, - "ref/netcore50/System.Numerics.dll": {}, - "ref/netcore50/System.Runtime.Serialization.dll": {}, - "ref/netcore50/System.ServiceModel.Web.dll": {}, - "ref/netcore50/System.ServiceModel.dll": {}, - "ref/netcore50/System.Windows.dll": {}, - "ref/netcore50/System.Xml.Linq.dll": {}, - "ref/netcore50/System.Xml.Serialization.dll": {}, - "ref/netcore50/System.Xml.dll": {}, - "ref/netcore50/System.dll": {}, - "ref/netcore50/mscorlib.dll": {} - }, - "runtime": { - "lib/netcore50/System.ComponentModel.DataAnnotations.dll": {}, - "lib/netcore50/System.Core.dll": {}, - "lib/netcore50/System.Net.dll": {}, - "lib/netcore50/System.Numerics.dll": {}, - "lib/netcore50/System.Runtime.Serialization.dll": {}, - "lib/netcore50/System.ServiceModel.Web.dll": {}, - "lib/netcore50/System.ServiceModel.dll": {}, - "lib/netcore50/System.Windows.dll": {}, - "lib/netcore50/System.Xml.Linq.dll": {}, - "lib/netcore50/System.Xml.Serialization.dll": {}, - "lib/netcore50/System.Xml.dll": {}, - "lib/netcore50/System.dll": {} - } - }, - "Microsoft.NETCore.Runtime/1.0.0": { - "dependencies": { - "Microsoft.NETCore.Runtime.CoreCLR-x64": "1.0.0", - "Microsoft.NETCore.Windows.ApiSets-x64": "1.0.0" - } - }, - "Microsoft.NETCore.Runtime.CoreCLR-x64/1.0.0": { - "dependencies": { - "System.Collections": "[4.0.10]", - "System.Diagnostics.Contracts": "[4.0.0]", - "System.Diagnostics.Debug": "[4.0.10]", - "System.Diagnostics.StackTrace": "[4.0.0]", - "System.Diagnostics.Tools": "[4.0.0]", - "System.Diagnostics.Tracing": "[4.0.20]", - "System.Globalization": "[4.0.10]", - "System.Globalization.Calendars": "[4.0.0]", - "System.IO": "[4.0.10]", - "System.ObjectModel": "[4.0.10]", - "System.Private.Uri": "[4.0.0]", - "System.Reflection": "[4.0.10]", - "System.Reflection.Extensions": "[4.0.0]", - "System.Reflection.Primitives": "[4.0.0]", - "System.Resources.ResourceManager": "[4.0.0]", - "System.Runtime": "[4.0.20]", - "System.Runtime.Extensions": "[4.0.10]", - "System.Runtime.Handles": "[4.0.0]", - "System.Runtime.InteropServices": "[4.0.20]", - "System.Text.Encoding": "[4.0.10]", - "System.Text.Encoding.Extensions": "[4.0.10]", - "System.Threading": "[4.0.10]", - "System.Threading.Tasks": "[4.0.10]", - "System.Threading.Timer": "[4.0.0]" - }, - "compile": { - "ref/dotnet/_._": {} - }, - "runtime": { - "runtimes/win7-x64/lib/dotnet/mscorlib.ni.dll": {} - }, - "native": { - "runtimes/win7-x64/native/clretwrc.dll": {}, - "runtimes/win7-x64/native/coreclr.dll": {}, - "runtimes/win7-x64/native/dbgshim.dll": {}, - "runtimes/win7-x64/native/mscordaccore.dll": {}, - "runtimes/win7-x64/native/mscordbi.dll": {}, - "runtimes/win7-x64/native/mscorrc.debug.dll": {}, - "runtimes/win7-x64/native/mscorrc.dll": {} - } - }, - "Microsoft.NETCore.Targets/1.0.0": { - "dependencies": { - "Microsoft.NETCore.Platforms": "1.0.0", - "Microsoft.NETCore.Targets.UniversalWindowsPlatform": "5.0.0" - } - }, - "Microsoft.NETCore.Targets.UniversalWindowsPlatform/5.0.0": {}, - "Microsoft.NETCore.Windows.ApiSets-x64/1.0.0": { - "native": { - "runtimes/win10-x64/native/_._": {} - } - }, - "Microsoft.VisualBasic/10.0.0": { - "dependencies": { - "System.Collections": "4.0.10", - "System.Diagnostics.Debug": "4.0.10", - "System.Dynamic.Runtime": "4.0.10", - "System.Globalization": "4.0.10", - "System.Linq": "4.0.0", - "System.Linq.Expressions": "4.0.10", - "System.ObjectModel": "4.0.10", - "System.Reflection": "4.0.10", - "System.Reflection.Extensions": "4.0.0", - "System.Reflection.Primitives": "4.0.0", - "System.Reflection.TypeExtensions": "4.0.0", - "System.Resources.ResourceManager": "4.0.0", - "System.Runtime": "4.0.20", - "System.Runtime.Extensions": "4.0.10", - "System.Runtime.InteropServices": "4.0.20", - "System.Threading": "4.0.10" - }, - "compile": { - "ref/netcore50/Microsoft.VisualBasic.dll": {} - }, - "runtime": { - "lib/netcore50/Microsoft.VisualBasic.dll": {} - } - }, - "Microsoft.Win32.Primitives/4.0.0": { - "dependencies": { - "System.Runtime": "4.0.20", - "System.Runtime.InteropServices": "4.0.20" - }, - "compile": { - "ref/dotnet/Microsoft.Win32.Primitives.dll": {} - }, - "runtime": { - "lib/dotnet/Microsoft.Win32.Primitives.dll": {} - } - }, - "System.AppContext/4.0.0": { - "dependencies": { - "System.Collections": "4.0.0", - "System.Resources.ResourceManager": "4.0.0", - "System.Runtime": "4.0.20", - "System.Threading": "4.0.0" - }, - "compile": { - "ref/dotnet/System.AppContext.dll": {} - }, - "runtime": { - "lib/netcore50/System.AppContext.dll": {} - } - }, - "System.Collections/4.0.10": { - "dependencies": { - "System.Diagnostics.Debug": "4.0.0", - "System.Resources.ResourceManager": "4.0.0", - "System.Runtime": "4.0.20", - "System.Runtime.Extensions": "4.0.0", - "System.Threading": "4.0.0" - }, - "compile": { - "ref/dotnet/System.Collections.dll": {} - }, - "runtime": { - "lib/netcore50/System.Collections.dll": {} - } - }, - "System.Collections.Concurrent/4.0.10": { - "dependencies": { - "System.Collections": "4.0.10", - "System.Diagnostics.Debug": "4.0.10", - "System.Diagnostics.Tracing": "4.0.20", - "System.Globalization": "4.0.10", - "System.Resources.ResourceManager": "4.0.0", - "System.Runtime": "4.0.20", - "System.Runtime.Extensions": "4.0.10", - "System.Threading": "4.0.10", - "System.Threading.Tasks": "4.0.10" - }, - "compile": { - "ref/dotnet/System.Collections.Concurrent.dll": {} - }, - "runtime": { - "lib/dotnet/System.Collections.Concurrent.dll": {} - } - }, - "System.Collections.Immutable/1.1.37": { - "dependencies": { - "System.Collections": "4.0.0", - "System.Diagnostics.Debug": "4.0.0", - "System.Globalization": "4.0.0", - "System.Linq": "4.0.0", - "System.Resources.ResourceManager": "4.0.0", - "System.Runtime": "4.0.0", - "System.Runtime.Extensions": "4.0.0", - "System.Threading": "4.0.0" - }, - "compile": { - "lib/dotnet/System.Collections.Immutable.dll": {} - }, - "runtime": { - "lib/dotnet/System.Collections.Immutable.dll": {} - } - }, - "System.Collections.NonGeneric/4.0.0": { - "dependencies": { - "System.Diagnostics.Debug": "4.0.10", - "System.Globalization": "4.0.10", - "System.Resources.ResourceManager": "4.0.0", - "System.Runtime": "4.0.20", - "System.Runtime.Extensions": "4.0.10", - "System.Threading": "4.0.10" - }, - "compile": { - "ref/dotnet/System.Collections.NonGeneric.dll": {} - }, - "runtime": { - "lib/dotnet/System.Collections.NonGeneric.dll": {} - } - }, - "System.ComponentModel/4.0.0": { - "dependencies": { - "System.Runtime": "4.0.20" - }, - "compile": { - "ref/netcore50/System.ComponentModel.dll": {} - }, - "runtime": { - "lib/netcore50/System.ComponentModel.dll": {} - } - }, - "System.ComponentModel.Annotations/4.0.10": { - "dependencies": { - "System.Collections": "4.0.10", - "System.ComponentModel": "4.0.0", - "System.Globalization": "4.0.10", - "System.Linq": "4.0.0", - "System.Reflection": "4.0.10", - "System.Reflection.Extensions": "4.0.0", - "System.Resources.ResourceManager": "4.0.0", - "System.Runtime": "4.0.20", - "System.Runtime.Extensions": "4.0.10", - "System.Text.RegularExpressions": "4.0.10", - "System.Threading": "4.0.10" - }, - "compile": { - "ref/dotnet/System.ComponentModel.Annotations.dll": {} - }, - "runtime": { - "lib/dotnet/System.ComponentModel.Annotations.dll": {} - } - }, - "System.Diagnostics.Contracts/4.0.0": { - "compile": { - "ref/netcore50/System.Diagnostics.Contracts.dll": {} - }, - "runtime": { - "lib/netcore50/System.Diagnostics.Contracts.dll": {} - } - }, - "System.Diagnostics.Debug/4.0.10": { - "dependencies": { - "System.Runtime": "4.0.0" - }, - "compile": { - "ref/dotnet/System.Diagnostics.Debug.dll": {} - }, - "runtime": { - "lib/netcore50/System.Diagnostics.Debug.dll": {} - } - }, - "System.Diagnostics.StackTrace/4.0.0": { - "dependencies": { - "System.Runtime": "4.0.20" - }, - "compile": { - "ref/dotnet/System.Diagnostics.StackTrace.dll": {} - }, - "runtime": { - "lib/netcore50/System.Diagnostics.StackTrace.dll": {} - } - }, - "System.Diagnostics.Tools/4.0.0": { - "compile": { - "ref/netcore50/System.Diagnostics.Tools.dll": {} - }, - "runtime": { - "lib/netcore50/System.Diagnostics.Tools.dll": {} - } - }, - "System.Diagnostics.Tracing/4.0.20": { - "dependencies": { - "System.Collections": "4.0.10", - "System.Globalization": "4.0.0", - "System.Reflection": "4.0.10", - "System.Reflection.Extensions": "4.0.0", - "System.Resources.ResourceManager": "4.0.0", - "System.Runtime": "4.0.20", - "System.Runtime.Extensions": "4.0.10", - "System.Runtime.InteropServices": "4.0.0", - "System.Text.Encoding": "4.0.0", - "System.Threading": "4.0.10" - }, - "compile": { - "ref/dotnet/System.Diagnostics.Tracing.dll": {} - }, - "runtime": { - "lib/netcore50/System.Diagnostics.Tracing.dll": {} - } - }, - "System.Dynamic.Runtime/4.0.10": { - "dependencies": { - "System.Collections": "4.0.0", - "System.Diagnostics.Debug": "4.0.0", - "System.Globalization": "4.0.0", - "System.Linq": "4.0.0", - "System.Linq.Expressions": "4.0.10", - "System.ObjectModel": "4.0.0", - "System.Reflection": "4.0.0", - "System.Reflection.Emit.ILGeneration": "4.0.0", - "System.Reflection.Emit.Lightweight": "4.0.0", - "System.Reflection.TypeExtensions": "4.0.0", - "System.Resources.ResourceManager": "4.0.0", - "System.Runtime": "4.0.20", - "System.Runtime.Extensions": "4.0.0", - "System.Threading": "4.0.0" - }, - "compile": { - "ref/dotnet/System.Dynamic.Runtime.dll": {} - }, - "runtime": { - "lib/netcore50/System.Dynamic.Runtime.dll": {} - } - }, - "System.Globalization/4.0.10": { - "dependencies": { - "System.Runtime": "4.0.0" - }, - "compile": { - "ref/dotnet/System.Globalization.dll": {} - }, - "runtime": { - "lib/netcore50/System.Globalization.dll": {} - } - }, - "System.Globalization.Calendars/4.0.0": { - "dependencies": { - "System.Globalization": "4.0.0", - "System.Runtime": "4.0.0" - }, - "compile": { - "ref/dotnet/System.Globalization.Calendars.dll": {} - }, - "runtime": { - "lib/netcore50/System.Globalization.Calendars.dll": {} - } - }, - "System.Globalization.Extensions/4.0.0": { - "dependencies": { - "System.Globalization": "4.0.10", - "System.Resources.ResourceManager": "4.0.0", - "System.Runtime": "4.0.20", - "System.Runtime.Extensions": "4.0.10", - "System.Runtime.InteropServices": "4.0.20" - }, - "compile": { - "ref/dotnet/System.Globalization.Extensions.dll": {} - }, - "runtime": { - "lib/dotnet/System.Globalization.Extensions.dll": {} - } - }, - "System.IO/4.0.10": { - "dependencies": { - "System.Globalization": "4.0.0", - "System.Runtime": "4.0.20", - "System.Text.Encoding": "4.0.10", - "System.Text.Encoding.Extensions": "4.0.0", - "System.Threading": "4.0.0", - "System.Threading.Tasks": "4.0.0" - }, - "compile": { - "ref/dotnet/System.IO.dll": {} - }, - "runtime": { - "lib/netcore50/System.IO.dll": {} - } - }, - "System.IO.Compression/4.0.0": { - "dependencies": { - "System.Collections": "4.0.0", - "System.IO": "4.0.0", - "System.IO.Compression.clrcompression-x64": "4.0.0", - "System.Resources.ResourceManager": "4.0.0", - "System.Runtime": "4.0.0", - "System.Runtime.Extensions": "4.0.0", - "System.Runtime.InteropServices": "4.0.0", - "System.Text.Encoding": "4.0.0", - "System.Threading": "4.0.0", - "System.Threading.Tasks": "4.0.0" - }, - "compile": { - "ref/netcore50/System.IO.Compression.dll": {} - }, - "runtime": { - "lib/netcore50/System.IO.Compression.dll": {} - } - }, - "System.IO.Compression.clrcompression-x64/4.0.0": { - "native": { - "runtimes/win10-x64/native/ClrCompression.dll": {} - } - }, - "System.IO.Compression.ZipFile/4.0.0": { - "dependencies": { - "System.IO": "4.0.10", - "System.IO.Compression": "4.0.0", - "System.IO.FileSystem": "4.0.0", - "System.IO.FileSystem.Primitives": "4.0.0", - "System.Resources.ResourceManager": "4.0.0", - "System.Runtime": "4.0.20", - "System.Runtime.Extensions": "4.0.10", - "System.Text.Encoding": "4.0.10" - }, - "compile": { - "ref/dotnet/System.IO.Compression.ZipFile.dll": {} - }, - "runtime": { - "lib/dotnet/System.IO.Compression.ZipFile.dll": {} - } - }, - "System.IO.FileSystem/4.0.0": { - "dependencies": { - "System.Collections": "4.0.10", - "System.Diagnostics.Debug": "4.0.10", - "System.IO": "4.0.10", - "System.IO.FileSystem.Primitives": "4.0.0", - "System.Resources.ResourceManager": "4.0.0", - "System.Runtime": "4.0.20", - "System.Runtime.Extensions": "4.0.10", - "System.Runtime.Handles": "4.0.0", - "System.Runtime.InteropServices": "4.0.20", - "System.Runtime.WindowsRuntime": "4.0.0", - "System.Text.Encoding": "4.0.10", - "System.Text.Encoding.Extensions": "4.0.10", - "System.Threading": "4.0.10", - "System.Threading.Overlapped": "4.0.0", - "System.Threading.Tasks": "4.0.10" - }, - "compile": { - "ref/dotnet/System.IO.FileSystem.dll": {} - }, - "runtime": { - "lib/netcore50/System.IO.FileSystem.dll": {} - } - }, - "System.IO.FileSystem.Primitives/4.0.0": { - "dependencies": { - "System.Runtime": "4.0.20" - }, - "compile": { - "ref/dotnet/System.IO.FileSystem.Primitives.dll": {} - }, - "runtime": { - "lib/dotnet/System.IO.FileSystem.Primitives.dll": {} - } - }, - "System.IO.UnmanagedMemoryStream/4.0.0": { - "dependencies": { - "System.IO": "4.0.10", - "System.IO.FileSystem.Primitives": "4.0.0", - "System.Resources.ResourceManager": "4.0.0", - "System.Runtime": "4.0.20", - "System.Runtime.InteropServices": "4.0.20", - "System.Threading": "4.0.10", - "System.Threading.Tasks": "4.0.10" - }, - "compile": { - "ref/dotnet/System.IO.UnmanagedMemoryStream.dll": {} - }, - "runtime": { - "lib/dotnet/System.IO.UnmanagedMemoryStream.dll": {} - } - }, - "System.Linq/4.0.0": { - "dependencies": { - "System.Collections": "4.0.10", - "System.Diagnostics.Debug": "4.0.10", - "System.Resources.ResourceManager": "4.0.0", - "System.Runtime": "4.0.20", - "System.Runtime.Extensions": "4.0.10" - }, - "compile": { - "ref/netcore50/System.Linq.dll": {} - }, - "runtime": { - "lib/netcore50/System.Linq.dll": {} - } - }, - "System.Linq.Expressions/4.0.10": { - "dependencies": { - "System.Collections": "4.0.0", - "System.Diagnostics.Debug": "4.0.0", - "System.Globalization": "4.0.0", - "System.IO": "4.0.0", - "System.Linq": "4.0.0", - "System.Reflection": "4.0.0", - "System.Reflection.Emit.ILGeneration": "4.0.0", - "System.Reflection.Emit.Lightweight": "4.0.0", - "System.Reflection.Extensions": "4.0.0", - "System.Reflection.Primitives": "4.0.0", - "System.Reflection.TypeExtensions": "4.0.0", - "System.Resources.ResourceManager": "4.0.0", - "System.Runtime": "4.0.20", - "System.Runtime.Extensions": "4.0.0", - "System.Threading": "4.0.0" - }, - "compile": { - "ref/dotnet/System.Linq.Expressions.dll": {} - }, - "runtime": { - "lib/netcore50/System.Linq.Expressions.dll": {} - } - }, - "System.Linq.Parallel/4.0.0": { - "dependencies": { - "System.Collections": "4.0.10", - "System.Collections.Concurrent": "4.0.10", - "System.Diagnostics.Debug": "4.0.10", - "System.Diagnostics.Tracing": "4.0.20", - "System.Linq": "4.0.0", - "System.Resources.ResourceManager": "4.0.0", - "System.Runtime": "4.0.20", - "System.Runtime.Extensions": "4.0.10", - "System.Threading": "4.0.10", - "System.Threading.Tasks": "4.0.10" - }, - "compile": { - "ref/netcore50/System.Linq.Parallel.dll": {} - }, - "runtime": { - "lib/netcore50/System.Linq.Parallel.dll": {} - } - }, - "System.Linq.Queryable/4.0.0": { - "dependencies": { - "System.Collections": "4.0.10", - "System.Linq": "4.0.0", - "System.Linq.Expressions": "4.0.10", - "System.Reflection": "4.0.10", - "System.Reflection.Extensions": "4.0.0", - "System.Resources.ResourceManager": "4.0.0", - "System.Runtime": "4.0.20" - }, - "compile": { - "ref/netcore50/System.Linq.Queryable.dll": {} - }, - "runtime": { - "lib/netcore50/System.Linq.Queryable.dll": {} - } - }, - "System.Net.Http/4.0.0": { - "dependencies": { - "System.Collections": "4.0.10", - "System.Diagnostics.Debug": "4.0.10", - "System.Globalization": "4.0.10", - "System.IO": "4.0.10", - "System.Net.Primitives": "4.0.0", - "System.Resources.ResourceManager": "4.0.0", - "System.Runtime": "4.0.20", - "System.Runtime.Extensions": "4.0.10", - "System.Runtime.InteropServices": "4.0.20", - "System.Runtime.WindowsRuntime": "4.0.10", - "System.Text.Encoding": "4.0.10", - "System.Text.Encoding.Extensions": "4.0.10", - "System.Threading": "4.0.10", - "System.Threading.Tasks": "4.0.10" - }, - "compile": { - "ref/netcore50/System.Net.Http.dll": {} - }, - "runtime": { - "lib/netcore50/System.Net.Http.dll": {} - } - }, - "System.Net.NetworkInformation/4.0.0": { - "dependencies": { - "System.Runtime": "4.0.0", - "System.Runtime.InteropServices.WindowsRuntime": "4.0.0", - "System.Threading": "4.0.0" - }, - "compile": { - "ref/netcore50/System.Net.NetworkInformation.dll": {} - }, - "runtime": { - "lib/netcore50/System.Net.NetworkInformation.dll": {} - } - }, - "System.Net.Primitives/4.0.10": { - "dependencies": { - "System.Private.Networking": "4.0.0", - "System.Runtime": "4.0.20" - }, - "compile": { - "ref/dotnet/System.Net.Primitives.dll": {} - }, - "runtime": { - "lib/netcore50/System.Net.Primitives.dll": {} - } - }, - "System.Numerics.Vectors/4.1.0": { - "dependencies": { - "System.Globalization": "4.0.10", - "System.Resources.ResourceManager": "4.0.0", - "System.Runtime": "4.0.20", - "System.Runtime.Extensions": "4.0.10" - }, - "compile": { - "ref/dotnet/System.Numerics.Vectors.dll": {} - }, - "runtime": { - "lib/dotnet/System.Numerics.Vectors.dll": {} - } - }, - "System.ObjectModel/4.0.10": { - "dependencies": { - "System.Collections": "4.0.10", - "System.Diagnostics.Debug": "4.0.10", - "System.Resources.ResourceManager": "4.0.0", - "System.Runtime": "4.0.20", - "System.Threading": "4.0.10" - }, - "compile": { - "ref/dotnet/System.ObjectModel.dll": {} - }, - "runtime": { - "lib/dotnet/System.ObjectModel.dll": {} - } - }, - "System.Private.Networking/4.0.0": { - "dependencies": { - "Microsoft.Win32.Primitives": "4.0.0", - "System.Collections": "4.0.10", - "System.Collections.NonGeneric": "4.0.0", - "System.Diagnostics.Debug": "4.0.10", - "System.Diagnostics.Tracing": "4.0.20", - "System.Globalization": "4.0.10", - "System.IO": "4.0.10", - "System.IO.FileSystem": "4.0.0", - "System.IO.FileSystem.Primitives": "4.0.0", - "System.Resources.ResourceManager": "4.0.0", - "System.Runtime": "4.0.20", - "System.Runtime.Extensions": "4.0.10", - "System.Runtime.Handles": "4.0.0", - "System.Runtime.InteropServices": "4.0.20", - "System.Threading": "4.0.10", - "System.Threading.Overlapped": "4.0.0", - "System.Threading.Tasks": "4.0.10" - }, - "compile": { - "ref/netcore50/_._": {} - }, - "runtime": { - "lib/netcore50/System.Private.Networking.dll": {} - } - }, - "System.Private.Uri/4.0.0": { - "compile": { - "ref/netcore50/_._": {} - }, - "runtime": { - "lib/netcore50/System.Private.Uri.dll": {} - } - }, - "System.Reflection/4.0.10": { - "dependencies": { - "System.IO": "4.0.0", - "System.Reflection.Primitives": "4.0.0", - "System.Runtime": "4.0.20" - }, - "compile": { - "ref/dotnet/System.Reflection.dll": {} - }, - "runtime": { - "lib/netcore50/System.Reflection.dll": {} - } - }, - "System.Reflection.DispatchProxy/4.0.0": { - "dependencies": { - "System.Collections": "4.0.10", - "System.Linq": "4.0.0", - "System.Reflection": "4.0.10", - "System.Reflection.Emit": "4.0.0", - "System.Reflection.Emit.ILGeneration": "4.0.0", - "System.Reflection.Extensions": "4.0.0", - "System.Reflection.Primitives": "4.0.0", - "System.Resources.ResourceManager": "4.0.0", - "System.Runtime": "4.0.20", - "System.Threading": "4.0.10" - }, - "compile": { - "ref/dotnet/System.Reflection.DispatchProxy.dll": {} - }, - "runtime": { - "lib/netcore50/System.Reflection.DispatchProxy.dll": {} - } - }, - "System.Reflection.Emit/4.0.0": { - "dependencies": { - "System.IO": "4.0.0", - "System.Reflection": "4.0.0", - "System.Reflection.Emit.ILGeneration": "4.0.0", - "System.Reflection.Primitives": "4.0.0", - "System.Runtime": "4.0.0" - }, - "compile": { - "ref/dotnet/System.Reflection.Emit.dll": {} - }, - "runtime": { - "lib/netcore50/System.Reflection.Emit.dll": {} - } - }, - "System.Reflection.Emit.ILGeneration/4.0.0": { - "dependencies": { - "System.Reflection": "4.0.0", - "System.Reflection.Primitives": "4.0.0", - "System.Runtime": "4.0.0" - }, - "compile": { - "ref/dotnet/System.Reflection.Emit.ILGeneration.dll": {} - }, - "runtime": { - "lib/netcore50/System.Reflection.Emit.ILGeneration.dll": {} - } - }, - "System.Reflection.Emit.Lightweight/4.0.0": { - "dependencies": { - "System.Reflection": "4.0.0", - "System.Reflection.Emit.ILGeneration": "4.0.0", - "System.Reflection.Primitives": "4.0.0", - "System.Runtime": "4.0.0" - }, - "compile": { - "ref/dotnet/System.Reflection.Emit.Lightweight.dll": {} - }, - "runtime": { - "lib/netcore50/System.Reflection.Emit.Lightweight.dll": {} - } - }, - "System.Reflection.Extensions/4.0.0": { - "dependencies": { - "System.Diagnostics.Debug": "4.0.10", - "System.Reflection": "4.0.10", - "System.Reflection.Primitives": "4.0.0", - "System.Reflection.TypeExtensions": "4.0.0", - "System.Resources.ResourceManager": "4.0.0", - "System.Runtime": "4.0.20", - "System.Runtime.Extensions": "4.0.10" - }, - "compile": { - "ref/netcore50/System.Reflection.Extensions.dll": {} - }, - "runtime": { - "lib/netcore50/System.Reflection.Extensions.dll": {} - } - }, - "System.Reflection.Metadata/1.0.22": { - "dependencies": { - "System.Collections": "4.0.0", - "System.Collections.Immutable": "1.1.37", - "System.Diagnostics.Debug": "4.0.0", - "System.IO": "4.0.0", - "System.Reflection": "4.0.0", - "System.Reflection.Extensions": "4.0.0", - "System.Reflection.Primitives": "4.0.0", - "System.Resources.ResourceManager": "4.0.0", - "System.Runtime": "4.0.0", - "System.Runtime.Extensions": "4.0.0", - "System.Runtime.InteropServices": "4.0.0", - "System.Text.Encoding": "4.0.0", - "System.Text.Encoding.Extensions": "4.0.0", - "System.Threading": "4.0.0" - }, - "compile": { - "lib/dotnet/System.Reflection.Metadata.dll": {} - }, - "runtime": { - "lib/dotnet/System.Reflection.Metadata.dll": {} - } - }, - "System.Reflection.Primitives/4.0.0": { - "dependencies": { - "System.Runtime": "4.0.0", - "System.Threading": "4.0.0" - }, - "compile": { - "ref/netcore50/System.Reflection.Primitives.dll": {} - }, - "runtime": { - "lib/netcore50/System.Reflection.Primitives.dll": {} - } - }, - "System.Reflection.TypeExtensions/4.0.0": { - "dependencies": { - "System.Diagnostics.Contracts": "4.0.0", - "System.Diagnostics.Debug": "4.0.10", - "System.Linq": "4.0.0", - "System.Reflection": "4.0.10", - "System.Reflection.Primitives": "4.0.0", - "System.Resources.ResourceManager": "4.0.0", - "System.Runtime": "4.0.20", - "System.Runtime.Extensions": "4.0.10" - }, - "compile": { - "ref/dotnet/System.Reflection.TypeExtensions.dll": {} - }, - "runtime": { - "lib/netcore50/System.Reflection.TypeExtensions.dll": {} - } - }, - "System.Resources.ResourceManager/4.0.0": { - "dependencies": { - "System.Globalization": "4.0.0", - "System.Reflection": "4.0.10", - "System.Runtime": "4.0.20" - }, - "compile": { - "ref/netcore50/System.Resources.ResourceManager.dll": {} - }, - "runtime": { - "lib/netcore50/System.Resources.ResourceManager.dll": {} - } - }, - "System.Runtime/4.0.20": { - "dependencies": { - "System.Private.Uri": "4.0.0" - }, - "compile": { - "ref/dotnet/System.Runtime.dll": {} - }, - "runtime": { - "lib/netcore50/System.Runtime.dll": {} - } - }, - "System.Runtime.Extensions/4.0.10": { - "dependencies": { - "System.Runtime": "4.0.20" - }, - "compile": { - "ref/dotnet/System.Runtime.Extensions.dll": {} - }, - "runtime": { - "lib/netcore50/System.Runtime.Extensions.dll": {} - } - }, - "System.Runtime.Handles/4.0.0": { - "dependencies": { - "System.Runtime": "4.0.0" - }, - "compile": { - "ref/dotnet/System.Runtime.Handles.dll": {} - }, - "runtime": { - "lib/netcore50/System.Runtime.Handles.dll": {} - } - }, - "System.Runtime.InteropServices/4.0.20": { - "dependencies": { - "System.Reflection": "4.0.0", - "System.Reflection.Primitives": "4.0.0", - "System.Runtime": "4.0.0", - "System.Runtime.Handles": "4.0.0" - }, - "compile": { - "ref/dotnet/System.Runtime.InteropServices.dll": {} - }, - "runtime": { - "lib/netcore50/System.Runtime.InteropServices.dll": {} - } - }, - "System.Runtime.InteropServices.WindowsRuntime/4.0.0": { - "compile": { - "ref/netcore50/System.Runtime.InteropServices.WindowsRuntime.dll": {} - }, - "runtime": { - "lib/netcore50/System.Runtime.InteropServices.WindowsRuntime.dll": {} - } - }, - "System.Runtime.Numerics/4.0.0": { - "dependencies": { - "System.Globalization": "4.0.10", - "System.Resources.ResourceManager": "4.0.0", - "System.Runtime": "4.0.20", - "System.Runtime.Extensions": "4.0.10" - }, - "compile": { - "ref/netcore50/System.Runtime.Numerics.dll": {} - }, - "runtime": { - "lib/netcore50/System.Runtime.Numerics.dll": {} - } - }, - "System.Runtime.WindowsRuntime/4.0.10": { - "dependencies": { - "System.Diagnostics.Debug": "4.0.10", - "System.Globalization": "4.0.0", - "System.IO": "4.0.10", - "System.ObjectModel": "4.0.0", - "System.Resources.ResourceManager": "4.0.0", - "System.Runtime": "4.0.20", - "System.Runtime.Extensions": "4.0.0", - "System.Runtime.InteropServices": "4.0.20", - "System.Threading": "4.0.10", - "System.Threading.Tasks": "4.0.10" - }, - "compile": { - "ref/netcore50/System.Runtime.WindowsRuntime.dll": {} - }, - "runtime": { - "lib/netcore50/System.Runtime.WindowsRuntime.dll": {} - } - }, - "System.Security.Claims/4.0.0": { - "dependencies": { - "System.Collections": "4.0.0", - "System.Diagnostics.Debug": "4.0.0", - "System.Globalization": "4.0.0", - "System.IO": "4.0.0", - "System.Resources.ResourceManager": "4.0.0", - "System.Runtime": "4.0.20", - "System.Runtime.Extensions": "4.0.0", - "System.Security.Principal": "4.0.0" - }, - "compile": { - "ref/dotnet/System.Security.Claims.dll": {} - }, - "runtime": { - "lib/dotnet/System.Security.Claims.dll": {} - } - }, - "System.Security.Principal/4.0.0": { - "dependencies": { - "System.Runtime": "4.0.0" - }, - "compile": { - "ref/netcore50/System.Security.Principal.dll": {} - }, - "runtime": { - "lib/netcore50/System.Security.Principal.dll": {} - } - }, - "System.Text.Encoding/4.0.10": { - "dependencies": { - "System.Runtime": "4.0.0" - }, - "compile": { - "ref/dotnet/System.Text.Encoding.dll": {} - }, - "runtime": { - "lib/netcore50/System.Text.Encoding.dll": {} - } - }, - "System.Text.Encoding.Extensions/4.0.10": { - "dependencies": { - "System.Runtime": "4.0.0", - "System.Text.Encoding": "4.0.10" - }, - "compile": { - "ref/dotnet/System.Text.Encoding.Extensions.dll": {} - }, - "runtime": { - "lib/netcore50/System.Text.Encoding.Extensions.dll": {} - } - }, - "System.Text.RegularExpressions/4.0.10": { - "dependencies": { - "System.Collections": "4.0.10", - "System.Globalization": "4.0.10", - "System.Resources.ResourceManager": "4.0.0", - "System.Runtime": "4.0.20", - "System.Runtime.Extensions": "4.0.10", - "System.Threading": "4.0.10" - }, - "compile": { - "ref/dotnet/System.Text.RegularExpressions.dll": {} - }, - "runtime": { - "lib/dotnet/System.Text.RegularExpressions.dll": {} - } - }, - "System.Threading/4.0.10": { - "dependencies": { - "System.Runtime": "4.0.0", - "System.Threading.Tasks": "4.0.0" - }, - "compile": { - "ref/dotnet/System.Threading.dll": {} - }, - "runtime": { - "lib/netcore50/System.Threading.dll": {} - } - }, - "System.Threading.Overlapped/4.0.0": { - "dependencies": { - "System.Resources.ResourceManager": "4.0.0", - "System.Runtime": "4.0.20", - "System.Runtime.Extensions": "4.0.0", - "System.Runtime.Handles": "4.0.0", - "System.Runtime.InteropServices": "4.0.20", - "System.Threading": "4.0.10" - }, - "compile": { - "ref/dotnet/System.Threading.Overlapped.dll": {} - }, - "runtime": { - "lib/netcore50/System.Threading.Overlapped.dll": {} - } - }, - "System.Threading.Tasks/4.0.10": { - "dependencies": { - "System.Runtime": "4.0.0" - }, - "compile": { - "ref/dotnet/System.Threading.Tasks.dll": {} - }, - "runtime": { - "lib/netcore50/System.Threading.Tasks.dll": {} - } - }, - "System.Threading.Tasks.Dataflow/4.5.25": { - "dependencies": { - "System.Collections": "4.0.0", - "System.Collections.Concurrent": "4.0.0", - "System.Diagnostics.Debug": "4.0.0", - "System.Diagnostics.Tracing": "4.0.0", - "System.Dynamic.Runtime": "4.0.0", - "System.Linq": "4.0.0", - "System.Resources.ResourceManager": "4.0.0", - "System.Runtime": "4.0.0", - "System.Runtime.Extensions": "4.0.0", - "System.Threading": "4.0.0", - "System.Threading.Tasks": "4.0.0" - }, - "compile": { - "lib/dotnet/System.Threading.Tasks.Dataflow.dll": {} - }, - "runtime": { - "lib/dotnet/System.Threading.Tasks.Dataflow.dll": {} - } - }, - "System.Threading.Tasks.Parallel/4.0.0": { - "dependencies": { - "System.Collections.Concurrent": "4.0.10", - "System.Diagnostics.Debug": "4.0.10", - "System.Diagnostics.Tracing": "4.0.20", - "System.Resources.ResourceManager": "4.0.0", - "System.Runtime": "4.0.20", - "System.Runtime.Extensions": "4.0.10", - "System.Threading": "4.0.10", - "System.Threading.Tasks": "4.0.10" - }, - "compile": { - "ref/netcore50/System.Threading.Tasks.Parallel.dll": {} - }, - "runtime": { - "lib/netcore50/System.Threading.Tasks.Parallel.dll": {} - } - }, - "System.Threading.Timer/4.0.0": { - "compile": { - "ref/netcore50/System.Threading.Timer.dll": {} - }, - "runtime": { - "lib/netcore50/System.Threading.Timer.dll": {} - } - }, - "System.Xml.ReaderWriter/4.0.10": { - "dependencies": { - "System.Collections": "4.0.10", - "System.Diagnostics.Debug": "4.0.10", - "System.Globalization": "4.0.10", - "System.IO": "4.0.10", - "System.IO.FileSystem": "4.0.0", - "System.IO.FileSystem.Primitives": "4.0.0", - "System.Resources.ResourceManager": "4.0.0", - "System.Runtime": "4.0.20", - "System.Runtime.Extensions": "4.0.10", - "System.Runtime.InteropServices": "4.0.20", - "System.Text.Encoding": "4.0.10", - "System.Text.Encoding.Extensions": "4.0.10", - "System.Text.RegularExpressions": "4.0.10", - "System.Threading.Tasks": "4.0.10" - }, - "compile": { - "ref/dotnet/System.Xml.ReaderWriter.dll": {} - }, - "runtime": { - "lib/dotnet/System.Xml.ReaderWriter.dll": {} - } - }, - "System.Xml.XDocument/4.0.10": { - "dependencies": { - "System.Collections": "4.0.10", - "System.Diagnostics.Debug": "4.0.10", - "System.Globalization": "4.0.10", - "System.IO": "4.0.10", - "System.Reflection": "4.0.10", - "System.Resources.ResourceManager": "4.0.0", - "System.Runtime": "4.0.20", - "System.Runtime.Extensions": "4.0.10", - "System.Text.Encoding": "4.0.10", - "System.Threading": "4.0.10", - "System.Xml.ReaderWriter": "4.0.10" - }, - "compile": { - "ref/dotnet/System.Xml.XDocument.dll": {} - }, - "runtime": { - "lib/dotnet/System.Xml.XDocument.dll": {} - } - } - }, - "UAP,Version=v10.0/win10-x64-aot": { - "Microsoft.CSharp/4.0.0": { - "dependencies": { - "System.Collections": "4.0.10", - "System.Diagnostics.Debug": "4.0.10", - "System.Dynamic.Runtime": "4.0.0", - "System.Globalization": "4.0.10", - "System.Linq": "4.0.0", - "System.Linq.Expressions": "4.0.0", - "System.ObjectModel": "4.0.10", - "System.Reflection": "4.0.10", - "System.Reflection.Extensions": "4.0.0", - "System.Reflection.Primitives": "4.0.0", - "System.Reflection.TypeExtensions": "4.0.0", - "System.Resources.ResourceManager": "4.0.0", - "System.Runtime": "4.0.20", - "System.Runtime.Extensions": "4.0.10", - "System.Runtime.InteropServices": "4.0.20", - "System.Threading": "4.0.10" - }, - "compile": { - "ref/netcore50/Microsoft.CSharp.dll": {} - }, - "runtime": { - "lib/netcore50/Microsoft.CSharp.dll": {} - } - }, - "Microsoft.NETCore/5.0.0": { - "dependencies": { - "Microsoft.CSharp": "4.0.0", - "Microsoft.NETCore.Targets": "1.0.0", - "Microsoft.VisualBasic": "10.0.0", - "System.AppContext": "4.0.0", - "System.Collections": "4.0.10", - "System.Collections.Concurrent": "4.0.10", - "System.Collections.Immutable": "1.1.37", - "System.ComponentModel": "4.0.0", - "System.ComponentModel.Annotations": "4.0.10", - "System.Diagnostics.Debug": "4.0.10", - "System.Diagnostics.Tools": "4.0.0", - "System.Diagnostics.Tracing": "4.0.20", - "System.Dynamic.Runtime": "4.0.10", - "System.Globalization": "4.0.10", - "System.Globalization.Calendars": "4.0.0", - "System.Globalization.Extensions": "4.0.0", - "System.IO": "4.0.10", - "System.IO.Compression": "4.0.0", - "System.IO.Compression.ZipFile": "4.0.0", - "System.IO.FileSystem": "4.0.0", - "System.IO.FileSystem.Primitives": "4.0.0", - "System.IO.UnmanagedMemoryStream": "4.0.0", - "System.Linq": "4.0.0", - "System.Linq.Expressions": "4.0.10", - "System.Linq.Parallel": "4.0.0", - "System.Linq.Queryable": "4.0.0", - "System.Net.Http": "4.0.0", - "System.Net.NetworkInformation": "4.0.0", - "System.Net.Primitives": "4.0.10", - "System.Numerics.Vectors": "4.1.0", - "System.ObjectModel": "4.0.10", - "System.Reflection": "4.0.10", - "System.Reflection.DispatchProxy": "4.0.0", - "System.Reflection.Extensions": "4.0.0", - "System.Reflection.Metadata": "1.0.22", - "System.Reflection.Primitives": "4.0.0", - "System.Reflection.TypeExtensions": "4.0.0", - "System.Resources.ResourceManager": "4.0.0", - "System.Runtime": "4.0.20", - "System.Runtime.Extensions": "4.0.10", - "System.Runtime.Handles": "4.0.0", - "System.Runtime.InteropServices": "4.0.20", - "System.Runtime.Numerics": "4.0.0", - "System.Security.Claims": "4.0.0", - "System.Security.Principal": "4.0.0", - "System.Text.Encoding": "4.0.10", - "System.Text.Encoding.Extensions": "4.0.10", - "System.Text.RegularExpressions": "4.0.10", - "System.Threading": "4.0.10", - "System.Threading.Tasks": "4.0.10", - "System.Threading.Tasks.Dataflow": "4.5.25", - "System.Threading.Tasks.Parallel": "4.0.0", - "System.Threading.Timer": "4.0.0", - "System.Xml.ReaderWriter": "4.0.10", - "System.Xml.XDocument": "4.0.10" - } - }, - "Microsoft.NETCore.Platforms/1.0.0": {}, - "Microsoft.NETCore.Portable.Compatibility/1.0.0": { - "dependencies": { - "Microsoft.NETCore.Runtime": "1.0.0" - }, - "compile": { - "ref/netcore50/System.ComponentModel.DataAnnotations.dll": {}, - "ref/netcore50/System.Core.dll": {}, - "ref/netcore50/System.Net.dll": {}, - "ref/netcore50/System.Numerics.dll": {}, - "ref/netcore50/System.Runtime.Serialization.dll": {}, - "ref/netcore50/System.ServiceModel.Web.dll": {}, - "ref/netcore50/System.ServiceModel.dll": {}, - "ref/netcore50/System.Windows.dll": {}, - "ref/netcore50/System.Xml.Linq.dll": {}, - "ref/netcore50/System.Xml.Serialization.dll": {}, - "ref/netcore50/System.Xml.dll": {}, - "ref/netcore50/System.dll": {}, - "ref/netcore50/mscorlib.dll": {} - }, - "runtime": { - "runtimes/aot/lib/netcore50/System.ComponentModel.DataAnnotations.dll": {}, - "runtimes/aot/lib/netcore50/System.Core.dll": {}, - "runtimes/aot/lib/netcore50/System.Net.dll": {}, - "runtimes/aot/lib/netcore50/System.Numerics.dll": {}, - "runtimes/aot/lib/netcore50/System.Runtime.Serialization.dll": {}, - "runtimes/aot/lib/netcore50/System.ServiceModel.Web.dll": {}, - "runtimes/aot/lib/netcore50/System.ServiceModel.dll": {}, - "runtimes/aot/lib/netcore50/System.Windows.dll": {}, - "runtimes/aot/lib/netcore50/System.Xml.Linq.dll": {}, - "runtimes/aot/lib/netcore50/System.Xml.Serialization.dll": {}, - "runtimes/aot/lib/netcore50/System.Xml.dll": {}, - "runtimes/aot/lib/netcore50/System.dll": {}, - "runtimes/aot/lib/netcore50/mscorlib.dll": {} - } - }, - "Microsoft.NETCore.Runtime/1.0.0": { - "dependencies": { - "Microsoft.NETCore.Runtime.Native": "1.0.0" - } - }, - "Microsoft.NETCore.Runtime.Native/1.0.0": { - "dependencies": { - "System.Collections": "[4.0.10]", - "System.Diagnostics.Contracts": "[4.0.0]", - "System.Diagnostics.Debug": "[4.0.10]", - "System.Diagnostics.StackTrace": "[4.0.0]", - "System.Diagnostics.Tools": "[4.0.0]", - "System.Diagnostics.Tracing": "[4.0.20]", - "System.Globalization": "[4.0.10]", - "System.Globalization.Calendars": "[4.0.0]", - "System.IO": "[4.0.10]", - "System.ObjectModel": "[4.0.10]", - "System.Private.Uri": "[4.0.0]", - "System.Reflection": "[4.0.10]", - "System.Reflection.Extensions": "[4.0.0]", - "System.Reflection.Primitives": "[4.0.0]", - "System.Resources.ResourceManager": "[4.0.0]", - "System.Runtime": "[4.0.20]", - "System.Runtime.Extensions": "[4.0.10]", - "System.Runtime.Handles": "[4.0.0]", - "System.Runtime.InteropServices": "[4.0.20]", - "System.Text.Encoding": "[4.0.10]", - "System.Text.Encoding.Extensions": "[4.0.10]", - "System.Threading": "[4.0.10]", - "System.Threading.Tasks": "[4.0.10]", - "System.Threading.Timer": "[4.0.0]" - } - }, - "Microsoft.NETCore.Targets/1.0.0": { - "dependencies": { - "Microsoft.NETCore.Platforms": "1.0.0", - "Microsoft.NETCore.Targets.UniversalWindowsPlatform": "5.0.0" - } - }, - "Microsoft.NETCore.Targets.UniversalWindowsPlatform/5.0.0": {}, - "Microsoft.VisualBasic/10.0.0": { - "dependencies": { - "System.Collections": "4.0.10", - "System.Diagnostics.Debug": "4.0.10", - "System.Dynamic.Runtime": "4.0.10", - "System.Globalization": "4.0.10", - "System.Linq": "4.0.0", - "System.Linq.Expressions": "4.0.10", - "System.ObjectModel": "4.0.10", - "System.Reflection": "4.0.10", - "System.Reflection.Extensions": "4.0.0", - "System.Reflection.Primitives": "4.0.0", - "System.Reflection.TypeExtensions": "4.0.0", - "System.Resources.ResourceManager": "4.0.0", - "System.Runtime": "4.0.20", - "System.Runtime.Extensions": "4.0.10", - "System.Runtime.InteropServices": "4.0.20", - "System.Threading": "4.0.10" - }, - "compile": { - "ref/netcore50/Microsoft.VisualBasic.dll": {} - }, - "runtime": { - "lib/netcore50/Microsoft.VisualBasic.dll": {} - } - }, - "Microsoft.Win32.Primitives/4.0.0": { - "dependencies": { - "System.Runtime": "4.0.20", - "System.Runtime.InteropServices": "4.0.20" - }, - "compile": { - "ref/dotnet/Microsoft.Win32.Primitives.dll": {} - }, - "runtime": { - "lib/dotnet/Microsoft.Win32.Primitives.dll": {} - } - }, - "System.AppContext/4.0.0": { - "dependencies": { - "System.Collections": "4.0.0", - "System.Resources.ResourceManager": "4.0.0", - "System.Runtime": "4.0.20", - "System.Threading": "4.0.0" - }, - "compile": { - "ref/dotnet/System.AppContext.dll": {} - }, - "runtime": { - "lib/netcore50/System.AppContext.dll": {} - } - }, - "System.Collections/4.0.10": { - "dependencies": { - "System.Diagnostics.Debug": "4.0.0", - "System.Resources.ResourceManager": "4.0.0", - "System.Runtime": "4.0.20", - "System.Runtime.Extensions": "4.0.0", - "System.Threading": "4.0.0" - }, - "compile": { - "ref/dotnet/System.Collections.dll": {} - }, - "runtime": { - "runtimes/win8-aot/lib/netcore50/System.Collections.dll": {} - } - }, - "System.Collections.Concurrent/4.0.10": { - "dependencies": { - "System.Collections": "4.0.10", - "System.Diagnostics.Debug": "4.0.10", - "System.Diagnostics.Tracing": "4.0.20", - "System.Globalization": "4.0.10", - "System.Resources.ResourceManager": "4.0.0", - "System.Runtime": "4.0.20", - "System.Runtime.Extensions": "4.0.10", - "System.Threading": "4.0.10", - "System.Threading.Tasks": "4.0.10" - }, - "compile": { - "ref/dotnet/System.Collections.Concurrent.dll": {} - }, - "runtime": { - "lib/dotnet/System.Collections.Concurrent.dll": {} - } - }, - "System.Collections.Immutable/1.1.37": { - "dependencies": { - "System.Collections": "4.0.0", - "System.Diagnostics.Debug": "4.0.0", - "System.Globalization": "4.0.0", - "System.Linq": "4.0.0", - "System.Resources.ResourceManager": "4.0.0", - "System.Runtime": "4.0.0", - "System.Runtime.Extensions": "4.0.0", - "System.Threading": "4.0.0" - }, - "compile": { - "lib/dotnet/System.Collections.Immutable.dll": {} - }, - "runtime": { - "lib/dotnet/System.Collections.Immutable.dll": {} - } - }, - "System.Collections.NonGeneric/4.0.0": { - "dependencies": { - "System.Diagnostics.Debug": "4.0.10", - "System.Globalization": "4.0.10", - "System.Resources.ResourceManager": "4.0.0", - "System.Runtime": "4.0.20", - "System.Runtime.Extensions": "4.0.10", - "System.Threading": "4.0.10" - }, - "compile": { - "ref/dotnet/System.Collections.NonGeneric.dll": {} - }, - "runtime": { - "lib/dotnet/System.Collections.NonGeneric.dll": {} - } - }, - "System.ComponentModel/4.0.0": { - "dependencies": { - "System.Runtime": "4.0.20" - }, - "compile": { - "ref/netcore50/System.ComponentModel.dll": {} - }, - "runtime": { - "lib/netcore50/System.ComponentModel.dll": {} - } - }, - "System.ComponentModel.Annotations/4.0.10": { - "dependencies": { - "System.Collections": "4.0.10", - "System.ComponentModel": "4.0.0", - "System.Globalization": "4.0.10", - "System.Linq": "4.0.0", - "System.Reflection": "4.0.10", - "System.Reflection.Extensions": "4.0.0", - "System.Resources.ResourceManager": "4.0.0", - "System.Runtime": "4.0.20", - "System.Runtime.Extensions": "4.0.10", - "System.Text.RegularExpressions": "4.0.10", - "System.Threading": "4.0.10" - }, - "compile": { - "ref/dotnet/System.ComponentModel.Annotations.dll": {} - }, - "runtime": { - "lib/dotnet/System.ComponentModel.Annotations.dll": {} - } - }, - "System.Diagnostics.Contracts/4.0.0": { - "compile": { - "ref/netcore50/System.Diagnostics.Contracts.dll": {} - }, - "runtime": { - "runtimes/win8-aot/lib/netcore50/System.Diagnostics.Contracts.dll": {} - } - }, - "System.Diagnostics.Debug/4.0.10": { - "dependencies": { - "System.Runtime": "4.0.0" - }, - "compile": { - "ref/dotnet/System.Diagnostics.Debug.dll": {} - }, - "runtime": { - "runtimes/win8-aot/lib/netcore50/System.Diagnostics.Debug.dll": {} - } - }, - "System.Diagnostics.StackTrace/4.0.0": { - "dependencies": { - "System.Runtime": "4.0.20" - }, - "compile": { - "ref/dotnet/System.Diagnostics.StackTrace.dll": {} - }, - "runtime": { - "runtimes/win8-aot/lib/netcore50/System.Diagnostics.StackTrace.dll": {} - } - }, - "System.Diagnostics.Tools/4.0.0": { - "compile": { - "ref/netcore50/System.Diagnostics.Tools.dll": {} - }, - "runtime": { - "runtimes/win8-aot/lib/netcore50/System.Diagnostics.Tools.dll": {} - } - }, - "System.Diagnostics.Tracing/4.0.20": { - "dependencies": { - "System.Collections": "4.0.10", - "System.Globalization": "4.0.0", - "System.Reflection": "4.0.10", - "System.Reflection.Extensions": "4.0.0", - "System.Resources.ResourceManager": "4.0.0", - "System.Runtime": "4.0.20", - "System.Runtime.Extensions": "4.0.10", - "System.Runtime.InteropServices": "4.0.0", - "System.Text.Encoding": "4.0.0", - "System.Threading": "4.0.10" - }, - "compile": { - "ref/dotnet/System.Diagnostics.Tracing.dll": {} - }, - "runtime": { - "runtimes/win8-aot/lib/netcore50/System.Diagnostics.Tracing.dll": {} - } - }, - "System.Dynamic.Runtime/4.0.10": { - "dependencies": { - "System.Collections": "4.0.0", - "System.Diagnostics.Debug": "4.0.0", - "System.Globalization": "4.0.0", - "System.Linq": "4.0.0", - "System.Linq.Expressions": "4.0.10", - "System.ObjectModel": "4.0.0", - "System.Reflection": "4.0.0", - "System.Reflection.TypeExtensions": "4.0.0", - "System.Resources.ResourceManager": "4.0.0", - "System.Runtime": "4.0.20", - "System.Runtime.Extensions": "4.0.0", - "System.Threading": "4.0.0" - }, - "compile": { - "ref/dotnet/System.Dynamic.Runtime.dll": {} - }, - "runtime": { - "runtimes/win8-aot/lib/netcore50/System.Dynamic.Runtime.dll": {} - } - }, - "System.Globalization/4.0.10": { - "dependencies": { - "System.Runtime": "4.0.0" - }, - "compile": { - "ref/dotnet/System.Globalization.dll": {} - }, - "runtime": { - "runtimes/win8-aot/lib/netcore50/System.Globalization.dll": {} - } - }, - "System.Globalization.Calendars/4.0.0": { - "dependencies": { - "System.Globalization": "4.0.0", - "System.Runtime": "4.0.0" - }, - "compile": { - "ref/dotnet/System.Globalization.Calendars.dll": {} - }, - "runtime": { - "runtimes/win8-aot/lib/netcore50/System.Globalization.Calendars.dll": {} - } - }, - "System.Globalization.Extensions/4.0.0": { - "dependencies": { - "System.Globalization": "4.0.10", - "System.Resources.ResourceManager": "4.0.0", - "System.Runtime": "4.0.20", - "System.Runtime.Extensions": "4.0.10", - "System.Runtime.InteropServices": "4.0.20" - }, - "compile": { - "ref/dotnet/System.Globalization.Extensions.dll": {} - }, - "runtime": { - "lib/dotnet/System.Globalization.Extensions.dll": {} - } - }, - "System.IO/4.0.10": { - "dependencies": { - "System.Globalization": "4.0.0", - "System.Runtime": "4.0.20", - "System.Text.Encoding": "4.0.10", - "System.Text.Encoding.Extensions": "4.0.0", - "System.Threading": "4.0.0", - "System.Threading.Tasks": "4.0.0" - }, - "compile": { - "ref/dotnet/System.IO.dll": {} - }, - "runtime": { - "runtimes/win8-aot/lib/netcore50/System.IO.dll": {} - } - }, - "System.IO.Compression/4.0.0": { - "dependencies": { - "System.Collections": "4.0.0", - "System.IO": "4.0.0", - "System.IO.Compression.clrcompression-x64": "4.0.0", - "System.Resources.ResourceManager": "4.0.0", - "System.Runtime": "4.0.0", - "System.Runtime.Extensions": "4.0.0", - "System.Runtime.InteropServices": "4.0.0", - "System.Text.Encoding": "4.0.0", - "System.Threading": "4.0.0", - "System.Threading.Tasks": "4.0.0" - }, - "compile": { - "ref/netcore50/System.IO.Compression.dll": {} - }, - "runtime": { - "lib/netcore50/System.IO.Compression.dll": {} - } - }, - "System.IO.Compression.clrcompression-x64/4.0.0": { - "native": { - "runtimes/win10-x64/native/ClrCompression.dll": {} - } - }, - "System.IO.Compression.ZipFile/4.0.0": { - "dependencies": { - "System.IO": "4.0.10", - "System.IO.Compression": "4.0.0", - "System.IO.FileSystem": "4.0.0", - "System.IO.FileSystem.Primitives": "4.0.0", - "System.Resources.ResourceManager": "4.0.0", - "System.Runtime": "4.0.20", - "System.Runtime.Extensions": "4.0.10", - "System.Text.Encoding": "4.0.10" - }, - "compile": { - "ref/dotnet/System.IO.Compression.ZipFile.dll": {} - }, - "runtime": { - "lib/dotnet/System.IO.Compression.ZipFile.dll": {} - } - }, - "System.IO.FileSystem/4.0.0": { - "dependencies": { - "System.Collections": "4.0.10", - "System.Diagnostics.Debug": "4.0.10", - "System.IO": "4.0.10", - "System.IO.FileSystem.Primitives": "4.0.0", - "System.Resources.ResourceManager": "4.0.0", - "System.Runtime": "4.0.20", - "System.Runtime.Extensions": "4.0.10", - "System.Runtime.Handles": "4.0.0", - "System.Runtime.InteropServices": "4.0.20", - "System.Runtime.WindowsRuntime": "4.0.0", - "System.Text.Encoding": "4.0.10", - "System.Text.Encoding.Extensions": "4.0.10", - "System.Threading": "4.0.10", - "System.Threading.Overlapped": "4.0.0", - "System.Threading.Tasks": "4.0.10" - }, - "compile": { - "ref/dotnet/System.IO.FileSystem.dll": {} - }, - "runtime": { - "lib/netcore50/System.IO.FileSystem.dll": {} - } - }, - "System.IO.FileSystem.Primitives/4.0.0": { - "dependencies": { - "System.Runtime": "4.0.20" - }, - "compile": { - "ref/dotnet/System.IO.FileSystem.Primitives.dll": {} - }, - "runtime": { - "lib/dotnet/System.IO.FileSystem.Primitives.dll": {} - } - }, - "System.IO.UnmanagedMemoryStream/4.0.0": { - "dependencies": { - "System.IO": "4.0.10", - "System.IO.FileSystem.Primitives": "4.0.0", - "System.Resources.ResourceManager": "4.0.0", - "System.Runtime": "4.0.20", - "System.Runtime.InteropServices": "4.0.20", - "System.Threading": "4.0.10", - "System.Threading.Tasks": "4.0.10" - }, - "compile": { - "ref/dotnet/System.IO.UnmanagedMemoryStream.dll": {} - }, - "runtime": { - "lib/dotnet/System.IO.UnmanagedMemoryStream.dll": {} - } - }, - "System.Linq/4.0.0": { - "dependencies": { - "System.Collections": "4.0.10", - "System.Diagnostics.Debug": "4.0.10", - "System.Resources.ResourceManager": "4.0.0", - "System.Runtime": "4.0.20", - "System.Runtime.Extensions": "4.0.10" - }, - "compile": { - "ref/netcore50/System.Linq.dll": {} - }, - "runtime": { - "lib/netcore50/System.Linq.dll": {} - } - }, - "System.Linq.Expressions/4.0.10": { - "dependencies": { - "System.Collections": "4.0.0", - "System.Diagnostics.Debug": "4.0.0", - "System.Globalization": "4.0.0", - "System.IO": "4.0.0", - "System.Linq": "4.0.0", - "System.Reflection": "4.0.0", - "System.Reflection.Extensions": "4.0.0", - "System.Reflection.Primitives": "4.0.0", - "System.Reflection.TypeExtensions": "4.0.0", - "System.Resources.ResourceManager": "4.0.0", - "System.Runtime": "4.0.20", - "System.Runtime.Extensions": "4.0.0", - "System.Threading": "4.0.0" - }, - "compile": { - "ref/dotnet/System.Linq.Expressions.dll": {} - }, - "runtime": { - "runtimes/win8-aot/lib/netcore50/System.Linq.Expressions.dll": {} - } - }, - "System.Linq.Parallel/4.0.0": { - "dependencies": { - "System.Collections": "4.0.10", - "System.Collections.Concurrent": "4.0.10", - "System.Diagnostics.Debug": "4.0.10", - "System.Diagnostics.Tracing": "4.0.20", - "System.Linq": "4.0.0", - "System.Resources.ResourceManager": "4.0.0", - "System.Runtime": "4.0.20", - "System.Runtime.Extensions": "4.0.10", - "System.Threading": "4.0.10", - "System.Threading.Tasks": "4.0.10" - }, - "compile": { - "ref/netcore50/System.Linq.Parallel.dll": {} - }, - "runtime": { - "lib/netcore50/System.Linq.Parallel.dll": {} - } - }, - "System.Linq.Queryable/4.0.0": { - "dependencies": { - "System.Collections": "4.0.10", - "System.Linq": "4.0.0", - "System.Linq.Expressions": "4.0.10", - "System.Reflection": "4.0.10", - "System.Reflection.Extensions": "4.0.0", - "System.Resources.ResourceManager": "4.0.0", - "System.Runtime": "4.0.20" - }, - "compile": { - "ref/netcore50/System.Linq.Queryable.dll": {} - }, - "runtime": { - "lib/netcore50/System.Linq.Queryable.dll": {} - } - }, - "System.Net.Http/4.0.0": { - "dependencies": { - "System.Collections": "4.0.10", - "System.Diagnostics.Debug": "4.0.10", - "System.Globalization": "4.0.10", - "System.IO": "4.0.10", - "System.Net.Primitives": "4.0.0", - "System.Resources.ResourceManager": "4.0.0", - "System.Runtime": "4.0.20", - "System.Runtime.Extensions": "4.0.10", - "System.Runtime.InteropServices": "4.0.20", - "System.Runtime.WindowsRuntime": "4.0.10", - "System.Text.Encoding": "4.0.10", - "System.Text.Encoding.Extensions": "4.0.10", - "System.Threading": "4.0.10", - "System.Threading.Tasks": "4.0.10" - }, - "compile": { - "ref/netcore50/System.Net.Http.dll": {} - }, - "runtime": { - "lib/netcore50/System.Net.Http.dll": {} - } - }, - "System.Net.NetworkInformation/4.0.0": { - "dependencies": { - "System.Runtime": "4.0.0", - "System.Runtime.InteropServices.WindowsRuntime": "4.0.0", - "System.Threading": "4.0.0" - }, - "compile": { - "ref/netcore50/System.Net.NetworkInformation.dll": {} - }, - "runtime": { - "lib/netcore50/System.Net.NetworkInformation.dll": {} - } - }, - "System.Net.Primitives/4.0.10": { - "dependencies": { - "System.Private.Networking": "4.0.0", - "System.Runtime": "4.0.20" - }, - "compile": { - "ref/dotnet/System.Net.Primitives.dll": {} - }, - "runtime": { - "lib/netcore50/System.Net.Primitives.dll": {} - } - }, - "System.Numerics.Vectors/4.1.0": { - "dependencies": { - "System.Globalization": "4.0.10", - "System.Resources.ResourceManager": "4.0.0", - "System.Runtime": "4.0.20", - "System.Runtime.Extensions": "4.0.10" - }, - "compile": { - "ref/dotnet/System.Numerics.Vectors.dll": {} - }, - "runtime": { - "lib/dotnet/System.Numerics.Vectors.dll": {} - } - }, - "System.ObjectModel/4.0.10": { - "dependencies": { - "System.Collections": "4.0.10", - "System.Diagnostics.Debug": "4.0.10", - "System.Resources.ResourceManager": "4.0.0", - "System.Runtime": "4.0.20", - "System.Threading": "4.0.10" - }, - "compile": { - "ref/dotnet/System.ObjectModel.dll": {} - }, - "runtime": { - "lib/dotnet/System.ObjectModel.dll": {} - } - }, - "System.Private.Networking/4.0.0": { - "dependencies": { - "Microsoft.Win32.Primitives": "4.0.0", - "System.Collections": "4.0.10", - "System.Collections.NonGeneric": "4.0.0", - "System.Diagnostics.Debug": "4.0.10", - "System.Diagnostics.Tracing": "4.0.20", - "System.Globalization": "4.0.10", - "System.IO": "4.0.10", - "System.IO.FileSystem": "4.0.0", - "System.IO.FileSystem.Primitives": "4.0.0", - "System.Resources.ResourceManager": "4.0.0", - "System.Runtime": "4.0.20", - "System.Runtime.Extensions": "4.0.10", - "System.Runtime.Handles": "4.0.0", - "System.Runtime.InteropServices": "4.0.20", - "System.Threading": "4.0.10", - "System.Threading.Overlapped": "4.0.0", - "System.Threading.Tasks": "4.0.10" - }, - "compile": { - "ref/netcore50/_._": {} - }, - "runtime": { - "lib/netcore50/System.Private.Networking.dll": {} - } - }, - "System.Private.Uri/4.0.0": { - "compile": { - "ref/netcore50/_._": {} - }, - "runtime": { - "runtimes/win8-aot/lib/netcore50/System.Private.Uri.dll": {} - } - }, - "System.Reflection/4.0.10": { - "dependencies": { - "System.IO": "4.0.0", - "System.Reflection.Primitives": "4.0.0", - "System.Runtime": "4.0.20" - }, - "compile": { - "ref/dotnet/System.Reflection.dll": {} - }, - "runtime": { - "runtimes/win8-aot/lib/netcore50/System.Reflection.dll": {} - } - }, - "System.Reflection.DispatchProxy/4.0.0": { - "dependencies": { - "System.Collections": "4.0.10", - "System.Linq": "4.0.0", - "System.Reflection": "4.0.10", - "System.Reflection.Extensions": "4.0.0", - "System.Reflection.Primitives": "4.0.0", - "System.Resources.ResourceManager": "4.0.0", - "System.Runtime": "4.0.20", - "System.Threading": "4.0.10" - }, - "compile": { - "ref/dotnet/System.Reflection.DispatchProxy.dll": {} - }, - "runtime": { - "runtimes/win8-aot/lib/netcore50/System.Reflection.DispatchProxy.dll": {} - } - }, - "System.Reflection.Extensions/4.0.0": { - "dependencies": { - "System.Diagnostics.Debug": "4.0.10", - "System.Reflection": "4.0.10", - "System.Reflection.Primitives": "4.0.0", - "System.Reflection.TypeExtensions": "4.0.0", - "System.Resources.ResourceManager": "4.0.0", - "System.Runtime": "4.0.20", - "System.Runtime.Extensions": "4.0.10" - }, - "compile": { - "ref/netcore50/System.Reflection.Extensions.dll": {} - }, - "runtime": { - "runtimes/win8-aot/lib/netcore50/System.Reflection.Extensions.dll": {} - } - }, - "System.Reflection.Metadata/1.0.22": { - "dependencies": { - "System.Collections": "4.0.0", - "System.Collections.Immutable": "1.1.37", - "System.Diagnostics.Debug": "4.0.0", - "System.IO": "4.0.0", - "System.Reflection": "4.0.0", - "System.Reflection.Extensions": "4.0.0", - "System.Reflection.Primitives": "4.0.0", - "System.Resources.ResourceManager": "4.0.0", - "System.Runtime": "4.0.0", - "System.Runtime.Extensions": "4.0.0", - "System.Runtime.InteropServices": "4.0.0", - "System.Text.Encoding": "4.0.0", - "System.Text.Encoding.Extensions": "4.0.0", - "System.Threading": "4.0.0" - }, - "compile": { - "lib/dotnet/System.Reflection.Metadata.dll": {} - }, - "runtime": { - "lib/dotnet/System.Reflection.Metadata.dll": {} - } - }, - "System.Reflection.Primitives/4.0.0": { - "dependencies": { - "System.Runtime": "4.0.0", - "System.Threading": "4.0.0" - }, - "compile": { - "ref/netcore50/System.Reflection.Primitives.dll": {} - }, - "runtime": { - "runtimes/win8-aot/lib/netcore50/System.Reflection.Primitives.dll": {} - } - }, - "System.Reflection.TypeExtensions/4.0.0": { - "dependencies": { - "System.Diagnostics.Contracts": "4.0.0", - "System.Diagnostics.Debug": "4.0.10", - "System.Linq": "4.0.0", - "System.Reflection": "4.0.10", - "System.Reflection.Primitives": "4.0.0", - "System.Resources.ResourceManager": "4.0.0", - "System.Runtime": "4.0.20", - "System.Runtime.Extensions": "4.0.10" - }, - "compile": { - "ref/dotnet/System.Reflection.TypeExtensions.dll": {} - }, - "runtime": { - "runtimes/win8-aot/lib/netcore50/System.Reflection.TypeExtensions.dll": {} - } - }, - "System.Resources.ResourceManager/4.0.0": { - "dependencies": { - "System.Globalization": "4.0.0", - "System.Reflection": "4.0.10", - "System.Runtime": "4.0.20" - }, - "compile": { - "ref/netcore50/System.Resources.ResourceManager.dll": {} - }, - "runtime": { - "runtimes/win8-aot/lib/netcore50/System.Resources.ResourceManager.dll": {} - } - }, - "System.Runtime/4.0.20": { - "dependencies": { - "System.Private.Uri": "4.0.0" - }, - "compile": { - "ref/dotnet/System.Runtime.dll": {} - }, - "runtime": { - "runtimes/win8-aot/lib/netcore50/System.Runtime.dll": {} - } - }, - "System.Runtime.Extensions/4.0.10": { - "dependencies": { - "System.Runtime": "4.0.20" - }, - "compile": { - "ref/dotnet/System.Runtime.Extensions.dll": {} - }, - "runtime": { - "runtimes/win8-aot/lib/netcore50/System.Runtime.Extensions.dll": {} - } - }, - "System.Runtime.Handles/4.0.0": { - "dependencies": { - "System.Runtime": "4.0.0" - }, - "compile": { - "ref/dotnet/System.Runtime.Handles.dll": {} - }, - "runtime": { - "runtimes/win8-aot/lib/netcore50/System.Runtime.Handles.dll": {} - } - }, - "System.Runtime.InteropServices/4.0.20": { - "dependencies": { - "System.Reflection": "4.0.0", - "System.Reflection.Primitives": "4.0.0", - "System.Runtime": "4.0.0", - "System.Runtime.Handles": "4.0.0" - }, - "compile": { - "ref/dotnet/System.Runtime.InteropServices.dll": {} - }, - "runtime": { - "runtimes/win8-aot/lib/netcore50/System.Runtime.InteropServices.dll": {} - } - }, - "System.Runtime.InteropServices.WindowsRuntime/4.0.0": { - "compile": { - "ref/netcore50/System.Runtime.InteropServices.WindowsRuntime.dll": {} - }, - "runtime": { - "runtimes/win8-aot/lib/netcore50/System.Runtime.InteropServices.WindowsRuntime.dll": {} - } - }, - "System.Runtime.Numerics/4.0.0": { - "dependencies": { - "System.Globalization": "4.0.10", - "System.Resources.ResourceManager": "4.0.0", - "System.Runtime": "4.0.20", - "System.Runtime.Extensions": "4.0.10" - }, - "compile": { - "ref/netcore50/System.Runtime.Numerics.dll": {} - }, - "runtime": { - "lib/netcore50/System.Runtime.Numerics.dll": {} - } - }, - "System.Runtime.WindowsRuntime/4.0.10": { - "dependencies": { - "System.Diagnostics.Debug": "4.0.10", - "System.Globalization": "4.0.0", - "System.IO": "4.0.10", - "System.ObjectModel": "4.0.0", - "System.Resources.ResourceManager": "4.0.0", - "System.Runtime": "4.0.20", - "System.Runtime.Extensions": "4.0.0", - "System.Runtime.InteropServices": "4.0.20", - "System.Threading": "4.0.10", - "System.Threading.Tasks": "4.0.10" - }, - "compile": { - "ref/netcore50/System.Runtime.WindowsRuntime.dll": {} - }, - "runtime": { - "runtimes/win8-aot/lib/netcore50/System.Runtime.WindowsRuntime.dll": {} - } - }, - "System.Security.Claims/4.0.0": { - "dependencies": { - "System.Collections": "4.0.0", - "System.Diagnostics.Debug": "4.0.0", - "System.Globalization": "4.0.0", - "System.IO": "4.0.0", - "System.Resources.ResourceManager": "4.0.0", - "System.Runtime": "4.0.20", - "System.Runtime.Extensions": "4.0.0", - "System.Security.Principal": "4.0.0" - }, - "compile": { - "ref/dotnet/System.Security.Claims.dll": {} - }, - "runtime": { - "lib/dotnet/System.Security.Claims.dll": {} - } - }, - "System.Security.Principal/4.0.0": { - "dependencies": { - "System.Runtime": "4.0.0" - }, - "compile": { - "ref/netcore50/System.Security.Principal.dll": {} - }, - "runtime": { - "lib/netcore50/System.Security.Principal.dll": {} - } - }, - "System.Text.Encoding/4.0.10": { - "dependencies": { - "System.Runtime": "4.0.0" - }, - "compile": { - "ref/dotnet/System.Text.Encoding.dll": {} - }, - "runtime": { - "runtimes/win8-aot/lib/netcore50/System.Text.Encoding.dll": {} - } - }, - "System.Text.Encoding.Extensions/4.0.10": { - "dependencies": { - "System.Runtime": "4.0.0", - "System.Text.Encoding": "4.0.10" - }, - "compile": { - "ref/dotnet/System.Text.Encoding.Extensions.dll": {} - }, - "runtime": { - "runtimes/win8-aot/lib/netcore50/System.Text.Encoding.Extensions.dll": {} - } - }, - "System.Text.RegularExpressions/4.0.10": { - "dependencies": { - "System.Collections": "4.0.10", - "System.Globalization": "4.0.10", - "System.Resources.ResourceManager": "4.0.0", - "System.Runtime": "4.0.20", - "System.Runtime.Extensions": "4.0.10", - "System.Threading": "4.0.10" - }, - "compile": { - "ref/dotnet/System.Text.RegularExpressions.dll": {} - }, - "runtime": { - "lib/dotnet/System.Text.RegularExpressions.dll": {} - } - }, - "System.Threading/4.0.10": { - "dependencies": { - "System.Runtime": "4.0.0", - "System.Threading.Tasks": "4.0.0" - }, - "compile": { - "ref/dotnet/System.Threading.dll": {} - }, - "runtime": { - "runtimes/win8-aot/lib/netcore50/System.Threading.dll": {} - } - }, - "System.Threading.Overlapped/4.0.0": { - "dependencies": { - "System.Resources.ResourceManager": "4.0.0", - "System.Runtime": "4.0.20", - "System.Runtime.Extensions": "4.0.0", - "System.Runtime.Handles": "4.0.0", - "System.Runtime.InteropServices": "4.0.20", - "System.Threading": "4.0.10" - }, - "compile": { - "ref/dotnet/System.Threading.Overlapped.dll": {} - }, - "runtime": { - "lib/netcore50/System.Threading.Overlapped.dll": {} - } - }, - "System.Threading.Tasks/4.0.10": { - "dependencies": { - "System.Runtime": "4.0.0" - }, - "compile": { - "ref/dotnet/System.Threading.Tasks.dll": {} - }, - "runtime": { - "runtimes/win8-aot/lib/netcore50/System.Threading.Tasks.dll": {} - } - }, - "System.Threading.Tasks.Dataflow/4.5.25": { - "dependencies": { - "System.Collections": "4.0.0", - "System.Collections.Concurrent": "4.0.0", - "System.Diagnostics.Debug": "4.0.0", - "System.Diagnostics.Tracing": "4.0.0", - "System.Dynamic.Runtime": "4.0.0", - "System.Linq": "4.0.0", - "System.Resources.ResourceManager": "4.0.0", - "System.Runtime": "4.0.0", - "System.Runtime.Extensions": "4.0.0", - "System.Threading": "4.0.0", - "System.Threading.Tasks": "4.0.0" - }, - "compile": { - "lib/dotnet/System.Threading.Tasks.Dataflow.dll": {} - }, - "runtime": { - "lib/dotnet/System.Threading.Tasks.Dataflow.dll": {} - } - }, - "System.Threading.Tasks.Parallel/4.0.0": { - "dependencies": { - "System.Collections.Concurrent": "4.0.10", - "System.Diagnostics.Debug": "4.0.10", - "System.Diagnostics.Tracing": "4.0.20", - "System.Resources.ResourceManager": "4.0.0", - "System.Runtime": "4.0.20", - "System.Runtime.Extensions": "4.0.10", - "System.Threading": "4.0.10", - "System.Threading.Tasks": "4.0.10" - }, - "compile": { - "ref/netcore50/System.Threading.Tasks.Parallel.dll": {} - }, - "runtime": { - "lib/netcore50/System.Threading.Tasks.Parallel.dll": {} - } - }, - "System.Threading.Timer/4.0.0": { - "compile": { - "ref/netcore50/System.Threading.Timer.dll": {} - }, - "runtime": { - "runtimes/win8-aot/lib/netcore50/System.Threading.Timer.dll": {} - } - }, - "System.Xml.ReaderWriter/4.0.10": { - "dependencies": { - "System.Collections": "4.0.10", - "System.Diagnostics.Debug": "4.0.10", - "System.Globalization": "4.0.10", - "System.IO": "4.0.10", - "System.IO.FileSystem": "4.0.0", - "System.IO.FileSystem.Primitives": "4.0.0", - "System.Resources.ResourceManager": "4.0.0", - "System.Runtime": "4.0.20", - "System.Runtime.Extensions": "4.0.10", - "System.Runtime.InteropServices": "4.0.20", - "System.Text.Encoding": "4.0.10", - "System.Text.Encoding.Extensions": "4.0.10", - "System.Text.RegularExpressions": "4.0.10", - "System.Threading.Tasks": "4.0.10" - }, - "compile": { - "ref/dotnet/System.Xml.ReaderWriter.dll": {} - }, - "runtime": { - "lib/dotnet/System.Xml.ReaderWriter.dll": {} - } - }, - "System.Xml.XDocument/4.0.10": { - "dependencies": { - "System.Collections": "4.0.10", - "System.Diagnostics.Debug": "4.0.10", - "System.Globalization": "4.0.10", - "System.IO": "4.0.10", - "System.Reflection": "4.0.10", - "System.Resources.ResourceManager": "4.0.0", - "System.Runtime": "4.0.20", - "System.Runtime.Extensions": "4.0.10", - "System.Text.Encoding": "4.0.10", - "System.Threading": "4.0.10", - "System.Xml.ReaderWriter": "4.0.10" - }, - "compile": { - "ref/dotnet/System.Xml.XDocument.dll": {} - }, - "runtime": { - "lib/dotnet/System.Xml.XDocument.dll": {} - } - } - }, - "UAP,Version=v10.0/win10-x86": { - "Microsoft.CSharp/4.0.0": { - "dependencies": { - "System.Collections": "4.0.10", - "System.Diagnostics.Debug": "4.0.10", - "System.Dynamic.Runtime": "4.0.0", - "System.Globalization": "4.0.10", - "System.Linq": "4.0.0", - "System.Linq.Expressions": "4.0.0", - "System.ObjectModel": "4.0.10", - "System.Reflection": "4.0.10", - "System.Reflection.Extensions": "4.0.0", - "System.Reflection.Primitives": "4.0.0", - "System.Reflection.TypeExtensions": "4.0.0", - "System.Resources.ResourceManager": "4.0.0", - "System.Runtime": "4.0.20", - "System.Runtime.Extensions": "4.0.10", - "System.Runtime.InteropServices": "4.0.20", - "System.Threading": "4.0.10" - }, - "compile": { - "ref/netcore50/Microsoft.CSharp.dll": {} - }, - "runtime": { - "lib/netcore50/Microsoft.CSharp.dll": {} - } - }, - "Microsoft.NETCore/5.0.0": { - "dependencies": { - "Microsoft.CSharp": "4.0.0", - "Microsoft.NETCore.Targets": "1.0.0", - "Microsoft.VisualBasic": "10.0.0", - "System.AppContext": "4.0.0", - "System.Collections": "4.0.10", - "System.Collections.Concurrent": "4.0.10", - "System.Collections.Immutable": "1.1.37", - "System.ComponentModel": "4.0.0", - "System.ComponentModel.Annotations": "4.0.10", - "System.Diagnostics.Debug": "4.0.10", - "System.Diagnostics.Tools": "4.0.0", - "System.Diagnostics.Tracing": "4.0.20", - "System.Dynamic.Runtime": "4.0.10", - "System.Globalization": "4.0.10", - "System.Globalization.Calendars": "4.0.0", - "System.Globalization.Extensions": "4.0.0", - "System.IO": "4.0.10", - "System.IO.Compression": "4.0.0", - "System.IO.Compression.ZipFile": "4.0.0", - "System.IO.FileSystem": "4.0.0", - "System.IO.FileSystem.Primitives": "4.0.0", - "System.IO.UnmanagedMemoryStream": "4.0.0", - "System.Linq": "4.0.0", - "System.Linq.Expressions": "4.0.10", - "System.Linq.Parallel": "4.0.0", - "System.Linq.Queryable": "4.0.0", - "System.Net.Http": "4.0.0", - "System.Net.NetworkInformation": "4.0.0", - "System.Net.Primitives": "4.0.10", - "System.Numerics.Vectors": "4.1.0", - "System.ObjectModel": "4.0.10", - "System.Reflection": "4.0.10", - "System.Reflection.DispatchProxy": "4.0.0", - "System.Reflection.Extensions": "4.0.0", - "System.Reflection.Metadata": "1.0.22", - "System.Reflection.Primitives": "4.0.0", - "System.Reflection.TypeExtensions": "4.0.0", - "System.Resources.ResourceManager": "4.0.0", - "System.Runtime": "4.0.20", - "System.Runtime.Extensions": "4.0.10", - "System.Runtime.Handles": "4.0.0", - "System.Runtime.InteropServices": "4.0.20", - "System.Runtime.Numerics": "4.0.0", - "System.Security.Claims": "4.0.0", - "System.Security.Principal": "4.0.0", - "System.Text.Encoding": "4.0.10", - "System.Text.Encoding.Extensions": "4.0.10", - "System.Text.RegularExpressions": "4.0.10", - "System.Threading": "4.0.10", - "System.Threading.Tasks": "4.0.10", - "System.Threading.Tasks.Dataflow": "4.5.25", - "System.Threading.Tasks.Parallel": "4.0.0", - "System.Threading.Timer": "4.0.0", - "System.Xml.ReaderWriter": "4.0.10", - "System.Xml.XDocument": "4.0.10" - } - }, - "Microsoft.NETCore.Platforms/1.0.0": {}, - "Microsoft.NETCore.Portable.Compatibility/1.0.0": { - "dependencies": { - "Microsoft.NETCore.Runtime": "1.0.0" - }, - "compile": { - "ref/netcore50/System.ComponentModel.DataAnnotations.dll": {}, - "ref/netcore50/System.Core.dll": {}, - "ref/netcore50/System.Net.dll": {}, - "ref/netcore50/System.Numerics.dll": {}, - "ref/netcore50/System.Runtime.Serialization.dll": {}, - "ref/netcore50/System.ServiceModel.Web.dll": {}, - "ref/netcore50/System.ServiceModel.dll": {}, - "ref/netcore50/System.Windows.dll": {}, - "ref/netcore50/System.Xml.Linq.dll": {}, - "ref/netcore50/System.Xml.Serialization.dll": {}, - "ref/netcore50/System.Xml.dll": {}, - "ref/netcore50/System.dll": {}, - "ref/netcore50/mscorlib.dll": {} - }, - "runtime": { - "lib/netcore50/System.ComponentModel.DataAnnotations.dll": {}, - "lib/netcore50/System.Core.dll": {}, - "lib/netcore50/System.Net.dll": {}, - "lib/netcore50/System.Numerics.dll": {}, - "lib/netcore50/System.Runtime.Serialization.dll": {}, - "lib/netcore50/System.ServiceModel.Web.dll": {}, - "lib/netcore50/System.ServiceModel.dll": {}, - "lib/netcore50/System.Windows.dll": {}, - "lib/netcore50/System.Xml.Linq.dll": {}, - "lib/netcore50/System.Xml.Serialization.dll": {}, - "lib/netcore50/System.Xml.dll": {}, - "lib/netcore50/System.dll": {} - } - }, - "Microsoft.NETCore.Runtime/1.0.0": { - "dependencies": { - "Microsoft.NETCore.Runtime.CoreCLR-x86": "1.0.0", - "Microsoft.NETCore.Windows.ApiSets-x86": "1.0.0" - } - }, - "Microsoft.NETCore.Runtime.CoreCLR-x86/1.0.0": { - "dependencies": { - "System.Collections": "[4.0.10]", - "System.Diagnostics.Contracts": "[4.0.0]", - "System.Diagnostics.Debug": "[4.0.10]", - "System.Diagnostics.StackTrace": "[4.0.0]", - "System.Diagnostics.Tools": "[4.0.0]", - "System.Diagnostics.Tracing": "[4.0.20]", - "System.Globalization": "[4.0.10]", - "System.Globalization.Calendars": "[4.0.0]", - "System.IO": "[4.0.10]", - "System.ObjectModel": "[4.0.10]", - "System.Private.Uri": "[4.0.0]", - "System.Reflection": "[4.0.10]", - "System.Reflection.Extensions": "[4.0.0]", - "System.Reflection.Primitives": "[4.0.0]", - "System.Resources.ResourceManager": "[4.0.0]", - "System.Runtime": "[4.0.20]", - "System.Runtime.Extensions": "[4.0.10]", - "System.Runtime.Handles": "[4.0.0]", - "System.Runtime.InteropServices": "[4.0.20]", - "System.Text.Encoding": "[4.0.10]", - "System.Text.Encoding.Extensions": "[4.0.10]", - "System.Threading": "[4.0.10]", - "System.Threading.Tasks": "[4.0.10]", - "System.Threading.Timer": "[4.0.0]" - }, - "compile": { - "ref/dotnet/_._": {} - }, - "runtime": { - "runtimes/win7-x86/lib/dotnet/mscorlib.ni.dll": {} - }, - "native": { - "runtimes/win7-x86/native/clretwrc.dll": {}, - "runtimes/win7-x86/native/coreclr.dll": {}, - "runtimes/win7-x86/native/dbgshim.dll": {}, - "runtimes/win7-x86/native/mscordaccore.dll": {}, - "runtimes/win7-x86/native/mscordbi.dll": {}, - "runtimes/win7-x86/native/mscorrc.debug.dll": {}, - "runtimes/win7-x86/native/mscorrc.dll": {} - } - }, - "Microsoft.NETCore.Targets/1.0.0": { - "dependencies": { - "Microsoft.NETCore.Platforms": "1.0.0", - "Microsoft.NETCore.Targets.UniversalWindowsPlatform": "5.0.0" - } - }, - "Microsoft.NETCore.Targets.UniversalWindowsPlatform/5.0.0": {}, - "Microsoft.NETCore.Windows.ApiSets-x86/1.0.0": { - "native": { - "runtimes/win10-x86/native/_._": {} - } - }, - "Microsoft.VisualBasic/10.0.0": { - "dependencies": { - "System.Collections": "4.0.10", - "System.Diagnostics.Debug": "4.0.10", - "System.Dynamic.Runtime": "4.0.10", - "System.Globalization": "4.0.10", - "System.Linq": "4.0.0", - "System.Linq.Expressions": "4.0.10", - "System.ObjectModel": "4.0.10", - "System.Reflection": "4.0.10", - "System.Reflection.Extensions": "4.0.0", - "System.Reflection.Primitives": "4.0.0", - "System.Reflection.TypeExtensions": "4.0.0", - "System.Resources.ResourceManager": "4.0.0", - "System.Runtime": "4.0.20", - "System.Runtime.Extensions": "4.0.10", - "System.Runtime.InteropServices": "4.0.20", - "System.Threading": "4.0.10" - }, - "compile": { - "ref/netcore50/Microsoft.VisualBasic.dll": {} - }, - "runtime": { - "lib/netcore50/Microsoft.VisualBasic.dll": {} - } - }, - "Microsoft.Win32.Primitives/4.0.0": { - "dependencies": { - "System.Runtime": "4.0.20", - "System.Runtime.InteropServices": "4.0.20" - }, - "compile": { - "ref/dotnet/Microsoft.Win32.Primitives.dll": {} - }, - "runtime": { - "lib/dotnet/Microsoft.Win32.Primitives.dll": {} - } - }, - "System.AppContext/4.0.0": { - "dependencies": { - "System.Collections": "4.0.0", - "System.Resources.ResourceManager": "4.0.0", - "System.Runtime": "4.0.20", - "System.Threading": "4.0.0" - }, - "compile": { - "ref/dotnet/System.AppContext.dll": {} - }, - "runtime": { - "lib/netcore50/System.AppContext.dll": {} - } - }, - "System.Collections/4.0.10": { - "dependencies": { - "System.Diagnostics.Debug": "4.0.0", - "System.Resources.ResourceManager": "4.0.0", - "System.Runtime": "4.0.20", - "System.Runtime.Extensions": "4.0.0", - "System.Threading": "4.0.0" - }, - "compile": { - "ref/dotnet/System.Collections.dll": {} - }, - "runtime": { - "lib/netcore50/System.Collections.dll": {} - } - }, - "System.Collections.Concurrent/4.0.10": { - "dependencies": { - "System.Collections": "4.0.10", - "System.Diagnostics.Debug": "4.0.10", - "System.Diagnostics.Tracing": "4.0.20", - "System.Globalization": "4.0.10", - "System.Resources.ResourceManager": "4.0.0", - "System.Runtime": "4.0.20", - "System.Runtime.Extensions": "4.0.10", - "System.Threading": "4.0.10", - "System.Threading.Tasks": "4.0.10" - }, - "compile": { - "ref/dotnet/System.Collections.Concurrent.dll": {} - }, - "runtime": { - "lib/dotnet/System.Collections.Concurrent.dll": {} - } - }, - "System.Collections.Immutable/1.1.37": { - "dependencies": { - "System.Collections": "4.0.0", - "System.Diagnostics.Debug": "4.0.0", - "System.Globalization": "4.0.0", - "System.Linq": "4.0.0", - "System.Resources.ResourceManager": "4.0.0", - "System.Runtime": "4.0.0", - "System.Runtime.Extensions": "4.0.0", - "System.Threading": "4.0.0" - }, - "compile": { - "lib/dotnet/System.Collections.Immutable.dll": {} - }, - "runtime": { - "lib/dotnet/System.Collections.Immutable.dll": {} - } - }, - "System.Collections.NonGeneric/4.0.0": { - "dependencies": { - "System.Diagnostics.Debug": "4.0.10", - "System.Globalization": "4.0.10", - "System.Resources.ResourceManager": "4.0.0", - "System.Runtime": "4.0.20", - "System.Runtime.Extensions": "4.0.10", - "System.Threading": "4.0.10" - }, - "compile": { - "ref/dotnet/System.Collections.NonGeneric.dll": {} - }, - "runtime": { - "lib/dotnet/System.Collections.NonGeneric.dll": {} - } - }, - "System.ComponentModel/4.0.0": { - "dependencies": { - "System.Runtime": "4.0.20" - }, - "compile": { - "ref/netcore50/System.ComponentModel.dll": {} - }, - "runtime": { - "lib/netcore50/System.ComponentModel.dll": {} - } - }, - "System.ComponentModel.Annotations/4.0.10": { - "dependencies": { - "System.Collections": "4.0.10", - "System.ComponentModel": "4.0.0", - "System.Globalization": "4.0.10", - "System.Linq": "4.0.0", - "System.Reflection": "4.0.10", - "System.Reflection.Extensions": "4.0.0", - "System.Resources.ResourceManager": "4.0.0", - "System.Runtime": "4.0.20", - "System.Runtime.Extensions": "4.0.10", - "System.Text.RegularExpressions": "4.0.10", - "System.Threading": "4.0.10" - }, - "compile": { - "ref/dotnet/System.ComponentModel.Annotations.dll": {} - }, - "runtime": { - "lib/dotnet/System.ComponentModel.Annotations.dll": {} - } - }, - "System.Diagnostics.Contracts/4.0.0": { - "compile": { - "ref/netcore50/System.Diagnostics.Contracts.dll": {} - }, - "runtime": { - "lib/netcore50/System.Diagnostics.Contracts.dll": {} - } - }, - "System.Diagnostics.Debug/4.0.10": { - "dependencies": { - "System.Runtime": "4.0.0" - }, - "compile": { - "ref/dotnet/System.Diagnostics.Debug.dll": {} - }, - "runtime": { - "lib/netcore50/System.Diagnostics.Debug.dll": {} - } - }, - "System.Diagnostics.StackTrace/4.0.0": { - "dependencies": { - "System.Runtime": "4.0.20" - }, - "compile": { - "ref/dotnet/System.Diagnostics.StackTrace.dll": {} - }, - "runtime": { - "lib/netcore50/System.Diagnostics.StackTrace.dll": {} - } - }, - "System.Diagnostics.Tools/4.0.0": { - "compile": { - "ref/netcore50/System.Diagnostics.Tools.dll": {} - }, - "runtime": { - "lib/netcore50/System.Diagnostics.Tools.dll": {} - } - }, - "System.Diagnostics.Tracing/4.0.20": { - "dependencies": { - "System.Collections": "4.0.10", - "System.Globalization": "4.0.0", - "System.Reflection": "4.0.10", - "System.Reflection.Extensions": "4.0.0", - "System.Resources.ResourceManager": "4.0.0", - "System.Runtime": "4.0.20", - "System.Runtime.Extensions": "4.0.10", - "System.Runtime.InteropServices": "4.0.0", - "System.Text.Encoding": "4.0.0", - "System.Threading": "4.0.10" - }, - "compile": { - "ref/dotnet/System.Diagnostics.Tracing.dll": {} - }, - "runtime": { - "lib/netcore50/System.Diagnostics.Tracing.dll": {} - } - }, - "System.Dynamic.Runtime/4.0.10": { - "dependencies": { - "System.Collections": "4.0.0", - "System.Diagnostics.Debug": "4.0.0", - "System.Globalization": "4.0.0", - "System.Linq": "4.0.0", - "System.Linq.Expressions": "4.0.10", - "System.ObjectModel": "4.0.0", - "System.Reflection": "4.0.0", - "System.Reflection.Emit.ILGeneration": "4.0.0", - "System.Reflection.Emit.Lightweight": "4.0.0", - "System.Reflection.TypeExtensions": "4.0.0", - "System.Resources.ResourceManager": "4.0.0", - "System.Runtime": "4.0.20", - "System.Runtime.Extensions": "4.0.0", - "System.Threading": "4.0.0" - }, - "compile": { - "ref/dotnet/System.Dynamic.Runtime.dll": {} - }, - "runtime": { - "lib/netcore50/System.Dynamic.Runtime.dll": {} - } - }, - "System.Globalization/4.0.10": { - "dependencies": { - "System.Runtime": "4.0.0" - }, - "compile": { - "ref/dotnet/System.Globalization.dll": {} - }, - "runtime": { - "lib/netcore50/System.Globalization.dll": {} - } - }, - "System.Globalization.Calendars/4.0.0": { - "dependencies": { - "System.Globalization": "4.0.0", - "System.Runtime": "4.0.0" - }, - "compile": { - "ref/dotnet/System.Globalization.Calendars.dll": {} - }, - "runtime": { - "lib/netcore50/System.Globalization.Calendars.dll": {} - } - }, - "System.Globalization.Extensions/4.0.0": { - "dependencies": { - "System.Globalization": "4.0.10", - "System.Resources.ResourceManager": "4.0.0", - "System.Runtime": "4.0.20", - "System.Runtime.Extensions": "4.0.10", - "System.Runtime.InteropServices": "4.0.20" - }, - "compile": { - "ref/dotnet/System.Globalization.Extensions.dll": {} - }, - "runtime": { - "lib/dotnet/System.Globalization.Extensions.dll": {} - } - }, - "System.IO/4.0.10": { - "dependencies": { - "System.Globalization": "4.0.0", - "System.Runtime": "4.0.20", - "System.Text.Encoding": "4.0.10", - "System.Text.Encoding.Extensions": "4.0.0", - "System.Threading": "4.0.0", - "System.Threading.Tasks": "4.0.0" - }, - "compile": { - "ref/dotnet/System.IO.dll": {} - }, - "runtime": { - "lib/netcore50/System.IO.dll": {} - } - }, - "System.IO.Compression/4.0.0": { - "dependencies": { - "System.Collections": "4.0.0", - "System.IO": "4.0.0", - "System.IO.Compression.clrcompression-x86": "4.0.0", - "System.Resources.ResourceManager": "4.0.0", - "System.Runtime": "4.0.0", - "System.Runtime.Extensions": "4.0.0", - "System.Runtime.InteropServices": "4.0.0", - "System.Text.Encoding": "4.0.0", - "System.Threading": "4.0.0", - "System.Threading.Tasks": "4.0.0" - }, - "compile": { - "ref/netcore50/System.IO.Compression.dll": {} - }, - "runtime": { - "lib/netcore50/System.IO.Compression.dll": {} - } - }, - "System.IO.Compression.clrcompression-x86/4.0.0": { - "native": { - "runtimes/win10-x86/native/ClrCompression.dll": {} - } - }, - "System.IO.Compression.ZipFile/4.0.0": { - "dependencies": { - "System.IO": "4.0.10", - "System.IO.Compression": "4.0.0", - "System.IO.FileSystem": "4.0.0", - "System.IO.FileSystem.Primitives": "4.0.0", - "System.Resources.ResourceManager": "4.0.0", - "System.Runtime": "4.0.20", - "System.Runtime.Extensions": "4.0.10", - "System.Text.Encoding": "4.0.10" - }, - "compile": { - "ref/dotnet/System.IO.Compression.ZipFile.dll": {} - }, - "runtime": { - "lib/dotnet/System.IO.Compression.ZipFile.dll": {} - } - }, - "System.IO.FileSystem/4.0.0": { - "dependencies": { - "System.Collections": "4.0.10", - "System.Diagnostics.Debug": "4.0.10", - "System.IO": "4.0.10", - "System.IO.FileSystem.Primitives": "4.0.0", - "System.Resources.ResourceManager": "4.0.0", - "System.Runtime": "4.0.20", - "System.Runtime.Extensions": "4.0.10", - "System.Runtime.Handles": "4.0.0", - "System.Runtime.InteropServices": "4.0.20", - "System.Runtime.WindowsRuntime": "4.0.0", - "System.Text.Encoding": "4.0.10", - "System.Text.Encoding.Extensions": "4.0.10", - "System.Threading": "4.0.10", - "System.Threading.Overlapped": "4.0.0", - "System.Threading.Tasks": "4.0.10" - }, - "compile": { - "ref/dotnet/System.IO.FileSystem.dll": {} - }, - "runtime": { - "lib/netcore50/System.IO.FileSystem.dll": {} - } - }, - "System.IO.FileSystem.Primitives/4.0.0": { - "dependencies": { - "System.Runtime": "4.0.20" - }, - "compile": { - "ref/dotnet/System.IO.FileSystem.Primitives.dll": {} - }, - "runtime": { - "lib/dotnet/System.IO.FileSystem.Primitives.dll": {} - } - }, - "System.IO.UnmanagedMemoryStream/4.0.0": { - "dependencies": { - "System.IO": "4.0.10", - "System.IO.FileSystem.Primitives": "4.0.0", - "System.Resources.ResourceManager": "4.0.0", - "System.Runtime": "4.0.20", - "System.Runtime.InteropServices": "4.0.20", - "System.Threading": "4.0.10", - "System.Threading.Tasks": "4.0.10" - }, - "compile": { - "ref/dotnet/System.IO.UnmanagedMemoryStream.dll": {} - }, - "runtime": { - "lib/dotnet/System.IO.UnmanagedMemoryStream.dll": {} - } - }, - "System.Linq/4.0.0": { - "dependencies": { - "System.Collections": "4.0.10", - "System.Diagnostics.Debug": "4.0.10", - "System.Resources.ResourceManager": "4.0.0", - "System.Runtime": "4.0.20", - "System.Runtime.Extensions": "4.0.10" - }, - "compile": { - "ref/netcore50/System.Linq.dll": {} - }, - "runtime": { - "lib/netcore50/System.Linq.dll": {} - } - }, - "System.Linq.Expressions/4.0.10": { - "dependencies": { - "System.Collections": "4.0.0", - "System.Diagnostics.Debug": "4.0.0", - "System.Globalization": "4.0.0", - "System.IO": "4.0.0", - "System.Linq": "4.0.0", - "System.Reflection": "4.0.0", - "System.Reflection.Emit.ILGeneration": "4.0.0", - "System.Reflection.Emit.Lightweight": "4.0.0", - "System.Reflection.Extensions": "4.0.0", - "System.Reflection.Primitives": "4.0.0", - "System.Reflection.TypeExtensions": "4.0.0", - "System.Resources.ResourceManager": "4.0.0", - "System.Runtime": "4.0.20", - "System.Runtime.Extensions": "4.0.0", - "System.Threading": "4.0.0" - }, - "compile": { - "ref/dotnet/System.Linq.Expressions.dll": {} - }, - "runtime": { - "lib/netcore50/System.Linq.Expressions.dll": {} - } - }, - "System.Linq.Parallel/4.0.0": { - "dependencies": { - "System.Collections": "4.0.10", - "System.Collections.Concurrent": "4.0.10", - "System.Diagnostics.Debug": "4.0.10", - "System.Diagnostics.Tracing": "4.0.20", - "System.Linq": "4.0.0", - "System.Resources.ResourceManager": "4.0.0", - "System.Runtime": "4.0.20", - "System.Runtime.Extensions": "4.0.10", - "System.Threading": "4.0.10", - "System.Threading.Tasks": "4.0.10" - }, - "compile": { - "ref/netcore50/System.Linq.Parallel.dll": {} - }, - "runtime": { - "lib/netcore50/System.Linq.Parallel.dll": {} - } - }, - "System.Linq.Queryable/4.0.0": { - "dependencies": { - "System.Collections": "4.0.10", - "System.Linq": "4.0.0", - "System.Linq.Expressions": "4.0.10", - "System.Reflection": "4.0.10", - "System.Reflection.Extensions": "4.0.0", - "System.Resources.ResourceManager": "4.0.0", - "System.Runtime": "4.0.20" - }, - "compile": { - "ref/netcore50/System.Linq.Queryable.dll": {} - }, - "runtime": { - "lib/netcore50/System.Linq.Queryable.dll": {} - } - }, - "System.Net.Http/4.0.0": { - "dependencies": { - "System.Collections": "4.0.10", - "System.Diagnostics.Debug": "4.0.10", - "System.Globalization": "4.0.10", - "System.IO": "4.0.10", - "System.Net.Primitives": "4.0.0", - "System.Resources.ResourceManager": "4.0.0", - "System.Runtime": "4.0.20", - "System.Runtime.Extensions": "4.0.10", - "System.Runtime.InteropServices": "4.0.20", - "System.Runtime.WindowsRuntime": "4.0.10", - "System.Text.Encoding": "4.0.10", - "System.Text.Encoding.Extensions": "4.0.10", - "System.Threading": "4.0.10", - "System.Threading.Tasks": "4.0.10" - }, - "compile": { - "ref/netcore50/System.Net.Http.dll": {} - }, - "runtime": { - "lib/netcore50/System.Net.Http.dll": {} - } - }, - "System.Net.NetworkInformation/4.0.0": { - "dependencies": { - "System.Runtime": "4.0.0", - "System.Runtime.InteropServices.WindowsRuntime": "4.0.0", - "System.Threading": "4.0.0" - }, - "compile": { - "ref/netcore50/System.Net.NetworkInformation.dll": {} - }, - "runtime": { - "lib/netcore50/System.Net.NetworkInformation.dll": {} - } - }, - "System.Net.Primitives/4.0.10": { - "dependencies": { - "System.Private.Networking": "4.0.0", - "System.Runtime": "4.0.20" - }, - "compile": { - "ref/dotnet/System.Net.Primitives.dll": {} - }, - "runtime": { - "lib/netcore50/System.Net.Primitives.dll": {} - } - }, - "System.Numerics.Vectors/4.1.0": { - "dependencies": { - "System.Globalization": "4.0.10", - "System.Resources.ResourceManager": "4.0.0", - "System.Runtime": "4.0.20", - "System.Runtime.Extensions": "4.0.10" - }, - "compile": { - "ref/dotnet/System.Numerics.Vectors.dll": {} - }, - "runtime": { - "lib/dotnet/System.Numerics.Vectors.dll": {} - } - }, - "System.ObjectModel/4.0.10": { - "dependencies": { - "System.Collections": "4.0.10", - "System.Diagnostics.Debug": "4.0.10", - "System.Resources.ResourceManager": "4.0.0", - "System.Runtime": "4.0.20", - "System.Threading": "4.0.10" - }, - "compile": { - "ref/dotnet/System.ObjectModel.dll": {} - }, - "runtime": { - "lib/dotnet/System.ObjectModel.dll": {} - } - }, - "System.Private.Networking/4.0.0": { - "dependencies": { - "Microsoft.Win32.Primitives": "4.0.0", - "System.Collections": "4.0.10", - "System.Collections.NonGeneric": "4.0.0", - "System.Diagnostics.Debug": "4.0.10", - "System.Diagnostics.Tracing": "4.0.20", - "System.Globalization": "4.0.10", - "System.IO": "4.0.10", - "System.IO.FileSystem": "4.0.0", - "System.IO.FileSystem.Primitives": "4.0.0", - "System.Resources.ResourceManager": "4.0.0", - "System.Runtime": "4.0.20", - "System.Runtime.Extensions": "4.0.10", - "System.Runtime.Handles": "4.0.0", - "System.Runtime.InteropServices": "4.0.20", - "System.Threading": "4.0.10", - "System.Threading.Overlapped": "4.0.0", - "System.Threading.Tasks": "4.0.10" - }, - "compile": { - "ref/netcore50/_._": {} - }, - "runtime": { - "lib/netcore50/System.Private.Networking.dll": {} - } - }, - "System.Private.Uri/4.0.0": { - "compile": { - "ref/netcore50/_._": {} - }, - "runtime": { - "lib/netcore50/System.Private.Uri.dll": {} - } - }, - "System.Reflection/4.0.10": { - "dependencies": { - "System.IO": "4.0.0", - "System.Reflection.Primitives": "4.0.0", - "System.Runtime": "4.0.20" - }, - "compile": { - "ref/dotnet/System.Reflection.dll": {} - }, - "runtime": { - "lib/netcore50/System.Reflection.dll": {} - } - }, - "System.Reflection.DispatchProxy/4.0.0": { - "dependencies": { - "System.Collections": "4.0.10", - "System.Linq": "4.0.0", - "System.Reflection": "4.0.10", - "System.Reflection.Emit": "4.0.0", - "System.Reflection.Emit.ILGeneration": "4.0.0", - "System.Reflection.Extensions": "4.0.0", - "System.Reflection.Primitives": "4.0.0", - "System.Resources.ResourceManager": "4.0.0", - "System.Runtime": "4.0.20", - "System.Threading": "4.0.10" - }, - "compile": { - "ref/dotnet/System.Reflection.DispatchProxy.dll": {} - }, - "runtime": { - "lib/netcore50/System.Reflection.DispatchProxy.dll": {} - } - }, - "System.Reflection.Emit/4.0.0": { - "dependencies": { - "System.IO": "4.0.0", - "System.Reflection": "4.0.0", - "System.Reflection.Emit.ILGeneration": "4.0.0", - "System.Reflection.Primitives": "4.0.0", - "System.Runtime": "4.0.0" - }, - "compile": { - "ref/dotnet/System.Reflection.Emit.dll": {} - }, - "runtime": { - "lib/netcore50/System.Reflection.Emit.dll": {} - } - }, - "System.Reflection.Emit.ILGeneration/4.0.0": { - "dependencies": { - "System.Reflection": "4.0.0", - "System.Reflection.Primitives": "4.0.0", - "System.Runtime": "4.0.0" - }, - "compile": { - "ref/dotnet/System.Reflection.Emit.ILGeneration.dll": {} - }, - "runtime": { - "lib/netcore50/System.Reflection.Emit.ILGeneration.dll": {} - } - }, - "System.Reflection.Emit.Lightweight/4.0.0": { - "dependencies": { - "System.Reflection": "4.0.0", - "System.Reflection.Emit.ILGeneration": "4.0.0", - "System.Reflection.Primitives": "4.0.0", - "System.Runtime": "4.0.0" - }, - "compile": { - "ref/dotnet/System.Reflection.Emit.Lightweight.dll": {} - }, - "runtime": { - "lib/netcore50/System.Reflection.Emit.Lightweight.dll": {} - } - }, - "System.Reflection.Extensions/4.0.0": { - "dependencies": { - "System.Diagnostics.Debug": "4.0.10", - "System.Reflection": "4.0.10", - "System.Reflection.Primitives": "4.0.0", - "System.Reflection.TypeExtensions": "4.0.0", - "System.Resources.ResourceManager": "4.0.0", - "System.Runtime": "4.0.20", - "System.Runtime.Extensions": "4.0.10" - }, - "compile": { - "ref/netcore50/System.Reflection.Extensions.dll": {} - }, - "runtime": { - "lib/netcore50/System.Reflection.Extensions.dll": {} - } - }, - "System.Reflection.Metadata/1.0.22": { - "dependencies": { - "System.Collections": "4.0.0", - "System.Collections.Immutable": "1.1.37", - "System.Diagnostics.Debug": "4.0.0", - "System.IO": "4.0.0", - "System.Reflection": "4.0.0", - "System.Reflection.Extensions": "4.0.0", - "System.Reflection.Primitives": "4.0.0", - "System.Resources.ResourceManager": "4.0.0", - "System.Runtime": "4.0.0", - "System.Runtime.Extensions": "4.0.0", - "System.Runtime.InteropServices": "4.0.0", - "System.Text.Encoding": "4.0.0", - "System.Text.Encoding.Extensions": "4.0.0", - "System.Threading": "4.0.0" - }, - "compile": { - "lib/dotnet/System.Reflection.Metadata.dll": {} - }, - "runtime": { - "lib/dotnet/System.Reflection.Metadata.dll": {} - } - }, - "System.Reflection.Primitives/4.0.0": { - "dependencies": { - "System.Runtime": "4.0.0", - "System.Threading": "4.0.0" - }, - "compile": { - "ref/netcore50/System.Reflection.Primitives.dll": {} - }, - "runtime": { - "lib/netcore50/System.Reflection.Primitives.dll": {} - } - }, - "System.Reflection.TypeExtensions/4.0.0": { - "dependencies": { - "System.Diagnostics.Contracts": "4.0.0", - "System.Diagnostics.Debug": "4.0.10", - "System.Linq": "4.0.0", - "System.Reflection": "4.0.10", - "System.Reflection.Primitives": "4.0.0", - "System.Resources.ResourceManager": "4.0.0", - "System.Runtime": "4.0.20", - "System.Runtime.Extensions": "4.0.10" - }, - "compile": { - "ref/dotnet/System.Reflection.TypeExtensions.dll": {} - }, - "runtime": { - "lib/netcore50/System.Reflection.TypeExtensions.dll": {} - } - }, - "System.Resources.ResourceManager/4.0.0": { - "dependencies": { - "System.Globalization": "4.0.0", - "System.Reflection": "4.0.10", - "System.Runtime": "4.0.20" - }, - "compile": { - "ref/netcore50/System.Resources.ResourceManager.dll": {} - }, - "runtime": { - "lib/netcore50/System.Resources.ResourceManager.dll": {} - } - }, - "System.Runtime/4.0.20": { - "dependencies": { - "System.Private.Uri": "4.0.0" - }, - "compile": { - "ref/dotnet/System.Runtime.dll": {} - }, - "runtime": { - "lib/netcore50/System.Runtime.dll": {} - } - }, - "System.Runtime.Extensions/4.0.10": { - "dependencies": { - "System.Runtime": "4.0.20" - }, - "compile": { - "ref/dotnet/System.Runtime.Extensions.dll": {} - }, - "runtime": { - "lib/netcore50/System.Runtime.Extensions.dll": {} - } - }, - "System.Runtime.Handles/4.0.0": { - "dependencies": { - "System.Runtime": "4.0.0" - }, - "compile": { - "ref/dotnet/System.Runtime.Handles.dll": {} - }, - "runtime": { - "lib/netcore50/System.Runtime.Handles.dll": {} - } - }, - "System.Runtime.InteropServices/4.0.20": { - "dependencies": { - "System.Reflection": "4.0.0", - "System.Reflection.Primitives": "4.0.0", - "System.Runtime": "4.0.0", - "System.Runtime.Handles": "4.0.0" - }, - "compile": { - "ref/dotnet/System.Runtime.InteropServices.dll": {} - }, - "runtime": { - "lib/netcore50/System.Runtime.InteropServices.dll": {} - } - }, - "System.Runtime.InteropServices.WindowsRuntime/4.0.0": { - "compile": { - "ref/netcore50/System.Runtime.InteropServices.WindowsRuntime.dll": {} - }, - "runtime": { - "lib/netcore50/System.Runtime.InteropServices.WindowsRuntime.dll": {} - } - }, - "System.Runtime.Numerics/4.0.0": { - "dependencies": { - "System.Globalization": "4.0.10", - "System.Resources.ResourceManager": "4.0.0", - "System.Runtime": "4.0.20", - "System.Runtime.Extensions": "4.0.10" - }, - "compile": { - "ref/netcore50/System.Runtime.Numerics.dll": {} - }, - "runtime": { - "lib/netcore50/System.Runtime.Numerics.dll": {} - } - }, - "System.Runtime.WindowsRuntime/4.0.10": { - "dependencies": { - "System.Diagnostics.Debug": "4.0.10", - "System.Globalization": "4.0.0", - "System.IO": "4.0.10", - "System.ObjectModel": "4.0.0", - "System.Resources.ResourceManager": "4.0.0", - "System.Runtime": "4.0.20", - "System.Runtime.Extensions": "4.0.0", - "System.Runtime.InteropServices": "4.0.20", - "System.Threading": "4.0.10", - "System.Threading.Tasks": "4.0.10" - }, - "compile": { - "ref/netcore50/System.Runtime.WindowsRuntime.dll": {} - }, - "runtime": { - "lib/netcore50/System.Runtime.WindowsRuntime.dll": {} - } - }, - "System.Security.Claims/4.0.0": { - "dependencies": { - "System.Collections": "4.0.0", - "System.Diagnostics.Debug": "4.0.0", - "System.Globalization": "4.0.0", - "System.IO": "4.0.0", - "System.Resources.ResourceManager": "4.0.0", - "System.Runtime": "4.0.20", - "System.Runtime.Extensions": "4.0.0", - "System.Security.Principal": "4.0.0" - }, - "compile": { - "ref/dotnet/System.Security.Claims.dll": {} - }, - "runtime": { - "lib/dotnet/System.Security.Claims.dll": {} - } - }, - "System.Security.Principal/4.0.0": { - "dependencies": { - "System.Runtime": "4.0.0" - }, - "compile": { - "ref/netcore50/System.Security.Principal.dll": {} - }, - "runtime": { - "lib/netcore50/System.Security.Principal.dll": {} - } - }, - "System.Text.Encoding/4.0.10": { - "dependencies": { - "System.Runtime": "4.0.0" - }, - "compile": { - "ref/dotnet/System.Text.Encoding.dll": {} - }, - "runtime": { - "lib/netcore50/System.Text.Encoding.dll": {} - } - }, - "System.Text.Encoding.Extensions/4.0.10": { - "dependencies": { - "System.Runtime": "4.0.0", - "System.Text.Encoding": "4.0.10" - }, - "compile": { - "ref/dotnet/System.Text.Encoding.Extensions.dll": {} - }, - "runtime": { - "lib/netcore50/System.Text.Encoding.Extensions.dll": {} - } - }, - "System.Text.RegularExpressions/4.0.10": { - "dependencies": { - "System.Collections": "4.0.10", - "System.Globalization": "4.0.10", - "System.Resources.ResourceManager": "4.0.0", - "System.Runtime": "4.0.20", - "System.Runtime.Extensions": "4.0.10", - "System.Threading": "4.0.10" - }, - "compile": { - "ref/dotnet/System.Text.RegularExpressions.dll": {} - }, - "runtime": { - "lib/dotnet/System.Text.RegularExpressions.dll": {} - } - }, - "System.Threading/4.0.10": { - "dependencies": { - "System.Runtime": "4.0.0", - "System.Threading.Tasks": "4.0.0" - }, - "compile": { - "ref/dotnet/System.Threading.dll": {} - }, - "runtime": { - "lib/netcore50/System.Threading.dll": {} - } - }, - "System.Threading.Overlapped/4.0.0": { - "dependencies": { - "System.Resources.ResourceManager": "4.0.0", - "System.Runtime": "4.0.20", - "System.Runtime.Extensions": "4.0.0", - "System.Runtime.Handles": "4.0.0", - "System.Runtime.InteropServices": "4.0.20", - "System.Threading": "4.0.10" - }, - "compile": { - "ref/dotnet/System.Threading.Overlapped.dll": {} - }, - "runtime": { - "lib/netcore50/System.Threading.Overlapped.dll": {} - } - }, - "System.Threading.Tasks/4.0.10": { - "dependencies": { - "System.Runtime": "4.0.0" - }, - "compile": { - "ref/dotnet/System.Threading.Tasks.dll": {} - }, - "runtime": { - "lib/netcore50/System.Threading.Tasks.dll": {} - } - }, - "System.Threading.Tasks.Dataflow/4.5.25": { - "dependencies": { - "System.Collections": "4.0.0", - "System.Collections.Concurrent": "4.0.0", - "System.Diagnostics.Debug": "4.0.0", - "System.Diagnostics.Tracing": "4.0.0", - "System.Dynamic.Runtime": "4.0.0", - "System.Linq": "4.0.0", - "System.Resources.ResourceManager": "4.0.0", - "System.Runtime": "4.0.0", - "System.Runtime.Extensions": "4.0.0", - "System.Threading": "4.0.0", - "System.Threading.Tasks": "4.0.0" - }, - "compile": { - "lib/dotnet/System.Threading.Tasks.Dataflow.dll": {} - }, - "runtime": { - "lib/dotnet/System.Threading.Tasks.Dataflow.dll": {} - } - }, - "System.Threading.Tasks.Parallel/4.0.0": { - "dependencies": { - "System.Collections.Concurrent": "4.0.10", - "System.Diagnostics.Debug": "4.0.10", - "System.Diagnostics.Tracing": "4.0.20", - "System.Resources.ResourceManager": "4.0.0", - "System.Runtime": "4.0.20", - "System.Runtime.Extensions": "4.0.10", - "System.Threading": "4.0.10", - "System.Threading.Tasks": "4.0.10" - }, - "compile": { - "ref/netcore50/System.Threading.Tasks.Parallel.dll": {} - }, - "runtime": { - "lib/netcore50/System.Threading.Tasks.Parallel.dll": {} - } - }, - "System.Threading.Timer/4.0.0": { - "compile": { - "ref/netcore50/System.Threading.Timer.dll": {} - }, - "runtime": { - "lib/netcore50/System.Threading.Timer.dll": {} - } - }, - "System.Xml.ReaderWriter/4.0.10": { - "dependencies": { - "System.Collections": "4.0.10", - "System.Diagnostics.Debug": "4.0.10", - "System.Globalization": "4.0.10", - "System.IO": "4.0.10", - "System.IO.FileSystem": "4.0.0", - "System.IO.FileSystem.Primitives": "4.0.0", - "System.Resources.ResourceManager": "4.0.0", - "System.Runtime": "4.0.20", - "System.Runtime.Extensions": "4.0.10", - "System.Runtime.InteropServices": "4.0.20", - "System.Text.Encoding": "4.0.10", - "System.Text.Encoding.Extensions": "4.0.10", - "System.Text.RegularExpressions": "4.0.10", - "System.Threading.Tasks": "4.0.10" - }, - "compile": { - "ref/dotnet/System.Xml.ReaderWriter.dll": {} - }, - "runtime": { - "lib/dotnet/System.Xml.ReaderWriter.dll": {} - } - }, - "System.Xml.XDocument/4.0.10": { - "dependencies": { - "System.Collections": "4.0.10", - "System.Diagnostics.Debug": "4.0.10", - "System.Globalization": "4.0.10", - "System.IO": "4.0.10", - "System.Reflection": "4.0.10", - "System.Resources.ResourceManager": "4.0.0", - "System.Runtime": "4.0.20", - "System.Runtime.Extensions": "4.0.10", - "System.Text.Encoding": "4.0.10", - "System.Threading": "4.0.10", - "System.Xml.ReaderWriter": "4.0.10" - }, - "compile": { - "ref/dotnet/System.Xml.XDocument.dll": {} - }, - "runtime": { - "lib/dotnet/System.Xml.XDocument.dll": {} - } - } - }, - "UAP,Version=v10.0/win10-x86-aot": { - "Microsoft.CSharp/4.0.0": { - "dependencies": { - "System.Collections": "4.0.10", - "System.Diagnostics.Debug": "4.0.10", - "System.Dynamic.Runtime": "4.0.0", - "System.Globalization": "4.0.10", - "System.Linq": "4.0.0", - "System.Linq.Expressions": "4.0.0", - "System.ObjectModel": "4.0.10", - "System.Reflection": "4.0.10", - "System.Reflection.Extensions": "4.0.0", - "System.Reflection.Primitives": "4.0.0", - "System.Reflection.TypeExtensions": "4.0.0", - "System.Resources.ResourceManager": "4.0.0", - "System.Runtime": "4.0.20", - "System.Runtime.Extensions": "4.0.10", - "System.Runtime.InteropServices": "4.0.20", - "System.Threading": "4.0.10" - }, - "compile": { - "ref/netcore50/Microsoft.CSharp.dll": {} - }, - "runtime": { - "lib/netcore50/Microsoft.CSharp.dll": {} - } - }, - "Microsoft.NETCore/5.0.0": { - "dependencies": { - "Microsoft.CSharp": "4.0.0", - "Microsoft.NETCore.Targets": "1.0.0", - "Microsoft.VisualBasic": "10.0.0", - "System.AppContext": "4.0.0", - "System.Collections": "4.0.10", - "System.Collections.Concurrent": "4.0.10", - "System.Collections.Immutable": "1.1.37", - "System.ComponentModel": "4.0.0", - "System.ComponentModel.Annotations": "4.0.10", - "System.Diagnostics.Debug": "4.0.10", - "System.Diagnostics.Tools": "4.0.0", - "System.Diagnostics.Tracing": "4.0.20", - "System.Dynamic.Runtime": "4.0.10", - "System.Globalization": "4.0.10", - "System.Globalization.Calendars": "4.0.0", - "System.Globalization.Extensions": "4.0.0", - "System.IO": "4.0.10", - "System.IO.Compression": "4.0.0", - "System.IO.Compression.ZipFile": "4.0.0", - "System.IO.FileSystem": "4.0.0", - "System.IO.FileSystem.Primitives": "4.0.0", - "System.IO.UnmanagedMemoryStream": "4.0.0", - "System.Linq": "4.0.0", - "System.Linq.Expressions": "4.0.10", - "System.Linq.Parallel": "4.0.0", - "System.Linq.Queryable": "4.0.0", - "System.Net.Http": "4.0.0", - "System.Net.NetworkInformation": "4.0.0", - "System.Net.Primitives": "4.0.10", - "System.Numerics.Vectors": "4.1.0", - "System.ObjectModel": "4.0.10", - "System.Reflection": "4.0.10", - "System.Reflection.DispatchProxy": "4.0.0", - "System.Reflection.Extensions": "4.0.0", - "System.Reflection.Metadata": "1.0.22", - "System.Reflection.Primitives": "4.0.0", - "System.Reflection.TypeExtensions": "4.0.0", - "System.Resources.ResourceManager": "4.0.0", - "System.Runtime": "4.0.20", - "System.Runtime.Extensions": "4.0.10", - "System.Runtime.Handles": "4.0.0", - "System.Runtime.InteropServices": "4.0.20", - "System.Runtime.Numerics": "4.0.0", - "System.Security.Claims": "4.0.0", - "System.Security.Principal": "4.0.0", - "System.Text.Encoding": "4.0.10", - "System.Text.Encoding.Extensions": "4.0.10", - "System.Text.RegularExpressions": "4.0.10", - "System.Threading": "4.0.10", - "System.Threading.Tasks": "4.0.10", - "System.Threading.Tasks.Dataflow": "4.5.25", - "System.Threading.Tasks.Parallel": "4.0.0", - "System.Threading.Timer": "4.0.0", - "System.Xml.ReaderWriter": "4.0.10", - "System.Xml.XDocument": "4.0.10" - } - }, - "Microsoft.NETCore.Platforms/1.0.0": {}, - "Microsoft.NETCore.Portable.Compatibility/1.0.0": { - "dependencies": { - "Microsoft.NETCore.Runtime": "1.0.0" - }, - "compile": { - "ref/netcore50/System.ComponentModel.DataAnnotations.dll": {}, - "ref/netcore50/System.Core.dll": {}, - "ref/netcore50/System.Net.dll": {}, - "ref/netcore50/System.Numerics.dll": {}, - "ref/netcore50/System.Runtime.Serialization.dll": {}, - "ref/netcore50/System.ServiceModel.Web.dll": {}, - "ref/netcore50/System.ServiceModel.dll": {}, - "ref/netcore50/System.Windows.dll": {}, - "ref/netcore50/System.Xml.Linq.dll": {}, - "ref/netcore50/System.Xml.Serialization.dll": {}, - "ref/netcore50/System.Xml.dll": {}, - "ref/netcore50/System.dll": {}, - "ref/netcore50/mscorlib.dll": {} - }, - "runtime": { - "runtimes/aot/lib/netcore50/System.ComponentModel.DataAnnotations.dll": {}, - "runtimes/aot/lib/netcore50/System.Core.dll": {}, - "runtimes/aot/lib/netcore50/System.Net.dll": {}, - "runtimes/aot/lib/netcore50/System.Numerics.dll": {}, - "runtimes/aot/lib/netcore50/System.Runtime.Serialization.dll": {}, - "runtimes/aot/lib/netcore50/System.ServiceModel.Web.dll": {}, - "runtimes/aot/lib/netcore50/System.ServiceModel.dll": {}, - "runtimes/aot/lib/netcore50/System.Windows.dll": {}, - "runtimes/aot/lib/netcore50/System.Xml.Linq.dll": {}, - "runtimes/aot/lib/netcore50/System.Xml.Serialization.dll": {}, - "runtimes/aot/lib/netcore50/System.Xml.dll": {}, - "runtimes/aot/lib/netcore50/System.dll": {}, - "runtimes/aot/lib/netcore50/mscorlib.dll": {} - } - }, - "Microsoft.NETCore.Runtime/1.0.0": { - "dependencies": { - "Microsoft.NETCore.Runtime.Native": "1.0.0" - } - }, - "Microsoft.NETCore.Runtime.Native/1.0.0": { - "dependencies": { - "System.Collections": "[4.0.10]", - "System.Diagnostics.Contracts": "[4.0.0]", - "System.Diagnostics.Debug": "[4.0.10]", - "System.Diagnostics.StackTrace": "[4.0.0]", - "System.Diagnostics.Tools": "[4.0.0]", - "System.Diagnostics.Tracing": "[4.0.20]", - "System.Globalization": "[4.0.10]", - "System.Globalization.Calendars": "[4.0.0]", - "System.IO": "[4.0.10]", - "System.ObjectModel": "[4.0.10]", - "System.Private.Uri": "[4.0.0]", - "System.Reflection": "[4.0.10]", - "System.Reflection.Extensions": "[4.0.0]", - "System.Reflection.Primitives": "[4.0.0]", - "System.Resources.ResourceManager": "[4.0.0]", - "System.Runtime": "[4.0.20]", - "System.Runtime.Extensions": "[4.0.10]", - "System.Runtime.Handles": "[4.0.0]", - "System.Runtime.InteropServices": "[4.0.20]", - "System.Text.Encoding": "[4.0.10]", - "System.Text.Encoding.Extensions": "[4.0.10]", - "System.Threading": "[4.0.10]", - "System.Threading.Tasks": "[4.0.10]", - "System.Threading.Timer": "[4.0.0]" - } - }, - "Microsoft.NETCore.Targets/1.0.0": { - "dependencies": { - "Microsoft.NETCore.Platforms": "1.0.0", - "Microsoft.NETCore.Targets.UniversalWindowsPlatform": "5.0.0" - } - }, - "Microsoft.NETCore.Targets.UniversalWindowsPlatform/5.0.0": {}, - "Microsoft.VisualBasic/10.0.0": { - "dependencies": { - "System.Collections": "4.0.10", - "System.Diagnostics.Debug": "4.0.10", - "System.Dynamic.Runtime": "4.0.10", - "System.Globalization": "4.0.10", - "System.Linq": "4.0.0", - "System.Linq.Expressions": "4.0.10", - "System.ObjectModel": "4.0.10", - "System.Reflection": "4.0.10", - "System.Reflection.Extensions": "4.0.0", - "System.Reflection.Primitives": "4.0.0", - "System.Reflection.TypeExtensions": "4.0.0", - "System.Resources.ResourceManager": "4.0.0", - "System.Runtime": "4.0.20", - "System.Runtime.Extensions": "4.0.10", - "System.Runtime.InteropServices": "4.0.20", - "System.Threading": "4.0.10" - }, - "compile": { - "ref/netcore50/Microsoft.VisualBasic.dll": {} - }, - "runtime": { - "lib/netcore50/Microsoft.VisualBasic.dll": {} - } - }, - "Microsoft.Win32.Primitives/4.0.0": { - "dependencies": { - "System.Runtime": "4.0.20", - "System.Runtime.InteropServices": "4.0.20" - }, - "compile": { - "ref/dotnet/Microsoft.Win32.Primitives.dll": {} - }, - "runtime": { - "lib/dotnet/Microsoft.Win32.Primitives.dll": {} - } - }, - "System.AppContext/4.0.0": { - "dependencies": { - "System.Collections": "4.0.0", - "System.Resources.ResourceManager": "4.0.0", - "System.Runtime": "4.0.20", - "System.Threading": "4.0.0" - }, - "compile": { - "ref/dotnet/System.AppContext.dll": {} - }, - "runtime": { - "lib/netcore50/System.AppContext.dll": {} - } - }, - "System.Collections/4.0.10": { - "dependencies": { - "System.Diagnostics.Debug": "4.0.0", - "System.Resources.ResourceManager": "4.0.0", - "System.Runtime": "4.0.20", - "System.Runtime.Extensions": "4.0.0", - "System.Threading": "4.0.0" - }, - "compile": { - "ref/dotnet/System.Collections.dll": {} - }, - "runtime": { - "runtimes/win8-aot/lib/netcore50/System.Collections.dll": {} - } - }, - "System.Collections.Concurrent/4.0.10": { - "dependencies": { - "System.Collections": "4.0.10", - "System.Diagnostics.Debug": "4.0.10", - "System.Diagnostics.Tracing": "4.0.20", - "System.Globalization": "4.0.10", - "System.Resources.ResourceManager": "4.0.0", - "System.Runtime": "4.0.20", - "System.Runtime.Extensions": "4.0.10", - "System.Threading": "4.0.10", - "System.Threading.Tasks": "4.0.10" - }, - "compile": { - "ref/dotnet/System.Collections.Concurrent.dll": {} - }, - "runtime": { - "lib/dotnet/System.Collections.Concurrent.dll": {} - } - }, - "System.Collections.Immutable/1.1.37": { - "dependencies": { - "System.Collections": "4.0.0", - "System.Diagnostics.Debug": "4.0.0", - "System.Globalization": "4.0.0", - "System.Linq": "4.0.0", - "System.Resources.ResourceManager": "4.0.0", - "System.Runtime": "4.0.0", - "System.Runtime.Extensions": "4.0.0", - "System.Threading": "4.0.0" - }, - "compile": { - "lib/dotnet/System.Collections.Immutable.dll": {} - }, - "runtime": { - "lib/dotnet/System.Collections.Immutable.dll": {} - } - }, - "System.Collections.NonGeneric/4.0.0": { - "dependencies": { - "System.Diagnostics.Debug": "4.0.10", - "System.Globalization": "4.0.10", - "System.Resources.ResourceManager": "4.0.0", - "System.Runtime": "4.0.20", - "System.Runtime.Extensions": "4.0.10", - "System.Threading": "4.0.10" - }, - "compile": { - "ref/dotnet/System.Collections.NonGeneric.dll": {} - }, - "runtime": { - "lib/dotnet/System.Collections.NonGeneric.dll": {} - } - }, - "System.ComponentModel/4.0.0": { - "dependencies": { - "System.Runtime": "4.0.20" - }, - "compile": { - "ref/netcore50/System.ComponentModel.dll": {} - }, - "runtime": { - "lib/netcore50/System.ComponentModel.dll": {} - } - }, - "System.ComponentModel.Annotations/4.0.10": { - "dependencies": { - "System.Collections": "4.0.10", - "System.ComponentModel": "4.0.0", - "System.Globalization": "4.0.10", - "System.Linq": "4.0.0", - "System.Reflection": "4.0.10", - "System.Reflection.Extensions": "4.0.0", - "System.Resources.ResourceManager": "4.0.0", - "System.Runtime": "4.0.20", - "System.Runtime.Extensions": "4.0.10", - "System.Text.RegularExpressions": "4.0.10", - "System.Threading": "4.0.10" - }, - "compile": { - "ref/dotnet/System.ComponentModel.Annotations.dll": {} - }, - "runtime": { - "lib/dotnet/System.ComponentModel.Annotations.dll": {} - } - }, - "System.Diagnostics.Contracts/4.0.0": { - "compile": { - "ref/netcore50/System.Diagnostics.Contracts.dll": {} - }, - "runtime": { - "runtimes/win8-aot/lib/netcore50/System.Diagnostics.Contracts.dll": {} - } - }, - "System.Diagnostics.Debug/4.0.10": { - "dependencies": { - "System.Runtime": "4.0.0" - }, - "compile": { - "ref/dotnet/System.Diagnostics.Debug.dll": {} - }, - "runtime": { - "runtimes/win8-aot/lib/netcore50/System.Diagnostics.Debug.dll": {} - } - }, - "System.Diagnostics.StackTrace/4.0.0": { - "dependencies": { - "System.Runtime": "4.0.20" - }, - "compile": { - "ref/dotnet/System.Diagnostics.StackTrace.dll": {} - }, - "runtime": { - "runtimes/win8-aot/lib/netcore50/System.Diagnostics.StackTrace.dll": {} - } - }, - "System.Diagnostics.Tools/4.0.0": { - "compile": { - "ref/netcore50/System.Diagnostics.Tools.dll": {} - }, - "runtime": { - "runtimes/win8-aot/lib/netcore50/System.Diagnostics.Tools.dll": {} - } - }, - "System.Diagnostics.Tracing/4.0.20": { - "dependencies": { - "System.Collections": "4.0.10", - "System.Globalization": "4.0.0", - "System.Reflection": "4.0.10", - "System.Reflection.Extensions": "4.0.0", - "System.Resources.ResourceManager": "4.0.0", - "System.Runtime": "4.0.20", - "System.Runtime.Extensions": "4.0.10", - "System.Runtime.InteropServices": "4.0.0", - "System.Text.Encoding": "4.0.0", - "System.Threading": "4.0.10" - }, - "compile": { - "ref/dotnet/System.Diagnostics.Tracing.dll": {} - }, - "runtime": { - "runtimes/win8-aot/lib/netcore50/System.Diagnostics.Tracing.dll": {} - } - }, - "System.Dynamic.Runtime/4.0.10": { - "dependencies": { - "System.Collections": "4.0.0", - "System.Diagnostics.Debug": "4.0.0", - "System.Globalization": "4.0.0", - "System.Linq": "4.0.0", - "System.Linq.Expressions": "4.0.10", - "System.ObjectModel": "4.0.0", - "System.Reflection": "4.0.0", - "System.Reflection.TypeExtensions": "4.0.0", - "System.Resources.ResourceManager": "4.0.0", - "System.Runtime": "4.0.20", - "System.Runtime.Extensions": "4.0.0", - "System.Threading": "4.0.0" - }, - "compile": { - "ref/dotnet/System.Dynamic.Runtime.dll": {} - }, - "runtime": { - "runtimes/win8-aot/lib/netcore50/System.Dynamic.Runtime.dll": {} - } - }, - "System.Globalization/4.0.10": { - "dependencies": { - "System.Runtime": "4.0.0" - }, - "compile": { - "ref/dotnet/System.Globalization.dll": {} - }, - "runtime": { - "runtimes/win8-aot/lib/netcore50/System.Globalization.dll": {} - } - }, - "System.Globalization.Calendars/4.0.0": { - "dependencies": { - "System.Globalization": "4.0.0", - "System.Runtime": "4.0.0" - }, - "compile": { - "ref/dotnet/System.Globalization.Calendars.dll": {} - }, - "runtime": { - "runtimes/win8-aot/lib/netcore50/System.Globalization.Calendars.dll": {} - } - }, - "System.Globalization.Extensions/4.0.0": { - "dependencies": { - "System.Globalization": "4.0.10", - "System.Resources.ResourceManager": "4.0.0", - "System.Runtime": "4.0.20", - "System.Runtime.Extensions": "4.0.10", - "System.Runtime.InteropServices": "4.0.20" - }, - "compile": { - "ref/dotnet/System.Globalization.Extensions.dll": {} - }, - "runtime": { - "lib/dotnet/System.Globalization.Extensions.dll": {} - } - }, - "System.IO/4.0.10": { - "dependencies": { - "System.Globalization": "4.0.0", - "System.Runtime": "4.0.20", - "System.Text.Encoding": "4.0.10", - "System.Text.Encoding.Extensions": "4.0.0", - "System.Threading": "4.0.0", - "System.Threading.Tasks": "4.0.0" - }, - "compile": { - "ref/dotnet/System.IO.dll": {} - }, - "runtime": { - "runtimes/win8-aot/lib/netcore50/System.IO.dll": {} - } - }, - "System.IO.Compression/4.0.0": { - "dependencies": { - "System.Collections": "4.0.0", - "System.IO": "4.0.0", - "System.IO.Compression.clrcompression-x86": "4.0.0", - "System.Resources.ResourceManager": "4.0.0", - "System.Runtime": "4.0.0", - "System.Runtime.Extensions": "4.0.0", - "System.Runtime.InteropServices": "4.0.0", - "System.Text.Encoding": "4.0.0", - "System.Threading": "4.0.0", - "System.Threading.Tasks": "4.0.0" - }, - "compile": { - "ref/netcore50/System.IO.Compression.dll": {} - }, - "runtime": { - "lib/netcore50/System.IO.Compression.dll": {} - } - }, - "System.IO.Compression.clrcompression-x86/4.0.0": { - "native": { - "runtimes/win10-x86/native/ClrCompression.dll": {} - } - }, - "System.IO.Compression.ZipFile/4.0.0": { - "dependencies": { - "System.IO": "4.0.10", - "System.IO.Compression": "4.0.0", - "System.IO.FileSystem": "4.0.0", - "System.IO.FileSystem.Primitives": "4.0.0", - "System.Resources.ResourceManager": "4.0.0", - "System.Runtime": "4.0.20", - "System.Runtime.Extensions": "4.0.10", - "System.Text.Encoding": "4.0.10" - }, - "compile": { - "ref/dotnet/System.IO.Compression.ZipFile.dll": {} - }, - "runtime": { - "lib/dotnet/System.IO.Compression.ZipFile.dll": {} - } - }, - "System.IO.FileSystem/4.0.0": { - "dependencies": { - "System.Collections": "4.0.10", - "System.Diagnostics.Debug": "4.0.10", - "System.IO": "4.0.10", - "System.IO.FileSystem.Primitives": "4.0.0", - "System.Resources.ResourceManager": "4.0.0", - "System.Runtime": "4.0.20", - "System.Runtime.Extensions": "4.0.10", - "System.Runtime.Handles": "4.0.0", - "System.Runtime.InteropServices": "4.0.20", - "System.Runtime.WindowsRuntime": "4.0.0", - "System.Text.Encoding": "4.0.10", - "System.Text.Encoding.Extensions": "4.0.10", - "System.Threading": "4.0.10", - "System.Threading.Overlapped": "4.0.0", - "System.Threading.Tasks": "4.0.10" - }, - "compile": { - "ref/dotnet/System.IO.FileSystem.dll": {} - }, - "runtime": { - "lib/netcore50/System.IO.FileSystem.dll": {} - } - }, - "System.IO.FileSystem.Primitives/4.0.0": { - "dependencies": { - "System.Runtime": "4.0.20" - }, - "compile": { - "ref/dotnet/System.IO.FileSystem.Primitives.dll": {} - }, - "runtime": { - "lib/dotnet/System.IO.FileSystem.Primitives.dll": {} - } - }, - "System.IO.UnmanagedMemoryStream/4.0.0": { - "dependencies": { - "System.IO": "4.0.10", - "System.IO.FileSystem.Primitives": "4.0.0", - "System.Resources.ResourceManager": "4.0.0", - "System.Runtime": "4.0.20", - "System.Runtime.InteropServices": "4.0.20", - "System.Threading": "4.0.10", - "System.Threading.Tasks": "4.0.10" - }, - "compile": { - "ref/dotnet/System.IO.UnmanagedMemoryStream.dll": {} - }, - "runtime": { - "lib/dotnet/System.IO.UnmanagedMemoryStream.dll": {} - } - }, - "System.Linq/4.0.0": { - "dependencies": { - "System.Collections": "4.0.10", - "System.Diagnostics.Debug": "4.0.10", - "System.Resources.ResourceManager": "4.0.0", - "System.Runtime": "4.0.20", - "System.Runtime.Extensions": "4.0.10" - }, - "compile": { - "ref/netcore50/System.Linq.dll": {} - }, - "runtime": { - "lib/netcore50/System.Linq.dll": {} - } - }, - "System.Linq.Expressions/4.0.10": { - "dependencies": { - "System.Collections": "4.0.0", - "System.Diagnostics.Debug": "4.0.0", - "System.Globalization": "4.0.0", - "System.IO": "4.0.0", - "System.Linq": "4.0.0", - "System.Reflection": "4.0.0", - "System.Reflection.Extensions": "4.0.0", - "System.Reflection.Primitives": "4.0.0", - "System.Reflection.TypeExtensions": "4.0.0", - "System.Resources.ResourceManager": "4.0.0", - "System.Runtime": "4.0.20", - "System.Runtime.Extensions": "4.0.0", - "System.Threading": "4.0.0" - }, - "compile": { - "ref/dotnet/System.Linq.Expressions.dll": {} - }, - "runtime": { - "runtimes/win8-aot/lib/netcore50/System.Linq.Expressions.dll": {} - } - }, - "System.Linq.Parallel/4.0.0": { - "dependencies": { - "System.Collections": "4.0.10", - "System.Collections.Concurrent": "4.0.10", - "System.Diagnostics.Debug": "4.0.10", - "System.Diagnostics.Tracing": "4.0.20", - "System.Linq": "4.0.0", - "System.Resources.ResourceManager": "4.0.0", - "System.Runtime": "4.0.20", - "System.Runtime.Extensions": "4.0.10", - "System.Threading": "4.0.10", - "System.Threading.Tasks": "4.0.10" - }, - "compile": { - "ref/netcore50/System.Linq.Parallel.dll": {} - }, - "runtime": { - "lib/netcore50/System.Linq.Parallel.dll": {} - } - }, - "System.Linq.Queryable/4.0.0": { - "dependencies": { - "System.Collections": "4.0.10", - "System.Linq": "4.0.0", - "System.Linq.Expressions": "4.0.10", - "System.Reflection": "4.0.10", - "System.Reflection.Extensions": "4.0.0", - "System.Resources.ResourceManager": "4.0.0", - "System.Runtime": "4.0.20" - }, - "compile": { - "ref/netcore50/System.Linq.Queryable.dll": {} - }, - "runtime": { - "lib/netcore50/System.Linq.Queryable.dll": {} - } - }, - "System.Net.Http/4.0.0": { - "dependencies": { - "System.Collections": "4.0.10", - "System.Diagnostics.Debug": "4.0.10", - "System.Globalization": "4.0.10", - "System.IO": "4.0.10", - "System.Net.Primitives": "4.0.0", - "System.Resources.ResourceManager": "4.0.0", - "System.Runtime": "4.0.20", - "System.Runtime.Extensions": "4.0.10", - "System.Runtime.InteropServices": "4.0.20", - "System.Runtime.WindowsRuntime": "4.0.10", - "System.Text.Encoding": "4.0.10", - "System.Text.Encoding.Extensions": "4.0.10", - "System.Threading": "4.0.10", - "System.Threading.Tasks": "4.0.10" - }, - "compile": { - "ref/netcore50/System.Net.Http.dll": {} - }, - "runtime": { - "lib/netcore50/System.Net.Http.dll": {} - } - }, - "System.Net.NetworkInformation/4.0.0": { - "dependencies": { - "System.Runtime": "4.0.0", - "System.Runtime.InteropServices.WindowsRuntime": "4.0.0", - "System.Threading": "4.0.0" - }, - "compile": { - "ref/netcore50/System.Net.NetworkInformation.dll": {} - }, - "runtime": { - "lib/netcore50/System.Net.NetworkInformation.dll": {} - } - }, - "System.Net.Primitives/4.0.10": { - "dependencies": { - "System.Private.Networking": "4.0.0", - "System.Runtime": "4.0.20" - }, - "compile": { - "ref/dotnet/System.Net.Primitives.dll": {} - }, - "runtime": { - "lib/netcore50/System.Net.Primitives.dll": {} - } - }, - "System.Numerics.Vectors/4.1.0": { - "dependencies": { - "System.Globalization": "4.0.10", - "System.Resources.ResourceManager": "4.0.0", - "System.Runtime": "4.0.20", - "System.Runtime.Extensions": "4.0.10" - }, - "compile": { - "ref/dotnet/System.Numerics.Vectors.dll": {} - }, - "runtime": { - "lib/dotnet/System.Numerics.Vectors.dll": {} - } - }, - "System.ObjectModel/4.0.10": { - "dependencies": { - "System.Collections": "4.0.10", - "System.Diagnostics.Debug": "4.0.10", - "System.Resources.ResourceManager": "4.0.0", - "System.Runtime": "4.0.20", - "System.Threading": "4.0.10" - }, - "compile": { - "ref/dotnet/System.ObjectModel.dll": {} - }, - "runtime": { - "lib/dotnet/System.ObjectModel.dll": {} - } - }, - "System.Private.Networking/4.0.0": { - "dependencies": { - "Microsoft.Win32.Primitives": "4.0.0", - "System.Collections": "4.0.10", - "System.Collections.NonGeneric": "4.0.0", - "System.Diagnostics.Debug": "4.0.10", - "System.Diagnostics.Tracing": "4.0.20", - "System.Globalization": "4.0.10", - "System.IO": "4.0.10", - "System.IO.FileSystem": "4.0.0", - "System.IO.FileSystem.Primitives": "4.0.0", - "System.Resources.ResourceManager": "4.0.0", - "System.Runtime": "4.0.20", - "System.Runtime.Extensions": "4.0.10", - "System.Runtime.Handles": "4.0.0", - "System.Runtime.InteropServices": "4.0.20", - "System.Threading": "4.0.10", - "System.Threading.Overlapped": "4.0.0", - "System.Threading.Tasks": "4.0.10" - }, - "compile": { - "ref/netcore50/_._": {} - }, - "runtime": { - "lib/netcore50/System.Private.Networking.dll": {} - } - }, - "System.Private.Uri/4.0.0": { - "compile": { - "ref/netcore50/_._": {} - }, - "runtime": { - "runtimes/win8-aot/lib/netcore50/System.Private.Uri.dll": {} - } - }, - "System.Reflection/4.0.10": { - "dependencies": { - "System.IO": "4.0.0", - "System.Reflection.Primitives": "4.0.0", - "System.Runtime": "4.0.20" - }, - "compile": { - "ref/dotnet/System.Reflection.dll": {} - }, - "runtime": { - "runtimes/win8-aot/lib/netcore50/System.Reflection.dll": {} - } - }, - "System.Reflection.DispatchProxy/4.0.0": { - "dependencies": { - "System.Collections": "4.0.10", - "System.Linq": "4.0.0", - "System.Reflection": "4.0.10", - "System.Reflection.Extensions": "4.0.0", - "System.Reflection.Primitives": "4.0.0", - "System.Resources.ResourceManager": "4.0.0", - "System.Runtime": "4.0.20", - "System.Threading": "4.0.10" - }, - "compile": { - "ref/dotnet/System.Reflection.DispatchProxy.dll": {} - }, - "runtime": { - "runtimes/win8-aot/lib/netcore50/System.Reflection.DispatchProxy.dll": {} - } - }, - "System.Reflection.Extensions/4.0.0": { - "dependencies": { - "System.Diagnostics.Debug": "4.0.10", - "System.Reflection": "4.0.10", - "System.Reflection.Primitives": "4.0.0", - "System.Reflection.TypeExtensions": "4.0.0", - "System.Resources.ResourceManager": "4.0.0", - "System.Runtime": "4.0.20", - "System.Runtime.Extensions": "4.0.10" - }, - "compile": { - "ref/netcore50/System.Reflection.Extensions.dll": {} - }, - "runtime": { - "runtimes/win8-aot/lib/netcore50/System.Reflection.Extensions.dll": {} - } - }, - "System.Reflection.Metadata/1.0.22": { - "dependencies": { - "System.Collections": "4.0.0", - "System.Collections.Immutable": "1.1.37", - "System.Diagnostics.Debug": "4.0.0", - "System.IO": "4.0.0", - "System.Reflection": "4.0.0", - "System.Reflection.Extensions": "4.0.0", - "System.Reflection.Primitives": "4.0.0", - "System.Resources.ResourceManager": "4.0.0", - "System.Runtime": "4.0.0", - "System.Runtime.Extensions": "4.0.0", - "System.Runtime.InteropServices": "4.0.0", - "System.Text.Encoding": "4.0.0", - "System.Text.Encoding.Extensions": "4.0.0", - "System.Threading": "4.0.0" - }, - "compile": { - "lib/dotnet/System.Reflection.Metadata.dll": {} - }, - "runtime": { - "lib/dotnet/System.Reflection.Metadata.dll": {} - } - }, - "System.Reflection.Primitives/4.0.0": { - "dependencies": { - "System.Runtime": "4.0.0", - "System.Threading": "4.0.0" - }, - "compile": { - "ref/netcore50/System.Reflection.Primitives.dll": {} - }, - "runtime": { - "runtimes/win8-aot/lib/netcore50/System.Reflection.Primitives.dll": {} - } - }, - "System.Reflection.TypeExtensions/4.0.0": { - "dependencies": { - "System.Diagnostics.Contracts": "4.0.0", - "System.Diagnostics.Debug": "4.0.10", - "System.Linq": "4.0.0", - "System.Reflection": "4.0.10", - "System.Reflection.Primitives": "4.0.0", - "System.Resources.ResourceManager": "4.0.0", - "System.Runtime": "4.0.20", - "System.Runtime.Extensions": "4.0.10" - }, - "compile": { - "ref/dotnet/System.Reflection.TypeExtensions.dll": {} - }, - "runtime": { - "runtimes/win8-aot/lib/netcore50/System.Reflection.TypeExtensions.dll": {} - } - }, - "System.Resources.ResourceManager/4.0.0": { - "dependencies": { - "System.Globalization": "4.0.0", - "System.Reflection": "4.0.10", - "System.Runtime": "4.0.20" - }, - "compile": { - "ref/netcore50/System.Resources.ResourceManager.dll": {} - }, - "runtime": { - "runtimes/win8-aot/lib/netcore50/System.Resources.ResourceManager.dll": {} - } - }, - "System.Runtime/4.0.20": { - "dependencies": { - "System.Private.Uri": "4.0.0" - }, - "compile": { - "ref/dotnet/System.Runtime.dll": {} - }, - "runtime": { - "runtimes/win8-aot/lib/netcore50/System.Runtime.dll": {} - } - }, - "System.Runtime.Extensions/4.0.10": { - "dependencies": { - "System.Runtime": "4.0.20" - }, - "compile": { - "ref/dotnet/System.Runtime.Extensions.dll": {} - }, - "runtime": { - "runtimes/win8-aot/lib/netcore50/System.Runtime.Extensions.dll": {} - } - }, - "System.Runtime.Handles/4.0.0": { - "dependencies": { - "System.Runtime": "4.0.0" - }, - "compile": { - "ref/dotnet/System.Runtime.Handles.dll": {} - }, - "runtime": { - "runtimes/win8-aot/lib/netcore50/System.Runtime.Handles.dll": {} - } - }, - "System.Runtime.InteropServices/4.0.20": { - "dependencies": { - "System.Reflection": "4.0.0", - "System.Reflection.Primitives": "4.0.0", - "System.Runtime": "4.0.0", - "System.Runtime.Handles": "4.0.0" - }, - "compile": { - "ref/dotnet/System.Runtime.InteropServices.dll": {} - }, - "runtime": { - "runtimes/win8-aot/lib/netcore50/System.Runtime.InteropServices.dll": {} - } - }, - "System.Runtime.InteropServices.WindowsRuntime/4.0.0": { - "compile": { - "ref/netcore50/System.Runtime.InteropServices.WindowsRuntime.dll": {} - }, - "runtime": { - "runtimes/win8-aot/lib/netcore50/System.Runtime.InteropServices.WindowsRuntime.dll": {} - } - }, - "System.Runtime.Numerics/4.0.0": { - "dependencies": { - "System.Globalization": "4.0.10", - "System.Resources.ResourceManager": "4.0.0", - "System.Runtime": "4.0.20", - "System.Runtime.Extensions": "4.0.10" - }, - "compile": { - "ref/netcore50/System.Runtime.Numerics.dll": {} - }, - "runtime": { - "lib/netcore50/System.Runtime.Numerics.dll": {} - } - }, - "System.Runtime.WindowsRuntime/4.0.10": { - "dependencies": { - "System.Diagnostics.Debug": "4.0.10", - "System.Globalization": "4.0.0", - "System.IO": "4.0.10", - "System.ObjectModel": "4.0.0", - "System.Resources.ResourceManager": "4.0.0", - "System.Runtime": "4.0.20", - "System.Runtime.Extensions": "4.0.0", - "System.Runtime.InteropServices": "4.0.20", - "System.Threading": "4.0.10", - "System.Threading.Tasks": "4.0.10" - }, - "compile": { - "ref/netcore50/System.Runtime.WindowsRuntime.dll": {} - }, - "runtime": { - "runtimes/win8-aot/lib/netcore50/System.Runtime.WindowsRuntime.dll": {} - } - }, - "System.Security.Claims/4.0.0": { - "dependencies": { - "System.Collections": "4.0.0", - "System.Diagnostics.Debug": "4.0.0", - "System.Globalization": "4.0.0", - "System.IO": "4.0.0", - "System.Resources.ResourceManager": "4.0.0", - "System.Runtime": "4.0.20", - "System.Runtime.Extensions": "4.0.0", - "System.Security.Principal": "4.0.0" - }, - "compile": { - "ref/dotnet/System.Security.Claims.dll": {} - }, - "runtime": { - "lib/dotnet/System.Security.Claims.dll": {} - } - }, - "System.Security.Principal/4.0.0": { - "dependencies": { - "System.Runtime": "4.0.0" - }, - "compile": { - "ref/netcore50/System.Security.Principal.dll": {} - }, - "runtime": { - "lib/netcore50/System.Security.Principal.dll": {} - } - }, - "System.Text.Encoding/4.0.10": { - "dependencies": { - "System.Runtime": "4.0.0" - }, - "compile": { - "ref/dotnet/System.Text.Encoding.dll": {} - }, - "runtime": { - "runtimes/win8-aot/lib/netcore50/System.Text.Encoding.dll": {} - } - }, - "System.Text.Encoding.Extensions/4.0.10": { - "dependencies": { - "System.Runtime": "4.0.0", - "System.Text.Encoding": "4.0.10" - }, - "compile": { - "ref/dotnet/System.Text.Encoding.Extensions.dll": {} - }, - "runtime": { - "runtimes/win8-aot/lib/netcore50/System.Text.Encoding.Extensions.dll": {} - } - }, - "System.Text.RegularExpressions/4.0.10": { - "dependencies": { - "System.Collections": "4.0.10", - "System.Globalization": "4.0.10", - "System.Resources.ResourceManager": "4.0.0", - "System.Runtime": "4.0.20", - "System.Runtime.Extensions": "4.0.10", - "System.Threading": "4.0.10" - }, - "compile": { - "ref/dotnet/System.Text.RegularExpressions.dll": {} - }, - "runtime": { - "lib/dotnet/System.Text.RegularExpressions.dll": {} - } - }, - "System.Threading/4.0.10": { - "dependencies": { - "System.Runtime": "4.0.0", - "System.Threading.Tasks": "4.0.0" - }, - "compile": { - "ref/dotnet/System.Threading.dll": {} - }, - "runtime": { - "runtimes/win8-aot/lib/netcore50/System.Threading.dll": {} - } - }, - "System.Threading.Overlapped/4.0.0": { - "dependencies": { - "System.Resources.ResourceManager": "4.0.0", - "System.Runtime": "4.0.20", - "System.Runtime.Extensions": "4.0.0", - "System.Runtime.Handles": "4.0.0", - "System.Runtime.InteropServices": "4.0.20", - "System.Threading": "4.0.10" - }, - "compile": { - "ref/dotnet/System.Threading.Overlapped.dll": {} - }, - "runtime": { - "lib/netcore50/System.Threading.Overlapped.dll": {} - } - }, - "System.Threading.Tasks/4.0.10": { - "dependencies": { - "System.Runtime": "4.0.0" - }, - "compile": { - "ref/dotnet/System.Threading.Tasks.dll": {} - }, - "runtime": { - "runtimes/win8-aot/lib/netcore50/System.Threading.Tasks.dll": {} - } - }, - "System.Threading.Tasks.Dataflow/4.5.25": { - "dependencies": { - "System.Collections": "4.0.0", - "System.Collections.Concurrent": "4.0.0", - "System.Diagnostics.Debug": "4.0.0", - "System.Diagnostics.Tracing": "4.0.0", - "System.Dynamic.Runtime": "4.0.0", - "System.Linq": "4.0.0", - "System.Resources.ResourceManager": "4.0.0", - "System.Runtime": "4.0.0", - "System.Runtime.Extensions": "4.0.0", - "System.Threading": "4.0.0", - "System.Threading.Tasks": "4.0.0" - }, - "compile": { - "lib/dotnet/System.Threading.Tasks.Dataflow.dll": {} - }, - "runtime": { - "lib/dotnet/System.Threading.Tasks.Dataflow.dll": {} - } - }, - "System.Threading.Tasks.Parallel/4.0.0": { - "dependencies": { - "System.Collections.Concurrent": "4.0.10", - "System.Diagnostics.Debug": "4.0.10", - "System.Diagnostics.Tracing": "4.0.20", - "System.Resources.ResourceManager": "4.0.0", - "System.Runtime": "4.0.20", - "System.Runtime.Extensions": "4.0.10", - "System.Threading": "4.0.10", - "System.Threading.Tasks": "4.0.10" - }, - "compile": { - "ref/netcore50/System.Threading.Tasks.Parallel.dll": {} - }, - "runtime": { - "lib/netcore50/System.Threading.Tasks.Parallel.dll": {} - } - }, - "System.Threading.Timer/4.0.0": { - "compile": { - "ref/netcore50/System.Threading.Timer.dll": {} - }, - "runtime": { - "runtimes/win8-aot/lib/netcore50/System.Threading.Timer.dll": {} - } - }, - "System.Xml.ReaderWriter/4.0.10": { - "dependencies": { - "System.Collections": "4.0.10", - "System.Diagnostics.Debug": "4.0.10", - "System.Globalization": "4.0.10", - "System.IO": "4.0.10", - "System.IO.FileSystem": "4.0.0", - "System.IO.FileSystem.Primitives": "4.0.0", - "System.Resources.ResourceManager": "4.0.0", - "System.Runtime": "4.0.20", - "System.Runtime.Extensions": "4.0.10", - "System.Runtime.InteropServices": "4.0.20", - "System.Text.Encoding": "4.0.10", - "System.Text.Encoding.Extensions": "4.0.10", - "System.Text.RegularExpressions": "4.0.10", - "System.Threading.Tasks": "4.0.10" - }, - "compile": { - "ref/dotnet/System.Xml.ReaderWriter.dll": {} - }, - "runtime": { - "lib/dotnet/System.Xml.ReaderWriter.dll": {} - } - }, - "System.Xml.XDocument/4.0.10": { - "dependencies": { - "System.Collections": "4.0.10", - "System.Diagnostics.Debug": "4.0.10", - "System.Globalization": "4.0.10", - "System.IO": "4.0.10", - "System.Reflection": "4.0.10", - "System.Resources.ResourceManager": "4.0.0", - "System.Runtime": "4.0.20", - "System.Runtime.Extensions": "4.0.10", - "System.Text.Encoding": "4.0.10", - "System.Threading": "4.0.10", - "System.Xml.ReaderWriter": "4.0.10" - }, - "compile": { - "ref/dotnet/System.Xml.XDocument.dll": {} - }, - "runtime": { - "lib/dotnet/System.Xml.XDocument.dll": {} - } - } - } - }, - "libraries": { - "Microsoft.CSharp/4.0.0": { - "sha512": "oWqeKUxHXdK6dL2CFjgMcaBISbkk+AqEg+yvJHE4DElNzS4QaTsCflgkkqZwVlWby1Dg9zo9n+iCAMFefFdJ/A==", - "type": "package", - "path": "Microsoft.CSharp/4.0.0", - "files": [ - "Microsoft.CSharp.4.0.0.nupkg.sha512", - "Microsoft.CSharp.nuspec", - "lib/MonoAndroid10/_._", - "lib/MonoTouch10/_._", - "lib/dotnet/Microsoft.CSharp.dll", - "lib/net45/_._", - "lib/netcore50/Microsoft.CSharp.dll", - "lib/win8/_._", - "lib/wp80/_._", - "lib/wpa81/_._", - "lib/xamarinios10/_._", - "lib/xamarinmac20/_._", - "ref/MonoAndroid10/_._", - "ref/MonoTouch10/_._", - "ref/dotnet/Microsoft.CSharp.dll", - "ref/dotnet/Microsoft.CSharp.xml", - "ref/dotnet/de/Microsoft.CSharp.xml", - "ref/dotnet/es/Microsoft.CSharp.xml", - "ref/dotnet/fr/Microsoft.CSharp.xml", - "ref/dotnet/it/Microsoft.CSharp.xml", - "ref/dotnet/ja/Microsoft.CSharp.xml", - "ref/dotnet/ko/Microsoft.CSharp.xml", - "ref/dotnet/ru/Microsoft.CSharp.xml", - "ref/dotnet/zh-hans/Microsoft.CSharp.xml", - "ref/dotnet/zh-hant/Microsoft.CSharp.xml", - "ref/net45/_._", - "ref/netcore50/Microsoft.CSharp.dll", - "ref/netcore50/Microsoft.CSharp.xml", - "ref/win8/_._", - "ref/wp80/_._", - "ref/wpa81/_._", - "ref/xamarinios10/_._", - "ref/xamarinmac20/_._" - ] - }, - "Microsoft.NETCore/5.0.0": { - "sha512": "QQMp0yYQbIdfkKhdEE6Umh2Xonau7tasG36Trw/YlHoWgYQLp7T9L+ZD8EPvdj5ubRhtOuKEKwM7HMpkagB9ZA==", - "type": "package", - "path": "Microsoft.NETCore/5.0.0", - "files": [ - "Microsoft.NETCore.5.0.0.nupkg.sha512", - "Microsoft.NETCore.nuspec", - "_._" - ] - }, - "Microsoft.NETCore.Platforms/1.0.0": { - "sha512": "0N77OwGZpXqUco2C/ynv1os7HqdFYifvNIbveLDKqL5PZaz05Rl9enCwVBjF61aumHKueLWIJ3prnmdAXxww4A==", - "type": "package", - "path": "Microsoft.NETCore.Platforms/1.0.0", - "files": [ - "Microsoft.NETCore.Platforms.1.0.0.nupkg.sha512", - "Microsoft.NETCore.Platforms.nuspec", - "runtime.json" - ] - }, - "Microsoft.NETCore.Portable.Compatibility/1.0.0": { - "sha512": "5/IFqf2zN1jzktRJitxO+5kQ+0AilcIbPvSojSJwDG3cGNSMZg44LXLB5E9RkSETE0Wh4QoALdNh1koKoF7/mA==", - "type": "package", - "path": "Microsoft.NETCore.Portable.Compatibility/1.0.0", - "files": [ - "Microsoft.NETCore.Portable.Compatibility.1.0.0.nupkg.sha512", - "Microsoft.NETCore.Portable.Compatibility.nuspec", - "lib/dnxcore50/System.ComponentModel.DataAnnotations.dll", - "lib/dnxcore50/System.Core.dll", - "lib/dnxcore50/System.Net.dll", - "lib/dnxcore50/System.Numerics.dll", - "lib/dnxcore50/System.Runtime.Serialization.dll", - "lib/dnxcore50/System.ServiceModel.Web.dll", - "lib/dnxcore50/System.ServiceModel.dll", - "lib/dnxcore50/System.Windows.dll", - "lib/dnxcore50/System.Xml.Linq.dll", - "lib/dnxcore50/System.Xml.Serialization.dll", - "lib/dnxcore50/System.Xml.dll", - "lib/dnxcore50/System.dll", - "lib/net45/_._", - "lib/netcore50/System.ComponentModel.DataAnnotations.dll", - "lib/netcore50/System.Core.dll", - "lib/netcore50/System.Net.dll", - "lib/netcore50/System.Numerics.dll", - "lib/netcore50/System.Runtime.Serialization.dll", - "lib/netcore50/System.ServiceModel.Web.dll", - "lib/netcore50/System.ServiceModel.dll", - "lib/netcore50/System.Windows.dll", - "lib/netcore50/System.Xml.Linq.dll", - "lib/netcore50/System.Xml.Serialization.dll", - "lib/netcore50/System.Xml.dll", - "lib/netcore50/System.dll", - "lib/win8/_._", - "lib/wp80/_._", - "lib/wpa81/_._", - "ref/dotnet/System.ComponentModel.DataAnnotations.dll", - "ref/dotnet/System.Core.dll", - "ref/dotnet/System.Net.dll", - "ref/dotnet/System.Numerics.dll", - "ref/dotnet/System.Runtime.Serialization.dll", - "ref/dotnet/System.ServiceModel.Web.dll", - "ref/dotnet/System.ServiceModel.dll", - "ref/dotnet/System.Windows.dll", - "ref/dotnet/System.Xml.Linq.dll", - "ref/dotnet/System.Xml.Serialization.dll", - "ref/dotnet/System.Xml.dll", - "ref/dotnet/System.dll", - "ref/dotnet/mscorlib.dll", - "ref/net45/_._", - "ref/netcore50/System.ComponentModel.DataAnnotations.dll", - "ref/netcore50/System.Core.dll", - "ref/netcore50/System.Net.dll", - "ref/netcore50/System.Numerics.dll", - "ref/netcore50/System.Runtime.Serialization.dll", - "ref/netcore50/System.ServiceModel.Web.dll", - "ref/netcore50/System.ServiceModel.dll", - "ref/netcore50/System.Windows.dll", - "ref/netcore50/System.Xml.Linq.dll", - "ref/netcore50/System.Xml.Serialization.dll", - "ref/netcore50/System.Xml.dll", - "ref/netcore50/System.dll", - "ref/netcore50/mscorlib.dll", - "ref/win8/_._", - "ref/wp80/_._", - "ref/wpa81/_._", - "runtimes/aot/lib/netcore50/System.ComponentModel.DataAnnotations.dll", - "runtimes/aot/lib/netcore50/System.Core.dll", - "runtimes/aot/lib/netcore50/System.Net.dll", - "runtimes/aot/lib/netcore50/System.Numerics.dll", - "runtimes/aot/lib/netcore50/System.Runtime.Serialization.dll", - "runtimes/aot/lib/netcore50/System.ServiceModel.Web.dll", - "runtimes/aot/lib/netcore50/System.ServiceModel.dll", - "runtimes/aot/lib/netcore50/System.Windows.dll", - "runtimes/aot/lib/netcore50/System.Xml.Linq.dll", - "runtimes/aot/lib/netcore50/System.Xml.Serialization.dll", - "runtimes/aot/lib/netcore50/System.Xml.dll", - "runtimes/aot/lib/netcore50/System.dll", - "runtimes/aot/lib/netcore50/mscorlib.dll" - ] - }, - "Microsoft.NETCore.Runtime/1.0.0": { - "sha512": "AjaMNpXLW4miEQorIqyn6iQ+BZBId6qXkhwyeh1vl6kXLqosZusbwmLNlvj/xllSQrd3aImJbvlHusam85g+xQ==", - "type": "package", - "path": "Microsoft.NETCore.Runtime/1.0.0", - "files": [ - "Microsoft.NETCore.Runtime.1.0.0.nupkg.sha512", - "Microsoft.NETCore.Runtime.nuspec", - "runtime.json" - ] - }, - "Microsoft.NETCore.Runtime.CoreCLR-arm/1.0.0": { - "sha512": "hoJfIl981eXwn9Tz8onO/J1xaYApIfp/YrhjSh9rRhml1U5Wj80LBgyp/6n+KI3VlvcAraThhnHnCTp+M3Uh+w==", - "type": "package", - "path": "Microsoft.NETCore.Runtime.CoreCLR-arm/1.0.0", - "files": [ - "Microsoft.NETCore.Runtime.CoreCLR-arm.1.0.0.nupkg.sha512", - "Microsoft.NETCore.Runtime.CoreCLR-arm.nuspec", - "ref/dotnet/_._", - "runtimes/win8-arm/lib/dotnet/mscorlib.ni.dll", - "runtimes/win8-arm/native/clretwrc.dll", - "runtimes/win8-arm/native/coreclr.dll", - "runtimes/win8-arm/native/dbgshim.dll", - "runtimes/win8-arm/native/mscordaccore.dll", - "runtimes/win8-arm/native/mscordbi.dll", - "runtimes/win8-arm/native/mscorrc.debug.dll", - "runtimes/win8-arm/native/mscorrc.dll" - ] - }, - "Microsoft.NETCore.Runtime.CoreCLR-x64/1.0.0": { - "sha512": "DaY5Z13xCZpnVIGluC5sCo4/0wy1rl6mptBH7v3RYi3guAmG88aSeFoQzyZepo0H0jEixUxNFM0+MB6Jc+j0bw==", - "type": "package", - "path": "Microsoft.NETCore.Runtime.CoreCLR-x64/1.0.0", - "files": [ - "Microsoft.NETCore.Runtime.CoreCLR-x64.1.0.0.nupkg.sha512", - "Microsoft.NETCore.Runtime.CoreCLR-x64.nuspec", - "ref/dotnet/_._", - "runtimes/win7-x64/lib/dotnet/mscorlib.ni.dll", - "runtimes/win7-x64/native/clretwrc.dll", - "runtimes/win7-x64/native/coreclr.dll", - "runtimes/win7-x64/native/dbgshim.dll", - "runtimes/win7-x64/native/mscordaccore.dll", - "runtimes/win7-x64/native/mscordbi.dll", - "runtimes/win7-x64/native/mscorrc.debug.dll", - "runtimes/win7-x64/native/mscorrc.dll" - ] - }, - "Microsoft.NETCore.Runtime.CoreCLR-x86/1.0.0": { - "sha512": "2LDffu5Is/X01GVPVuye4Wmz9/SyGDNq1Opgl5bXG3206cwNiCwsQgILOtfSWVp5mn4w401+8cjhBy3THW8HQQ==", - "type": "package", - "path": "Microsoft.NETCore.Runtime.CoreCLR-x86/1.0.0", - "files": [ - "Microsoft.NETCore.Runtime.CoreCLR-x86.1.0.0.nupkg.sha512", - "Microsoft.NETCore.Runtime.CoreCLR-x86.nuspec", - "ref/dotnet/_._", - "runtimes/win7-x86/lib/dotnet/mscorlib.ni.dll", - "runtimes/win7-x86/native/clretwrc.dll", - "runtimes/win7-x86/native/coreclr.dll", - "runtimes/win7-x86/native/dbgshim.dll", - "runtimes/win7-x86/native/mscordaccore.dll", - "runtimes/win7-x86/native/mscordbi.dll", - "runtimes/win7-x86/native/mscorrc.debug.dll", - "runtimes/win7-x86/native/mscorrc.dll" - ] - }, - "Microsoft.NETCore.Runtime.Native/1.0.0": { - "sha512": "tMsWWrH1AJCguiM22zK/vr6COxqz62Q1F02B07IXAUN405R3HGk5SkD/DL0Hte+OTjNtW9LkKXpOggGBRwYFNg==", - "type": "package", - "path": "Microsoft.NETCore.Runtime.Native/1.0.0", - "files": [ - "Microsoft.NETCore.Runtime.Native.1.0.0.nupkg.sha512", - "Microsoft.NETCore.Runtime.Native.nuspec", - "_._" - ] - }, - "Microsoft.NETCore.Targets/1.0.0": { - "sha512": "XfITpPjYLYRmAeZtb9diw6P7ylLQsSC1U2a/xj10iQpnHxkiLEBXop/psw15qMPuNca7lqgxWvzZGpQxphuXaw==", - "type": "package", - "path": "Microsoft.NETCore.Targets/1.0.0", - "files": [ - "Microsoft.NETCore.Targets.1.0.0.nupkg.sha512", - "Microsoft.NETCore.Targets.nuspec", - "runtime.json" - ] - }, - "Microsoft.NETCore.Targets.DNXCore/4.9.0": { - "sha512": "32pNFQTn/nVB15hYIztKn1Ij05ibGn8C9CfOiENbc+GbzxWWQQztDyWhS/vGzUcrFFZpcXbJ0yGHem2syNHMwQ==", - "type": "package", - "path": "Microsoft.NETCore.Targets.DNXCore/4.9.0", - "files": [ - "Microsoft.NETCore.Targets.DNXCore.4.9.0.nupkg.sha512", - "Microsoft.NETCore.Targets.DNXCore.nuspec", - "runtime.json" - ] - }, - "Microsoft.NETCore.Targets.NETFramework/4.6.0": { - "sha512": "5VA/gjJfOoohzsKYq1Qg8SY6Yc70dV3+DIQtQPYTy3fMr0brXspKTj4vb0h7l8eDt/YCVzcTloIv5sfb7Ora2g==", - "type": "package", - "path": "Microsoft.NETCore.Targets.NETFramework/4.6.0", - "files": [ - "Microsoft.NETCore.Targets.NETFramework.4.6.0.nupkg.sha512", - "Microsoft.NETCore.Targets.NETFramework.nuspec", - "runtime.json" - ] - }, - "Microsoft.NETCore.Targets.UniversalWindowsPlatform/5.0.0": { - "sha512": "jszcJ6okLlhqF4OQbhSbixLOuLUyVT3BP7Y7/i7fcDMwnHBd1Pmdz6M1Al9SMDKVLA2oSaItg4tq6C0ydv8lYQ==", - "type": "package", - "path": "Microsoft.NETCore.Targets.UniversalWindowsPlatform/5.0.0", - "files": [ - "Microsoft.NETCore.Targets.UniversalWindowsPlatform.5.0.0.nupkg.sha512", - "Microsoft.NETCore.Targets.UniversalWindowsPlatform.nuspec", - "runtime.json" - ] - }, - "Microsoft.NETCore.Windows.ApiSets-x64/1.0.0": { - "sha512": "NC+dpFMdhujz2sWAdJ8EmBk07p1zOlNi0FCCnZEbzftABpw9xZ99EMP/bUJrPTgCxHfzJAiuLPOtAauzVINk0w==", - "type": "package", - "path": "Microsoft.NETCore.Windows.ApiSets-x64/1.0.0", - "files": [ - "Microsoft.NETCore.Windows.ApiSets-x64.1.0.0.nupkg.sha512", - "Microsoft.NETCore.Windows.ApiSets-x64.nuspec", - "runtimes/win10-x64/native/_._", - "runtimes/win7-x64/native/API-MS-Win-Base-Util-L1-1-0.dll", - "runtimes/win7-x64/native/API-MS-Win-Core-Kernel32-Private-L1-1-0.dll", - "runtimes/win7-x64/native/API-MS-Win-Core-Kernel32-Private-L1-1-1.dll", - "runtimes/win7-x64/native/API-MS-Win-Core-Kernel32-Private-L1-1-2.dll", - "runtimes/win7-x64/native/API-MS-Win-Core-PrivateProfile-L1-1-0.dll", - "runtimes/win7-x64/native/API-MS-Win-Core-ProcessTopology-Obsolete-L1-1-0.dll", - "runtimes/win7-x64/native/API-MS-Win-Core-String-L2-1-0.dll", - "runtimes/win7-x64/native/API-MS-Win-Core-StringAnsi-L1-1-0.dll", - "runtimes/win7-x64/native/API-MS-Win-EventLog-Legacy-L1-1-0.dll", - "runtimes/win7-x64/native/API-MS-Win-Eventing-ClassicProvider-L1-1-0.dll", - "runtimes/win7-x64/native/API-MS-Win-Eventing-Consumer-L1-1-0.dll", - "runtimes/win7-x64/native/API-MS-Win-Eventing-Controller-L1-1-0.dll", - "runtimes/win7-x64/native/API-MS-Win-Eventing-Legacy-L1-1-0.dll", - "runtimes/win7-x64/native/API-MS-Win-Eventing-Provider-L1-1-0.dll", - "runtimes/win7-x64/native/API-MS-Win-Security-LsaPolicy-L1-1-0.dll", - "runtimes/win7-x64/native/API-MS-Win-devices-config-L1-1-0.dll", - "runtimes/win7-x64/native/API-MS-Win-devices-config-L1-1-1.dll", - "runtimes/win7-x64/native/api-ms-win-core-com-l1-1-0.dll", - "runtimes/win7-x64/native/api-ms-win-core-com-private-l1-1-0.dll", - "runtimes/win7-x64/native/api-ms-win-core-comm-l1-1-0.dll", - "runtimes/win7-x64/native/api-ms-win-core-console-l1-1-0.dll", - "runtimes/win7-x64/native/api-ms-win-core-console-l2-1-0.dll", - "runtimes/win7-x64/native/api-ms-win-core-datetime-l1-1-0.dll", - "runtimes/win7-x64/native/api-ms-win-core-datetime-l1-1-1.dll", - "runtimes/win7-x64/native/api-ms-win-core-debug-l1-1-0.dll", - "runtimes/win7-x64/native/api-ms-win-core-debug-l1-1-1.dll", - "runtimes/win7-x64/native/api-ms-win-core-delayload-l1-1-0.dll", - "runtimes/win7-x64/native/api-ms-win-core-errorhandling-l1-1-0.dll", - "runtimes/win7-x64/native/api-ms-win-core-errorhandling-l1-1-1.dll", - "runtimes/win7-x64/native/api-ms-win-core-fibers-l1-1-0.dll", - "runtimes/win7-x64/native/api-ms-win-core-fibers-l1-1-1.dll", - "runtimes/win7-x64/native/api-ms-win-core-file-l1-1-0.dll", - "runtimes/win7-x64/native/api-ms-win-core-file-l1-2-0.dll", - "runtimes/win7-x64/native/api-ms-win-core-file-l1-2-1.dll", - "runtimes/win7-x64/native/api-ms-win-core-file-l2-1-0.dll", - "runtimes/win7-x64/native/api-ms-win-core-file-l2-1-1.dll", - "runtimes/win7-x64/native/api-ms-win-core-handle-l1-1-0.dll", - "runtimes/win7-x64/native/api-ms-win-core-heap-l1-1-0.dll", - "runtimes/win7-x64/native/api-ms-win-core-heap-obsolete-l1-1-0.dll", - "runtimes/win7-x64/native/api-ms-win-core-interlocked-l1-1-0.dll", - "runtimes/win7-x64/native/api-ms-win-core-io-l1-1-0.dll", - "runtimes/win7-x64/native/api-ms-win-core-io-l1-1-1.dll", - "runtimes/win7-x64/native/api-ms-win-core-kernel32-legacy-l1-1-0.dll", - "runtimes/win7-x64/native/api-ms-win-core-kernel32-legacy-l1-1-1.dll", - "runtimes/win7-x64/native/api-ms-win-core-kernel32-legacy-l1-1-2.dll", - "runtimes/win7-x64/native/api-ms-win-core-libraryloader-l1-1-0.dll", - "runtimes/win7-x64/native/api-ms-win-core-libraryloader-l1-1-1.dll", - "runtimes/win7-x64/native/api-ms-win-core-localization-l1-2-0.dll", - "runtimes/win7-x64/native/api-ms-win-core-localization-l1-2-1.dll", - "runtimes/win7-x64/native/api-ms-win-core-localization-l2-1-0.dll", - "runtimes/win7-x64/native/api-ms-win-core-localization-obsolete-l1-2-0.dll", - "runtimes/win7-x64/native/api-ms-win-core-memory-l1-1-0.dll", - "runtimes/win7-x64/native/api-ms-win-core-memory-l1-1-1.dll", - "runtimes/win7-x64/native/api-ms-win-core-memory-l1-1-2.dll", - "runtimes/win7-x64/native/api-ms-win-core-memory-l1-1-3.dll", - "runtimes/win7-x64/native/api-ms-win-core-namedpipe-l1-1-0.dll", - "runtimes/win7-x64/native/api-ms-win-core-namedpipe-l1-2-1.dll", - "runtimes/win7-x64/native/api-ms-win-core-normalization-l1-1-0.dll", - "runtimes/win7-x64/native/api-ms-win-core-privateprofile-l1-1-1.dll", - "runtimes/win7-x64/native/api-ms-win-core-processenvironment-l1-1-0.dll", - "runtimes/win7-x64/native/api-ms-win-core-processenvironment-l1-2-0.dll", - "runtimes/win7-x64/native/api-ms-win-core-processsecurity-l1-1-0.dll", - "runtimes/win7-x64/native/api-ms-win-core-processthreads-l1-1-0.dll", - "runtimes/win7-x64/native/api-ms-win-core-processthreads-l1-1-1.dll", - "runtimes/win7-x64/native/api-ms-win-core-processthreads-l1-1-2.dll", - "runtimes/win7-x64/native/api-ms-win-core-profile-l1-1-0.dll", - "runtimes/win7-x64/native/api-ms-win-core-psapi-ansi-l1-1-0.dll", - "runtimes/win7-x64/native/api-ms-win-core-psapi-l1-1-0.dll", - "runtimes/win7-x64/native/api-ms-win-core-psapi-obsolete-l1-1-0.dll", - "runtimes/win7-x64/native/api-ms-win-core-realtime-l1-1-0.dll", - "runtimes/win7-x64/native/api-ms-win-core-registry-l1-1-0.dll", - "runtimes/win7-x64/native/api-ms-win-core-registry-l2-1-0.dll", - "runtimes/win7-x64/native/api-ms-win-core-rtlsupport-l1-1-0.dll", - "runtimes/win7-x64/native/api-ms-win-core-shlwapi-legacy-l1-1-0.dll", - "runtimes/win7-x64/native/api-ms-win-core-shlwapi-obsolete-l1-1-0.dll", - "runtimes/win7-x64/native/api-ms-win-core-shutdown-l1-1-0.dll", - "runtimes/win7-x64/native/api-ms-win-core-shutdown-l1-1-1.dll", - "runtimes/win7-x64/native/api-ms-win-core-string-l1-1-0.dll", - "runtimes/win7-x64/native/api-ms-win-core-string-obsolete-l1-1-0.dll", - "runtimes/win7-x64/native/api-ms-win-core-string-obsolete-l1-1-1.dll", - "runtimes/win7-x64/native/api-ms-win-core-stringloader-l1-1-0.dll", - "runtimes/win7-x64/native/api-ms-win-core-stringloader-l1-1-1.dll", - "runtimes/win7-x64/native/api-ms-win-core-synch-l1-1-0.dll", - "runtimes/win7-x64/native/api-ms-win-core-synch-l1-2-0.dll", - "runtimes/win7-x64/native/api-ms-win-core-sysinfo-l1-1-0.dll", - "runtimes/win7-x64/native/api-ms-win-core-sysinfo-l1-2-0.dll", - "runtimes/win7-x64/native/api-ms-win-core-sysinfo-l1-2-1.dll", - "runtimes/win7-x64/native/api-ms-win-core-sysinfo-l1-2-2.dll", - "runtimes/win7-x64/native/api-ms-win-core-sysinfo-l1-2-3.dll", - "runtimes/win7-x64/native/api-ms-win-core-threadpool-l1-2-0.dll", - "runtimes/win7-x64/native/api-ms-win-core-threadpool-legacy-l1-1-0.dll", - "runtimes/win7-x64/native/api-ms-win-core-threadpool-private-l1-1-0.dll", - "runtimes/win7-x64/native/api-ms-win-core-timezone-l1-1-0.dll", - "runtimes/win7-x64/native/api-ms-win-core-url-l1-1-0.dll", - "runtimes/win7-x64/native/api-ms-win-core-util-l1-1-0.dll", - "runtimes/win7-x64/native/api-ms-win-core-version-l1-1-0.dll", - "runtimes/win7-x64/native/api-ms-win-core-winrt-error-l1-1-0.dll", - "runtimes/win7-x64/native/api-ms-win-core-winrt-error-l1-1-1.dll", - "runtimes/win7-x64/native/api-ms-win-core-winrt-l1-1-0.dll", - "runtimes/win7-x64/native/api-ms-win-core-winrt-registration-l1-1-0.dll", - "runtimes/win7-x64/native/api-ms-win-core-winrt-robuffer-l1-1-0.dll", - "runtimes/win7-x64/native/api-ms-win-core-winrt-roparameterizediid-l1-1-0.dll", - "runtimes/win7-x64/native/api-ms-win-core-winrt-string-l1-1-0.dll", - "runtimes/win7-x64/native/api-ms-win-core-wow64-l1-1-0.dll", - "runtimes/win7-x64/native/api-ms-win-core-xstate-l1-1-0.dll", - "runtimes/win7-x64/native/api-ms-win-core-xstate-l2-1-0.dll", - "runtimes/win7-x64/native/api-ms-win-ro-typeresolution-l1-1-0.dll", - "runtimes/win7-x64/native/api-ms-win-security-base-l1-1-0.dll", - "runtimes/win7-x64/native/api-ms-win-security-cpwl-l1-1-0.dll", - "runtimes/win7-x64/native/api-ms-win-security-cryptoapi-l1-1-0.dll", - "runtimes/win7-x64/native/api-ms-win-security-lsalookup-l2-1-0.dll", - "runtimes/win7-x64/native/api-ms-win-security-lsalookup-l2-1-1.dll", - "runtimes/win7-x64/native/api-ms-win-security-provider-l1-1-0.dll", - "runtimes/win7-x64/native/api-ms-win-security-sddl-l1-1-0.dll", - "runtimes/win7-x64/native/api-ms-win-service-core-l1-1-0.dll", - "runtimes/win7-x64/native/api-ms-win-service-core-l1-1-1.dll", - "runtimes/win7-x64/native/api-ms-win-service-management-l1-1-0.dll", - "runtimes/win7-x64/native/api-ms-win-service-management-l2-1-0.dll", - "runtimes/win7-x64/native/api-ms-win-service-private-l1-1-0.dll", - "runtimes/win7-x64/native/api-ms-win-service-private-l1-1-1.dll", - "runtimes/win7-x64/native/api-ms-win-service-winsvc-l1-1-0.dll", - "runtimes/win7-x64/native/ext-ms-win-advapi32-encryptedfile-l1-1-0.dll", - "runtimes/win8-x64/native/API-MS-Win-Core-Kernel32-Private-L1-1-1.dll", - "runtimes/win8-x64/native/API-MS-Win-Core-Kernel32-Private-L1-1-2.dll", - "runtimes/win8-x64/native/API-MS-Win-devices-config-L1-1-1.dll", - "runtimes/win8-x64/native/api-ms-win-core-file-l1-2-1.dll", - "runtimes/win8-x64/native/api-ms-win-core-file-l2-1-1.dll", - "runtimes/win8-x64/native/api-ms-win-core-kernel32-legacy-l1-1-1.dll", - "runtimes/win8-x64/native/api-ms-win-core-kernel32-legacy-l1-1-2.dll", - "runtimes/win8-x64/native/api-ms-win-core-localization-l1-2-1.dll", - "runtimes/win8-x64/native/api-ms-win-core-localization-obsolete-l1-2-0.dll", - "runtimes/win8-x64/native/api-ms-win-core-memory-l1-1-2.dll", - "runtimes/win8-x64/native/api-ms-win-core-memory-l1-1-3.dll", - "runtimes/win8-x64/native/api-ms-win-core-namedpipe-l1-2-1.dll", - "runtimes/win8-x64/native/api-ms-win-core-privateprofile-l1-1-1.dll", - "runtimes/win8-x64/native/api-ms-win-core-processthreads-l1-1-2.dll", - "runtimes/win8-x64/native/api-ms-win-core-shutdown-l1-1-1.dll", - "runtimes/win8-x64/native/api-ms-win-core-string-obsolete-l1-1-1.dll", - "runtimes/win8-x64/native/api-ms-win-core-stringloader-l1-1-1.dll", - "runtimes/win8-x64/native/api-ms-win-core-sysinfo-l1-2-1.dll", - "runtimes/win8-x64/native/api-ms-win-core-sysinfo-l1-2-2.dll", - "runtimes/win8-x64/native/api-ms-win-core-sysinfo-l1-2-3.dll", - "runtimes/win8-x64/native/api-ms-win-core-winrt-error-l1-1-1.dll", - "runtimes/win8-x64/native/api-ms-win-core-xstate-l2-1-0.dll", - "runtimes/win8-x64/native/api-ms-win-security-cpwl-l1-1-0.dll", - "runtimes/win8-x64/native/api-ms-win-security-cryptoapi-l1-1-0.dll", - "runtimes/win8-x64/native/api-ms-win-security-lsalookup-l2-1-1.dll", - "runtimes/win8-x64/native/api-ms-win-service-private-l1-1-1.dll", - "runtimes/win81-x64/native/API-MS-Win-Core-Kernel32-Private-L1-1-2.dll", - "runtimes/win81-x64/native/api-ms-win-core-kernel32-legacy-l1-1-2.dll", - "runtimes/win81-x64/native/api-ms-win-core-memory-l1-1-3.dll", - "runtimes/win81-x64/native/api-ms-win-core-namedpipe-l1-2-1.dll", - "runtimes/win81-x64/native/api-ms-win-core-string-obsolete-l1-1-1.dll", - "runtimes/win81-x64/native/api-ms-win-core-sysinfo-l1-2-2.dll", - "runtimes/win81-x64/native/api-ms-win-core-sysinfo-l1-2-3.dll", - "runtimes/win81-x64/native/api-ms-win-security-cpwl-l1-1-0.dll" - ] - }, - "Microsoft.NETCore.Windows.ApiSets-x86/1.0.0": { - "sha512": "/HDRdhz5bZyhHwQ/uk/IbnDIX5VDTsHntEZYkTYo57dM+U3Ttel9/OJv0mjL64wTO/QKUJJNKp9XO+m7nSVjJQ==", - "type": "package", - "path": "Microsoft.NETCore.Windows.ApiSets-x86/1.0.0", - "files": [ - "Microsoft.NETCore.Windows.ApiSets-x86.1.0.0.nupkg.sha512", - "Microsoft.NETCore.Windows.ApiSets-x86.nuspec", - "runtimes/win10-x86/native/_._", - "runtimes/win7-x86/native/API-MS-Win-Base-Util-L1-1-0.dll", - "runtimes/win7-x86/native/API-MS-Win-Core-Kernel32-Private-L1-1-0.dll", - "runtimes/win7-x86/native/API-MS-Win-Core-Kernel32-Private-L1-1-1.dll", - "runtimes/win7-x86/native/API-MS-Win-Core-Kernel32-Private-L1-1-2.dll", - "runtimes/win7-x86/native/API-MS-Win-Core-PrivateProfile-L1-1-0.dll", - "runtimes/win7-x86/native/API-MS-Win-Core-ProcessTopology-Obsolete-L1-1-0.dll", - "runtimes/win7-x86/native/API-MS-Win-Core-String-L2-1-0.dll", - "runtimes/win7-x86/native/API-MS-Win-Core-StringAnsi-L1-1-0.dll", - "runtimes/win7-x86/native/API-MS-Win-EventLog-Legacy-L1-1-0.dll", - "runtimes/win7-x86/native/API-MS-Win-Eventing-ClassicProvider-L1-1-0.dll", - "runtimes/win7-x86/native/API-MS-Win-Eventing-Consumer-L1-1-0.dll", - "runtimes/win7-x86/native/API-MS-Win-Eventing-Controller-L1-1-0.dll", - "runtimes/win7-x86/native/API-MS-Win-Eventing-Legacy-L1-1-0.dll", - "runtimes/win7-x86/native/API-MS-Win-Eventing-Provider-L1-1-0.dll", - "runtimes/win7-x86/native/API-MS-Win-Security-LsaPolicy-L1-1-0.dll", - "runtimes/win7-x86/native/API-MS-Win-devices-config-L1-1-0.dll", - "runtimes/win7-x86/native/API-MS-Win-devices-config-L1-1-1.dll", - "runtimes/win7-x86/native/api-ms-win-core-com-l1-1-0.dll", - "runtimes/win7-x86/native/api-ms-win-core-com-private-l1-1-0.dll", - "runtimes/win7-x86/native/api-ms-win-core-comm-l1-1-0.dll", - "runtimes/win7-x86/native/api-ms-win-core-console-l1-1-0.dll", - "runtimes/win7-x86/native/api-ms-win-core-console-l2-1-0.dll", - "runtimes/win7-x86/native/api-ms-win-core-datetime-l1-1-0.dll", - "runtimes/win7-x86/native/api-ms-win-core-datetime-l1-1-1.dll", - "runtimes/win7-x86/native/api-ms-win-core-debug-l1-1-0.dll", - "runtimes/win7-x86/native/api-ms-win-core-debug-l1-1-1.dll", - "runtimes/win7-x86/native/api-ms-win-core-delayload-l1-1-0.dll", - "runtimes/win7-x86/native/api-ms-win-core-errorhandling-l1-1-0.dll", - "runtimes/win7-x86/native/api-ms-win-core-errorhandling-l1-1-1.dll", - "runtimes/win7-x86/native/api-ms-win-core-fibers-l1-1-0.dll", - "runtimes/win7-x86/native/api-ms-win-core-fibers-l1-1-1.dll", - "runtimes/win7-x86/native/api-ms-win-core-file-l1-1-0.dll", - "runtimes/win7-x86/native/api-ms-win-core-file-l1-2-0.dll", - "runtimes/win7-x86/native/api-ms-win-core-file-l1-2-1.dll", - "runtimes/win7-x86/native/api-ms-win-core-file-l2-1-0.dll", - "runtimes/win7-x86/native/api-ms-win-core-file-l2-1-1.dll", - "runtimes/win7-x86/native/api-ms-win-core-handle-l1-1-0.dll", - "runtimes/win7-x86/native/api-ms-win-core-heap-l1-1-0.dll", - "runtimes/win7-x86/native/api-ms-win-core-heap-obsolete-l1-1-0.dll", - "runtimes/win7-x86/native/api-ms-win-core-interlocked-l1-1-0.dll", - "runtimes/win7-x86/native/api-ms-win-core-io-l1-1-0.dll", - "runtimes/win7-x86/native/api-ms-win-core-io-l1-1-1.dll", - "runtimes/win7-x86/native/api-ms-win-core-kernel32-legacy-l1-1-0.dll", - "runtimes/win7-x86/native/api-ms-win-core-kernel32-legacy-l1-1-1.dll", - "runtimes/win7-x86/native/api-ms-win-core-kernel32-legacy-l1-1-2.dll", - "runtimes/win7-x86/native/api-ms-win-core-libraryloader-l1-1-0.dll", - "runtimes/win7-x86/native/api-ms-win-core-libraryloader-l1-1-1.dll", - "runtimes/win7-x86/native/api-ms-win-core-localization-l1-2-0.dll", - "runtimes/win7-x86/native/api-ms-win-core-localization-l1-2-1.dll", - "runtimes/win7-x86/native/api-ms-win-core-localization-l2-1-0.dll", - "runtimes/win7-x86/native/api-ms-win-core-localization-obsolete-l1-2-0.dll", - "runtimes/win7-x86/native/api-ms-win-core-memory-l1-1-0.dll", - "runtimes/win7-x86/native/api-ms-win-core-memory-l1-1-1.dll", - "runtimes/win7-x86/native/api-ms-win-core-memory-l1-1-2.dll", - "runtimes/win7-x86/native/api-ms-win-core-memory-l1-1-3.dll", - "runtimes/win7-x86/native/api-ms-win-core-namedpipe-l1-1-0.dll", - "runtimes/win7-x86/native/api-ms-win-core-namedpipe-l1-2-1.dll", - "runtimes/win7-x86/native/api-ms-win-core-normalization-l1-1-0.dll", - "runtimes/win7-x86/native/api-ms-win-core-privateprofile-l1-1-1.dll", - "runtimes/win7-x86/native/api-ms-win-core-processenvironment-l1-1-0.dll", - "runtimes/win7-x86/native/api-ms-win-core-processenvironment-l1-2-0.dll", - "runtimes/win7-x86/native/api-ms-win-core-processsecurity-l1-1-0.dll", - "runtimes/win7-x86/native/api-ms-win-core-processthreads-l1-1-0.dll", - "runtimes/win7-x86/native/api-ms-win-core-processthreads-l1-1-1.dll", - "runtimes/win7-x86/native/api-ms-win-core-processthreads-l1-1-2.dll", - "runtimes/win7-x86/native/api-ms-win-core-profile-l1-1-0.dll", - "runtimes/win7-x86/native/api-ms-win-core-psapi-ansi-l1-1-0.dll", - "runtimes/win7-x86/native/api-ms-win-core-psapi-l1-1-0.dll", - "runtimes/win7-x86/native/api-ms-win-core-psapi-obsolete-l1-1-0.dll", - "runtimes/win7-x86/native/api-ms-win-core-realtime-l1-1-0.dll", - "runtimes/win7-x86/native/api-ms-win-core-registry-l1-1-0.dll", - "runtimes/win7-x86/native/api-ms-win-core-registry-l2-1-0.dll", - "runtimes/win7-x86/native/api-ms-win-core-rtlsupport-l1-1-0.dll", - "runtimes/win7-x86/native/api-ms-win-core-shlwapi-legacy-l1-1-0.dll", - "runtimes/win7-x86/native/api-ms-win-core-shlwapi-obsolete-l1-1-0.dll", - "runtimes/win7-x86/native/api-ms-win-core-shutdown-l1-1-0.dll", - "runtimes/win7-x86/native/api-ms-win-core-shutdown-l1-1-1.dll", - "runtimes/win7-x86/native/api-ms-win-core-string-l1-1-0.dll", - "runtimes/win7-x86/native/api-ms-win-core-string-obsolete-l1-1-0.dll", - "runtimes/win7-x86/native/api-ms-win-core-string-obsolete-l1-1-1.dll", - "runtimes/win7-x86/native/api-ms-win-core-stringloader-l1-1-0.dll", - "runtimes/win7-x86/native/api-ms-win-core-stringloader-l1-1-1.dll", - "runtimes/win7-x86/native/api-ms-win-core-synch-l1-1-0.dll", - "runtimes/win7-x86/native/api-ms-win-core-synch-l1-2-0.dll", - "runtimes/win7-x86/native/api-ms-win-core-sysinfo-l1-1-0.dll", - "runtimes/win7-x86/native/api-ms-win-core-sysinfo-l1-2-0.dll", - "runtimes/win7-x86/native/api-ms-win-core-sysinfo-l1-2-1.dll", - "runtimes/win7-x86/native/api-ms-win-core-sysinfo-l1-2-2.dll", - "runtimes/win7-x86/native/api-ms-win-core-sysinfo-l1-2-3.dll", - "runtimes/win7-x86/native/api-ms-win-core-threadpool-l1-2-0.dll", - "runtimes/win7-x86/native/api-ms-win-core-threadpool-legacy-l1-1-0.dll", - "runtimes/win7-x86/native/api-ms-win-core-threadpool-private-l1-1-0.dll", - "runtimes/win7-x86/native/api-ms-win-core-timezone-l1-1-0.dll", - "runtimes/win7-x86/native/api-ms-win-core-url-l1-1-0.dll", - "runtimes/win7-x86/native/api-ms-win-core-util-l1-1-0.dll", - "runtimes/win7-x86/native/api-ms-win-core-version-l1-1-0.dll", - "runtimes/win7-x86/native/api-ms-win-core-winrt-error-l1-1-0.dll", - "runtimes/win7-x86/native/api-ms-win-core-winrt-error-l1-1-1.dll", - "runtimes/win7-x86/native/api-ms-win-core-winrt-l1-1-0.dll", - "runtimes/win7-x86/native/api-ms-win-core-winrt-registration-l1-1-0.dll", - "runtimes/win7-x86/native/api-ms-win-core-winrt-robuffer-l1-1-0.dll", - "runtimes/win7-x86/native/api-ms-win-core-winrt-roparameterizediid-l1-1-0.dll", - "runtimes/win7-x86/native/api-ms-win-core-winrt-string-l1-1-0.dll", - "runtimes/win7-x86/native/api-ms-win-core-wow64-l1-1-0.dll", - "runtimes/win7-x86/native/api-ms-win-core-xstate-l1-1-0.dll", - "runtimes/win7-x86/native/api-ms-win-core-xstate-l2-1-0.dll", - "runtimes/win7-x86/native/api-ms-win-ro-typeresolution-l1-1-0.dll", - "runtimes/win7-x86/native/api-ms-win-security-base-l1-1-0.dll", - "runtimes/win7-x86/native/api-ms-win-security-cpwl-l1-1-0.dll", - "runtimes/win7-x86/native/api-ms-win-security-cryptoapi-l1-1-0.dll", - "runtimes/win7-x86/native/api-ms-win-security-lsalookup-l2-1-0.dll", - "runtimes/win7-x86/native/api-ms-win-security-lsalookup-l2-1-1.dll", - "runtimes/win7-x86/native/api-ms-win-security-provider-l1-1-0.dll", - "runtimes/win7-x86/native/api-ms-win-security-sddl-l1-1-0.dll", - "runtimes/win7-x86/native/api-ms-win-service-core-l1-1-0.dll", - "runtimes/win7-x86/native/api-ms-win-service-core-l1-1-1.dll", - "runtimes/win7-x86/native/api-ms-win-service-management-l1-1-0.dll", - "runtimes/win7-x86/native/api-ms-win-service-management-l2-1-0.dll", - "runtimes/win7-x86/native/api-ms-win-service-private-l1-1-0.dll", - "runtimes/win7-x86/native/api-ms-win-service-private-l1-1-1.dll", - "runtimes/win7-x86/native/api-ms-win-service-winsvc-l1-1-0.dll", - "runtimes/win7-x86/native/ext-ms-win-advapi32-encryptedfile-l1-1-0.dll", - "runtimes/win8-x86/native/API-MS-Win-Core-Kernel32-Private-L1-1-1.dll", - "runtimes/win8-x86/native/API-MS-Win-Core-Kernel32-Private-L1-1-2.dll", - "runtimes/win8-x86/native/API-MS-Win-devices-config-L1-1-1.dll", - "runtimes/win8-x86/native/api-ms-win-core-file-l1-2-1.dll", - "runtimes/win8-x86/native/api-ms-win-core-file-l2-1-1.dll", - "runtimes/win8-x86/native/api-ms-win-core-kernel32-legacy-l1-1-1.dll", - "runtimes/win8-x86/native/api-ms-win-core-kernel32-legacy-l1-1-2.dll", - "runtimes/win8-x86/native/api-ms-win-core-localization-l1-2-1.dll", - "runtimes/win8-x86/native/api-ms-win-core-localization-obsolete-l1-2-0.dll", - "runtimes/win8-x86/native/api-ms-win-core-memory-l1-1-2.dll", - "runtimes/win8-x86/native/api-ms-win-core-memory-l1-1-3.dll", - "runtimes/win8-x86/native/api-ms-win-core-namedpipe-l1-2-1.dll", - "runtimes/win8-x86/native/api-ms-win-core-privateprofile-l1-1-1.dll", - "runtimes/win8-x86/native/api-ms-win-core-processthreads-l1-1-2.dll", - "runtimes/win8-x86/native/api-ms-win-core-shutdown-l1-1-1.dll", - "runtimes/win8-x86/native/api-ms-win-core-string-obsolete-l1-1-1.dll", - "runtimes/win8-x86/native/api-ms-win-core-stringloader-l1-1-1.dll", - "runtimes/win8-x86/native/api-ms-win-core-sysinfo-l1-2-1.dll", - "runtimes/win8-x86/native/api-ms-win-core-sysinfo-l1-2-2.dll", - "runtimes/win8-x86/native/api-ms-win-core-sysinfo-l1-2-3.dll", - "runtimes/win8-x86/native/api-ms-win-core-winrt-error-l1-1-1.dll", - "runtimes/win8-x86/native/api-ms-win-core-xstate-l2-1-0.dll", - "runtimes/win8-x86/native/api-ms-win-security-cpwl-l1-1-0.dll", - "runtimes/win8-x86/native/api-ms-win-security-cryptoapi-l1-1-0.dll", - "runtimes/win8-x86/native/api-ms-win-security-lsalookup-l2-1-1.dll", - "runtimes/win8-x86/native/api-ms-win-service-private-l1-1-1.dll", - "runtimes/win81-x86/native/API-MS-Win-Core-Kernel32-Private-L1-1-2.dll", - "runtimes/win81-x86/native/api-ms-win-core-kernel32-legacy-l1-1-2.dll", - "runtimes/win81-x86/native/api-ms-win-core-memory-l1-1-3.dll", - "runtimes/win81-x86/native/api-ms-win-core-namedpipe-l1-2-1.dll", - "runtimes/win81-x86/native/api-ms-win-core-string-obsolete-l1-1-1.dll", - "runtimes/win81-x86/native/api-ms-win-core-sysinfo-l1-2-2.dll", - "runtimes/win81-x86/native/api-ms-win-core-sysinfo-l1-2-3.dll", - "runtimes/win81-x86/native/api-ms-win-security-cpwl-l1-1-0.dll" - ] - }, - "Microsoft.VisualBasic/10.0.0": { - "sha512": "5BEm2/HAVd97whRlCChU7rmSh/9cwGlZ/NTNe3Jl07zuPWfKQq5TUvVNUmdvmEe8QRecJLZ4/e7WF1i1O8V42g==", - "type": "package", - "path": "Microsoft.VisualBasic/10.0.0", - "files": [ - "Microsoft.VisualBasic.10.0.0.nupkg.sha512", - "Microsoft.VisualBasic.nuspec", - "lib/dotnet/Microsoft.VisualBasic.dll", - "lib/net45/_._", - "lib/netcore50/Microsoft.VisualBasic.dll", - "lib/win8/_._", - "lib/wpa81/_._", - "ref/dotnet/Microsoft.VisualBasic.dll", - "ref/dotnet/Microsoft.VisualBasic.xml", - "ref/dotnet/de/Microsoft.VisualBasic.xml", - "ref/dotnet/es/Microsoft.VisualBasic.xml", - "ref/dotnet/fr/Microsoft.VisualBasic.xml", - "ref/dotnet/it/Microsoft.VisualBasic.xml", - "ref/dotnet/ja/Microsoft.VisualBasic.xml", - "ref/dotnet/ko/Microsoft.VisualBasic.xml", - "ref/dotnet/ru/Microsoft.VisualBasic.xml", - "ref/dotnet/zh-hans/Microsoft.VisualBasic.xml", - "ref/dotnet/zh-hant/Microsoft.VisualBasic.xml", - "ref/net45/_._", - "ref/netcore50/Microsoft.VisualBasic.dll", - "ref/netcore50/Microsoft.VisualBasic.xml", - "ref/win8/_._", - "ref/wpa81/_._" - ] - }, - "Microsoft.Win32.Primitives/4.0.0": { - "sha512": "CypEz9/lLOup8CEhiAmvr7aLs1zKPYyEU1sxQeEr6G0Ci8/F0Y6pYR1zzkROjM8j8Mq0typmbu676oYyvErQvg==", - "type": "package", - "path": "Microsoft.Win32.Primitives/4.0.0", - "files": [ - "Microsoft.Win32.Primitives.4.0.0.nupkg.sha512", - "Microsoft.Win32.Primitives.nuspec", - "lib/MonoAndroid10/_._", - "lib/MonoTouch10/_._", - "lib/dotnet/Microsoft.Win32.Primitives.dll", - "lib/net46/Microsoft.Win32.Primitives.dll", - "lib/xamarinios10/_._", - "lib/xamarinmac20/_._", - "ref/MonoAndroid10/_._", - "ref/MonoTouch10/_._", - "ref/dotnet/Microsoft.Win32.Primitives.dll", - "ref/dotnet/Microsoft.Win32.Primitives.xml", - "ref/dotnet/de/Microsoft.Win32.Primitives.xml", - "ref/dotnet/es/Microsoft.Win32.Primitives.xml", - "ref/dotnet/fr/Microsoft.Win32.Primitives.xml", - "ref/dotnet/it/Microsoft.Win32.Primitives.xml", - "ref/dotnet/ja/Microsoft.Win32.Primitives.xml", - "ref/dotnet/ko/Microsoft.Win32.Primitives.xml", - "ref/dotnet/ru/Microsoft.Win32.Primitives.xml", - "ref/dotnet/zh-hans/Microsoft.Win32.Primitives.xml", - "ref/dotnet/zh-hant/Microsoft.Win32.Primitives.xml", - "ref/net46/Microsoft.Win32.Primitives.dll", - "ref/xamarinios10/_._", - "ref/xamarinmac20/_._" - ] - }, - "System.AppContext/4.0.0": { - "sha512": "gUoYgAWDC3+xhKeU5KSLbYDhTdBYk9GssrMSCcWUADzOglW+s0AmwVhOUGt2tL5xUl7ZXoYTPdA88zCgKrlG0A==", - "type": "package", - "path": "System.AppContext/4.0.0", - "files": [ - "System.AppContext.4.0.0.nupkg.sha512", - "System.AppContext.nuspec", - "lib/DNXCore50/System.AppContext.dll", - "lib/MonoAndroid10/_._", - "lib/MonoTouch10/_._", - "lib/net46/System.AppContext.dll", - "lib/netcore50/System.AppContext.dll", - "lib/xamarinios10/_._", - "lib/xamarinmac20/_._", - "ref/MonoAndroid10/_._", - "ref/MonoTouch10/_._", - "ref/dotnet/System.AppContext.dll", - "ref/dotnet/System.AppContext.xml", - "ref/dotnet/de/System.AppContext.xml", - "ref/dotnet/es/System.AppContext.xml", - "ref/dotnet/fr/System.AppContext.xml", - "ref/dotnet/it/System.AppContext.xml", - "ref/dotnet/ja/System.AppContext.xml", - "ref/dotnet/ko/System.AppContext.xml", - "ref/dotnet/ru/System.AppContext.xml", - "ref/dotnet/zh-hans/System.AppContext.xml", - "ref/dotnet/zh-hant/System.AppContext.xml", - "ref/net46/System.AppContext.dll", - "ref/xamarinios10/_._", - "ref/xamarinmac20/_._" - ] - }, - "System.Collections/4.0.10": { - "sha512": "ux6ilcZZjV/Gp7JEZpe+2V1eTueq6NuoGRM3eZCFuPM25hLVVgCRuea6STW8hvqreIOE59irJk5/ovpA5xQipw==", - "type": "package", - "path": "System.Collections/4.0.10", - "files": [ - "System.Collections.4.0.10.nupkg.sha512", - "System.Collections.nuspec", - "lib/DNXCore50/System.Collections.dll", - "lib/MonoAndroid10/_._", - "lib/MonoTouch10/_._", - "lib/net46/_._", - "lib/netcore50/System.Collections.dll", - "lib/xamarinios10/_._", - "lib/xamarinmac20/_._", - "ref/MonoAndroid10/_._", - "ref/MonoTouch10/_._", - "ref/dotnet/System.Collections.dll", - "ref/dotnet/System.Collections.xml", - "ref/dotnet/de/System.Collections.xml", - "ref/dotnet/es/System.Collections.xml", - "ref/dotnet/fr/System.Collections.xml", - "ref/dotnet/it/System.Collections.xml", - "ref/dotnet/ja/System.Collections.xml", - "ref/dotnet/ko/System.Collections.xml", - "ref/dotnet/ru/System.Collections.xml", - "ref/dotnet/zh-hans/System.Collections.xml", - "ref/dotnet/zh-hant/System.Collections.xml", - "ref/net46/_._", - "ref/xamarinios10/_._", - "ref/xamarinmac20/_._", - "runtimes/win8-aot/lib/netcore50/System.Collections.dll" - ] - }, - "System.Collections.Concurrent/4.0.10": { - "sha512": "ZtMEqOPAjAIqR8fqom9AOKRaB94a+emO2O8uOP6vyJoNswSPrbiwN7iH53rrVpvjMVx0wr4/OMpI7486uGZjbw==", - "type": "package", - "path": "System.Collections.Concurrent/4.0.10", - "files": [ - "System.Collections.Concurrent.4.0.10.nupkg.sha512", - "System.Collections.Concurrent.nuspec", - "lib/MonoAndroid10/_._", - "lib/MonoTouch10/_._", - "lib/dotnet/System.Collections.Concurrent.dll", - "lib/net46/_._", - "lib/xamarinios10/_._", - "lib/xamarinmac20/_._", - "ref/MonoAndroid10/_._", - "ref/MonoTouch10/_._", - "ref/dotnet/System.Collections.Concurrent.dll", - "ref/dotnet/System.Collections.Concurrent.xml", - "ref/dotnet/de/System.Collections.Concurrent.xml", - "ref/dotnet/es/System.Collections.Concurrent.xml", - "ref/dotnet/fr/System.Collections.Concurrent.xml", - "ref/dotnet/it/System.Collections.Concurrent.xml", - "ref/dotnet/ja/System.Collections.Concurrent.xml", - "ref/dotnet/ko/System.Collections.Concurrent.xml", - "ref/dotnet/ru/System.Collections.Concurrent.xml", - "ref/dotnet/zh-hans/System.Collections.Concurrent.xml", - "ref/dotnet/zh-hant/System.Collections.Concurrent.xml", - "ref/net46/_._", - "ref/xamarinios10/_._", - "ref/xamarinmac20/_._" - ] - }, - "System.Collections.Immutable/1.1.37": { - "sha512": "fTpqwZYBzoklTT+XjTRK8KxvmrGkYHzBiylCcKyQcxiOM8k+QvhNBxRvFHDWzy4OEP5f8/9n+xQ9mEgEXY+muA==", - "type": "package", - "path": "System.Collections.Immutable/1.1.37", - "files": [ - "System.Collections.Immutable.1.1.37.nupkg.sha512", - "System.Collections.Immutable.nuspec", - "lib/dotnet/System.Collections.Immutable.dll", - "lib/dotnet/System.Collections.Immutable.xml", - "lib/portable-net45+win8+wp8+wpa81/System.Collections.Immutable.dll", - "lib/portable-net45+win8+wp8+wpa81/System.Collections.Immutable.xml" - ] - }, - "System.Collections.NonGeneric/4.0.0": { - "sha512": "rVgwrFBMkmp8LI6GhAYd6Bx+2uLIXjRfNg6Ie+ASfX8ESuh9e2HNxFy2yh1MPIXZq3OAYa+0mmULVwpnEC6UDA==", - "type": "package", - "path": "System.Collections.NonGeneric/4.0.0", - "files": [ - "System.Collections.NonGeneric.4.0.0.nupkg.sha512", - "System.Collections.NonGeneric.nuspec", - "lib/MonoAndroid10/_._", - "lib/MonoTouch10/_._", - "lib/dotnet/System.Collections.NonGeneric.dll", - "lib/net46/System.Collections.NonGeneric.dll", - "lib/xamarinios10/_._", - "lib/xamarinmac20/_._", - "ref/MonoAndroid10/_._", - "ref/MonoTouch10/_._", - "ref/dotnet/System.Collections.NonGeneric.dll", - "ref/dotnet/System.Collections.NonGeneric.xml", - "ref/dotnet/de/System.Collections.NonGeneric.xml", - "ref/dotnet/es/System.Collections.NonGeneric.xml", - "ref/dotnet/fr/System.Collections.NonGeneric.xml", - "ref/dotnet/it/System.Collections.NonGeneric.xml", - "ref/dotnet/ja/System.Collections.NonGeneric.xml", - "ref/dotnet/ko/System.Collections.NonGeneric.xml", - "ref/dotnet/ru/System.Collections.NonGeneric.xml", - "ref/dotnet/zh-hans/System.Collections.NonGeneric.xml", - "ref/dotnet/zh-hant/System.Collections.NonGeneric.xml", - "ref/net46/System.Collections.NonGeneric.dll", - "ref/xamarinios10/_._", - "ref/xamarinmac20/_._" - ] - }, - "System.ComponentModel/4.0.0": { - "sha512": "BzpLdSi++ld7rJLOOt5f/G9GxujP202bBgKORsHcGV36rLB0mfSA2h8chTMoBzFhgN7TE14TmJ2J7Q1RyNCTAw==", - "type": "package", - "path": "System.ComponentModel/4.0.0", - "files": [ - "System.ComponentModel.4.0.0.nupkg.sha512", - "System.ComponentModel.nuspec", - "lib/dotnet/System.ComponentModel.dll", - "lib/net45/_._", - "lib/netcore50/System.ComponentModel.dll", - "lib/win8/_._", - "lib/wp80/_._", - "lib/wpa81/_._", - "ref/dotnet/System.ComponentModel.dll", - "ref/dotnet/System.ComponentModel.xml", - "ref/dotnet/de/System.ComponentModel.xml", - "ref/dotnet/es/System.ComponentModel.xml", - "ref/dotnet/fr/System.ComponentModel.xml", - "ref/dotnet/it/System.ComponentModel.xml", - "ref/dotnet/ja/System.ComponentModel.xml", - "ref/dotnet/ko/System.ComponentModel.xml", - "ref/dotnet/ru/System.ComponentModel.xml", - "ref/dotnet/zh-hans/System.ComponentModel.xml", - "ref/dotnet/zh-hant/System.ComponentModel.xml", - "ref/net45/_._", - "ref/netcore50/System.ComponentModel.dll", - "ref/netcore50/System.ComponentModel.xml", - "ref/win8/_._", - "ref/wp80/_._", - "ref/wpa81/_._" - ] - }, - "System.ComponentModel.Annotations/4.0.10": { - "sha512": "7+XGyEZx24nP1kpHxCB9e+c6D0fdVDvFwE1xujE9BzlXyNVcy5J5aIO0H/ECupx21QpyRvzZibGAHfL/XLL6dw==", - "type": "package", - "path": "System.ComponentModel.Annotations/4.0.10", - "files": [ - "System.ComponentModel.Annotations.4.0.10.nupkg.sha512", - "System.ComponentModel.Annotations.nuspec", - "lib/MonoAndroid10/_._", - "lib/MonoTouch10/_._", - "lib/dotnet/System.ComponentModel.Annotations.dll", - "lib/net46/_._", - "lib/xamarinios10/_._", - "lib/xamarinmac20/_._", - "ref/MonoAndroid10/_._", - "ref/MonoTouch10/_._", - "ref/dotnet/System.ComponentModel.Annotations.dll", - "ref/dotnet/System.ComponentModel.Annotations.xml", - "ref/dotnet/de/System.ComponentModel.Annotations.xml", - "ref/dotnet/es/System.ComponentModel.Annotations.xml", - "ref/dotnet/fr/System.ComponentModel.Annotations.xml", - "ref/dotnet/it/System.ComponentModel.Annotations.xml", - "ref/dotnet/ja/System.ComponentModel.Annotations.xml", - "ref/dotnet/ko/System.ComponentModel.Annotations.xml", - "ref/dotnet/ru/System.ComponentModel.Annotations.xml", - "ref/dotnet/zh-hans/System.ComponentModel.Annotations.xml", - "ref/dotnet/zh-hant/System.ComponentModel.Annotations.xml", - "ref/net46/_._", - "ref/xamarinios10/_._", - "ref/xamarinmac20/_._" - ] - }, - "System.ComponentModel.EventBasedAsync/4.0.10": { - "sha512": "d6kXcHUgP0jSPXEQ6hXJYCO6CzfoCi7t9vR3BfjSQLrj4HzpuATpx1gkN7itmTW1O+wjuw6rai4378Nj6N70yw==", - "type": "package", - "path": "System.ComponentModel.EventBasedAsync/4.0.10", - "files": [ - "System.ComponentModel.EventBasedAsync.4.0.10.nupkg.sha512", - "System.ComponentModel.EventBasedAsync.nuspec", - "lib/MonoAndroid10/_._", - "lib/MonoTouch10/_._", - "lib/dotnet/System.ComponentModel.EventBasedAsync.dll", - "lib/net46/_._", - "lib/xamarinios10/_._", - "lib/xamarinmac20/_._", - "ref/MonoAndroid10/_._", - "ref/MonoTouch10/_._", - "ref/dotnet/System.ComponentModel.EventBasedAsync.dll", - "ref/dotnet/System.ComponentModel.EventBasedAsync.xml", - "ref/dotnet/de/System.ComponentModel.EventBasedAsync.xml", - "ref/dotnet/es/System.ComponentModel.EventBasedAsync.xml", - "ref/dotnet/fr/System.ComponentModel.EventBasedAsync.xml", - "ref/dotnet/it/System.ComponentModel.EventBasedAsync.xml", - "ref/dotnet/ja/System.ComponentModel.EventBasedAsync.xml", - "ref/dotnet/ko/System.ComponentModel.EventBasedAsync.xml", - "ref/dotnet/ru/System.ComponentModel.EventBasedAsync.xml", - "ref/dotnet/zh-hans/System.ComponentModel.EventBasedAsync.xml", - "ref/dotnet/zh-hant/System.ComponentModel.EventBasedAsync.xml", - "ref/net46/_._", - "ref/xamarinios10/_._", - "ref/xamarinmac20/_._" - ] - }, - "System.Diagnostics.Contracts/4.0.0": { - "sha512": "lMc7HNmyIsu0pKTdA4wf+FMq5jvouUd+oUpV4BdtyqoV0Pkbg9u/7lTKFGqpjZRQosWHq1+B32Lch2wf4AmloA==", - "type": "package", - "path": "System.Diagnostics.Contracts/4.0.0", - "files": [ - "System.Diagnostics.Contracts.4.0.0.nupkg.sha512", - "System.Diagnostics.Contracts.nuspec", - "lib/DNXCore50/System.Diagnostics.Contracts.dll", - "lib/net45/_._", - "lib/netcore50/System.Diagnostics.Contracts.dll", - "lib/win8/_._", - "lib/wp80/_._", - "lib/wpa81/_._", - "ref/dotnet/System.Diagnostics.Contracts.dll", - "ref/dotnet/System.Diagnostics.Contracts.xml", - "ref/dotnet/de/System.Diagnostics.Contracts.xml", - "ref/dotnet/es/System.Diagnostics.Contracts.xml", - "ref/dotnet/fr/System.Diagnostics.Contracts.xml", - "ref/dotnet/it/System.Diagnostics.Contracts.xml", - "ref/dotnet/ja/System.Diagnostics.Contracts.xml", - "ref/dotnet/ko/System.Diagnostics.Contracts.xml", - "ref/dotnet/ru/System.Diagnostics.Contracts.xml", - "ref/dotnet/zh-hans/System.Diagnostics.Contracts.xml", - "ref/dotnet/zh-hant/System.Diagnostics.Contracts.xml", - "ref/net45/_._", - "ref/netcore50/System.Diagnostics.Contracts.dll", - "ref/netcore50/System.Diagnostics.Contracts.xml", - "ref/win8/_._", - "ref/wp80/_._", - "ref/wpa81/_._", - "runtimes/win8-aot/lib/netcore50/System.Diagnostics.Contracts.dll" - ] - }, - "System.Diagnostics.Debug/4.0.10": { - "sha512": "pi2KthuvI2LWV2c2V+fwReDsDiKpNl040h6DcwFOb59SafsPT/V1fCy0z66OKwysurJkBMmp5j5CBe3Um+ub0g==", - "type": "package", - "path": "System.Diagnostics.Debug/4.0.10", - "files": [ - "System.Diagnostics.Debug.4.0.10.nupkg.sha512", - "System.Diagnostics.Debug.nuspec", - "lib/DNXCore50/System.Diagnostics.Debug.dll", - "lib/MonoAndroid10/_._", - "lib/MonoTouch10/_._", - "lib/net46/_._", - "lib/netcore50/System.Diagnostics.Debug.dll", - "lib/xamarinios10/_._", - "lib/xamarinmac20/_._", - "ref/MonoAndroid10/_._", - "ref/MonoTouch10/_._", - "ref/dotnet/System.Diagnostics.Debug.dll", - "ref/dotnet/System.Diagnostics.Debug.xml", - "ref/dotnet/de/System.Diagnostics.Debug.xml", - "ref/dotnet/es/System.Diagnostics.Debug.xml", - "ref/dotnet/fr/System.Diagnostics.Debug.xml", - "ref/dotnet/it/System.Diagnostics.Debug.xml", - "ref/dotnet/ja/System.Diagnostics.Debug.xml", - "ref/dotnet/ko/System.Diagnostics.Debug.xml", - "ref/dotnet/ru/System.Diagnostics.Debug.xml", - "ref/dotnet/zh-hans/System.Diagnostics.Debug.xml", - "ref/dotnet/zh-hant/System.Diagnostics.Debug.xml", - "ref/net46/_._", - "ref/xamarinios10/_._", - "ref/xamarinmac20/_._", - "runtimes/win8-aot/lib/netcore50/System.Diagnostics.Debug.dll" - ] - }, - "System.Diagnostics.StackTrace/4.0.0": { - "sha512": "PItgenqpRiMqErvQONBlfDwctKpWVrcDSW5pppNZPJ6Bpiyz+KjsWoSiaqs5dt03HEbBTMNCrZb8KCkh7YfXmw==", - "type": "package", - "path": "System.Diagnostics.StackTrace/4.0.0", - "files": [ - "System.Diagnostics.StackTrace.4.0.0.nupkg.sha512", - "System.Diagnostics.StackTrace.nuspec", - "lib/DNXCore50/System.Diagnostics.StackTrace.dll", - "lib/MonoAndroid10/_._", - "lib/MonoTouch10/_._", - "lib/net46/System.Diagnostics.StackTrace.dll", - "lib/netcore50/System.Diagnostics.StackTrace.dll", - "lib/xamarinios10/_._", - "lib/xamarinmac20/_._", - "ref/MonoAndroid10/_._", - "ref/MonoTouch10/_._", - "ref/dotnet/System.Diagnostics.StackTrace.dll", - "ref/dotnet/System.Diagnostics.StackTrace.xml", - "ref/dotnet/de/System.Diagnostics.StackTrace.xml", - "ref/dotnet/es/System.Diagnostics.StackTrace.xml", - "ref/dotnet/fr/System.Diagnostics.StackTrace.xml", - "ref/dotnet/it/System.Diagnostics.StackTrace.xml", - "ref/dotnet/ja/System.Diagnostics.StackTrace.xml", - "ref/dotnet/ko/System.Diagnostics.StackTrace.xml", - "ref/dotnet/ru/System.Diagnostics.StackTrace.xml", - "ref/dotnet/zh-hans/System.Diagnostics.StackTrace.xml", - "ref/dotnet/zh-hant/System.Diagnostics.StackTrace.xml", - "ref/net46/System.Diagnostics.StackTrace.dll", - "ref/xamarinios10/_._", - "ref/xamarinmac20/_._", - "runtimes/win8-aot/lib/netcore50/System.Diagnostics.StackTrace.dll" - ] - }, - "System.Diagnostics.Tools/4.0.0": { - "sha512": "uw5Qi2u5Cgtv4xv3+8DeB63iaprPcaEHfpeJqlJiLjIVy6v0La4ahJ6VW9oPbJNIjcavd24LKq0ctT9ssuQXsw==", - "type": "package", - "path": "System.Diagnostics.Tools/4.0.0", - "files": [ - "System.Diagnostics.Tools.4.0.0.nupkg.sha512", - "System.Diagnostics.Tools.nuspec", - "lib/DNXCore50/System.Diagnostics.Tools.dll", - "lib/net45/_._", - "lib/netcore50/System.Diagnostics.Tools.dll", - "lib/win8/_._", - "lib/wp80/_._", - "lib/wpa81/_._", - "ref/dotnet/System.Diagnostics.Tools.dll", - "ref/dotnet/System.Diagnostics.Tools.xml", - "ref/dotnet/de/System.Diagnostics.Tools.xml", - "ref/dotnet/es/System.Diagnostics.Tools.xml", - "ref/dotnet/fr/System.Diagnostics.Tools.xml", - "ref/dotnet/it/System.Diagnostics.Tools.xml", - "ref/dotnet/ja/System.Diagnostics.Tools.xml", - "ref/dotnet/ko/System.Diagnostics.Tools.xml", - "ref/dotnet/ru/System.Diagnostics.Tools.xml", - "ref/dotnet/zh-hans/System.Diagnostics.Tools.xml", - "ref/dotnet/zh-hant/System.Diagnostics.Tools.xml", - "ref/net45/_._", - "ref/netcore50/System.Diagnostics.Tools.dll", - "ref/netcore50/System.Diagnostics.Tools.xml", - "ref/win8/_._", - "ref/wp80/_._", - "ref/wpa81/_._", - "runtimes/win8-aot/lib/netcore50/System.Diagnostics.Tools.dll" - ] - }, - "System.Diagnostics.Tracing/4.0.20": { - "sha512": "gn/wexGHc35Fv++5L1gYHMY5g25COfiZ0PGrL+3PfwzoJd4X2LbTAm/U8d385SI6BKQBI/z4dQfvneS9J27+Tw==", - "type": "package", - "path": "System.Diagnostics.Tracing/4.0.20", - "files": [ - "System.Diagnostics.Tracing.4.0.20.nupkg.sha512", - "System.Diagnostics.Tracing.nuspec", - "lib/DNXCore50/System.Diagnostics.Tracing.dll", - "lib/MonoAndroid10/_._", - "lib/MonoTouch10/_._", - "lib/net46/_._", - "lib/netcore50/System.Diagnostics.Tracing.dll", - "lib/xamarinios10/_._", - "lib/xamarinmac20/_._", - "ref/MonoAndroid10/_._", - "ref/MonoTouch10/_._", - "ref/dotnet/System.Diagnostics.Tracing.dll", - "ref/dotnet/System.Diagnostics.Tracing.xml", - "ref/dotnet/de/System.Diagnostics.Tracing.xml", - "ref/dotnet/es/System.Diagnostics.Tracing.xml", - "ref/dotnet/fr/System.Diagnostics.Tracing.xml", - "ref/dotnet/it/System.Diagnostics.Tracing.xml", - "ref/dotnet/ja/System.Diagnostics.Tracing.xml", - "ref/dotnet/ko/System.Diagnostics.Tracing.xml", - "ref/dotnet/ru/System.Diagnostics.Tracing.xml", - "ref/dotnet/zh-hans/System.Diagnostics.Tracing.xml", - "ref/dotnet/zh-hant/System.Diagnostics.Tracing.xml", - "ref/net46/_._", - "ref/xamarinios10/_._", - "ref/xamarinmac20/_._", - "runtimes/win8-aot/lib/netcore50/System.Diagnostics.Tracing.dll" - ] - }, - "System.Dynamic.Runtime/4.0.10": { - "sha512": "r10VTLdlxtYp46BuxomHnwx7vIoMOr04CFoC/jJJfY22f7HQQ4P+cXY2Nxo6/rIxNNqOxwdbQQwv7Gl88Jsu1w==", - "type": "package", - "path": "System.Dynamic.Runtime/4.0.10", - "files": [ - "System.Dynamic.Runtime.4.0.10.nupkg.sha512", - "System.Dynamic.Runtime.nuspec", - "lib/DNXCore50/System.Dynamic.Runtime.dll", - "lib/MonoAndroid10/_._", - "lib/MonoTouch10/_._", - "lib/net46/_._", - "lib/netcore50/System.Dynamic.Runtime.dll", - "lib/xamarinios10/_._", - "lib/xamarinmac20/_._", - "ref/MonoAndroid10/_._", - "ref/MonoTouch10/_._", - "ref/dotnet/System.Dynamic.Runtime.dll", - "ref/dotnet/System.Dynamic.Runtime.xml", - "ref/dotnet/de/System.Dynamic.Runtime.xml", - "ref/dotnet/es/System.Dynamic.Runtime.xml", - "ref/dotnet/fr/System.Dynamic.Runtime.xml", - "ref/dotnet/it/System.Dynamic.Runtime.xml", - "ref/dotnet/ja/System.Dynamic.Runtime.xml", - "ref/dotnet/ko/System.Dynamic.Runtime.xml", - "ref/dotnet/ru/System.Dynamic.Runtime.xml", - "ref/dotnet/zh-hans/System.Dynamic.Runtime.xml", - "ref/dotnet/zh-hant/System.Dynamic.Runtime.xml", - "ref/net46/_._", - "ref/xamarinios10/_._", - "ref/xamarinmac20/_._", - "runtime.json", - "runtimes/win8-aot/lib/netcore50/System.Dynamic.Runtime.dll" - ] - }, - "System.Globalization/4.0.10": { - "sha512": "kzRtbbCNAxdafFBDogcM36ehA3th8c1PGiz8QRkZn8O5yMBorDHSK8/TGJPYOaCS5zdsGk0u9qXHnW91nqy7fw==", - "type": "package", - "path": "System.Globalization/4.0.10", - "files": [ - "System.Globalization.4.0.10.nupkg.sha512", - "System.Globalization.nuspec", - "lib/DNXCore50/System.Globalization.dll", - "lib/MonoAndroid10/_._", - "lib/MonoTouch10/_._", - "lib/net46/_._", - "lib/netcore50/System.Globalization.dll", - "lib/xamarinios10/_._", - "lib/xamarinmac20/_._", - "ref/MonoAndroid10/_._", - "ref/MonoTouch10/_._", - "ref/dotnet/System.Globalization.dll", - "ref/dotnet/System.Globalization.xml", - "ref/dotnet/de/System.Globalization.xml", - "ref/dotnet/es/System.Globalization.xml", - "ref/dotnet/fr/System.Globalization.xml", - "ref/dotnet/it/System.Globalization.xml", - "ref/dotnet/ja/System.Globalization.xml", - "ref/dotnet/ko/System.Globalization.xml", - "ref/dotnet/ru/System.Globalization.xml", - "ref/dotnet/zh-hans/System.Globalization.xml", - "ref/dotnet/zh-hant/System.Globalization.xml", - "ref/net46/_._", - "ref/xamarinios10/_._", - "ref/xamarinmac20/_._", - "runtimes/win8-aot/lib/netcore50/System.Globalization.dll" - ] - }, - "System.Globalization.Calendars/4.0.0": { - "sha512": "cL6WrdGKnNBx9W/iTr+jbffsEO4RLjEtOYcpVSzPNDoli6X5Q6bAfWtJYbJNOPi8Q0fXgBEvKK1ncFL/3FTqlA==", - "type": "package", - "path": "System.Globalization.Calendars/4.0.0", - "files": [ - "System.Globalization.Calendars.4.0.0.nupkg.sha512", - "System.Globalization.Calendars.nuspec", - "lib/DNXCore50/System.Globalization.Calendars.dll", - "lib/MonoAndroid10/_._", - "lib/MonoTouch10/_._", - "lib/net46/System.Globalization.Calendars.dll", - "lib/netcore50/System.Globalization.Calendars.dll", - "lib/xamarinios10/_._", - "lib/xamarinmac20/_._", - "ref/MonoAndroid10/_._", - "ref/MonoTouch10/_._", - "ref/dotnet/System.Globalization.Calendars.dll", - "ref/dotnet/System.Globalization.Calendars.xml", - "ref/dotnet/de/System.Globalization.Calendars.xml", - "ref/dotnet/es/System.Globalization.Calendars.xml", - "ref/dotnet/fr/System.Globalization.Calendars.xml", - "ref/dotnet/it/System.Globalization.Calendars.xml", - "ref/dotnet/ja/System.Globalization.Calendars.xml", - "ref/dotnet/ko/System.Globalization.Calendars.xml", - "ref/dotnet/ru/System.Globalization.Calendars.xml", - "ref/dotnet/zh-hans/System.Globalization.Calendars.xml", - "ref/dotnet/zh-hant/System.Globalization.Calendars.xml", - "ref/net46/System.Globalization.Calendars.dll", - "ref/xamarinios10/_._", - "ref/xamarinmac20/_._", - "runtimes/win8-aot/lib/netcore50/System.Globalization.Calendars.dll" - ] - }, - "System.Globalization.Extensions/4.0.0": { - "sha512": "rqbUXiwpBCvJ18ySCsjh20zleazO+6fr3s5GihC2sVwhyS0MUl6+oc5Rzk0z6CKkS4kmxbZQSeZLsK7cFSO0ng==", - "type": "package", - "path": "System.Globalization.Extensions/4.0.0", - "files": [ - "System.Globalization.Extensions.4.0.0.nupkg.sha512", - "System.Globalization.Extensions.nuspec", - "lib/MonoAndroid10/_._", - "lib/MonoTouch10/_._", - "lib/dotnet/System.Globalization.Extensions.dll", - "lib/net46/System.Globalization.Extensions.dll", - "lib/xamarinios10/_._", - "lib/xamarinmac20/_._", - "ref/MonoAndroid10/_._", - "ref/MonoTouch10/_._", - "ref/dotnet/System.Globalization.Extensions.dll", - "ref/dotnet/System.Globalization.Extensions.xml", - "ref/dotnet/de/System.Globalization.Extensions.xml", - "ref/dotnet/es/System.Globalization.Extensions.xml", - "ref/dotnet/fr/System.Globalization.Extensions.xml", - "ref/dotnet/it/System.Globalization.Extensions.xml", - "ref/dotnet/ja/System.Globalization.Extensions.xml", - "ref/dotnet/ko/System.Globalization.Extensions.xml", - "ref/dotnet/ru/System.Globalization.Extensions.xml", - "ref/dotnet/zh-hans/System.Globalization.Extensions.xml", - "ref/dotnet/zh-hant/System.Globalization.Extensions.xml", - "ref/net46/System.Globalization.Extensions.dll", - "ref/xamarinios10/_._", - "ref/xamarinmac20/_._" - ] - }, - "System.IO/4.0.10": { - "sha512": "kghf1CeYT+W2lw8a50/GxFz5HR9t6RkL4BvjxtTp1NxtEFWywnMA9W8FH/KYXiDNThcw9u/GOViDON4iJFGXIQ==", - "type": "package", - "path": "System.IO/4.0.10", - "files": [ - "System.IO.4.0.10.nupkg.sha512", - "System.IO.nuspec", - "lib/DNXCore50/System.IO.dll", - "lib/MonoAndroid10/_._", - "lib/MonoTouch10/_._", - "lib/net46/_._", - "lib/netcore50/System.IO.dll", - "lib/xamarinios10/_._", - "lib/xamarinmac20/_._", - "ref/MonoAndroid10/_._", - "ref/MonoTouch10/_._", - "ref/dotnet/System.IO.dll", - "ref/dotnet/System.IO.xml", - "ref/dotnet/de/System.IO.xml", - "ref/dotnet/es/System.IO.xml", - "ref/dotnet/fr/System.IO.xml", - "ref/dotnet/it/System.IO.xml", - "ref/dotnet/ja/System.IO.xml", - "ref/dotnet/ko/System.IO.xml", - "ref/dotnet/ru/System.IO.xml", - "ref/dotnet/zh-hans/System.IO.xml", - "ref/dotnet/zh-hant/System.IO.xml", - "ref/net46/_._", - "ref/xamarinios10/_._", - "ref/xamarinmac20/_._", - "runtimes/win8-aot/lib/netcore50/System.IO.dll" - ] - }, - "System.IO.Compression/4.0.0": { - "sha512": "S+ljBE3py8pujTrsOOYHtDg2cnAifn6kBu/pfh1hMWIXd8DoVh0ADTA6Puv4q+nYj+Msm6JoFLNwuRSmztbsDQ==", - "type": "package", - "path": "System.IO.Compression/4.0.0", - "files": [ - "System.IO.Compression.4.0.0.nupkg.sha512", - "System.IO.Compression.nuspec", - "lib/MonoAndroid10/_._", - "lib/MonoTouch10/_._", - "lib/dotnet/System.IO.Compression.dll", - "lib/net45/_._", - "lib/netcore50/System.IO.Compression.dll", - "lib/win8/_._", - "lib/wpa81/_._", - "lib/xamarinios10/_._", - "lib/xamarinmac20/_._", - "ref/MonoAndroid10/_._", - "ref/MonoTouch10/_._", - "ref/dotnet/System.IO.Compression.dll", - "ref/dotnet/System.IO.Compression.xml", - "ref/dotnet/de/System.IO.Compression.xml", - "ref/dotnet/es/System.IO.Compression.xml", - "ref/dotnet/fr/System.IO.Compression.xml", - "ref/dotnet/it/System.IO.Compression.xml", - "ref/dotnet/ja/System.IO.Compression.xml", - "ref/dotnet/ko/System.IO.Compression.xml", - "ref/dotnet/ru/System.IO.Compression.xml", - "ref/dotnet/zh-hans/System.IO.Compression.xml", - "ref/dotnet/zh-hant/System.IO.Compression.xml", - "ref/net45/_._", - "ref/netcore50/System.IO.Compression.dll", - "ref/netcore50/System.IO.Compression.xml", - "ref/win8/_._", - "ref/wpa81/_._", - "ref/xamarinios10/_._", - "ref/xamarinmac20/_._", - "runtime.json" - ] - }, - "System.IO.Compression.clrcompression-arm/4.0.0": { - "sha512": "Kk21GecAbI+H6tMP6/lMssGObbhoHwLiREiB5UkNMCypdxACuF+6gmrdDTousCUcbH28CJeo7tArrnUc+bchuw==", - "type": "package", - "path": "System.IO.Compression.clrcompression-arm/4.0.0", - "files": [ - "System.IO.Compression.clrcompression-arm.4.0.0.nupkg.sha512", - "System.IO.Compression.clrcompression-arm.nuspec", - "runtimes/win10-arm/native/ClrCompression.dll", - "runtimes/win7-arm/native/clrcompression.dll" - ] - }, - "System.IO.Compression.clrcompression-x64/4.0.0": { - "sha512": "Lqr+URMwKzf+8HJF6YrqEqzKzDzFJTE4OekaxqdIns71r8Ufbd8SbZa0LKl9q+7nu6Em4SkIEXVMB7plSXekOw==", - "type": "package", - "path": "System.IO.Compression.clrcompression-x64/4.0.0", - "files": [ - "System.IO.Compression.clrcompression-x64.4.0.0.nupkg.sha512", - "System.IO.Compression.clrcompression-x64.nuspec", - "runtimes/win10-x64/native/ClrCompression.dll", - "runtimes/win7-x64/native/clrcompression.dll" - ] - }, - "System.IO.Compression.clrcompression-x86/4.0.0": { - "sha512": "GmevpuaMRzYDXHu+xuV10fxTO8DsP7OKweWxYtkaxwVnDSj9X6RBupSiXdiveq9yj/xjZ1NbG+oRRRb99kj+VQ==", - "type": "package", - "path": "System.IO.Compression.clrcompression-x86/4.0.0", - "files": [ - "System.IO.Compression.clrcompression-x86.4.0.0.nupkg.sha512", - "System.IO.Compression.clrcompression-x86.nuspec", - "runtimes/win10-x86/native/ClrCompression.dll", - "runtimes/win7-x86/native/clrcompression.dll" - ] - }, - "System.IO.Compression.ZipFile/4.0.0": { - "sha512": "pwntmtsJqtt6Lez4Iyv4GVGW6DaXUTo9Rnlsx0MFagRgX+8F/sxG5S/IzDJabBj68sUWViz1QJrRZL4V9ngWDg==", - "type": "package", - "path": "System.IO.Compression.ZipFile/4.0.0", - "files": [ - "System.IO.Compression.ZipFile.4.0.0.nupkg.sha512", - "System.IO.Compression.ZipFile.nuspec", - "lib/MonoAndroid10/_._", - "lib/MonoTouch10/_._", - "lib/dotnet/System.IO.Compression.ZipFile.dll", - "lib/net46/System.IO.Compression.ZipFile.dll", - "lib/xamarinios10/_._", - "lib/xamarinmac20/_._", - "ref/MonoAndroid10/_._", - "ref/MonoTouch10/_._", - "ref/dotnet/System.IO.Compression.ZipFile.dll", - "ref/dotnet/System.IO.Compression.ZipFile.xml", - "ref/dotnet/de/System.IO.Compression.ZipFile.xml", - "ref/dotnet/es/System.IO.Compression.ZipFile.xml", - "ref/dotnet/fr/System.IO.Compression.ZipFile.xml", - "ref/dotnet/it/System.IO.Compression.ZipFile.xml", - "ref/dotnet/ja/System.IO.Compression.ZipFile.xml", - "ref/dotnet/ko/System.IO.Compression.ZipFile.xml", - "ref/dotnet/ru/System.IO.Compression.ZipFile.xml", - "ref/dotnet/zh-hans/System.IO.Compression.ZipFile.xml", - "ref/dotnet/zh-hant/System.IO.Compression.ZipFile.xml", - "ref/net46/System.IO.Compression.ZipFile.dll", - "ref/xamarinios10/_._", - "ref/xamarinmac20/_._" - ] - }, - "System.IO.FileSystem/4.0.0": { - "sha512": "eo05SPWfG+54UA0wxgRIYOuOslq+2QrJLXZaJDDsfLXG15OLguaItW39NYZTqUb4DeGOkU4R0wpOLOW4ynMUDQ==", - "type": "package", - "path": "System.IO.FileSystem/4.0.0", - "files": [ - "System.IO.FileSystem.4.0.0.nupkg.sha512", - "System.IO.FileSystem.nuspec", - "lib/DNXCore50/System.IO.FileSystem.dll", - "lib/MonoAndroid10/_._", - "lib/MonoTouch10/_._", - "lib/net46/System.IO.FileSystem.dll", - "lib/netcore50/System.IO.FileSystem.dll", - "lib/xamarinios10/_._", - "lib/xamarinmac20/_._", - "ref/MonoAndroid10/_._", - "ref/MonoTouch10/_._", - "ref/dotnet/System.IO.FileSystem.dll", - "ref/dotnet/System.IO.FileSystem.xml", - "ref/dotnet/de/System.IO.FileSystem.xml", - "ref/dotnet/es/System.IO.FileSystem.xml", - "ref/dotnet/fr/System.IO.FileSystem.xml", - "ref/dotnet/it/System.IO.FileSystem.xml", - "ref/dotnet/ja/System.IO.FileSystem.xml", - "ref/dotnet/ko/System.IO.FileSystem.xml", - "ref/dotnet/ru/System.IO.FileSystem.xml", - "ref/dotnet/zh-hans/System.IO.FileSystem.xml", - "ref/dotnet/zh-hant/System.IO.FileSystem.xml", - "ref/net46/System.IO.FileSystem.dll", - "ref/xamarinios10/_._", - "ref/xamarinmac20/_._" - ] - }, - "System.IO.FileSystem.Primitives/4.0.0": { - "sha512": "7pJUvYi/Yq3A5nagqCCiOw3+aJp3xXc/Cjr8dnJDnER3/6kX3LEencfqmXUcPl9+7OvRNyPMNhqsLAcMK6K/KA==", - "type": "package", - "path": "System.IO.FileSystem.Primitives/4.0.0", - "files": [ - "System.IO.FileSystem.Primitives.4.0.0.nupkg.sha512", - "System.IO.FileSystem.Primitives.nuspec", - "lib/MonoAndroid10/_._", - "lib/MonoTouch10/_._", - "lib/dotnet/System.IO.FileSystem.Primitives.dll", - "lib/net46/System.IO.FileSystem.Primitives.dll", - "lib/xamarinios10/_._", - "lib/xamarinmac20/_._", - "ref/MonoAndroid10/_._", - "ref/MonoTouch10/_._", - "ref/dotnet/System.IO.FileSystem.Primitives.dll", - "ref/dotnet/System.IO.FileSystem.Primitives.xml", - "ref/dotnet/de/System.IO.FileSystem.Primitives.xml", - "ref/dotnet/es/System.IO.FileSystem.Primitives.xml", - "ref/dotnet/fr/System.IO.FileSystem.Primitives.xml", - "ref/dotnet/it/System.IO.FileSystem.Primitives.xml", - "ref/dotnet/ja/System.IO.FileSystem.Primitives.xml", - "ref/dotnet/ko/System.IO.FileSystem.Primitives.xml", - "ref/dotnet/ru/System.IO.FileSystem.Primitives.xml", - "ref/dotnet/zh-hans/System.IO.FileSystem.Primitives.xml", - "ref/dotnet/zh-hant/System.IO.FileSystem.Primitives.xml", - "ref/net46/System.IO.FileSystem.Primitives.dll", - "ref/xamarinios10/_._", - "ref/xamarinmac20/_._" - ] - }, - "System.IO.UnmanagedMemoryStream/4.0.0": { - "sha512": "i2xczgQfwHmolORBNHxV9b5izP8VOBxgSA2gf+H55xBvwqtR+9r9adtzlc7at0MAwiLcsk6V1TZlv2vfRQr8Sw==", - "type": "package", - "path": "System.IO.UnmanagedMemoryStream/4.0.0", - "files": [ - "System.IO.UnmanagedMemoryStream.4.0.0.nupkg.sha512", - "System.IO.UnmanagedMemoryStream.nuspec", - "lib/MonoAndroid10/_._", - "lib/MonoTouch10/_._", - "lib/dotnet/System.IO.UnmanagedMemoryStream.dll", - "lib/net46/System.IO.UnmanagedMemoryStream.dll", - "lib/xamarinios10/_._", - "lib/xamarinmac20/_._", - "ref/MonoAndroid10/_._", - "ref/MonoTouch10/_._", - "ref/dotnet/System.IO.UnmanagedMemoryStream.dll", - "ref/dotnet/System.IO.UnmanagedMemoryStream.xml", - "ref/dotnet/de/System.IO.UnmanagedMemoryStream.xml", - "ref/dotnet/es/System.IO.UnmanagedMemoryStream.xml", - "ref/dotnet/fr/System.IO.UnmanagedMemoryStream.xml", - "ref/dotnet/it/System.IO.UnmanagedMemoryStream.xml", - "ref/dotnet/ja/System.IO.UnmanagedMemoryStream.xml", - "ref/dotnet/ko/System.IO.UnmanagedMemoryStream.xml", - "ref/dotnet/ru/System.IO.UnmanagedMemoryStream.xml", - "ref/dotnet/zh-hans/System.IO.UnmanagedMemoryStream.xml", - "ref/dotnet/zh-hant/System.IO.UnmanagedMemoryStream.xml", - "ref/net46/System.IO.UnmanagedMemoryStream.dll", - "ref/xamarinios10/_._", - "ref/xamarinmac20/_._" - ] - }, - "System.Linq/4.0.0": { - "sha512": "r6Hlc+ytE6m/9UBr+nNRRdoJEWjoeQiT3L3lXYFDHoXk3VYsRBCDNXrawcexw7KPLaH0zamQLiAb6avhZ50cGg==", - "type": "package", - "path": "System.Linq/4.0.0", - "files": [ - "System.Linq.4.0.0.nupkg.sha512", - "System.Linq.nuspec", - "lib/dotnet/System.Linq.dll", - "lib/net45/_._", - "lib/netcore50/System.Linq.dll", - "lib/win8/_._", - "lib/wp80/_._", - "lib/wpa81/_._", - "ref/dotnet/System.Linq.dll", - "ref/dotnet/System.Linq.xml", - "ref/dotnet/de/System.Linq.xml", - "ref/dotnet/es/System.Linq.xml", - "ref/dotnet/fr/System.Linq.xml", - "ref/dotnet/it/System.Linq.xml", - "ref/dotnet/ja/System.Linq.xml", - "ref/dotnet/ko/System.Linq.xml", - "ref/dotnet/ru/System.Linq.xml", - "ref/dotnet/zh-hans/System.Linq.xml", - "ref/dotnet/zh-hant/System.Linq.xml", - "ref/net45/_._", - "ref/netcore50/System.Linq.dll", - "ref/netcore50/System.Linq.xml", - "ref/win8/_._", - "ref/wp80/_._", - "ref/wpa81/_._" - ] - }, - "System.Linq.Expressions/4.0.10": { - "sha512": "qhFkPqRsTfXBaacjQhxwwwUoU7TEtwlBIULj7nG7i4qAkvivil31VvOvDKppCSui5yGw0/325ZeNaMYRvTotXw==", - "type": "package", - "path": "System.Linq.Expressions/4.0.10", - "files": [ - "System.Linq.Expressions.4.0.10.nupkg.sha512", - "System.Linq.Expressions.nuspec", - "lib/DNXCore50/System.Linq.Expressions.dll", - "lib/MonoAndroid10/_._", - "lib/MonoTouch10/_._", - "lib/net46/_._", - "lib/netcore50/System.Linq.Expressions.dll", - "lib/xamarinios10/_._", - "lib/xamarinmac20/_._", - "ref/MonoAndroid10/_._", - "ref/MonoTouch10/_._", - "ref/dotnet/System.Linq.Expressions.dll", - "ref/dotnet/System.Linq.Expressions.xml", - "ref/dotnet/de/System.Linq.Expressions.xml", - "ref/dotnet/es/System.Linq.Expressions.xml", - "ref/dotnet/fr/System.Linq.Expressions.xml", - "ref/dotnet/it/System.Linq.Expressions.xml", - "ref/dotnet/ja/System.Linq.Expressions.xml", - "ref/dotnet/ko/System.Linq.Expressions.xml", - "ref/dotnet/ru/System.Linq.Expressions.xml", - "ref/dotnet/zh-hans/System.Linq.Expressions.xml", - "ref/dotnet/zh-hant/System.Linq.Expressions.xml", - "ref/net46/_._", - "ref/xamarinios10/_._", - "ref/xamarinmac20/_._", - "runtime.json", - "runtimes/win8-aot/lib/netcore50/System.Linq.Expressions.dll" - ] - }, - "System.Linq.Parallel/4.0.0": { - "sha512": "PtH7KKh1BbzVow4XY17pnrn7Io63ApMdwzRE2o2HnzsKQD/0o7X5xe6mxrDUqTm9ZCR3/PNhAlP13VY1HnHsbA==", - "type": "package", - "path": "System.Linq.Parallel/4.0.0", - "files": [ - "System.Linq.Parallel.4.0.0.nupkg.sha512", - "System.Linq.Parallel.nuspec", - "lib/dotnet/System.Linq.Parallel.dll", - "lib/net45/_._", - "lib/netcore50/System.Linq.Parallel.dll", - "lib/win8/_._", - "lib/wpa81/_._", - "ref/dotnet/System.Linq.Parallel.dll", - "ref/dotnet/System.Linq.Parallel.xml", - "ref/dotnet/de/System.Linq.Parallel.xml", - "ref/dotnet/es/System.Linq.Parallel.xml", - "ref/dotnet/fr/System.Linq.Parallel.xml", - "ref/dotnet/it/System.Linq.Parallel.xml", - "ref/dotnet/ja/System.Linq.Parallel.xml", - "ref/dotnet/ko/System.Linq.Parallel.xml", - "ref/dotnet/ru/System.Linq.Parallel.xml", - "ref/dotnet/zh-hans/System.Linq.Parallel.xml", - "ref/dotnet/zh-hant/System.Linq.Parallel.xml", - "ref/net45/_._", - "ref/netcore50/System.Linq.Parallel.dll", - "ref/netcore50/System.Linq.Parallel.xml", - "ref/win8/_._", - "ref/wpa81/_._" - ] - }, - "System.Linq.Queryable/4.0.0": { - "sha512": "DIlvCNn3ucFvwMMzXcag4aFnFJ1fdxkQ5NqwJe9Nh7y8ozzhDm07YakQL/yoF3P1dLzY1T2cTpuwbAmVSdXyBA==", - "type": "package", - "path": "System.Linq.Queryable/4.0.0", - "files": [ - "System.Linq.Queryable.4.0.0.nupkg.sha512", - "System.Linq.Queryable.nuspec", - "lib/dotnet/System.Linq.Queryable.dll", - "lib/net45/_._", - "lib/netcore50/System.Linq.Queryable.dll", - "lib/win8/_._", - "lib/wp80/_._", - "lib/wpa81/_._", - "ref/dotnet/System.Linq.Queryable.dll", - "ref/dotnet/System.Linq.Queryable.xml", - "ref/dotnet/de/System.Linq.Queryable.xml", - "ref/dotnet/es/System.Linq.Queryable.xml", - "ref/dotnet/fr/System.Linq.Queryable.xml", - "ref/dotnet/it/System.Linq.Queryable.xml", - "ref/dotnet/ja/System.Linq.Queryable.xml", - "ref/dotnet/ko/System.Linq.Queryable.xml", - "ref/dotnet/ru/System.Linq.Queryable.xml", - "ref/dotnet/zh-hans/System.Linq.Queryable.xml", - "ref/dotnet/zh-hant/System.Linq.Queryable.xml", - "ref/net45/_._", - "ref/netcore50/System.Linq.Queryable.dll", - "ref/netcore50/System.Linq.Queryable.xml", - "ref/win8/_._", - "ref/wp80/_._", - "ref/wpa81/_._" - ] - }, - "System.Net.Http/4.0.0": { - "sha512": "mZuAl7jw/mFY8jUq4ITKECxVBh9a8SJt9BC/+lJbmo7cRKspxE3PsITz+KiaCEsexN5WYPzwBOx0oJH/0HlPyQ==", - "type": "package", - "path": "System.Net.Http/4.0.0", - "files": [ - "System.Net.Http.4.0.0.nupkg.sha512", - "System.Net.Http.nuspec", - "lib/DNXCore50/System.Net.Http.dll", - "lib/net45/_._", - "lib/netcore50/System.Net.Http.dll", - "lib/win8/_._", - "lib/wpa81/_._", - "ref/dotnet/System.Net.Http.dll", - "ref/dotnet/System.Net.Http.xml", - "ref/dotnet/de/System.Net.Http.xml", - "ref/dotnet/es/System.Net.Http.xml", - "ref/dotnet/fr/System.Net.Http.xml", - "ref/dotnet/it/System.Net.Http.xml", - "ref/dotnet/ja/System.Net.Http.xml", - "ref/dotnet/ko/System.Net.Http.xml", - "ref/dotnet/ru/System.Net.Http.xml", - "ref/dotnet/zh-hans/System.Net.Http.xml", - "ref/dotnet/zh-hant/System.Net.Http.xml", - "ref/net45/_._", - "ref/netcore50/System.Net.Http.dll", - "ref/netcore50/System.Net.Http.xml", - "ref/win8/_._", - "ref/wpa81/_._" - ] - }, - "System.Net.NetworkInformation/4.0.0": { - "sha512": "D68KCf5VK1G1GgFUwD901gU6cnMITksOdfdxUCt9ReCZfT1pigaDqjJ7XbiLAM4jm7TfZHB7g5mbOf1mbG3yBA==", - "type": "package", - "path": "System.Net.NetworkInformation/4.0.0", - "files": [ - "System.Net.NetworkInformation.4.0.0.nupkg.sha512", - "System.Net.NetworkInformation.nuspec", - "lib/MonoAndroid10/_._", - "lib/MonoTouch10/_._", - "lib/net45/_._", - "lib/netcore50/System.Net.NetworkInformation.dll", - "lib/win8/_._", - "lib/wp80/_._", - "lib/wpa81/_._", - "lib/xamarinios10/_._", - "lib/xamarinmac20/_._", - "ref/MonoAndroid10/_._", - "ref/MonoTouch10/_._", - "ref/dotnet/System.Net.NetworkInformation.dll", - "ref/dotnet/System.Net.NetworkInformation.xml", - "ref/dotnet/de/System.Net.NetworkInformation.xml", - "ref/dotnet/es/System.Net.NetworkInformation.xml", - "ref/dotnet/fr/System.Net.NetworkInformation.xml", - "ref/dotnet/it/System.Net.NetworkInformation.xml", - "ref/dotnet/ja/System.Net.NetworkInformation.xml", - "ref/dotnet/ko/System.Net.NetworkInformation.xml", - "ref/dotnet/ru/System.Net.NetworkInformation.xml", - "ref/dotnet/zh-hans/System.Net.NetworkInformation.xml", - "ref/dotnet/zh-hant/System.Net.NetworkInformation.xml", - "ref/net45/_._", - "ref/netcore50/System.Net.NetworkInformation.dll", - "ref/netcore50/System.Net.NetworkInformation.xml", - "ref/win8/_._", - "ref/wp80/_._", - "ref/wpa81/_._", - "ref/xamarinios10/_._", - "ref/xamarinmac20/_._" - ] - }, - "System.Net.NetworkInformation/4.0.10-beta-23123": { - "sha512": "NkKpsUm2MLoxT+YlSwexidAw2jGFIJuc6i4H9pT3nU3TQj7MZVursD/ohWj3nyBxthy7i00XLWkRZAwGao/zsg==", - "type": "package", - "path": "System.Net.NetworkInformation/4.0.10-beta-23123", - "files": [ - "System.Net.NetworkInformation.4.0.10-beta-23123.nupkg.sha512", - "System.Net.NetworkInformation.nuspec", - "lib/DNXCore50/System.Net.NetworkInformation.dll", - "lib/MonoAndroid10/_._", - "lib/MonoTouch10/_._", - "lib/net46/_._", - "lib/xamarinios10/_._", - "lib/xamarinmac20/_._", - "ref/MonoAndroid10/_._", - "ref/MonoTouch10/_._", - "ref/dotnet/System.Net.NetworkInformation.dll", - "ref/dotnet/System.Net.NetworkInformation.xml", - "ref/dotnet/de/System.Net.NetworkInformation.xml", - "ref/dotnet/es/System.Net.NetworkInformation.xml", - "ref/dotnet/fr/System.Net.NetworkInformation.xml", - "ref/dotnet/it/System.Net.NetworkInformation.xml", - "ref/dotnet/ja/System.Net.NetworkInformation.xml", - "ref/dotnet/ko/System.Net.NetworkInformation.xml", - "ref/dotnet/ru/System.Net.NetworkInformation.xml", - "ref/dotnet/zh-hans/System.Net.NetworkInformation.xml", - "ref/dotnet/zh-hant/System.Net.NetworkInformation.xml", - "ref/net46/_._", - "ref/xamarinios10/_._", - "ref/xamarinmac20/_._" - ] - }, - "System.Net.Primitives/4.0.10": { - "sha512": "YQqIpmMhnKjIbT7rl6dlf7xM5DxaMR+whduZ9wKb9OhMLjoueAJO3HPPJI+Naf3v034kb+xZqdc3zo44o3HWcg==", - "type": "package", - "path": "System.Net.Primitives/4.0.10", - "files": [ - "System.Net.Primitives.4.0.10.nupkg.sha512", - "System.Net.Primitives.nuspec", - "lib/DNXCore50/System.Net.Primitives.dll", - "lib/MonoAndroid10/_._", - "lib/MonoTouch10/_._", - "lib/net46/_._", - "lib/netcore50/System.Net.Primitives.dll", - "lib/xamarinios10/_._", - "lib/xamarinmac20/_._", - "ref/MonoAndroid10/_._", - "ref/MonoTouch10/_._", - "ref/dotnet/System.Net.Primitives.dll", - "ref/dotnet/System.Net.Primitives.xml", - "ref/dotnet/de/System.Net.Primitives.xml", - "ref/dotnet/es/System.Net.Primitives.xml", - "ref/dotnet/fr/System.Net.Primitives.xml", - "ref/dotnet/it/System.Net.Primitives.xml", - "ref/dotnet/ja/System.Net.Primitives.xml", - "ref/dotnet/ko/System.Net.Primitives.xml", - "ref/dotnet/ru/System.Net.Primitives.xml", - "ref/dotnet/zh-hans/System.Net.Primitives.xml", - "ref/dotnet/zh-hant/System.Net.Primitives.xml", - "ref/net46/_._", - "ref/xamarinios10/_._", - "ref/xamarinmac20/_._" - ] - }, - "System.Numerics.Vectors/4.1.0": { - "sha512": "jpubR06GWPoZA0oU5xLM7kHeV59/CKPBXZk4Jfhi0T3DafxbrdueHZ8kXlb+Fb5nd3DAyyMh2/eqEzLX0xv6Qg==", - "type": "package", - "path": "System.Numerics.Vectors/4.1.0", - "files": [ - "System.Numerics.Vectors.4.1.0.nupkg.sha512", - "System.Numerics.Vectors.nuspec", - "lib/MonoAndroid10/_._", - "lib/MonoTouch10/_._", - "lib/dotnet/System.Numerics.Vectors.dll", - "lib/net46/System.Numerics.Vectors.dll", - "lib/xamarinios10/_._", - "lib/xamarinmac20/_._", - "ref/MonoAndroid10/_._", - "ref/MonoTouch10/_._", - "ref/dotnet/System.Numerics.Vectors.dll", - "ref/net46/System.Numerics.Vectors.dll", - "ref/xamarinios10/_._", - "ref/xamarinmac20/_._" - ] - }, - "System.ObjectModel/4.0.10": { - "sha512": "Djn1wb0vP662zxbe+c3mOhvC4vkQGicsFs1Wi0/GJJpp3Eqp+oxbJ+p2Sx3O0efYueggAI5SW+BqEoczjfr1cA==", - "type": "package", - "path": "System.ObjectModel/4.0.10", - "files": [ - "System.ObjectModel.4.0.10.nupkg.sha512", - "System.ObjectModel.nuspec", - "lib/MonoAndroid10/_._", - "lib/MonoTouch10/_._", - "lib/dotnet/System.ObjectModel.dll", - "lib/net46/_._", - "lib/xamarinios10/_._", - "lib/xamarinmac20/_._", - "ref/MonoAndroid10/_._", - "ref/MonoTouch10/_._", - "ref/dotnet/System.ObjectModel.dll", - "ref/dotnet/System.ObjectModel.xml", - "ref/dotnet/de/System.ObjectModel.xml", - "ref/dotnet/es/System.ObjectModel.xml", - "ref/dotnet/fr/System.ObjectModel.xml", - "ref/dotnet/it/System.ObjectModel.xml", - "ref/dotnet/ja/System.ObjectModel.xml", - "ref/dotnet/ko/System.ObjectModel.xml", - "ref/dotnet/ru/System.ObjectModel.xml", - "ref/dotnet/zh-hans/System.ObjectModel.xml", - "ref/dotnet/zh-hant/System.ObjectModel.xml", - "ref/net46/_._", - "ref/xamarinios10/_._", - "ref/xamarinmac20/_._" - ] - }, - "System.Private.Networking/4.0.0": { - "sha512": "RUEqdBdJjISC65dO8l4LdN7vTdlXH+attUpKnauDUHVtLbIKdlDB9LKoLzCQsTQRP7vzUJHWYXznHJBkjAA7yA==", - "type": "package", - "path": "System.Private.Networking/4.0.0", - "files": [ - "System.Private.Networking.4.0.0.nupkg.sha512", - "System.Private.Networking.nuspec", - "lib/DNXCore50/System.Private.Networking.dll", - "lib/netcore50/System.Private.Networking.dll", - "ref/dnxcore50/_._", - "ref/netcore50/_._" - ] - }, - "System.Private.Uri/4.0.0": { - "sha512": "CtuxaCKcRIvPcsqquVl3mPp79EDZPMr2UogfiFCxCs+t2z1VjbpQsKNs1GHZ8VQetqbk1mr0V1yAfMe6y8CHDA==", - "type": "package", - "path": "System.Private.Uri/4.0.0", - "files": [ - "System.Private.Uri.4.0.0.nupkg.sha512", - "System.Private.Uri.nuspec", - "lib/DNXCore50/System.Private.Uri.dll", - "lib/netcore50/System.Private.Uri.dll", - "ref/dnxcore50/_._", - "ref/netcore50/_._", - "runtimes/win8-aot/lib/netcore50/System.Private.Uri.dll" - ] - }, - "System.Reflection/4.0.10": { - "sha512": "WZ+4lEE4gqGx6mrqLhSiW4oi6QLPWwdNjzhhTONmhELOrW8Cw9phlO9tltgvRUuQUqYtBiliFwhO5S5fCJElVw==", - "type": "package", - "path": "System.Reflection/4.0.10", - "files": [ - "System.Reflection.4.0.10.nupkg.sha512", - "System.Reflection.nuspec", - "lib/DNXCore50/System.Reflection.dll", - "lib/MonoAndroid10/_._", - "lib/MonoTouch10/_._", - "lib/net46/_._", - "lib/netcore50/System.Reflection.dll", - "lib/xamarinios10/_._", - "lib/xamarinmac20/_._", - "ref/MonoAndroid10/_._", - "ref/MonoTouch10/_._", - "ref/dotnet/System.Reflection.dll", - "ref/dotnet/System.Reflection.xml", - "ref/dotnet/de/System.Reflection.xml", - "ref/dotnet/es/System.Reflection.xml", - "ref/dotnet/fr/System.Reflection.xml", - "ref/dotnet/it/System.Reflection.xml", - "ref/dotnet/ja/System.Reflection.xml", - "ref/dotnet/ko/System.Reflection.xml", - "ref/dotnet/ru/System.Reflection.xml", - "ref/dotnet/zh-hans/System.Reflection.xml", - "ref/dotnet/zh-hant/System.Reflection.xml", - "ref/net46/_._", - "ref/xamarinios10/_._", - "ref/xamarinmac20/_._", - "runtimes/win8-aot/lib/netcore50/System.Reflection.dll" - ] - }, - "System.Reflection.DispatchProxy/4.0.0": { - "sha512": "Kd/4o6DqBfJA4058X8oGEu1KlT8Ej0A+WGeoQgZU2h+3f2vC8NRbHxeOSZvxj9/MPZ1RYmZMGL1ApO9xG/4IVA==", - "type": "package", - "path": "System.Reflection.DispatchProxy/4.0.0", - "files": [ - "System.Reflection.DispatchProxy.4.0.0.nupkg.sha512", - "System.Reflection.DispatchProxy.nuspec", - "lib/DNXCore50/System.Reflection.DispatchProxy.dll", - "lib/MonoAndroid10/_._", - "lib/MonoTouch10/_._", - "lib/net46/System.Reflection.DispatchProxy.dll", - "lib/netcore50/System.Reflection.DispatchProxy.dll", - "lib/xamarinios10/_._", - "lib/xamarinmac20/_._", - "ref/MonoAndroid10/_._", - "ref/MonoTouch10/_._", - "ref/dotnet/System.Reflection.DispatchProxy.dll", - "ref/dotnet/System.Reflection.DispatchProxy.xml", - "ref/dotnet/de/System.Reflection.DispatchProxy.xml", - "ref/dotnet/es/System.Reflection.DispatchProxy.xml", - "ref/dotnet/fr/System.Reflection.DispatchProxy.xml", - "ref/dotnet/it/System.Reflection.DispatchProxy.xml", - "ref/dotnet/ja/System.Reflection.DispatchProxy.xml", - "ref/dotnet/ko/System.Reflection.DispatchProxy.xml", - "ref/dotnet/ru/System.Reflection.DispatchProxy.xml", - "ref/dotnet/zh-hans/System.Reflection.DispatchProxy.xml", - "ref/dotnet/zh-hant/System.Reflection.DispatchProxy.xml", - "ref/xamarinios10/_._", - "ref/xamarinmac20/_._", - "runtime.json", - "runtimes/win8-aot/lib/netcore50/System.Reflection.DispatchProxy.dll" - ] - }, - "System.Reflection.Emit/4.0.0": { - "sha512": "CqnQz5LbNbiSxN10cv3Ehnw3j1UZOBCxnE0OO0q/keGQ5ENjyFM6rIG4gm/i0dX6EjdpYkAgKcI/mhZZCaBq4A==", - "type": "package", - "path": "System.Reflection.Emit/4.0.0", - "files": [ - "System.Reflection.Emit.4.0.0.nupkg.sha512", - "System.Reflection.Emit.nuspec", - "lib/DNXCore50/System.Reflection.Emit.dll", - "lib/MonoAndroid10/_._", - "lib/net45/_._", - "lib/netcore50/System.Reflection.Emit.dll", - "lib/xamarinmac20/_._", - "ref/MonoAndroid10/_._", - "ref/dotnet/System.Reflection.Emit.dll", - "ref/dotnet/System.Reflection.Emit.xml", - "ref/dotnet/de/System.Reflection.Emit.xml", - "ref/dotnet/es/System.Reflection.Emit.xml", - "ref/dotnet/fr/System.Reflection.Emit.xml", - "ref/dotnet/it/System.Reflection.Emit.xml", - "ref/dotnet/ja/System.Reflection.Emit.xml", - "ref/dotnet/ko/System.Reflection.Emit.xml", - "ref/dotnet/ru/System.Reflection.Emit.xml", - "ref/dotnet/zh-hans/System.Reflection.Emit.xml", - "ref/dotnet/zh-hant/System.Reflection.Emit.xml", - "ref/net45/_._", - "ref/xamarinmac20/_._" - ] - }, - "System.Reflection.Emit.ILGeneration/4.0.0": { - "sha512": "02okuusJ0GZiHZSD2IOLIN41GIn6qOr7i5+86C98BPuhlwWqVABwebiGNvhDiXP1f9a6CxEigC7foQD42klcDg==", - "type": "package", - "path": "System.Reflection.Emit.ILGeneration/4.0.0", - "files": [ - "System.Reflection.Emit.ILGeneration.4.0.0.nupkg.sha512", - "System.Reflection.Emit.ILGeneration.nuspec", - "lib/DNXCore50/System.Reflection.Emit.ILGeneration.dll", - "lib/net45/_._", - "lib/netcore50/System.Reflection.Emit.ILGeneration.dll", - "lib/wp80/_._", - "ref/dotnet/System.Reflection.Emit.ILGeneration.dll", - "ref/dotnet/System.Reflection.Emit.ILGeneration.xml", - "ref/dotnet/de/System.Reflection.Emit.ILGeneration.xml", - "ref/dotnet/es/System.Reflection.Emit.ILGeneration.xml", - "ref/dotnet/fr/System.Reflection.Emit.ILGeneration.xml", - "ref/dotnet/it/System.Reflection.Emit.ILGeneration.xml", - "ref/dotnet/ja/System.Reflection.Emit.ILGeneration.xml", - "ref/dotnet/ko/System.Reflection.Emit.ILGeneration.xml", - "ref/dotnet/ru/System.Reflection.Emit.ILGeneration.xml", - "ref/dotnet/zh-hans/System.Reflection.Emit.ILGeneration.xml", - "ref/dotnet/zh-hant/System.Reflection.Emit.ILGeneration.xml", - "ref/net45/_._", - "ref/wp80/_._" - ] - }, - "System.Reflection.Emit.Lightweight/4.0.0": { - "sha512": "DJZhHiOdkN08xJgsJfDjkuOreLLmMcU8qkEEqEHqyhkPUZMMQs0lE8R+6+68BAFWgcdzxtNu0YmIOtEug8j00w==", - "type": "package", - "path": "System.Reflection.Emit.Lightweight/4.0.0", - "files": [ - "System.Reflection.Emit.Lightweight.4.0.0.nupkg.sha512", - "System.Reflection.Emit.Lightweight.nuspec", - "lib/DNXCore50/System.Reflection.Emit.Lightweight.dll", - "lib/net45/_._", - "lib/netcore50/System.Reflection.Emit.Lightweight.dll", - "lib/wp80/_._", - "ref/dotnet/System.Reflection.Emit.Lightweight.dll", - "ref/dotnet/System.Reflection.Emit.Lightweight.xml", - "ref/dotnet/de/System.Reflection.Emit.Lightweight.xml", - "ref/dotnet/es/System.Reflection.Emit.Lightweight.xml", - "ref/dotnet/fr/System.Reflection.Emit.Lightweight.xml", - "ref/dotnet/it/System.Reflection.Emit.Lightweight.xml", - "ref/dotnet/ja/System.Reflection.Emit.Lightweight.xml", - "ref/dotnet/ko/System.Reflection.Emit.Lightweight.xml", - "ref/dotnet/ru/System.Reflection.Emit.Lightweight.xml", - "ref/dotnet/zh-hans/System.Reflection.Emit.Lightweight.xml", - "ref/dotnet/zh-hant/System.Reflection.Emit.Lightweight.xml", - "ref/net45/_._", - "ref/wp80/_._" - ] - }, - "System.Reflection.Extensions/4.0.0": { - "sha512": "dbYaZWCyFAu1TGYUqR2n+Q+1casSHPR2vVW0WVNkXpZbrd2BXcZ7cpvpu9C98CTHtNmyfMWCLpCclDqly23t6A==", - "type": "package", - "path": "System.Reflection.Extensions/4.0.0", - "files": [ - "System.Reflection.Extensions.4.0.0.nupkg.sha512", - "System.Reflection.Extensions.nuspec", - "lib/DNXCore50/System.Reflection.Extensions.dll", - "lib/net45/_._", - "lib/netcore50/System.Reflection.Extensions.dll", - "lib/win8/_._", - "lib/wp80/_._", - "lib/wpa81/_._", - "ref/dotnet/System.Reflection.Extensions.dll", - "ref/dotnet/System.Reflection.Extensions.xml", - "ref/dotnet/de/System.Reflection.Extensions.xml", - "ref/dotnet/es/System.Reflection.Extensions.xml", - "ref/dotnet/fr/System.Reflection.Extensions.xml", - "ref/dotnet/it/System.Reflection.Extensions.xml", - "ref/dotnet/ja/System.Reflection.Extensions.xml", - "ref/dotnet/ko/System.Reflection.Extensions.xml", - "ref/dotnet/ru/System.Reflection.Extensions.xml", - "ref/dotnet/zh-hans/System.Reflection.Extensions.xml", - "ref/dotnet/zh-hant/System.Reflection.Extensions.xml", - "ref/net45/_._", - "ref/netcore50/System.Reflection.Extensions.dll", - "ref/netcore50/System.Reflection.Extensions.xml", - "ref/win8/_._", - "ref/wp80/_._", - "ref/wpa81/_._", - "runtimes/win8-aot/lib/netcore50/System.Reflection.Extensions.dll" - ] - }, - "System.Reflection.Metadata/1.0.22": { - "sha512": "ltoL/teiEdy5W9fyYdtFr2xJ/4nHyksXLK9dkPWx3ubnj7BVfsSWxvWTg9EaJUXjhWvS/AeTtugZA1/IDQyaPQ==", - "type": "package", - "path": "System.Reflection.Metadata/1.0.22", - "files": [ - "System.Reflection.Metadata.1.0.22.nupkg.sha512", - "System.Reflection.Metadata.nuspec", - "lib/dotnet/System.Reflection.Metadata.dll", - "lib/dotnet/System.Reflection.Metadata.xml", - "lib/portable-net45+win8/System.Reflection.Metadata.dll", - "lib/portable-net45+win8/System.Reflection.Metadata.xml" - ] - }, - "System.Reflection.Primitives/4.0.0": { - "sha512": "n9S0XpKv2ruc17FSnaiX6nV47VfHTZ1wLjKZlAirUZCvDQCH71mVp+Ohabn0xXLh5pK2PKp45HCxkqu5Fxn/lA==", - "type": "package", - "path": "System.Reflection.Primitives/4.0.0", - "files": [ - "System.Reflection.Primitives.4.0.0.nupkg.sha512", - "System.Reflection.Primitives.nuspec", - "lib/DNXCore50/System.Reflection.Primitives.dll", - "lib/net45/_._", - "lib/netcore50/System.Reflection.Primitives.dll", - "lib/win8/_._", - "lib/wp80/_._", - "lib/wpa81/_._", - "ref/dotnet/System.Reflection.Primitives.dll", - "ref/dotnet/System.Reflection.Primitives.xml", - "ref/dotnet/de/System.Reflection.Primitives.xml", - "ref/dotnet/es/System.Reflection.Primitives.xml", - "ref/dotnet/fr/System.Reflection.Primitives.xml", - "ref/dotnet/it/System.Reflection.Primitives.xml", - "ref/dotnet/ja/System.Reflection.Primitives.xml", - "ref/dotnet/ko/System.Reflection.Primitives.xml", - "ref/dotnet/ru/System.Reflection.Primitives.xml", - "ref/dotnet/zh-hans/System.Reflection.Primitives.xml", - "ref/dotnet/zh-hant/System.Reflection.Primitives.xml", - "ref/net45/_._", - "ref/netcore50/System.Reflection.Primitives.dll", - "ref/netcore50/System.Reflection.Primitives.xml", - "ref/win8/_._", - "ref/wp80/_._", - "ref/wpa81/_._", - "runtimes/win8-aot/lib/netcore50/System.Reflection.Primitives.dll" - ] - }, - "System.Reflection.TypeExtensions/4.0.0": { - "sha512": "YRM/msNAM86hdxPyXcuZSzmTO0RQFh7YMEPBLTY8cqXvFPYIx2x99bOyPkuU81wRYQem1c1HTkImQ2DjbOBfew==", - "type": "package", - "path": "System.Reflection.TypeExtensions/4.0.0", - "files": [ - "System.Reflection.TypeExtensions.4.0.0.nupkg.sha512", - "System.Reflection.TypeExtensions.nuspec", - "lib/DNXCore50/System.Reflection.TypeExtensions.dll", - "lib/MonoAndroid10/_._", - "lib/MonoTouch10/_._", - "lib/net46/System.Reflection.TypeExtensions.dll", - "lib/netcore50/System.Reflection.TypeExtensions.dll", - "lib/xamarinios10/_._", - "lib/xamarinmac20/_._", - "ref/MonoAndroid10/_._", - "ref/MonoTouch10/_._", - "ref/dotnet/System.Reflection.TypeExtensions.dll", - "ref/dotnet/System.Reflection.TypeExtensions.xml", - "ref/dotnet/de/System.Reflection.TypeExtensions.xml", - "ref/dotnet/es/System.Reflection.TypeExtensions.xml", - "ref/dotnet/fr/System.Reflection.TypeExtensions.xml", - "ref/dotnet/it/System.Reflection.TypeExtensions.xml", - "ref/dotnet/ja/System.Reflection.TypeExtensions.xml", - "ref/dotnet/ko/System.Reflection.TypeExtensions.xml", - "ref/dotnet/ru/System.Reflection.TypeExtensions.xml", - "ref/dotnet/zh-hans/System.Reflection.TypeExtensions.xml", - "ref/dotnet/zh-hant/System.Reflection.TypeExtensions.xml", - "ref/net46/System.Reflection.TypeExtensions.dll", - "ref/xamarinios10/_._", - "ref/xamarinmac20/_._", - "runtimes/win8-aot/lib/netcore50/System.Reflection.TypeExtensions.dll" - ] - }, - "System.Resources.ResourceManager/4.0.0": { - "sha512": "qmqeZ4BJgjfU+G2JbrZt4Dk1LsMxO4t+f/9HarNY6w8pBgweO6jT+cknUH7c3qIrGvyUqraBhU45Eo6UtA0fAw==", - "type": "package", - "path": "System.Resources.ResourceManager/4.0.0", - "files": [ - "System.Resources.ResourceManager.4.0.0.nupkg.sha512", - "System.Resources.ResourceManager.nuspec", - "lib/DNXCore50/System.Resources.ResourceManager.dll", - "lib/net45/_._", - "lib/netcore50/System.Resources.ResourceManager.dll", - "lib/win8/_._", - "lib/wp80/_._", - "lib/wpa81/_._", - "ref/dotnet/System.Resources.ResourceManager.dll", - "ref/dotnet/System.Resources.ResourceManager.xml", - "ref/dotnet/de/System.Resources.ResourceManager.xml", - "ref/dotnet/es/System.Resources.ResourceManager.xml", - "ref/dotnet/fr/System.Resources.ResourceManager.xml", - "ref/dotnet/it/System.Resources.ResourceManager.xml", - "ref/dotnet/ja/System.Resources.ResourceManager.xml", - "ref/dotnet/ko/System.Resources.ResourceManager.xml", - "ref/dotnet/ru/System.Resources.ResourceManager.xml", - "ref/dotnet/zh-hans/System.Resources.ResourceManager.xml", - "ref/dotnet/zh-hant/System.Resources.ResourceManager.xml", - "ref/net45/_._", - "ref/netcore50/System.Resources.ResourceManager.dll", - "ref/netcore50/System.Resources.ResourceManager.xml", - "ref/win8/_._", - "ref/wp80/_._", - "ref/wpa81/_._", - "runtimes/win8-aot/lib/netcore50/System.Resources.ResourceManager.dll" - ] - }, - "System.Runtime/4.0.20": { - "sha512": "X7N/9Bz7jVPorqdVFO86ns1sX6MlQM+WTxELtx+Z4VG45x9+LKmWH0GRqjgKprUnVuwmfB9EJ9DQng14Z7/zwg==", - "type": "package", - "path": "System.Runtime/4.0.20", - "files": [ - "System.Runtime.4.0.20.nupkg.sha512", - "System.Runtime.nuspec", - "lib/DNXCore50/System.Runtime.dll", - "lib/MonoAndroid10/_._", - "lib/MonoTouch10/_._", - "lib/net46/_._", - "lib/netcore50/System.Runtime.dll", - "lib/xamarinios10/_._", - "lib/xamarinmac20/_._", - "ref/MonoAndroid10/_._", - "ref/MonoTouch10/_._", - "ref/dotnet/System.Runtime.dll", - "ref/dotnet/System.Runtime.xml", - "ref/dotnet/de/System.Runtime.xml", - "ref/dotnet/es/System.Runtime.xml", - "ref/dotnet/fr/System.Runtime.xml", - "ref/dotnet/it/System.Runtime.xml", - "ref/dotnet/ja/System.Runtime.xml", - "ref/dotnet/ko/System.Runtime.xml", - "ref/dotnet/ru/System.Runtime.xml", - "ref/dotnet/zh-hans/System.Runtime.xml", - "ref/dotnet/zh-hant/System.Runtime.xml", - "ref/net46/_._", - "ref/xamarinios10/_._", - "ref/xamarinmac20/_._", - "runtimes/win8-aot/lib/netcore50/System.Runtime.dll" - ] - }, - "System.Runtime.Extensions/4.0.10": { - "sha512": "5dsEwf3Iml7d5OZeT20iyOjT+r+okWpN7xI2v+R4cgd3WSj4DeRPTvPFjDpacbVW4skCAZ8B9hxXJYgkCFKJ1A==", - "type": "package", - "path": "System.Runtime.Extensions/4.0.10", - "files": [ - "System.Runtime.Extensions.4.0.10.nupkg.sha512", - "System.Runtime.Extensions.nuspec", - "lib/DNXCore50/System.Runtime.Extensions.dll", - "lib/MonoAndroid10/_._", - "lib/MonoTouch10/_._", - "lib/net46/_._", - "lib/netcore50/System.Runtime.Extensions.dll", - "lib/xamarinios10/_._", - "lib/xamarinmac20/_._", - "ref/MonoAndroid10/_._", - "ref/MonoTouch10/_._", - "ref/dotnet/System.Runtime.Extensions.dll", - "ref/dotnet/System.Runtime.Extensions.xml", - "ref/dotnet/de/System.Runtime.Extensions.xml", - "ref/dotnet/es/System.Runtime.Extensions.xml", - "ref/dotnet/fr/System.Runtime.Extensions.xml", - "ref/dotnet/it/System.Runtime.Extensions.xml", - "ref/dotnet/ja/System.Runtime.Extensions.xml", - "ref/dotnet/ko/System.Runtime.Extensions.xml", - "ref/dotnet/ru/System.Runtime.Extensions.xml", - "ref/dotnet/zh-hans/System.Runtime.Extensions.xml", - "ref/dotnet/zh-hant/System.Runtime.Extensions.xml", - "ref/net46/_._", - "ref/xamarinios10/_._", - "ref/xamarinmac20/_._", - "runtimes/win8-aot/lib/netcore50/System.Runtime.Extensions.dll" - ] - }, - "System.Runtime.Handles/4.0.0": { - "sha512": "638VhpRq63tVcQ6HDb3um3R/J2BtR1Sa96toHo6PcJGPXEPEsleCuqhBgX2gFCz0y0qkutANwW6VPPY5wQu1XQ==", - "type": "package", - "path": "System.Runtime.Handles/4.0.0", - "files": [ - "System.Runtime.Handles.4.0.0.nupkg.sha512", - "System.Runtime.Handles.nuspec", - "lib/DNXCore50/System.Runtime.Handles.dll", - "lib/MonoAndroid10/_._", - "lib/MonoTouch10/_._", - "lib/net46/_._", - "lib/netcore50/System.Runtime.Handles.dll", - "lib/xamarinios10/_._", - "lib/xamarinmac20/_._", - "ref/MonoAndroid10/_._", - "ref/MonoTouch10/_._", - "ref/dotnet/System.Runtime.Handles.dll", - "ref/dotnet/System.Runtime.Handles.xml", - "ref/dotnet/de/System.Runtime.Handles.xml", - "ref/dotnet/es/System.Runtime.Handles.xml", - "ref/dotnet/fr/System.Runtime.Handles.xml", - "ref/dotnet/it/System.Runtime.Handles.xml", - "ref/dotnet/ja/System.Runtime.Handles.xml", - "ref/dotnet/ko/System.Runtime.Handles.xml", - "ref/dotnet/ru/System.Runtime.Handles.xml", - "ref/dotnet/zh-hans/System.Runtime.Handles.xml", - "ref/dotnet/zh-hant/System.Runtime.Handles.xml", - "ref/net46/_._", - "ref/xamarinios10/_._", - "ref/xamarinmac20/_._", - "runtimes/win8-aot/lib/netcore50/System.Runtime.Handles.dll" - ] - }, - "System.Runtime.InteropServices/4.0.20": { - "sha512": "ZgDyBYfEnjWoz/viS6VOswA6XOkDSH2DzgbpczbW50RywhnCgTl+w3JEvtAiOGyIh8cyx1NJq80jsNBSUr8Pig==", - "type": "package", - "path": "System.Runtime.InteropServices/4.0.20", - "files": [ - "System.Runtime.InteropServices.4.0.20.nupkg.sha512", - "System.Runtime.InteropServices.nuspec", - "lib/DNXCore50/System.Runtime.InteropServices.dll", - "lib/MonoAndroid10/_._", - "lib/MonoTouch10/_._", - "lib/net46/_._", - "lib/netcore50/System.Runtime.InteropServices.dll", - "lib/xamarinios10/_._", - "lib/xamarinmac20/_._", - "ref/MonoAndroid10/_._", - "ref/MonoTouch10/_._", - "ref/dotnet/System.Runtime.InteropServices.dll", - "ref/dotnet/System.Runtime.InteropServices.xml", - "ref/dotnet/de/System.Runtime.InteropServices.xml", - "ref/dotnet/es/System.Runtime.InteropServices.xml", - "ref/dotnet/fr/System.Runtime.InteropServices.xml", - "ref/dotnet/it/System.Runtime.InteropServices.xml", - "ref/dotnet/ja/System.Runtime.InteropServices.xml", - "ref/dotnet/ko/System.Runtime.InteropServices.xml", - "ref/dotnet/ru/System.Runtime.InteropServices.xml", - "ref/dotnet/zh-hans/System.Runtime.InteropServices.xml", - "ref/dotnet/zh-hant/System.Runtime.InteropServices.xml", - "ref/net46/_._", - "ref/xamarinios10/_._", - "ref/xamarinmac20/_._", - "runtimes/win8-aot/lib/netcore50/System.Runtime.InteropServices.dll" - ] - }, - "System.Runtime.InteropServices.WindowsRuntime/4.0.0": { - "sha512": "K5MGSvw/sGPKQYdOVqSpsVbHBE8HccHIDEhUNjM1lui65KGF/slNZfijGU87ggQiVXTI802ebKiOYBkwiLotow==", - "type": "package", - "path": "System.Runtime.InteropServices.WindowsRuntime/4.0.0", - "files": [ - "System.Runtime.InteropServices.WindowsRuntime.4.0.0.nupkg.sha512", - "System.Runtime.InteropServices.WindowsRuntime.nuspec", - "lib/net45/_._", - "lib/netcore50/System.Runtime.InteropServices.WindowsRuntime.dll", - "lib/win8/_._", - "lib/wp80/_._", - "lib/wpa81/_._", - "ref/dotnet/System.Runtime.InteropServices.WindowsRuntime.dll", - "ref/dotnet/System.Runtime.InteropServices.WindowsRuntime.xml", - "ref/dotnet/de/System.Runtime.InteropServices.WindowsRuntime.xml", - "ref/dotnet/es/System.Runtime.InteropServices.WindowsRuntime.xml", - "ref/dotnet/fr/System.Runtime.InteropServices.WindowsRuntime.xml", - "ref/dotnet/it/System.Runtime.InteropServices.WindowsRuntime.xml", - "ref/dotnet/ja/System.Runtime.InteropServices.WindowsRuntime.xml", - "ref/dotnet/ko/System.Runtime.InteropServices.WindowsRuntime.xml", - "ref/dotnet/ru/System.Runtime.InteropServices.WindowsRuntime.xml", - "ref/dotnet/zh-hans/System.Runtime.InteropServices.WindowsRuntime.xml", - "ref/dotnet/zh-hant/System.Runtime.InteropServices.WindowsRuntime.xml", - "ref/net45/_._", - "ref/netcore50/System.Runtime.InteropServices.WindowsRuntime.dll", - "ref/netcore50/System.Runtime.InteropServices.WindowsRuntime.xml", - "ref/win8/_._", - "ref/wp80/_._", - "ref/wpa81/_._", - "runtimes/win8-aot/lib/netcore50/System.Runtime.InteropServices.WindowsRuntime.dll" - ] - }, - "System.Runtime.Numerics/4.0.0": { - "sha512": "aAYGEOE01nabQLufQ4YO8WuSyZzOqGcksi8m1BRW8ppkmssR7en8TqiXcBkB2gTkCnKG/Ai2NQY8CgdmgZw/fw==", - "type": "package", - "path": "System.Runtime.Numerics/4.0.0", - "files": [ - "System.Runtime.Numerics.4.0.0.nupkg.sha512", - "System.Runtime.Numerics.nuspec", - "lib/dotnet/System.Runtime.Numerics.dll", - "lib/net45/_._", - "lib/netcore50/System.Runtime.Numerics.dll", - "lib/win8/_._", - "lib/wpa81/_._", - "ref/dotnet/System.Runtime.Numerics.dll", - "ref/dotnet/System.Runtime.Numerics.xml", - "ref/dotnet/de/System.Runtime.Numerics.xml", - "ref/dotnet/es/System.Runtime.Numerics.xml", - "ref/dotnet/fr/System.Runtime.Numerics.xml", - "ref/dotnet/it/System.Runtime.Numerics.xml", - "ref/dotnet/ja/System.Runtime.Numerics.xml", - "ref/dotnet/ko/System.Runtime.Numerics.xml", - "ref/dotnet/ru/System.Runtime.Numerics.xml", - "ref/dotnet/zh-hans/System.Runtime.Numerics.xml", - "ref/dotnet/zh-hant/System.Runtime.Numerics.xml", - "ref/net45/_._", - "ref/netcore50/System.Runtime.Numerics.dll", - "ref/netcore50/System.Runtime.Numerics.xml", - "ref/win8/_._", - "ref/wpa81/_._" - ] - }, - "System.Runtime.WindowsRuntime/4.0.10": { - "sha512": "9w6ypdnEw8RrLRlxTbLAYrap4eL1xIQeNoOaumQVOQ8TTD/5g9FGrBtY3KLiGxAPieN9AwAAEIDkugU85Cwuvg==", - "type": "package", - "path": "System.Runtime.WindowsRuntime/4.0.10", - "files": [ - "System.Runtime.WindowsRuntime.4.0.10.nupkg.sha512", - "System.Runtime.WindowsRuntime.nuspec", - "lib/netcore50/System.Runtime.WindowsRuntime.dll", - "lib/win81/_._", - "lib/wpa81/_._", - "ref/dotnet/System.Runtime.WindowsRuntime.dll", - "ref/dotnet/System.Runtime.WindowsRuntime.xml", - "ref/dotnet/de/System.Runtime.WindowsRuntime.xml", - "ref/dotnet/es/System.Runtime.WindowsRuntime.xml", - "ref/dotnet/fr/System.Runtime.WindowsRuntime.xml", - "ref/dotnet/it/System.Runtime.WindowsRuntime.xml", - "ref/dotnet/ja/System.Runtime.WindowsRuntime.xml", - "ref/dotnet/ko/System.Runtime.WindowsRuntime.xml", - "ref/dotnet/ru/System.Runtime.WindowsRuntime.xml", - "ref/dotnet/zh-hans/System.Runtime.WindowsRuntime.xml", - "ref/dotnet/zh-hant/System.Runtime.WindowsRuntime.xml", - "ref/netcore50/System.Runtime.WindowsRuntime.dll", - "ref/netcore50/System.Runtime.WindowsRuntime.xml", - "ref/win81/_._", - "ref/wpa81/_._", - "runtimes/win8-aot/lib/netcore50/System.Runtime.WindowsRuntime.dll" - ] - }, - "System.Security.Claims/4.0.0": { - "sha512": "94NFR/7JN3YdyTH7hl2iSvYmdA8aqShriTHectcK+EbizT71YczMaG6LuqJBQP/HWo66AQyikYYM9aw+4EzGXg==", - "type": "package", - "path": "System.Security.Claims/4.0.0", - "files": [ - "System.Security.Claims.4.0.0.nupkg.sha512", - "System.Security.Claims.nuspec", - "lib/MonoAndroid10/_._", - "lib/MonoTouch10/_._", - "lib/dotnet/System.Security.Claims.dll", - "lib/net46/System.Security.Claims.dll", - "lib/xamarinios10/_._", - "lib/xamarinmac20/_._", - "ref/MonoAndroid10/_._", - "ref/MonoTouch10/_._", - "ref/dotnet/System.Security.Claims.dll", - "ref/dotnet/System.Security.Claims.xml", - "ref/dotnet/de/System.Security.Claims.xml", - "ref/dotnet/es/System.Security.Claims.xml", - "ref/dotnet/fr/System.Security.Claims.xml", - "ref/dotnet/it/System.Security.Claims.xml", - "ref/dotnet/ja/System.Security.Claims.xml", - "ref/dotnet/ko/System.Security.Claims.xml", - "ref/dotnet/ru/System.Security.Claims.xml", - "ref/dotnet/zh-hans/System.Security.Claims.xml", - "ref/dotnet/zh-hant/System.Security.Claims.xml", - "ref/net46/System.Security.Claims.dll", - "ref/xamarinios10/_._", - "ref/xamarinmac20/_._" - ] - }, - "System.Security.Principal/4.0.0": { - "sha512": "FOhq3jUOONi6fp5j3nPYJMrKtSJlqAURpjiO3FaDIV4DJNEYymWW5uh1pfxySEB8dtAW+I66IypzNge/w9OzZQ==", - "type": "package", - "path": "System.Security.Principal/4.0.0", - "files": [ - "System.Security.Principal.4.0.0.nupkg.sha512", - "System.Security.Principal.nuspec", - "lib/dotnet/System.Security.Principal.dll", - "lib/net45/_._", - "lib/netcore50/System.Security.Principal.dll", - "lib/win8/_._", - "lib/wp80/_._", - "lib/wpa81/_._", - "ref/dotnet/System.Security.Principal.dll", - "ref/dotnet/System.Security.Principal.xml", - "ref/dotnet/de/System.Security.Principal.xml", - "ref/dotnet/es/System.Security.Principal.xml", - "ref/dotnet/fr/System.Security.Principal.xml", - "ref/dotnet/it/System.Security.Principal.xml", - "ref/dotnet/ja/System.Security.Principal.xml", - "ref/dotnet/ko/System.Security.Principal.xml", - "ref/dotnet/ru/System.Security.Principal.xml", - "ref/dotnet/zh-hans/System.Security.Principal.xml", - "ref/dotnet/zh-hant/System.Security.Principal.xml", - "ref/net45/_._", - "ref/netcore50/System.Security.Principal.dll", - "ref/netcore50/System.Security.Principal.xml", - "ref/win8/_._", - "ref/wp80/_._", - "ref/wpa81/_._" - ] - }, - "System.Text.Encoding/4.0.10": { - "sha512": "fNlSFgy4OuDlJrP9SFFxMlaLazq6ipv15sU5TiEgg9UCVnA/OgoVUfymFp4AOk1jOkW5SVxWbeeIUptcM+m/Vw==", - "type": "package", - "path": "System.Text.Encoding/4.0.10", - "files": [ - "System.Text.Encoding.4.0.10.nupkg.sha512", - "System.Text.Encoding.nuspec", - "lib/DNXCore50/System.Text.Encoding.dll", - "lib/MonoAndroid10/_._", - "lib/MonoTouch10/_._", - "lib/net46/_._", - "lib/netcore50/System.Text.Encoding.dll", - "lib/xamarinios10/_._", - "lib/xamarinmac20/_._", - "ref/MonoAndroid10/_._", - "ref/MonoTouch10/_._", - "ref/dotnet/System.Text.Encoding.dll", - "ref/dotnet/System.Text.Encoding.xml", - "ref/dotnet/de/System.Text.Encoding.xml", - "ref/dotnet/es/System.Text.Encoding.xml", - "ref/dotnet/fr/System.Text.Encoding.xml", - "ref/dotnet/it/System.Text.Encoding.xml", - "ref/dotnet/ja/System.Text.Encoding.xml", - "ref/dotnet/ko/System.Text.Encoding.xml", - "ref/dotnet/ru/System.Text.Encoding.xml", - "ref/dotnet/zh-hans/System.Text.Encoding.xml", - "ref/dotnet/zh-hant/System.Text.Encoding.xml", - "ref/net46/_._", - "ref/xamarinios10/_._", - "ref/xamarinmac20/_._", - "runtimes/win8-aot/lib/netcore50/System.Text.Encoding.dll" - ] - }, - "System.Text.Encoding.Extensions/4.0.10": { - "sha512": "TZvlwXMxKo3bSRIcsWZLCIzIhLbvlz+mGeKYRZv/zUiSoQzGOwkYeBu6hOw2XPQgKqT0F4Rv8zqKdvmp2fWKYg==", - "type": "package", - "path": "System.Text.Encoding.Extensions/4.0.10", - "files": [ - "System.Text.Encoding.Extensions.4.0.10.nupkg.sha512", - "System.Text.Encoding.Extensions.nuspec", - "lib/DNXCore50/System.Text.Encoding.Extensions.dll", - "lib/MonoAndroid10/_._", - "lib/MonoTouch10/_._", - "lib/net46/_._", - "lib/netcore50/System.Text.Encoding.Extensions.dll", - "lib/xamarinios10/_._", - "lib/xamarinmac20/_._", - "ref/MonoAndroid10/_._", - "ref/MonoTouch10/_._", - "ref/dotnet/System.Text.Encoding.Extensions.dll", - "ref/dotnet/System.Text.Encoding.Extensions.xml", - "ref/dotnet/de/System.Text.Encoding.Extensions.xml", - "ref/dotnet/es/System.Text.Encoding.Extensions.xml", - "ref/dotnet/fr/System.Text.Encoding.Extensions.xml", - "ref/dotnet/it/System.Text.Encoding.Extensions.xml", - "ref/dotnet/ja/System.Text.Encoding.Extensions.xml", - "ref/dotnet/ko/System.Text.Encoding.Extensions.xml", - "ref/dotnet/ru/System.Text.Encoding.Extensions.xml", - "ref/dotnet/zh-hans/System.Text.Encoding.Extensions.xml", - "ref/dotnet/zh-hant/System.Text.Encoding.Extensions.xml", - "ref/net46/_._", - "ref/xamarinios10/_._", - "ref/xamarinmac20/_._", - "runtimes/win8-aot/lib/netcore50/System.Text.Encoding.Extensions.dll" - ] - }, - "System.Text.RegularExpressions/4.0.10": { - "sha512": "0vDuHXJePpfMCecWBNOabOKCvzfTbFMNcGgklt3l5+RqHV5SzmF7RUVpuet8V0rJX30ROlL66xdehw2Rdsn2DA==", - "type": "package", - "path": "System.Text.RegularExpressions/4.0.10", - "files": [ - "System.Text.RegularExpressions.4.0.10.nupkg.sha512", - "System.Text.RegularExpressions.nuspec", - "lib/MonoAndroid10/_._", - "lib/MonoTouch10/_._", - "lib/dotnet/System.Text.RegularExpressions.dll", - "lib/net46/_._", - "lib/xamarinios10/_._", - "lib/xamarinmac20/_._", - "ref/MonoAndroid10/_._", - "ref/MonoTouch10/_._", - "ref/dotnet/System.Text.RegularExpressions.dll", - "ref/dotnet/System.Text.RegularExpressions.xml", - "ref/dotnet/de/System.Text.RegularExpressions.xml", - "ref/dotnet/es/System.Text.RegularExpressions.xml", - "ref/dotnet/fr/System.Text.RegularExpressions.xml", - "ref/dotnet/it/System.Text.RegularExpressions.xml", - "ref/dotnet/ja/System.Text.RegularExpressions.xml", - "ref/dotnet/ko/System.Text.RegularExpressions.xml", - "ref/dotnet/ru/System.Text.RegularExpressions.xml", - "ref/dotnet/zh-hans/System.Text.RegularExpressions.xml", - "ref/dotnet/zh-hant/System.Text.RegularExpressions.xml", - "ref/net46/_._", - "ref/xamarinios10/_._", - "ref/xamarinmac20/_._" - ] - }, - "System.Threading/4.0.10": { - "sha512": "0w6pRxIEE7wuiOJeKabkDgeIKmqf4ER1VNrs6qFwHnooEE78yHwi/bKkg5Jo8/pzGLm0xQJw0nEmPXt1QBAIUA==", - "type": "package", - "path": "System.Threading/4.0.10", - "files": [ - "System.Threading.4.0.10.nupkg.sha512", - "System.Threading.nuspec", - "lib/DNXCore50/System.Threading.dll", - "lib/MonoAndroid10/_._", - "lib/MonoTouch10/_._", - "lib/net46/_._", - "lib/netcore50/System.Threading.dll", - "lib/xamarinios10/_._", - "lib/xamarinmac20/_._", - "ref/MonoAndroid10/_._", - "ref/MonoTouch10/_._", - "ref/dotnet/System.Threading.dll", - "ref/dotnet/System.Threading.xml", - "ref/dotnet/de/System.Threading.xml", - "ref/dotnet/es/System.Threading.xml", - "ref/dotnet/fr/System.Threading.xml", - "ref/dotnet/it/System.Threading.xml", - "ref/dotnet/ja/System.Threading.xml", - "ref/dotnet/ko/System.Threading.xml", - "ref/dotnet/ru/System.Threading.xml", - "ref/dotnet/zh-hans/System.Threading.xml", - "ref/dotnet/zh-hant/System.Threading.xml", - "ref/net46/_._", - "ref/xamarinios10/_._", - "ref/xamarinmac20/_._", - "runtimes/win8-aot/lib/netcore50/System.Threading.dll" - ] - }, - "System.Threading.Overlapped/4.0.0": { - "sha512": "X5LuQFhM5FTqaez3eXKJ9CbfSGZ7wj6j4hSVtxct3zmwQXLqG95qoWdvILcgN7xtrDOBIFtpiyDg0vmoI0jE2A==", - "type": "package", - "path": "System.Threading.Overlapped/4.0.0", - "files": [ - "System.Threading.Overlapped.4.0.0.nupkg.sha512", - "System.Threading.Overlapped.nuspec", - "lib/DNXCore50/System.Threading.Overlapped.dll", - "lib/net46/System.Threading.Overlapped.dll", - "lib/netcore50/System.Threading.Overlapped.dll", - "ref/dotnet/System.Threading.Overlapped.dll", - "ref/dotnet/System.Threading.Overlapped.xml", - "ref/dotnet/de/System.Threading.Overlapped.xml", - "ref/dotnet/es/System.Threading.Overlapped.xml", - "ref/dotnet/fr/System.Threading.Overlapped.xml", - "ref/dotnet/it/System.Threading.Overlapped.xml", - "ref/dotnet/ja/System.Threading.Overlapped.xml", - "ref/dotnet/ko/System.Threading.Overlapped.xml", - "ref/dotnet/ru/System.Threading.Overlapped.xml", - "ref/dotnet/zh-hans/System.Threading.Overlapped.xml", - "ref/dotnet/zh-hant/System.Threading.Overlapped.xml", - "ref/net46/System.Threading.Overlapped.dll" - ] - }, - "System.Threading.Tasks/4.0.10": { - "sha512": "NOwJGDfk79jR0bnzosbXLVD/PdI8KzBeESoa3CofEM5v9R5EBfcI0Jyf18stx+0IYV9okmDIDxVtxq9TbnR9bQ==", - "type": "package", - "path": "System.Threading.Tasks/4.0.10", - "files": [ - "System.Threading.Tasks.4.0.10.nupkg.sha512", - "System.Threading.Tasks.nuspec", - "lib/DNXCore50/System.Threading.Tasks.dll", - "lib/MonoAndroid10/_._", - "lib/MonoTouch10/_._", - "lib/net46/_._", - "lib/netcore50/System.Threading.Tasks.dll", - "lib/xamarinios10/_._", - "lib/xamarinmac20/_._", - "ref/MonoAndroid10/_._", - "ref/MonoTouch10/_._", - "ref/dotnet/System.Threading.Tasks.dll", - "ref/dotnet/System.Threading.Tasks.xml", - "ref/dotnet/de/System.Threading.Tasks.xml", - "ref/dotnet/es/System.Threading.Tasks.xml", - "ref/dotnet/fr/System.Threading.Tasks.xml", - "ref/dotnet/it/System.Threading.Tasks.xml", - "ref/dotnet/ja/System.Threading.Tasks.xml", - "ref/dotnet/ko/System.Threading.Tasks.xml", - "ref/dotnet/ru/System.Threading.Tasks.xml", - "ref/dotnet/zh-hans/System.Threading.Tasks.xml", - "ref/dotnet/zh-hant/System.Threading.Tasks.xml", - "ref/net46/_._", - "ref/xamarinios10/_._", - "ref/xamarinmac20/_._", - "runtimes/win8-aot/lib/netcore50/System.Threading.Tasks.dll" - ] - }, - "System.Threading.Tasks.Dataflow/4.5.25": { - "sha512": "Y5/Dj+tYlDxHBwie7bFKp3+1uSG4vqTJRF7Zs7kaUQ3ahYClffCTxvgjrJyPclC+Le55uE7bMLgjZQVOQr3Jfg==", - "type": "package", - "path": "System.Threading.Tasks.Dataflow/4.5.25", - "files": [ - "System.Threading.Tasks.Dataflow.4.5.25.nupkg.sha512", - "System.Threading.Tasks.Dataflow.nuspec", - "lib/dotnet/System.Threading.Tasks.Dataflow.XML", - "lib/dotnet/System.Threading.Tasks.Dataflow.dll", - "lib/portable-net45+win8+wp8+wpa81/System.Threading.Tasks.Dataflow.XML", - "lib/portable-net45+win8+wp8+wpa81/System.Threading.Tasks.Dataflow.dll", - "lib/portable-net45+win8+wpa81/System.Threading.Tasks.Dataflow.XML", - "lib/portable-net45+win8+wpa81/System.Threading.Tasks.Dataflow.dll" - ] - }, - "System.Threading.Tasks.Parallel/4.0.0": { - "sha512": "GXDhjPhF3nE4RtDia0W6JR4UMdmhOyt9ibHmsNV6GLRT4HAGqU636Teo4tqvVQOFp2R6b1ffxPXiRaoqtzGxuA==", - "type": "package", - "path": "System.Threading.Tasks.Parallel/4.0.0", - "files": [ - "System.Threading.Tasks.Parallel.4.0.0.nupkg.sha512", - "System.Threading.Tasks.Parallel.nuspec", - "lib/dotnet/System.Threading.Tasks.Parallel.dll", - "lib/net45/_._", - "lib/netcore50/System.Threading.Tasks.Parallel.dll", - "lib/win8/_._", - "lib/wpa81/_._", - "ref/dotnet/System.Threading.Tasks.Parallel.dll", - "ref/dotnet/System.Threading.Tasks.Parallel.xml", - "ref/dotnet/de/System.Threading.Tasks.Parallel.xml", - "ref/dotnet/es/System.Threading.Tasks.Parallel.xml", - "ref/dotnet/fr/System.Threading.Tasks.Parallel.xml", - "ref/dotnet/it/System.Threading.Tasks.Parallel.xml", - "ref/dotnet/ja/System.Threading.Tasks.Parallel.xml", - "ref/dotnet/ko/System.Threading.Tasks.Parallel.xml", - "ref/dotnet/ru/System.Threading.Tasks.Parallel.xml", - "ref/dotnet/zh-hans/System.Threading.Tasks.Parallel.xml", - "ref/dotnet/zh-hant/System.Threading.Tasks.Parallel.xml", - "ref/net45/_._", - "ref/netcore50/System.Threading.Tasks.Parallel.dll", - "ref/netcore50/System.Threading.Tasks.Parallel.xml", - "ref/win8/_._", - "ref/wpa81/_._" - ] - }, - "System.Threading.Timer/4.0.0": { - "sha512": "BIdJH5/e4FnVl7TkRUiE3pWytp7OYiRUGtwUbyLewS/PhKiLepFetdtlW+FvDYOVn60Q2NMTrhHhJ51q+sVW5g==", - "type": "package", - "path": "System.Threading.Timer/4.0.0", - "files": [ - "System.Threading.Timer.4.0.0.nupkg.sha512", - "System.Threading.Timer.nuspec", - "lib/DNXCore50/System.Threading.Timer.dll", - "lib/net451/_._", - "lib/netcore50/System.Threading.Timer.dll", - "lib/win81/_._", - "lib/wpa81/_._", - "ref/dotnet/System.Threading.Timer.dll", - "ref/dotnet/System.Threading.Timer.xml", - "ref/dotnet/de/System.Threading.Timer.xml", - "ref/dotnet/es/System.Threading.Timer.xml", - "ref/dotnet/fr/System.Threading.Timer.xml", - "ref/dotnet/it/System.Threading.Timer.xml", - "ref/dotnet/ja/System.Threading.Timer.xml", - "ref/dotnet/ko/System.Threading.Timer.xml", - "ref/dotnet/ru/System.Threading.Timer.xml", - "ref/dotnet/zh-hans/System.Threading.Timer.xml", - "ref/dotnet/zh-hant/System.Threading.Timer.xml", - "ref/net451/_._", - "ref/netcore50/System.Threading.Timer.dll", - "ref/netcore50/System.Threading.Timer.xml", - "ref/win81/_._", - "ref/wpa81/_._", - "runtimes/win8-aot/lib/netcore50/System.Threading.Timer.dll" - ] - }, - "System.Xml.ReaderWriter/4.0.10": { - "sha512": "VdmWWMH7otrYV7D+cviUo7XjX0jzDnD/lTGSZTlZqfIQ5PhXk85j+6P0TK9od3PnOd5ZIM+pOk01G/J+3nh9/w==", - "type": "package", - "path": "System.Xml.ReaderWriter/4.0.10", - "files": [ - "System.Xml.ReaderWriter.4.0.10.nupkg.sha512", - "System.Xml.ReaderWriter.nuspec", - "lib/MonoAndroid10/_._", - "lib/MonoTouch10/_._", - "lib/dotnet/System.Xml.ReaderWriter.dll", - "lib/net46/_._", - "lib/xamarinios10/_._", - "lib/xamarinmac20/_._", - "ref/MonoAndroid10/_._", - "ref/MonoTouch10/_._", - "ref/dotnet/System.Xml.ReaderWriter.dll", - "ref/dotnet/System.Xml.ReaderWriter.xml", - "ref/dotnet/de/System.Xml.ReaderWriter.xml", - "ref/dotnet/es/System.Xml.ReaderWriter.xml", - "ref/dotnet/fr/System.Xml.ReaderWriter.xml", - "ref/dotnet/it/System.Xml.ReaderWriter.xml", - "ref/dotnet/ja/System.Xml.ReaderWriter.xml", - "ref/dotnet/ko/System.Xml.ReaderWriter.xml", - "ref/dotnet/ru/System.Xml.ReaderWriter.xml", - "ref/dotnet/zh-hans/System.Xml.ReaderWriter.xml", - "ref/dotnet/zh-hant/System.Xml.ReaderWriter.xml", - "ref/net46/_._", - "ref/xamarinios10/_._", - "ref/xamarinmac20/_._" - ] - }, - "System.Xml.XDocument/4.0.10": { - "sha512": "+ej0g0INnXDjpS2tDJsLO7/BjyBzC+TeBXLeoGnvRrm4AuBH9PhBjjZ1IuKWOhCkxPkFognUOKhZHS2glIOlng==", - "type": "package", - "path": "System.Xml.XDocument/4.0.10", - "files": [ - "System.Xml.XDocument.4.0.10.nupkg.sha512", - "System.Xml.XDocument.nuspec", - "lib/MonoAndroid10/_._", - "lib/MonoTouch10/_._", - "lib/dotnet/System.Xml.XDocument.dll", - "lib/net46/_._", - "lib/xamarinios10/_._", - "lib/xamarinmac20/_._", - "ref/MonoAndroid10/_._", - "ref/MonoTouch10/_._", - "ref/dotnet/System.Xml.XDocument.dll", - "ref/dotnet/System.Xml.XDocument.xml", - "ref/dotnet/de/System.Xml.XDocument.xml", - "ref/dotnet/es/System.Xml.XDocument.xml", - "ref/dotnet/fr/System.Xml.XDocument.xml", - "ref/dotnet/it/System.Xml.XDocument.xml", - "ref/dotnet/ja/System.Xml.XDocument.xml", - "ref/dotnet/ko/System.Xml.XDocument.xml", - "ref/dotnet/ru/System.Xml.XDocument.xml", - "ref/dotnet/zh-hans/System.Xml.XDocument.xml", - "ref/dotnet/zh-hant/System.Xml.XDocument.xml", - "ref/net46/_._", - "ref/xamarinios10/_._", - "ref/xamarinmac20/_._" - ] - } + ".NETPortable,Version=v4.5,Profile=Profile7": {} }, + "libraries": {}, "projectFileDependencyGroups": { - "": [ - "Microsoft.NETCore >= 5.0.0", - "Microsoft.NETCore.Portable.Compatibility >= 1.0.0" - ], - ".NETPlatform,Version=v5.0": [] + "": [], + ".NETPortable,Version=v4.5,Profile=Profile7": [] } } \ No newline at end of file -- cgit v1.2.3 From 2729301bffb8b4a15c2228fee39717d80b123e60 Mon Sep 17 00:00:00 2001 From: Luke Pulverenti Date: Sat, 29 Oct 2016 01:40:15 -0400 Subject: move common dependencies --- Emby.Common.Implementations/BaseApplicationHost.cs | 773 ++++ .../BaseApplicationPaths.cs | 178 + .../Configuration/BaseConfigurationManager.cs | 329 ++ .../Configuration/ConfigurationHelper.cs | 60 + .../Cryptography/CryptographyProvider.cs | 30 + Emby.Common.Implementations/Devices/DeviceId.cs | 109 + .../Emby.Common.Implementations.xproj | 23 + .../HttpClientManager/HttpClientInfo.cs | 16 + .../HttpClientManager/HttpClientManager.cs | 936 +++++ Emby.Common.Implementations/IO/IsoManager.cs | 75 + .../IO/ManagedFileSystem.cs | 705 ++++ .../IO/WindowsFileSystem.cs | 13 + .../Networking/BaseNetworkManager.cs | 385 ++ .../Properties/AssemblyInfo.cs | 19 + .../ScheduledTasks/DailyTrigger.cs | 91 + .../ScheduledTasks/IntervalTrigger.cs | 112 + .../ScheduledTasks/ScheduledTaskWorker.cs | 782 ++++ .../ScheduledTasks/StartupTrigger.cs | 67 + .../ScheduledTasks/SystemEventTrigger.cs | 86 + .../ScheduledTasks/TaskManager.cs | 358 ++ .../ScheduledTasks/Tasks/DeleteCacheFileTask.cs | 215 + .../ScheduledTasks/Tasks/DeleteLogFileTask.cs | 138 + .../ScheduledTasks/Tasks/ReloadLoggerFileTask.cs | 112 + .../ScheduledTasks/WeeklyTrigger.cs | 116 + .../Serialization/XmlSerializer.cs | 130 + .../Updates/GithubUpdater.cs | 269 ++ .../project.fragment.lock.json | 39 + Emby.Common.Implementations/project.json | 48 + Emby.Common.Implementations/project.lock.json | 4403 ++++++++++++++++++++ .../BaseApplicationHost.cs | 26 +- .../Configuration/BaseConfigurationManager.cs | 12 +- .../Configuration/ConfigurationHelper.cs | 9 +- .../IO/ManagedFileSystem.cs | 11 +- .../MediaBrowser.Common.Implementations.csproj | 6 - .../ScheduledTasks/DailyTrigger.cs | 8 +- .../ScheduledTasks/IntervalTrigger.cs | 8 +- .../ScheduledTasks/StartupTrigger.cs | 8 +- .../ScheduledTasks/TaskManager.cs | 17 +- .../ScheduledTasks/WeeklyTrigger.cs | 2 +- .../Security/MBLicenseFile.cs | 157 - .../Security/MbAdmin.cs | 13 - .../Security/PluginSecurityManager.cs | 337 -- .../Security/RegRecord.cs | 12 - .../Security/SuppporterInfoResponse.cs | 14 - .../Updates/InstallationManager.cs | 686 --- MediaBrowser.Model/IO/IFileSystem.cs | 4 + MediaBrowser.Model/MediaBrowser.Model.csproj | 1 + MediaBrowser.Model/System/ISystemEvents.cs | 10 + .../MediaBrowser.Server.Implementations.csproj | 4 + .../Security/MBLicenseFile.cs | 157 + .../Security/PluginSecurityManager.cs | 342 ++ .../Security/RegRecord.cs | 12 + .../Updates/InstallationManager.cs | 685 +++ MediaBrowser.Server.Mono/Program.cs | 2 +- .../ApplicationHost.cs | 26 +- .../MediaBrowser.Server.Startup.Common.csproj | 2 +- .../Migrations/MovieDbEpisodeProviderMigration.cs | 44 - MediaBrowser.Server.Startup.Common/SystemEvents.cs | 34 + MediaBrowser.ServerApplication/MainStartup.cs | 4 +- 59 files changed, 11943 insertions(+), 1327 deletions(-) create mode 100644 Emby.Common.Implementations/BaseApplicationHost.cs create mode 100644 Emby.Common.Implementations/BaseApplicationPaths.cs create mode 100644 Emby.Common.Implementations/Configuration/BaseConfigurationManager.cs create mode 100644 Emby.Common.Implementations/Configuration/ConfigurationHelper.cs create mode 100644 Emby.Common.Implementations/Cryptography/CryptographyProvider.cs create mode 100644 Emby.Common.Implementations/Devices/DeviceId.cs create mode 100644 Emby.Common.Implementations/Emby.Common.Implementations.xproj create mode 100644 Emby.Common.Implementations/HttpClientManager/HttpClientInfo.cs create mode 100644 Emby.Common.Implementations/HttpClientManager/HttpClientManager.cs create mode 100644 Emby.Common.Implementations/IO/IsoManager.cs create mode 100644 Emby.Common.Implementations/IO/ManagedFileSystem.cs create mode 100644 Emby.Common.Implementations/IO/WindowsFileSystem.cs create mode 100644 Emby.Common.Implementations/Networking/BaseNetworkManager.cs create mode 100644 Emby.Common.Implementations/Properties/AssemblyInfo.cs create mode 100644 Emby.Common.Implementations/ScheduledTasks/DailyTrigger.cs create mode 100644 Emby.Common.Implementations/ScheduledTasks/IntervalTrigger.cs create mode 100644 Emby.Common.Implementations/ScheduledTasks/ScheduledTaskWorker.cs create mode 100644 Emby.Common.Implementations/ScheduledTasks/StartupTrigger.cs create mode 100644 Emby.Common.Implementations/ScheduledTasks/SystemEventTrigger.cs create mode 100644 Emby.Common.Implementations/ScheduledTasks/TaskManager.cs create mode 100644 Emby.Common.Implementations/ScheduledTasks/Tasks/DeleteCacheFileTask.cs create mode 100644 Emby.Common.Implementations/ScheduledTasks/Tasks/DeleteLogFileTask.cs create mode 100644 Emby.Common.Implementations/ScheduledTasks/Tasks/ReloadLoggerFileTask.cs create mode 100644 Emby.Common.Implementations/ScheduledTasks/WeeklyTrigger.cs create mode 100644 Emby.Common.Implementations/Serialization/XmlSerializer.cs create mode 100644 Emby.Common.Implementations/Updates/GithubUpdater.cs create mode 100644 Emby.Common.Implementations/project.fragment.lock.json create mode 100644 Emby.Common.Implementations/project.json create mode 100644 Emby.Common.Implementations/project.lock.json delete mode 100644 MediaBrowser.Common.Implementations/Security/MBLicenseFile.cs delete mode 100644 MediaBrowser.Common.Implementations/Security/MbAdmin.cs delete mode 100644 MediaBrowser.Common.Implementations/Security/PluginSecurityManager.cs delete mode 100644 MediaBrowser.Common.Implementations/Security/RegRecord.cs delete mode 100644 MediaBrowser.Common.Implementations/Security/SuppporterInfoResponse.cs delete mode 100644 MediaBrowser.Common.Implementations/Updates/InstallationManager.cs create mode 100644 MediaBrowser.Model/System/ISystemEvents.cs create mode 100644 MediaBrowser.Server.Implementations/Security/MBLicenseFile.cs create mode 100644 MediaBrowser.Server.Implementations/Security/PluginSecurityManager.cs create mode 100644 MediaBrowser.Server.Implementations/Security/RegRecord.cs create mode 100644 MediaBrowser.Server.Implementations/Updates/InstallationManager.cs delete mode 100644 MediaBrowser.Server.Startup.Common/Migrations/MovieDbEpisodeProviderMigration.cs create mode 100644 MediaBrowser.Server.Startup.Common/SystemEvents.cs (limited to 'MediaBrowser.Model/IO/IFileSystem.cs') diff --git a/Emby.Common.Implementations/BaseApplicationHost.cs b/Emby.Common.Implementations/BaseApplicationHost.cs new file mode 100644 index 000000000..ac2747640 --- /dev/null +++ b/Emby.Common.Implementations/BaseApplicationHost.cs @@ -0,0 +1,773 @@ +using MediaBrowser.Common.Configuration; +using MediaBrowser.Common.Events; +using Emby.Common.Implementations.Devices; +using Emby.Common.Implementations.IO; +using Emby.Common.Implementations.ScheduledTasks; +using Emby.Common.Implementations.Serialization; +using Emby.Common.Implementations.Updates; +using MediaBrowser.Common.Net; +using MediaBrowser.Common.Plugins; +using MediaBrowser.Common.Progress; +using MediaBrowser.Common.Security; +using MediaBrowser.Common.Updates; +using MediaBrowser.Model.Events; +using MediaBrowser.Model.IO; +using MediaBrowser.Model.Logging; +using MediaBrowser.Model.Serialization; +using MediaBrowser.Model.Updates; +using System; +using System.Collections.Generic; +using System.IO; +using System.Linq; +using System.Net; +using System.Reflection; +using System.Runtime.InteropServices; +using System.Text; +using System.Threading; +using System.Threading.Tasks; +using MediaBrowser.Common.Extensions; +using Emby.Common.Implementations.Cryptography; +using MediaBrowser.Common; +using MediaBrowser.Common.IO; +using MediaBrowser.Model.Cryptography; +using MediaBrowser.Model.System; +using MediaBrowser.Model.Tasks; + +namespace Emby.Common.Implementations +{ + /// + /// Class BaseApplicationHost + /// + /// The type of the T application paths type. + public abstract class BaseApplicationHost : IApplicationHost + where TApplicationPathsType : class, IApplicationPaths + { + /// + /// Occurs when [has pending restart changed]. + /// + public event EventHandler HasPendingRestartChanged; + + /// + /// Occurs when [application updated]. + /// + public event EventHandler> ApplicationUpdated; + + /// + /// Gets or sets a value indicating whether this instance has changes that require the entire application to restart. + /// + /// true if this instance has pending application restart; otherwise, false. + public bool HasPendingRestart { get; private set; } + + /// + /// Gets or sets the logger. + /// + /// The logger. + protected ILogger Logger { get; private set; } + + /// + /// Gets or sets the plugins. + /// + /// The plugins. + public IPlugin[] Plugins { get; protected set; } + + /// + /// Gets or sets the log manager. + /// + /// The log manager. + public ILogManager LogManager { get; protected set; } + + /// + /// Gets the application paths. + /// + /// The application paths. + protected TApplicationPathsType ApplicationPaths { get; private set; } + + /// + /// The json serializer + /// + public IJsonSerializer JsonSerializer { get; private set; } + + /// + /// The _XML serializer + /// + protected readonly IXmlSerializer XmlSerializer; + + /// + /// Gets assemblies that failed to load + /// + /// The failed assemblies. + public List FailedAssemblies { get; protected set; } + + /// + /// Gets all concrete types. + /// + /// All concrete types. + public Type[] AllConcreteTypes { get; protected set; } + + /// + /// The disposable parts + /// + protected readonly List DisposableParts = new List(); + + /// + /// Gets a value indicating whether this instance is first run. + /// + /// true if this instance is first run; otherwise, false. + public bool IsFirstRun { get; private set; } + + /// + /// Gets the kernel. + /// + /// The kernel. + protected ITaskManager TaskManager { get; private set; } + /// + /// Gets the HTTP client. + /// + /// The HTTP client. + public IHttpClient HttpClient { get; private set; } + /// + /// Gets the network manager. + /// + /// The network manager. + protected INetworkManager NetworkManager { get; private set; } + + /// + /// Gets the configuration manager. + /// + /// The configuration manager. + protected IConfigurationManager ConfigurationManager { get; private set; } + + protected IFileSystem FileSystemManager { get; private set; } + + protected IIsoManager IsoManager { get; private set; } + + protected ISystemEvents SystemEvents { get; private set; } + + /// + /// Gets the name. + /// + /// The name. + public abstract string Name { get; } + + /// + /// Gets a value indicating whether this instance is running as service. + /// + /// true if this instance is running as service; otherwise, false. + public abstract bool IsRunningAsService { get; } + + protected ICryptographyProvider CryptographyProvider = new CryptographyProvider(); + + private DeviceId _deviceId; + public string SystemId + { + get + { + if (_deviceId == null) + { + _deviceId = new DeviceId(ApplicationPaths, LogManager.GetLogger("SystemId"), FileSystemManager); + } + + return _deviceId.Value; + } + } + + public virtual string OperatingSystemDisplayName + { + get { return Environment.OSVersion.VersionString; } + } + + public IMemoryStreamProvider MemoryStreamProvider { get; set; } + + /// + /// Initializes a new instance of the class. + /// + protected BaseApplicationHost(TApplicationPathsType applicationPaths, + ILogManager logManager, + IFileSystem fileSystem) + { + // hack alert, until common can target .net core + BaseExtensions.CryptographyProvider = CryptographyProvider; + + XmlSerializer = new XmlSerializer(fileSystem, logManager.GetLogger("XmlSerializer")); + FailedAssemblies = new List(); + + ApplicationPaths = applicationPaths; + LogManager = logManager; + FileSystemManager = fileSystem; + + ConfigurationManager = GetConfigurationManager(); + + // Initialize this early in case the -v command line option is used + Logger = LogManager.GetLogger("App"); + } + + /// + /// Inits this instance. + /// + /// Task. + public virtual async Task Init(IProgress progress) + { + progress.Report(1); + + JsonSerializer = CreateJsonSerializer(); + + MemoryStreamProvider = CreateMemoryStreamProvider(); + SystemEvents = CreateSystemEvents(); + + OnLoggerLoaded(true); + LogManager.LoggerLoaded += (s, e) => OnLoggerLoaded(false); + + IsFirstRun = !ConfigurationManager.CommonConfiguration.IsStartupWizardCompleted; + progress.Report(2); + + LogManager.LogSeverity = ConfigurationManager.CommonConfiguration.EnableDebugLevelLogging + ? LogSeverity.Debug + : LogSeverity.Info; + + progress.Report(3); + + DiscoverTypes(); + progress.Report(14); + + SetHttpLimit(); + progress.Report(15); + + var innerProgress = new ActionableProgress(); + innerProgress.RegisterAction(p => progress.Report(.8 * p + 15)); + + await RegisterResources(innerProgress).ConfigureAwait(false); + + FindParts(); + progress.Report(95); + + await InstallIsoMounters(CancellationToken.None).ConfigureAwait(false); + + progress.Report(100); + } + + protected abstract IMemoryStreamProvider CreateMemoryStreamProvider(); + protected abstract ISystemEvents CreateSystemEvents(); + + protected virtual void OnLoggerLoaded(bool isFirstLoad) + { + Logger.Info("Application version: {0}", ApplicationVersion); + + if (!isFirstLoad) + { + LogEnvironmentInfo(Logger, ApplicationPaths, false); + } + + // Put the app config in the log for troubleshooting purposes + Logger.LogMultiline("Application configuration:", LogSeverity.Info, new StringBuilder(JsonSerializer.SerializeToString(ConfigurationManager.CommonConfiguration))); + + if (Plugins != null) + { + var pluginBuilder = new StringBuilder(); + + foreach (var plugin in Plugins) + { + pluginBuilder.AppendLine(string.Format("{0} {1}", plugin.Name, plugin.Version)); + } + + Logger.LogMultiline("Plugins:", LogSeverity.Info, pluginBuilder); + } + } + + public static void LogEnvironmentInfo(ILogger logger, IApplicationPaths appPaths, bool isStartup) + { + logger.LogMultiline("Emby", LogSeverity.Info, GetBaseExceptionMessage(appPaths)); + } + + protected static StringBuilder GetBaseExceptionMessage(IApplicationPaths appPaths) + { + var builder = new StringBuilder(); + + builder.AppendLine(string.Format("Command line: {0}", string.Join(" ", Environment.GetCommandLineArgs()))); + + builder.AppendLine(string.Format("Operating system: {0}", Environment.OSVersion)); + builder.AppendLine(string.Format("Processor count: {0}", Environment.ProcessorCount)); + builder.AppendLine(string.Format("64-Bit OS: {0}", Environment.Is64BitOperatingSystem)); + builder.AppendLine(string.Format("64-Bit Process: {0}", Environment.Is64BitProcess)); + builder.AppendLine(string.Format("Program data path: {0}", appPaths.ProgramDataPath)); + + Type type = Type.GetType("Mono.Runtime"); + if (type != null) + { + MethodInfo displayName = type.GetMethod("GetDisplayName", BindingFlags.NonPublic | BindingFlags.Static); + if (displayName != null) + { + builder.AppendLine("Mono: " + displayName.Invoke(null, null)); + } + } + + builder.AppendLine(string.Format("Application Path: {0}", appPaths.ApplicationPath)); + + return builder; + } + + protected abstract IJsonSerializer CreateJsonSerializer(); + + private void SetHttpLimit() + { + try + { + // Increase the max http request limit + ServicePointManager.DefaultConnectionLimit = Math.Max(96, ServicePointManager.DefaultConnectionLimit); + } + catch (Exception ex) + { + Logger.ErrorException("Error setting http limit", ex); + } + } + + /// + /// Installs the iso mounters. + /// + /// The cancellation token. + /// Task. + private async Task InstallIsoMounters(CancellationToken cancellationToken) + { + var list = new List(); + + foreach (var isoMounter in GetExports()) + { + try + { + if (isoMounter.RequiresInstallation && !isoMounter.IsInstalled) + { + Logger.Info("Installing {0}", isoMounter.Name); + + await isoMounter.Install(cancellationToken).ConfigureAwait(false); + } + + list.Add(isoMounter); + } + catch (Exception ex) + { + Logger.ErrorException("{0} failed to load.", ex, isoMounter.Name); + } + } + + IsoManager.AddParts(list); + } + + /// + /// Runs the startup tasks. + /// + /// Task. + public virtual Task RunStartupTasks() + { + Resolve().AddTasks(GetExports(false)); + + ConfigureAutorun(); + + ConfigurationManager.ConfigurationUpdated += OnConfigurationUpdated; + + return Task.FromResult(true); + } + + /// + /// Configures the autorun. + /// + private void ConfigureAutorun() + { + try + { + ConfigureAutoRunAtStartup(ConfigurationManager.CommonConfiguration.RunAtStartup); + } + catch (Exception ex) + { + Logger.ErrorException("Error configuring autorun", ex); + } + } + + /// + /// Gets the composable part assemblies. + /// + /// IEnumerable{Assembly}. + protected abstract IEnumerable GetComposablePartAssemblies(); + + /// + /// Gets the configuration manager. + /// + /// IConfigurationManager. + protected abstract IConfigurationManager GetConfigurationManager(); + + /// + /// Finds the parts. + /// + protected virtual void FindParts() + { + ConfigurationManager.AddParts(GetExports()); + Plugins = GetExports().Select(LoadPlugin).Where(i => i != null).ToArray(); + } + + private IPlugin LoadPlugin(IPlugin plugin) + { + try + { + var assemblyPlugin = plugin as IPluginAssembly; + + if (assemblyPlugin != null) + { + var assembly = plugin.GetType().Assembly; + var assemblyName = assembly.GetName(); + + var attribute = (GuidAttribute)assembly.GetCustomAttributes(typeof(GuidAttribute), true)[0]; + var assemblyId = new Guid(attribute.Value); + + var assemblyFileName = assemblyName.Name + ".dll"; + var assemblyFilePath = Path.Combine(ApplicationPaths.PluginsPath, assemblyFileName); + + assemblyPlugin.SetAttributes(assemblyFilePath, assemblyFileName, assemblyName.Version, assemblyId); + } + + var isFirstRun = !File.Exists(plugin.ConfigurationFilePath); + + plugin.SetStartupInfo(isFirstRun, File.GetLastWriteTimeUtc, s => Directory.CreateDirectory(s)); + } + catch (Exception ex) + { + Logger.ErrorException("Error loading plugin {0}", ex, plugin.GetType().FullName); + return null; + } + + return plugin; + } + + /// + /// Discovers the types. + /// + protected void DiscoverTypes() + { + FailedAssemblies.Clear(); + + var assemblies = GetComposablePartAssemblies().ToList(); + + foreach (var assembly in assemblies) + { + Logger.Info("Loading {0}", assembly.FullName); + } + + AllConcreteTypes = assemblies + .SelectMany(GetTypes) + .Where(t => t.IsClass && !t.IsAbstract && !t.IsInterface && !t.IsGenericType) + .ToArray(); + } + + /// + /// Registers resources that classes will depend on + /// + /// Task. + protected virtual Task RegisterResources(IProgress progress) + { + RegisterSingleInstance(ConfigurationManager); + RegisterSingleInstance(this); + + RegisterSingleInstance(ApplicationPaths); + + TaskManager = new TaskManager(ApplicationPaths, JsonSerializer, LogManager.GetLogger("TaskManager"), FileSystemManager, SystemEvents); + + RegisterSingleInstance(JsonSerializer); + RegisterSingleInstance(XmlSerializer); + RegisterSingleInstance(MemoryStreamProvider); + RegisterSingleInstance(SystemEvents); + + RegisterSingleInstance(LogManager); + RegisterSingleInstance(Logger); + + RegisterSingleInstance(TaskManager); + + RegisterSingleInstance(FileSystemManager); + + HttpClient = new HttpClientManager.HttpClientManager(ApplicationPaths, LogManager.GetLogger("HttpClient"), FileSystemManager, MemoryStreamProvider); + RegisterSingleInstance(HttpClient); + + NetworkManager = CreateNetworkManager(LogManager.GetLogger("NetworkManager")); + RegisterSingleInstance(NetworkManager); + + IsoManager = new IsoManager(); + RegisterSingleInstance(IsoManager); + + return Task.FromResult(true); + } + + /// + /// Gets a list of types within an assembly + /// This will handle situations that would normally throw an exception - such as a type within the assembly that depends on some other non-existant reference + /// + /// The assembly. + /// IEnumerable{Type}. + /// assembly + protected IEnumerable GetTypes(Assembly assembly) + { + if (assembly == null) + { + throw new ArgumentNullException("assembly"); + } + + try + { + return assembly.GetTypes(); + } + catch (ReflectionTypeLoadException ex) + { + if (ex.LoaderExceptions != null) + { + foreach (var loaderException in ex.LoaderExceptions) + { + Logger.Error("LoaderException: " + loaderException.Message); + } + } + + // If it fails we can still get a list of the Types it was able to resolve + return ex.Types.Where(t => t != null); + } + } + + protected abstract INetworkManager CreateNetworkManager(ILogger logger); + + /// + /// Creates an instance of type and resolves all constructor dependancies + /// + /// The type. + /// System.Object. + public abstract object CreateInstance(Type type); + + /// + /// Creates the instance safe. + /// + /// The type. + /// System.Object. + protected abstract object CreateInstanceSafe(Type type); + + /// + /// Registers the specified obj. + /// + /// + /// The obj. + /// if set to true [manage lifetime]. + protected abstract void RegisterSingleInstance(T obj, bool manageLifetime = true) + where T : class; + + /// + /// Registers the single instance. + /// + /// + /// The func. + protected abstract void RegisterSingleInstance(Func func) + where T : class; + + /// + /// Resolves this instance. + /// + /// + /// ``0. + public abstract T Resolve(); + + /// + /// Resolves this instance. + /// + /// + /// ``0. + public abstract T TryResolve(); + + /// + /// Loads the assembly. + /// + /// The file. + /// Assembly. + protected Assembly LoadAssembly(string file) + { + try + { + return Assembly.Load(File.ReadAllBytes(file)); + } + catch (Exception ex) + { + FailedAssemblies.Add(file); + Logger.ErrorException("Error loading assembly {0}", ex, file); + return null; + } + } + + /// + /// Gets the export types. + /// + /// + /// IEnumerable{Type}. + public IEnumerable GetExportTypes() + { + var currentType = typeof(T); + + return AllConcreteTypes.AsParallel().Where(currentType.IsAssignableFrom); + } + + /// + /// Gets the exports. + /// + /// + /// if set to true [manage liftime]. + /// IEnumerable{``0}. + public IEnumerable GetExports(bool manageLiftime = true) + { + var parts = GetExportTypes() + .Select(CreateInstanceSafe) + .Where(i => i != null) + .Cast() + .ToList(); + + if (manageLiftime) + { + lock (DisposableParts) + { + DisposableParts.AddRange(parts.OfType()); + } + } + + return parts; + } + + /// + /// Gets the application version. + /// + /// The application version. + public abstract Version ApplicationVersion { get; } + + /// + /// Handles the ConfigurationUpdated event of the ConfigurationManager control. + /// + /// The source of the event. + /// The instance containing the event data. + /// + protected virtual void OnConfigurationUpdated(object sender, EventArgs e) + { + ConfigureAutorun(); + } + + protected abstract void ConfigureAutoRunAtStartup(bool autorun); + + /// + /// Removes the plugin. + /// + /// The plugin. + public void RemovePlugin(IPlugin plugin) + { + var list = Plugins.ToList(); + list.Remove(plugin); + Plugins = list.ToArray(); + } + + /// + /// Gets a value indicating whether this instance can self restart. + /// + /// true if this instance can self restart; otherwise, false. + public abstract bool CanSelfRestart { get; } + + /// + /// Notifies that the kernel that a change has been made that requires a restart + /// + public void NotifyPendingRestart() + { + var changed = !HasPendingRestart; + + HasPendingRestart = true; + + if (changed) + { + EventHelper.QueueEventIfNotNull(HasPendingRestartChanged, this, EventArgs.Empty, Logger); + } + } + + /// + /// Performs application-defined tasks associated with freeing, releasing, or resetting unmanaged resources. + /// + public void Dispose() + { + Dispose(true); + } + + /// + /// Releases unmanaged and - optionally - managed resources. + /// + /// true to release both managed and unmanaged resources; false to release only unmanaged resources. + protected virtual void Dispose(bool dispose) + { + if (dispose) + { + var type = GetType(); + + Logger.Info("Disposing " + type.Name); + + var parts = DisposableParts.Distinct().Where(i => i.GetType() != type).ToList(); + DisposableParts.Clear(); + + foreach (var part in parts) + { + Logger.Info("Disposing " + part.GetType().Name); + + try + { + part.Dispose(); + } + catch (Exception ex) + { + Logger.ErrorException("Error disposing {0}", ex, part.GetType().Name); + } + } + } + } + + /// + /// Restarts this instance. + /// + public abstract Task Restart(); + + /// + /// Gets or sets a value indicating whether this instance can self update. + /// + /// true if this instance can self update; otherwise, false. + public abstract bool CanSelfUpdate { get; } + + /// + /// Checks for update. + /// + /// The cancellation token. + /// The progress. + /// Task{CheckForUpdateResult}. + public abstract Task CheckForApplicationUpdate(CancellationToken cancellationToken, + IProgress progress); + + /// + /// Updates the application. + /// + /// The package that contains the update + /// The cancellation token. + /// The progress. + /// Task. + public abstract Task UpdateApplication(PackageVersionInfo package, CancellationToken cancellationToken, + IProgress progress); + + /// + /// Shuts down. + /// + public abstract Task Shutdown(); + + /// + /// Called when [application updated]. + /// + /// The package. + protected void OnApplicationUpdated(PackageVersionInfo package) + { + Logger.Info("Application has been updated to version {0}", package.versionStr); + + EventHelper.FireEventIfNotNull(ApplicationUpdated, this, new GenericEventArgs + { + Argument = package + + }, Logger); + + NotifyPendingRestart(); + } + } +} diff --git a/Emby.Common.Implementations/BaseApplicationPaths.cs b/Emby.Common.Implementations/BaseApplicationPaths.cs new file mode 100644 index 000000000..628d62bd4 --- /dev/null +++ b/Emby.Common.Implementations/BaseApplicationPaths.cs @@ -0,0 +1,178 @@ +using System.IO; +using MediaBrowser.Common.Configuration; + +namespace Emby.Common.Implementations +{ + /// + /// Provides a base class to hold common application paths used by both the Ui and Server. + /// This can be subclassed to add application-specific paths. + /// + public abstract class BaseApplicationPaths : IApplicationPaths + { + /// + /// Initializes a new instance of the class. + /// + protected BaseApplicationPaths(string programDataPath, string applicationPath) + { + ProgramDataPath = programDataPath; + ApplicationPath = applicationPath; + } + + public string ApplicationPath { get; private set; } + public string ProgramDataPath { get; private set; } + + /// + /// Gets the path to the system folder + /// + public string ProgramSystemPath + { + get { return Path.GetDirectoryName(ApplicationPath); } + } + + /// + /// The _data directory + /// + private string _dataDirectory; + /// + /// Gets the folder path to the data directory + /// + /// The data directory. + public string DataPath + { + get + { + if (_dataDirectory == null) + { + _dataDirectory = Path.Combine(ProgramDataPath, "data"); + + Directory.CreateDirectory(_dataDirectory); + } + + return _dataDirectory; + } + } + + /// + /// Gets the image cache path. + /// + /// The image cache path. + public string ImageCachePath + { + get + { + return Path.Combine(CachePath, "images"); + } + } + + /// + /// Gets the path to the plugin directory + /// + /// The plugins path. + public string PluginsPath + { + get + { + return Path.Combine(ProgramDataPath, "plugins"); + } + } + + /// + /// Gets the path to the plugin configurations directory + /// + /// The plugin configurations path. + public string PluginConfigurationsPath + { + get + { + return Path.Combine(PluginsPath, "configurations"); + } + } + + /// + /// Gets the path to where temporary update files will be stored + /// + /// The plugin configurations path. + public string TempUpdatePath + { + get + { + return Path.Combine(ProgramDataPath, "updates"); + } + } + + /// + /// Gets the path to the log directory + /// + /// The log directory path. + public string LogDirectoryPath + { + get + { + return Path.Combine(ProgramDataPath, "logs"); + } + } + + /// + /// Gets the path to the application configuration root directory + /// + /// The configuration directory path. + public string ConfigurationDirectoryPath + { + get + { + return Path.Combine(ProgramDataPath, "config"); + } + } + + /// + /// Gets the path to the system configuration file + /// + /// The system configuration file path. + public string SystemConfigurationFilePath + { + get + { + return Path.Combine(ConfigurationDirectoryPath, "system.xml"); + } + } + + /// + /// The _cache directory + /// + private string _cachePath; + /// + /// Gets the folder path to the cache directory + /// + /// The cache directory. + public string CachePath + { + get + { + if (string.IsNullOrEmpty(_cachePath)) + { + _cachePath = Path.Combine(ProgramDataPath, "cache"); + + Directory.CreateDirectory(_cachePath); + } + + return _cachePath; + } + set + { + _cachePath = value; + } + } + + /// + /// Gets the folder path to the temp directory within the cache folder + /// + /// The temp directory. + public string TempDirectory + { + get + { + return Path.Combine(CachePath, "temp"); + } + } + } +} diff --git a/Emby.Common.Implementations/Configuration/BaseConfigurationManager.cs b/Emby.Common.Implementations/Configuration/BaseConfigurationManager.cs new file mode 100644 index 000000000..27c9fe615 --- /dev/null +++ b/Emby.Common.Implementations/Configuration/BaseConfigurationManager.cs @@ -0,0 +1,329 @@ +using System; +using System.Collections.Concurrent; +using System.Collections.Generic; +using System.IO; +using System.Linq; +using System.Threading; +using MediaBrowser.Common.Configuration; +using MediaBrowser.Common.Events; +using MediaBrowser.Common.Extensions; +using Emby.Common.Implementations; +using MediaBrowser.Model.Configuration; +using MediaBrowser.Model.IO; +using MediaBrowser.Model.Logging; +using MediaBrowser.Model.Serialization; + +namespace Emby.Common.Implementations.Configuration +{ + /// + /// Class BaseConfigurationManager + /// + public abstract class BaseConfigurationManager : IConfigurationManager + { + /// + /// Gets the type of the configuration. + /// + /// The type of the configuration. + protected abstract Type ConfigurationType { get; } + + /// + /// Occurs when [configuration updated]. + /// + public event EventHandler ConfigurationUpdated; + + /// + /// Occurs when [configuration updating]. + /// + public event EventHandler NamedConfigurationUpdating; + + /// + /// Occurs when [named configuration updated]. + /// + public event EventHandler NamedConfigurationUpdated; + + /// + /// Gets the logger. + /// + /// The logger. + protected ILogger Logger { get; private set; } + /// + /// Gets the XML serializer. + /// + /// The XML serializer. + protected IXmlSerializer XmlSerializer { get; private set; } + + /// + /// Gets or sets the application paths. + /// + /// The application paths. + public IApplicationPaths CommonApplicationPaths { get; private set; } + public readonly IFileSystem FileSystem; + + /// + /// The _configuration loaded + /// + private bool _configurationLoaded; + /// + /// The _configuration sync lock + /// + private object _configurationSyncLock = new object(); + /// + /// The _configuration + /// + private BaseApplicationConfiguration _configuration; + /// + /// Gets the system configuration + /// + /// The configuration. + public BaseApplicationConfiguration CommonConfiguration + { + get + { + // Lazy load + LazyInitializer.EnsureInitialized(ref _configuration, ref _configurationLoaded, ref _configurationSyncLock, () => (BaseApplicationConfiguration)ConfigurationHelper.GetXmlConfiguration(ConfigurationType, CommonApplicationPaths.SystemConfigurationFilePath, XmlSerializer, FileSystem)); + return _configuration; + } + protected set + { + _configuration = value; + + _configurationLoaded = value != null; + } + } + + private ConfigurationStore[] _configurationStores = { }; + private IConfigurationFactory[] _configurationFactories = { }; + + /// + /// Initializes a new instance of the class. + /// + /// The application paths. + /// The log manager. + /// The XML serializer. + protected BaseConfigurationManager(IApplicationPaths applicationPaths, ILogManager logManager, IXmlSerializer xmlSerializer, IFileSystem fileSystem) + { + CommonApplicationPaths = applicationPaths; + XmlSerializer = xmlSerializer; + FileSystem = fileSystem; + Logger = logManager.GetLogger(GetType().Name); + + UpdateCachePath(); + } + + public virtual void AddParts(IEnumerable factories) + { + _configurationFactories = factories.ToArray(); + + _configurationStores = _configurationFactories + .SelectMany(i => i.GetConfigurations()) + .ToArray(); + } + + /// + /// Saves the configuration. + /// + public void SaveConfiguration() + { + Logger.Info("Saving system configuration"); + var path = CommonApplicationPaths.SystemConfigurationFilePath; + + FileSystem.CreateDirectory(Path.GetDirectoryName(path)); + + lock (_configurationSyncLock) + { + XmlSerializer.SerializeToFile(CommonConfiguration, path); + } + + OnConfigurationUpdated(); + } + + /// + /// Called when [configuration updated]. + /// + protected virtual void OnConfigurationUpdated() + { + UpdateCachePath(); + + EventHelper.QueueEventIfNotNull(ConfigurationUpdated, this, EventArgs.Empty, Logger); + } + + /// + /// Replaces the configuration. + /// + /// The new configuration. + /// newConfiguration + public virtual void ReplaceConfiguration(BaseApplicationConfiguration newConfiguration) + { + if (newConfiguration == null) + { + throw new ArgumentNullException("newConfiguration"); + } + + ValidateCachePath(newConfiguration); + + CommonConfiguration = newConfiguration; + SaveConfiguration(); + } + + /// + /// Updates the items by name path. + /// + private void UpdateCachePath() + { + string cachePath; + + if (string.IsNullOrWhiteSpace(CommonConfiguration.CachePath)) + { + cachePath = null; + } + else + { + cachePath = Path.Combine(CommonConfiguration.CachePath, "cache"); + } + + ((BaseApplicationPaths)CommonApplicationPaths).CachePath = cachePath; + } + + /// + /// Replaces the cache path. + /// + /// The new configuration. + /// + private void ValidateCachePath(BaseApplicationConfiguration newConfig) + { + var newPath = newConfig.CachePath; + + if (!string.IsNullOrWhiteSpace(newPath) + && !string.Equals(CommonConfiguration.CachePath ?? string.Empty, newPath)) + { + // Validate + if (!FileSystem.DirectoryExists(newPath)) + { + throw new FileNotFoundException(string.Format("{0} does not exist.", newPath)); + } + + EnsureWriteAccess(newPath); + } + } + + protected void EnsureWriteAccess(string path) + { + var file = Path.Combine(path, Guid.NewGuid().ToString()); + + FileSystem.WriteAllText(file, string.Empty); + FileSystem.DeleteFile(file); + } + + private readonly ConcurrentDictionary _configurations = new ConcurrentDictionary(); + + private string GetConfigurationFile(string key) + { + return Path.Combine(CommonApplicationPaths.ConfigurationDirectoryPath, key.ToLower() + ".xml"); + } + + public object GetConfiguration(string key) + { + return _configurations.GetOrAdd(key, k => + { + var file = GetConfigurationFile(key); + + var configurationInfo = _configurationStores + .FirstOrDefault(i => string.Equals(i.Key, key, StringComparison.OrdinalIgnoreCase)); + + if (configurationInfo == null) + { + throw new ResourceNotFoundException("Configuration with key " + key + " not found."); + } + + var configurationType = configurationInfo.ConfigurationType; + + lock (_configurationSyncLock) + { + return LoadConfiguration(file, configurationType); + } + }); + } + + private object LoadConfiguration(string path, Type configurationType) + { + try + { + return XmlSerializer.DeserializeFromFile(configurationType, path); + } + catch (FileNotFoundException) + { + return Activator.CreateInstance(configurationType); + } + catch (IOException) + { + return Activator.CreateInstance(configurationType); + } + catch (Exception ex) + { + Logger.ErrorException("Error loading configuration file: {0}", ex, path); + + return Activator.CreateInstance(configurationType); + } + } + + public void SaveConfiguration(string key, object configuration) + { + var configurationStore = GetConfigurationStore(key); + var configurationType = configurationStore.ConfigurationType; + + if (configuration.GetType() != configurationType) + { + throw new ArgumentException("Expected configuration type is " + configurationType.Name); + } + + var validatingStore = configurationStore as IValidatingConfiguration; + if (validatingStore != null) + { + var currentConfiguration = GetConfiguration(key); + + validatingStore.Validate(currentConfiguration, configuration); + } + + EventHelper.FireEventIfNotNull(NamedConfigurationUpdating, this, new ConfigurationUpdateEventArgs + { + Key = key, + NewConfiguration = configuration + + }, Logger); + + _configurations.AddOrUpdate(key, configuration, (k, v) => configuration); + + var path = GetConfigurationFile(key); + FileSystem.CreateDirectory(Path.GetDirectoryName(path)); + + lock (_configurationSyncLock) + { + XmlSerializer.SerializeToFile(configuration, path); + } + + OnNamedConfigurationUpdated(key, configuration); + } + + protected virtual void OnNamedConfigurationUpdated(string key, object configuration) + { + EventHelper.FireEventIfNotNull(NamedConfigurationUpdated, this, new ConfigurationUpdateEventArgs + { + Key = key, + NewConfiguration = configuration + + }, Logger); + } + + public Type GetConfigurationType(string key) + { + return GetConfigurationStore(key) + .ConfigurationType; + } + + private ConfigurationStore GetConfigurationStore(string key) + { + return _configurationStores + .First(i => string.Equals(i.Key, key, StringComparison.OrdinalIgnoreCase)); + } + } +} diff --git a/Emby.Common.Implementations/Configuration/ConfigurationHelper.cs b/Emby.Common.Implementations/Configuration/ConfigurationHelper.cs new file mode 100644 index 000000000..0d43a651e --- /dev/null +++ b/Emby.Common.Implementations/Configuration/ConfigurationHelper.cs @@ -0,0 +1,60 @@ +using System; +using System.IO; +using System.Linq; +using MediaBrowser.Model.IO; +using MediaBrowser.Model.Serialization; + +namespace Emby.Common.Implementations.Configuration +{ + /// + /// Class ConfigurationHelper + /// + public static class ConfigurationHelper + { + /// + /// Reads an xml configuration file from the file system + /// It will immediately re-serialize and save if new serialization data is available due to property changes + /// + /// The type. + /// The path. + /// The XML serializer. + /// System.Object. + public static object GetXmlConfiguration(Type type, string path, IXmlSerializer xmlSerializer, IFileSystem fileSystem) + { + object configuration; + + byte[] buffer = null; + + // Use try/catch to avoid the extra file system lookup using File.Exists + try + { + buffer = fileSystem.ReadAllBytes(path); + + configuration = xmlSerializer.DeserializeFromBytes(type, buffer); + } + catch (Exception) + { + configuration = Activator.CreateInstance(type); + } + + using (var stream = new MemoryStream()) + { + xmlSerializer.SerializeToStream(configuration, stream); + + // Take the object we just got and serialize it back to bytes + var newBytes = stream.ToArray(); + + // If the file didn't exist before, or if something has changed, re-save + if (buffer == null || !buffer.SequenceEqual(newBytes)) + { + fileSystem.CreateDirectory(Path.GetDirectoryName(path)); + + // Save it after load in case we got new items + fileSystem.WriteAllBytes(path, newBytes); + } + + return configuration; + } + } + } +} diff --git a/Emby.Common.Implementations/Cryptography/CryptographyProvider.cs b/Emby.Common.Implementations/Cryptography/CryptographyProvider.cs new file mode 100644 index 000000000..5ece28dc6 --- /dev/null +++ b/Emby.Common.Implementations/Cryptography/CryptographyProvider.cs @@ -0,0 +1,30 @@ +using System; +using System.IO; +using System.Security.Cryptography; +using System.Text; +using MediaBrowser.Model.Cryptography; + +namespace Emby.Common.Implementations.Cryptography +{ + public class CryptographyProvider : ICryptographyProvider + { + public Guid GetMD5(string str) + { + return new Guid(GetMD5Bytes(str)); + } + public byte[] GetMD5Bytes(string str) + { + using (var provider = MD5.Create()) + { + return provider.ComputeHash(Encoding.Unicode.GetBytes(str)); + } + } + public byte[] GetMD5Bytes(Stream str) + { + using (var provider = MD5.Create()) + { + return provider.ComputeHash(str); + } + } + } +} diff --git a/Emby.Common.Implementations/Devices/DeviceId.cs b/Emby.Common.Implementations/Devices/DeviceId.cs new file mode 100644 index 000000000..3d23ab872 --- /dev/null +++ b/Emby.Common.Implementations/Devices/DeviceId.cs @@ -0,0 +1,109 @@ +using System; +using System.IO; +using System.Text; +using MediaBrowser.Common.Configuration; +using MediaBrowser.Model.IO; +using MediaBrowser.Model.Logging; + +namespace Emby.Common.Implementations.Devices +{ + public class DeviceId + { + private readonly IApplicationPaths _appPaths; + private readonly ILogger _logger; + private readonly IFileSystem _fileSystem; + + private readonly object _syncLock = new object(); + + private string CachePath + { + get { return Path.Combine(_appPaths.DataPath, "device.txt"); } + } + + private string GetCachedId() + { + try + { + lock (_syncLock) + { + var value = File.ReadAllText(CachePath, Encoding.UTF8); + + Guid guid; + if (Guid.TryParse(value, out guid)) + { + return value; + } + + _logger.Error("Invalid value found in device id file"); + } + } + catch (DirectoryNotFoundException) + { + } + catch (FileNotFoundException) + { + } + catch (Exception ex) + { + _logger.ErrorException("Error reading file", ex); + } + + return null; + } + + private void SaveId(string id) + { + try + { + var path = CachePath; + + _fileSystem.CreateDirectory(Path.GetDirectoryName(path)); + + lock (_syncLock) + { + _fileSystem.WriteAllText(path, id, Encoding.UTF8); + } + } + catch (Exception ex) + { + _logger.ErrorException("Error writing to file", ex); + } + } + + private string GetNewId() + { + return Guid.NewGuid().ToString("N"); + } + + private string GetDeviceId() + { + var id = GetCachedId(); + + if (string.IsNullOrWhiteSpace(id)) + { + id = GetNewId(); + SaveId(id); + } + + return id; + } + + private string _id; + + public DeviceId(IApplicationPaths appPaths, ILogger logger, IFileSystem fileSystem) + { + if (fileSystem == null) { + throw new ArgumentNullException ("fileSystem"); + } + + _appPaths = appPaths; + _logger = logger; + _fileSystem = fileSystem; + } + + public string Value + { + get { return _id ?? (_id = GetDeviceId()); } + } + } +} diff --git a/Emby.Common.Implementations/Emby.Common.Implementations.xproj b/Emby.Common.Implementations/Emby.Common.Implementations.xproj new file mode 100644 index 000000000..5bb6e4e58 --- /dev/null +++ b/Emby.Common.Implementations/Emby.Common.Implementations.xproj @@ -0,0 +1,23 @@ + + + + 14.0 + $(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v$(VisualStudioVersion) + + + + 5a27010a-09c6-4e86-93ea-437484c10917 + Emby.Common.Implementations + .\obj + .\bin\ + v4.5.2 + + + 2.0 + + + + + + + \ No newline at end of file diff --git a/Emby.Common.Implementations/HttpClientManager/HttpClientInfo.cs b/Emby.Common.Implementations/HttpClientManager/HttpClientInfo.cs new file mode 100644 index 000000000..ca481b33e --- /dev/null +++ b/Emby.Common.Implementations/HttpClientManager/HttpClientInfo.cs @@ -0,0 +1,16 @@ +using System; + +namespace Emby.Common.Implementations.HttpClientManager +{ + /// + /// Class HttpClientInfo + /// + public class HttpClientInfo + { + /// + /// Gets or sets the last timeout. + /// + /// The last timeout. + public DateTime LastTimeout { get; set; } + } +} diff --git a/Emby.Common.Implementations/HttpClientManager/HttpClientManager.cs b/Emby.Common.Implementations/HttpClientManager/HttpClientManager.cs new file mode 100644 index 000000000..ea4056547 --- /dev/null +++ b/Emby.Common.Implementations/HttpClientManager/HttpClientManager.cs @@ -0,0 +1,936 @@ +using System.Net.Sockets; +using MediaBrowser.Common.Configuration; +using MediaBrowser.Common.Extensions; +using MediaBrowser.Common.IO; +using MediaBrowser.Common.Net; +using MediaBrowser.Model.Logging; +using MediaBrowser.Model.Net; +using System; +using System.Collections.Concurrent; +using System.Collections.Generic; +using System.Collections.Specialized; +using System.Globalization; +using System.IO; +using System.Linq; +using System.Net; +using System.Net.Cache; +using System.Text; +using System.Threading; +using System.Threading.Tasks; +using Emby.Common.Implementations.HttpClientManager; +using MediaBrowser.Model.IO; + +namespace Emby.Common.Implementations.HttpClientManager +{ + /// + /// Class HttpClientManager + /// + public class HttpClientManager : IHttpClient + { + /// + /// When one request to a host times out, we'll ban all other requests for this period of time, to prevent scans from stalling + /// + private const int TimeoutSeconds = 30; + + /// + /// The _logger + /// + private readonly ILogger _logger; + + /// + /// The _app paths + /// + private readonly IApplicationPaths _appPaths; + + private readonly IFileSystem _fileSystem; + private readonly IMemoryStreamProvider _memoryStreamProvider; + + /// + /// Initializes a new instance of the class. + /// + /// The app paths. + /// The logger. + /// The file system. + /// appPaths + /// or + /// logger + public HttpClientManager(IApplicationPaths appPaths, ILogger logger, IFileSystem fileSystem, IMemoryStreamProvider memoryStreamProvider) + { + if (appPaths == null) + { + throw new ArgumentNullException("appPaths"); + } + if (logger == null) + { + throw new ArgumentNullException("logger"); + } + + _logger = logger; + _fileSystem = fileSystem; + _memoryStreamProvider = memoryStreamProvider; + _appPaths = appPaths; + + // http://stackoverflow.com/questions/566437/http-post-returns-the-error-417-expectation-failed-c + ServicePointManager.Expect100Continue = false; + + // Trakt requests sometimes fail without this + ServicePointManager.SecurityProtocol = SecurityProtocolType.Ssl3 | SecurityProtocolType.Tls; + } + + /// + /// Holds a dictionary of http clients by host. Use GetHttpClient(host) to retrieve or create a client for web requests. + /// DON'T dispose it after use. + /// + /// The HTTP clients. + private readonly ConcurrentDictionary _httpClients = new ConcurrentDictionary(); + + /// + /// Gets + /// + /// The host. + /// if set to true [enable HTTP compression]. + /// HttpClient. + /// host + private HttpClientInfo GetHttpClient(string host, bool enableHttpCompression) + { + if (string.IsNullOrEmpty(host)) + { + throw new ArgumentNullException("host"); + } + + HttpClientInfo client; + + var key = host + enableHttpCompression; + + if (!_httpClients.TryGetValue(key, out client)) + { + client = new HttpClientInfo(); + + _httpClients.TryAdd(key, client); + } + + return client; + } + + private WebRequest CreateWebRequest(string url) + { + try + { + return WebRequest.Create(url); + } + catch (NotSupportedException) + { + //Webrequest creation does fail on MONO randomly when using WebRequest.Create + //the issue occurs in the GetCreator method here: http://www.oschina.net/code/explore/mono-2.8.1/mcs/class/System/System.Net/WebRequest.cs + + var type = Type.GetType("System.Net.HttpRequestCreator, System, Version=4.0.0.0,Culture=neutral, PublicKeyToken=b77a5c561934e089"); + var creator = Activator.CreateInstance(type, nonPublic: true) as IWebRequestCreate; + return creator.Create(new Uri(url)) as HttpWebRequest; + } + } + + private void AddIpv4Option(HttpWebRequest request, HttpRequestOptions options) + { + request.ServicePoint.BindIPEndPointDelegate = (servicePount, remoteEndPoint, retryCount) => + { + if (remoteEndPoint.AddressFamily == AddressFamily.InterNetwork) + { + return new IPEndPoint(IPAddress.Any, 0); + } + throw new InvalidOperationException("no IPv4 address"); + }; + } + + private WebRequest GetRequest(HttpRequestOptions options, string method) + { + var url = options.Url; + + var uriAddress = new Uri(url); + var userInfo = uriAddress.UserInfo; + if (!string.IsNullOrWhiteSpace(userInfo)) + { + _logger.Info("Found userInfo in url: {0} ... url: {1}", userInfo, url); + url = url.Replace(userInfo + "@", string.Empty); + } + + var request = CreateWebRequest(url); + var httpWebRequest = request as HttpWebRequest; + + if (httpWebRequest != null) + { + if (options.PreferIpv4) + { + AddIpv4Option(httpWebRequest, options); + } + + AddRequestHeaders(httpWebRequest, options); + + httpWebRequest.AutomaticDecompression = options.EnableHttpCompression ? + (options.DecompressionMethod ?? DecompressionMethods.Deflate) : + DecompressionMethods.None; + } + + request.CachePolicy = new RequestCachePolicy(RequestCacheLevel.BypassCache); + + if (httpWebRequest != null) + { + if (options.EnableKeepAlive) + { + httpWebRequest.KeepAlive = true; + } + } + + request.Method = method; + request.Timeout = options.TimeoutMs; + + if (httpWebRequest != null) + { + if (!string.IsNullOrEmpty(options.Host)) + { + httpWebRequest.Host = options.Host; + } + + if (!string.IsNullOrEmpty(options.Referer)) + { + httpWebRequest.Referer = options.Referer; + } + } + + if (!string.IsNullOrWhiteSpace(userInfo)) + { + var parts = userInfo.Split(':'); + if (parts.Length == 2) + { + request.Credentials = GetCredential(url, parts[0], parts[1]); + request.PreAuthenticate = true; + } + } + + return request; + } + + private CredentialCache GetCredential(string url, string username, string password) + { + //ServicePointManager.SecurityProtocol = SecurityProtocolType.Ssl3; + CredentialCache credentialCache = new CredentialCache(); + credentialCache.Add(new Uri(url), "Basic", new NetworkCredential(username, password)); + return credentialCache; + } + + private void AddRequestHeaders(HttpWebRequest request, HttpRequestOptions options) + { + foreach (var header in options.RequestHeaders.ToList()) + { + if (string.Equals(header.Key, "Accept", StringComparison.OrdinalIgnoreCase)) + { + request.Accept = header.Value; + } + else if (string.Equals(header.Key, "User-Agent", StringComparison.OrdinalIgnoreCase)) + { + request.UserAgent = header.Value; + } + else + { + request.Headers.Set(header.Key, header.Value); + } + } + } + + /// + /// Gets the response internal. + /// + /// The options. + /// Task{HttpResponseInfo}. + public Task GetResponse(HttpRequestOptions options) + { + return SendAsync(options, "GET"); + } + + /// + /// Performs a GET request and returns the resulting stream + /// + /// The options. + /// Task{Stream}. + public async Task Get(HttpRequestOptions options) + { + var response = await GetResponse(options).ConfigureAwait(false); + + return response.Content; + } + + /// + /// Performs a GET request and returns the resulting stream + /// + /// The URL. + /// The resource pool. + /// The cancellation token. + /// Task{Stream}. + public Task Get(string url, SemaphoreSlim resourcePool, CancellationToken cancellationToken) + { + return Get(new HttpRequestOptions + { + Url = url, + ResourcePool = resourcePool, + CancellationToken = cancellationToken, + BufferContent = resourcePool != null + }); + } + + /// + /// Gets the specified URL. + /// + /// The URL. + /// The cancellation token. + /// Task{Stream}. + public Task Get(string url, CancellationToken cancellationToken) + { + return Get(url, null, cancellationToken); + } + + /// + /// send as an asynchronous operation. + /// + /// The options. + /// The HTTP method. + /// Task{HttpResponseInfo}. + /// + /// + public async Task SendAsync(HttpRequestOptions options, string httpMethod) + { + if (options.CacheMode == CacheMode.None) + { + return await SendAsyncInternal(options, httpMethod).ConfigureAwait(false); + } + + var url = options.Url; + var urlHash = url.ToLower().GetMD5().ToString("N"); + + var responseCachePath = Path.Combine(_appPaths.CachePath, "httpclient", urlHash); + + var response = await GetCachedResponse(responseCachePath, options.CacheLength, url).ConfigureAwait(false); + if (response != null) + { + return response; + } + + response = await SendAsyncInternal(options, httpMethod).ConfigureAwait(false); + + if (response.StatusCode == HttpStatusCode.OK) + { + await CacheResponse(response, responseCachePath).ConfigureAwait(false); + } + + return response; + } + + private async Task GetCachedResponse(string responseCachePath, TimeSpan cacheLength, string url) + { + _logger.Info("Checking for cache file {0}", responseCachePath); + + try + { + if (_fileSystem.GetLastWriteTimeUtc(responseCachePath).Add(cacheLength) > DateTime.UtcNow) + { + using (var stream = _fileSystem.GetFileStream(responseCachePath, FileOpenMode.Open, FileAccessMode.Read, FileShareMode.Read, true)) + { + var memoryStream = _memoryStreamProvider.CreateNew(); + + await stream.CopyToAsync(memoryStream).ConfigureAwait(false); + memoryStream.Position = 0; + + return new HttpResponseInfo + { + ResponseUrl = url, + Content = memoryStream, + StatusCode = HttpStatusCode.OK, + ContentLength = memoryStream.Length + }; + } + } + } + catch (FileNotFoundException) + { + + } + catch (DirectoryNotFoundException) + { + + } + + return null; + } + + private async Task CacheResponse(HttpResponseInfo response, string responseCachePath) + { + _fileSystem.CreateDirectory(Path.GetDirectoryName(responseCachePath)); + + using (var responseStream = response.Content) + { + var memoryStream = _memoryStreamProvider.CreateNew(); + await responseStream.CopyToAsync(memoryStream).ConfigureAwait(false); + memoryStream.Position = 0; + + using (var fileStream = _fileSystem.GetFileStream(responseCachePath, FileOpenMode.Create, FileAccessMode.Write, FileShareMode.None, true)) + { + await memoryStream.CopyToAsync(fileStream).ConfigureAwait(false); + + memoryStream.Position = 0; + response.Content = memoryStream; + } + } + } + + private async Task SendAsyncInternal(HttpRequestOptions options, string httpMethod) + { + ValidateParams(options); + + options.CancellationToken.ThrowIfCancellationRequested(); + + var client = GetHttpClient(GetHostFromUrl(options.Url), options.EnableHttpCompression); + + if ((DateTime.UtcNow - client.LastTimeout).TotalSeconds < TimeoutSeconds) + { + throw new HttpException(string.Format("Cancelling connection to {0} due to a previous timeout.", options.Url)) + { + IsTimedOut = true + }; + } + + var httpWebRequest = GetRequest(options, httpMethod); + + if (options.RequestContentBytes != null || + !string.IsNullOrEmpty(options.RequestContent) || + string.Equals(httpMethod, "post", StringComparison.OrdinalIgnoreCase)) + { + var bytes = options.RequestContentBytes ?? + Encoding.UTF8.GetBytes(options.RequestContent ?? string.Empty); + + httpWebRequest.ContentType = options.RequestContentType ?? "application/x-www-form-urlencoded"; + + httpWebRequest.ContentLength = bytes.Length; + httpWebRequest.GetRequestStream().Write(bytes, 0, bytes.Length); + } + + if (options.ResourcePool != null) + { + await options.ResourcePool.WaitAsync(options.CancellationToken).ConfigureAwait(false); + } + + if ((DateTime.UtcNow - client.LastTimeout).TotalSeconds < TimeoutSeconds) + { + if (options.ResourcePool != null) + { + options.ResourcePool.Release(); + } + + throw new HttpException(string.Format("Connection to {0} timed out", options.Url)) { IsTimedOut = true }; + } + + if (options.LogRequest) + { + _logger.Info("HttpClientManager {0}: {1}", httpMethod.ToUpper(), options.Url); + } + + try + { + options.CancellationToken.ThrowIfCancellationRequested(); + + if (!options.BufferContent) + { + var response = await GetResponseAsync(httpWebRequest, TimeSpan.FromMilliseconds(options.TimeoutMs)).ConfigureAwait(false); + + var httpResponse = (HttpWebResponse)response; + + EnsureSuccessStatusCode(client, httpResponse, options); + + options.CancellationToken.ThrowIfCancellationRequested(); + + return GetResponseInfo(httpResponse, httpResponse.GetResponseStream(), GetContentLength(httpResponse), httpResponse); + } + + using (var response = await GetResponseAsync(httpWebRequest, TimeSpan.FromMilliseconds(options.TimeoutMs)).ConfigureAwait(false)) + { + var httpResponse = (HttpWebResponse)response; + + EnsureSuccessStatusCode(client, httpResponse, options); + + options.CancellationToken.ThrowIfCancellationRequested(); + + using (var stream = httpResponse.GetResponseStream()) + { + var memoryStream = _memoryStreamProvider.CreateNew(); + + await stream.CopyToAsync(memoryStream).ConfigureAwait(false); + + memoryStream.Position = 0; + + return GetResponseInfo(httpResponse, memoryStream, memoryStream.Length, null); + } + } + } + catch (OperationCanceledException ex) + { + throw GetCancellationException(options, client, options.CancellationToken, ex); + } + catch (Exception ex) + { + throw GetException(ex, options, client); + } + finally + { + if (options.ResourcePool != null) + { + options.ResourcePool.Release(); + } + } + } + + private HttpResponseInfo GetResponseInfo(HttpWebResponse httpResponse, Stream content, long? contentLength, IDisposable disposable) + { + var responseInfo = new HttpResponseInfo(disposable) + { + Content = content, + + StatusCode = httpResponse.StatusCode, + + ContentType = httpResponse.ContentType, + + ContentLength = contentLength, + + ResponseUrl = httpResponse.ResponseUri.ToString() + }; + + if (httpResponse.Headers != null) + { + SetHeaders(httpResponse.Headers, responseInfo); + } + + return responseInfo; + } + + private HttpResponseInfo GetResponseInfo(HttpWebResponse httpResponse, string tempFile, long? contentLength) + { + var responseInfo = new HttpResponseInfo + { + TempFilePath = tempFile, + + StatusCode = httpResponse.StatusCode, + + ContentType = httpResponse.ContentType, + + ContentLength = contentLength + }; + + if (httpResponse.Headers != null) + { + SetHeaders(httpResponse.Headers, responseInfo); + } + + return responseInfo; + } + + private void SetHeaders(WebHeaderCollection headers, HttpResponseInfo responseInfo) + { + foreach (var key in headers.AllKeys) + { + responseInfo.Headers[key] = headers[key]; + } + } + + public Task Post(HttpRequestOptions options) + { + return SendAsync(options, "POST"); + } + + /// + /// Performs a POST request + /// + /// The options. + /// Params to add to the POST data. + /// stream on success, null on failure + public async Task Post(HttpRequestOptions options, Dictionary postData) + { + options.SetPostData(postData); + + var response = await Post(options).ConfigureAwait(false); + + return response.Content; + } + + /// + /// Performs a POST request + /// + /// The URL. + /// Params to add to the POST data. + /// The resource pool. + /// The cancellation token. + /// stream on success, null on failure + public Task Post(string url, Dictionary postData, SemaphoreSlim resourcePool, CancellationToken cancellationToken) + { + return Post(new HttpRequestOptions + { + Url = url, + ResourcePool = resourcePool, + CancellationToken = cancellationToken, + BufferContent = resourcePool != null + + }, postData); + } + + /// + /// Downloads the contents of a given url into a temporary location + /// + /// The options. + /// Task{System.String}. + public async Task GetTempFile(HttpRequestOptions options) + { + var response = await GetTempFileResponse(options).ConfigureAwait(false); + + return response.TempFilePath; + } + + public async Task GetTempFileResponse(HttpRequestOptions options) + { + ValidateParams(options); + + _fileSystem.CreateDirectory(_appPaths.TempDirectory); + + var tempFile = Path.Combine(_appPaths.TempDirectory, Guid.NewGuid() + ".tmp"); + + if (options.Progress == null) + { + throw new ArgumentNullException("progress"); + } + + options.CancellationToken.ThrowIfCancellationRequested(); + + var httpWebRequest = GetRequest(options, "GET"); + + if (options.ResourcePool != null) + { + await options.ResourcePool.WaitAsync(options.CancellationToken).ConfigureAwait(false); + } + + options.Progress.Report(0); + + if (options.LogRequest) + { + _logger.Info("HttpClientManager.GetTempFileResponse url: {0}", options.Url); + } + + var client = GetHttpClient(GetHostFromUrl(options.Url), options.EnableHttpCompression); + + try + { + options.CancellationToken.ThrowIfCancellationRequested(); + + using (var response = await httpWebRequest.GetResponseAsync().ConfigureAwait(false)) + { + var httpResponse = (HttpWebResponse)response; + + EnsureSuccessStatusCode(client, httpResponse, options); + + options.CancellationToken.ThrowIfCancellationRequested(); + + var contentLength = GetContentLength(httpResponse); + + if (!contentLength.HasValue) + { + // We're not able to track progress + using (var stream = httpResponse.GetResponseStream()) + { + using (var fs = _fileSystem.GetFileStream(tempFile, FileOpenMode.Create, FileAccessMode.Write, FileShareMode.Read, true)) + { + await stream.CopyToAsync(fs, StreamDefaults.DefaultCopyToBufferSize, options.CancellationToken).ConfigureAwait(false); + } + } + } + else + { + using (var stream = ProgressStream.CreateReadProgressStream(httpResponse.GetResponseStream(), options.Progress.Report, contentLength.Value)) + { + using (var fs = _fileSystem.GetFileStream(tempFile, FileOpenMode.Create, FileAccessMode.Write, FileShareMode.Read, true)) + { + await stream.CopyToAsync(fs, StreamDefaults.DefaultCopyToBufferSize, options.CancellationToken).ConfigureAwait(false); + } + } + } + + options.Progress.Report(100); + + return GetResponseInfo(httpResponse, tempFile, contentLength); + } + } + catch (Exception ex) + { + DeleteTempFile(tempFile); + throw GetException(ex, options, client); + } + finally + { + if (options.ResourcePool != null) + { + options.ResourcePool.Release(); + } + } + } + + private long? GetContentLength(HttpWebResponse response) + { + var length = response.ContentLength; + + if (length == 0) + { + return null; + } + + return length; + } + + protected static readonly CultureInfo UsCulture = new CultureInfo("en-US"); + + private Exception GetException(Exception ex, HttpRequestOptions options, HttpClientInfo client) + { + if (ex is HttpException) + { + return ex; + } + + var webException = ex as WebException + ?? ex.InnerException as WebException; + + if (webException != null) + { + if (options.LogErrors) + { + _logger.ErrorException("Error getting response from " + options.Url, ex); + } + + var exception = new HttpException(ex.Message, ex); + + var response = webException.Response as HttpWebResponse; + if (response != null) + { + exception.StatusCode = response.StatusCode; + + if ((int)response.StatusCode == 429) + { + client.LastTimeout = DateTime.UtcNow; + } + } + + return exception; + } + + var operationCanceledException = ex as OperationCanceledException + ?? ex.InnerException as OperationCanceledException; + + if (operationCanceledException != null) + { + return GetCancellationException(options, client, options.CancellationToken, operationCanceledException); + } + + if (options.LogErrors) + { + _logger.ErrorException("Error getting response from " + options.Url, ex); + } + + return ex; + } + + private void DeleteTempFile(string file) + { + try + { + _fileSystem.DeleteFile(file); + } + catch (IOException) + { + // Might not have been created at all. No need to worry. + } + } + + private void ValidateParams(HttpRequestOptions options) + { + if (string.IsNullOrEmpty(options.Url)) + { + throw new ArgumentNullException("options"); + } + } + + /// + /// Gets the host from URL. + /// + /// The URL. + /// System.String. + private string GetHostFromUrl(string url) + { + var index = url.IndexOf("://", StringComparison.OrdinalIgnoreCase); + + if (index != -1) + { + url = url.Substring(index + 3); + var host = url.Split(new[] { '/' }, StringSplitOptions.RemoveEmptyEntries).FirstOrDefault(); + + if (!string.IsNullOrWhiteSpace(host)) + { + return host; + } + } + + return url; + } + + /// + /// Performs application-defined tasks associated with freeing, releasing, or resetting unmanaged resources. + /// + public void Dispose() + { + Dispose(true); + GC.SuppressFinalize(this); + } + + /// + /// Releases unmanaged and - optionally - managed resources. + /// + /// true to release both managed and unmanaged resources; false to release only unmanaged resources. + protected virtual void Dispose(bool dispose) + { + if (dispose) + { + _httpClients.Clear(); + } + } + + /// + /// Throws the cancellation exception. + /// + /// The options. + /// The client. + /// The cancellation token. + /// The exception. + /// Exception. + private Exception GetCancellationException(HttpRequestOptions options, HttpClientInfo client, CancellationToken cancellationToken, OperationCanceledException exception) + { + // If the HttpClient's timeout is reached, it will cancel the Task internally + if (!cancellationToken.IsCancellationRequested) + { + var msg = string.Format("Connection to {0} timed out", options.Url); + + if (options.LogErrors) + { + _logger.Error(msg); + } + + client.LastTimeout = DateTime.UtcNow; + + // Throw an HttpException so that the caller doesn't think it was cancelled by user code + return new HttpException(msg, exception) + { + IsTimedOut = true + }; + } + + return exception; + } + + private void EnsureSuccessStatusCode(HttpClientInfo client, HttpWebResponse response, HttpRequestOptions options) + { + var statusCode = response.StatusCode; + + var isSuccessful = statusCode >= HttpStatusCode.OK && statusCode <= (HttpStatusCode)299; + + if (!isSuccessful) + { + if (options.LogErrorResponseBody) + { + try + { + using (var stream = response.GetResponseStream()) + { + if (stream != null) + { + using (var reader = new StreamReader(stream)) + { + var msg = reader.ReadToEnd(); + + _logger.Error(msg); + } + } + } + } + catch + { + + } + } + throw new HttpException(response.StatusDescription) + { + StatusCode = response.StatusCode + }; + } + } + + /// + /// Posts the specified URL. + /// + /// The URL. + /// The post data. + /// The cancellation token. + /// Task{Stream}. + public Task Post(string url, Dictionary postData, CancellationToken cancellationToken) + { + return Post(url, postData, null, cancellationToken); + } + + private Task GetResponseAsync(WebRequest request, TimeSpan timeout) + { + var taskCompletion = new TaskCompletionSource(); + + Task asyncTask = Task.Factory.FromAsync(request.BeginGetResponse, request.EndGetResponse, null); + + ThreadPool.RegisterWaitForSingleObject((asyncTask as IAsyncResult).AsyncWaitHandle, TimeoutCallback, request, timeout, true); + var callback = new TaskCallback { taskCompletion = taskCompletion }; + asyncTask.ContinueWith(callback.OnSuccess, TaskContinuationOptions.NotOnFaulted); + + // Handle errors + asyncTask.ContinueWith(callback.OnError, TaskContinuationOptions.OnlyOnFaulted); + + return taskCompletion.Task; + } + + private static void TimeoutCallback(object state, bool timedOut) + { + if (timedOut) + { + WebRequest request = (WebRequest)state; + if (state != null) + { + request.Abort(); + } + } + } + + private class TaskCallback + { + public TaskCompletionSource taskCompletion; + + public void OnSuccess(Task task) + { + taskCompletion.TrySetResult(task.Result); + } + + public void OnError(Task task) + { + if (task.Exception != null) + { + taskCompletion.TrySetException(task.Exception); + } + else + { + taskCompletion.TrySetException(new List()); + } + } + } + } +} diff --git a/Emby.Common.Implementations/IO/IsoManager.cs b/Emby.Common.Implementations/IO/IsoManager.cs new file mode 100644 index 000000000..14614acaf --- /dev/null +++ b/Emby.Common.Implementations/IO/IsoManager.cs @@ -0,0 +1,75 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Threading; +using System.Threading.Tasks; +using MediaBrowser.Model.IO; + +namespace Emby.Common.Implementations.IO +{ + /// + /// Class IsoManager + /// + public class IsoManager : IIsoManager + { + /// + /// The _mounters + /// + private readonly List _mounters = new List(); + + /// + /// Mounts the specified iso path. + /// + /// The iso path. + /// The cancellation token. + /// IsoMount. + /// isoPath + /// + public Task Mount(string isoPath, CancellationToken cancellationToken) + { + if (string.IsNullOrEmpty(isoPath)) + { + throw new ArgumentNullException("isoPath"); + } + + var mounter = _mounters.FirstOrDefault(i => i.CanMount(isoPath)); + + if (mounter == null) + { + throw new ArgumentException(string.Format("No mounters are able to mount {0}", isoPath)); + } + + return mounter.Mount(isoPath, cancellationToken); + } + + /// + /// Determines whether this instance can mount the specified path. + /// + /// The path. + /// true if this instance can mount the specified path; otherwise, false. + public bool CanMount(string path) + { + return _mounters.Any(i => i.CanMount(path)); + } + + /// + /// Adds the parts. + /// + /// The mounters. + public void AddParts(IEnumerable mounters) + { + _mounters.AddRange(mounters); + } + + /// + /// Performs application-defined tasks associated with freeing, releasing, or resetting unmanaged resources. + /// + public void Dispose() + { + foreach (var mounter in _mounters) + { + mounter.Dispose(); + } + } + } +} diff --git a/Emby.Common.Implementations/IO/ManagedFileSystem.cs b/Emby.Common.Implementations/IO/ManagedFileSystem.cs new file mode 100644 index 000000000..6317fc08b --- /dev/null +++ b/Emby.Common.Implementations/IO/ManagedFileSystem.cs @@ -0,0 +1,705 @@ +using System; +using System.Collections.Generic; +using System.IO; +using System.Linq; +using System.Text; +using MediaBrowser.Model.IO; +using MediaBrowser.Model.Logging; + +namespace Emby.Common.Implementations.IO +{ + /// + /// Class ManagedFileSystem + /// + public class ManagedFileSystem : IFileSystem + { + protected ILogger Logger; + + private readonly bool _supportsAsyncFileStreams; + private char[] _invalidFileNameChars; + private readonly List _shortcutHandlers = new List(); + protected bool EnableFileSystemRequestConcat = true; + + public ManagedFileSystem(ILogger logger, bool supportsAsyncFileStreams, bool enableManagedInvalidFileNameChars) + { + Logger = logger; + _supportsAsyncFileStreams = supportsAsyncFileStreams; + SetInvalidFileNameChars(enableManagedInvalidFileNameChars); + } + + public void AddShortcutHandler(IShortcutHandler handler) + { + _shortcutHandlers.Add(handler); + } + + protected void SetInvalidFileNameChars(bool enableManagedInvalidFileNameChars) + { + if (enableManagedInvalidFileNameChars) + { + _invalidFileNameChars = Path.GetInvalidFileNameChars(); + } + else + { + // GetInvalidFileNameChars is less restrictive in Linux/Mac than Windows, this mimic Windows behavior for mono under Linux/Mac. + _invalidFileNameChars = new char[41] { '\x00', '\x01', '\x02', '\x03', '\x04', '\x05', '\x06', '\x07', + '\x08', '\x09', '\x0A', '\x0B', '\x0C', '\x0D', '\x0E', '\x0F', '\x10', '\x11', '\x12', + '\x13', '\x14', '\x15', '\x16', '\x17', '\x18', '\x19', '\x1A', '\x1B', '\x1C', '\x1D', + '\x1E', '\x1F', '\x22', '\x3C', '\x3E', '\x7C', ':', '*', '?', '\\', '/' }; + } + } + + public char DirectorySeparatorChar + { + get + { + return Path.DirectorySeparatorChar; + } + } + + public string GetFullPath(string path) + { + return Path.GetFullPath(path); + } + + /// + /// Determines whether the specified filename is shortcut. + /// + /// The filename. + /// true if the specified filename is shortcut; otherwise, false. + /// filename + public virtual bool IsShortcut(string filename) + { + if (string.IsNullOrEmpty(filename)) + { + throw new ArgumentNullException("filename"); + } + + var extension = Path.GetExtension(filename); + return _shortcutHandlers.Any(i => string.Equals(extension, i.Extension, StringComparison.OrdinalIgnoreCase)); + } + + /// + /// Resolves the shortcut. + /// + /// The filename. + /// System.String. + /// filename + public virtual string ResolveShortcut(string filename) + { + if (string.IsNullOrEmpty(filename)) + { + throw new ArgumentNullException("filename"); + } + + var extension = Path.GetExtension(filename); + var handler = _shortcutHandlers.FirstOrDefault(i => string.Equals(extension, i.Extension, StringComparison.OrdinalIgnoreCase)); + + if (handler != null) + { + return handler.Resolve(filename); + } + + return null; + } + + /// + /// Creates the shortcut. + /// + /// The shortcut path. + /// The target. + /// + /// shortcutPath + /// or + /// target + /// + public void CreateShortcut(string shortcutPath, string target) + { + if (string.IsNullOrEmpty(shortcutPath)) + { + throw new ArgumentNullException("shortcutPath"); + } + + if (string.IsNullOrEmpty(target)) + { + throw new ArgumentNullException("target"); + } + + var extension = Path.GetExtension(shortcutPath); + var handler = _shortcutHandlers.FirstOrDefault(i => string.Equals(extension, i.Extension, StringComparison.OrdinalIgnoreCase)); + + if (handler != null) + { + handler.Create(shortcutPath, target); + } + else + { + throw new NotImplementedException(); + } + } + + /// + /// Returns a object for the specified file or directory path. + /// + /// A path to a file or directory. + /// A object. + /// If the specified path points to a directory, the returned object's + /// property will be set to true and all other properties will reflect the properties of the directory. + public FileSystemMetadata GetFileSystemInfo(string path) + { + if (string.IsNullOrEmpty(path)) + { + throw new ArgumentNullException("path"); + } + + // Take a guess to try and avoid two file system hits, but we'll double-check by calling Exists + if (Path.HasExtension(path)) + { + var fileInfo = new FileInfo(path); + + if (fileInfo.Exists) + { + return GetFileSystemMetadata(fileInfo); + } + + return GetFileSystemMetadata(new DirectoryInfo(path)); + } + else + { + var fileInfo = new DirectoryInfo(path); + + if (fileInfo.Exists) + { + return GetFileSystemMetadata(fileInfo); + } + + return GetFileSystemMetadata(new FileInfo(path)); + } + } + + /// + /// Returns a object for the specified file path. + /// + /// A path to a file. + /// A object. + /// If the specified path points to a directory, the returned object's + /// property and the property will both be set to false. + /// For automatic handling of files and directories, use . + public FileSystemMetadata GetFileInfo(string path) + { + if (string.IsNullOrEmpty(path)) + { + throw new ArgumentNullException("path"); + } + + var fileInfo = new FileInfo(path); + + return GetFileSystemMetadata(fileInfo); + } + + /// + /// Returns a object for the specified directory path. + /// + /// A path to a directory. + /// A object. + /// If the specified path points to a file, the returned object's + /// property will be set to true and the property will be set to false. + /// For automatic handling of files and directories, use . + public FileSystemMetadata GetDirectoryInfo(string path) + { + if (string.IsNullOrEmpty(path)) + { + throw new ArgumentNullException("path"); + } + + var fileInfo = new DirectoryInfo(path); + + return GetFileSystemMetadata(fileInfo); + } + + private FileSystemMetadata GetFileSystemMetadata(FileSystemInfo info) + { + var result = new FileSystemMetadata(); + + result.Exists = info.Exists; + result.FullName = info.FullName; + result.Extension = info.Extension; + result.Name = info.Name; + + if (result.Exists) + { + var attributes = info.Attributes; + result.IsDirectory = info is DirectoryInfo || (attributes & FileAttributes.Directory) == FileAttributes.Directory; + result.IsHidden = (attributes & FileAttributes.Hidden) == FileAttributes.Hidden; + result.IsReadOnly = (attributes & FileAttributes.ReadOnly) == FileAttributes.ReadOnly; + + var fileInfo = info as FileInfo; + if (fileInfo != null) + { + result.Length = fileInfo.Length; + result.DirectoryName = fileInfo.DirectoryName; + } + + result.CreationTimeUtc = GetCreationTimeUtc(info); + result.LastWriteTimeUtc = GetLastWriteTimeUtc(info); + } + else + { + result.IsDirectory = info is DirectoryInfo; + } + + return result; + } + + /// + /// The space char + /// + private const char SpaceChar = ' '; + + /// + /// Takes a filename and removes invalid characters + /// + /// The filename. + /// System.String. + /// filename + public string GetValidFilename(string filename) + { + if (string.IsNullOrEmpty(filename)) + { + throw new ArgumentNullException("filename"); + } + + var builder = new StringBuilder(filename); + + foreach (var c in _invalidFileNameChars) + { + builder = builder.Replace(c, SpaceChar); + } + + return builder.ToString(); + } + + /// + /// Gets the creation time UTC. + /// + /// The info. + /// DateTime. + public DateTime GetCreationTimeUtc(FileSystemInfo info) + { + // This could throw an error on some file systems that have dates out of range + try + { + return info.CreationTimeUtc; + } + catch (Exception ex) + { + Logger.ErrorException("Error determining CreationTimeUtc for {0}", ex, info.FullName); + return DateTime.MinValue; + } + } + + /// + /// Gets the creation time UTC. + /// + /// The path. + /// DateTime. + public DateTime GetCreationTimeUtc(string path) + { + return GetCreationTimeUtc(GetFileSystemInfo(path)); + } + + public DateTime GetCreationTimeUtc(FileSystemMetadata info) + { + return info.CreationTimeUtc; + } + + public DateTime GetLastWriteTimeUtc(FileSystemMetadata info) + { + return info.LastWriteTimeUtc; + } + + /// + /// Gets the creation time UTC. + /// + /// The info. + /// DateTime. + public DateTime GetLastWriteTimeUtc(FileSystemInfo info) + { + // This could throw an error on some file systems that have dates out of range + try + { + return info.LastWriteTimeUtc; + } + catch (Exception ex) + { + Logger.ErrorException("Error determining LastAccessTimeUtc for {0}", ex, info.FullName); + return DateTime.MinValue; + } + } + + /// + /// Gets the last write time UTC. + /// + /// The path. + /// DateTime. + public DateTime GetLastWriteTimeUtc(string path) + { + return GetLastWriteTimeUtc(GetFileSystemInfo(path)); + } + + /// + /// Gets the file stream. + /// + /// The path. + /// The mode. + /// The access. + /// The share. + /// if set to true [is asynchronous]. + /// FileStream. + public Stream GetFileStream(string path, FileOpenMode mode, FileAccessMode access, FileShareMode share, bool isAsync = false) + { + if (_supportsAsyncFileStreams && isAsync) + { + return new FileStream(path, GetFileMode(mode), GetFileAccess(access), GetFileShare(share), 262144, true); + } + + return new FileStream(path, GetFileMode(mode), GetFileAccess(access), GetFileShare(share), 262144); + } + + private FileMode GetFileMode(FileOpenMode mode) + { + switch (mode) + { + case FileOpenMode.Append: + return FileMode.Append; + case FileOpenMode.Create: + return FileMode.Create; + case FileOpenMode.CreateNew: + return FileMode.CreateNew; + case FileOpenMode.Open: + return FileMode.Open; + case FileOpenMode.OpenOrCreate: + return FileMode.OpenOrCreate; + case FileOpenMode.Truncate: + return FileMode.Truncate; + default: + throw new Exception("Unrecognized FileOpenMode"); + } + } + + private FileAccess GetFileAccess(FileAccessMode mode) + { + var val = (int)mode; + + return (FileAccess)val; + } + + private FileShare GetFileShare(FileShareMode mode) + { + var val = (int)mode; + + return (FileShare)val; + } + + public void SetHidden(string path, bool isHidden) + { + var info = GetFileInfo(path); + + if (info.Exists && info.IsHidden != isHidden) + { + if (isHidden) + { + FileAttributes attributes = File.GetAttributes(path); + attributes = RemoveAttribute(attributes, FileAttributes.Hidden); + File.SetAttributes(path, attributes); + } + else + { + File.SetAttributes(path, File.GetAttributes(path) | FileAttributes.Hidden); + } + } + } + + private static FileAttributes RemoveAttribute(FileAttributes attributes, FileAttributes attributesToRemove) + { + return attributes & ~attributesToRemove; + } + + /// + /// Swaps the files. + /// + /// The file1. + /// The file2. + public void SwapFiles(string file1, string file2) + { + if (string.IsNullOrEmpty(file1)) + { + throw new ArgumentNullException("file1"); + } + + if (string.IsNullOrEmpty(file2)) + { + throw new ArgumentNullException("file2"); + } + + var temp1 = Path.GetTempFileName(); + var temp2 = Path.GetTempFileName(); + + // Copying over will fail against hidden files + RemoveHiddenAttribute(file1); + RemoveHiddenAttribute(file2); + + CopyFile(file1, temp1, true); + CopyFile(file2, temp2, true); + + CopyFile(temp1, file2, true); + CopyFile(temp2, file1, true); + + DeleteFile(temp1); + DeleteFile(temp2); + } + + /// + /// Removes the hidden attribute. + /// + /// The path. + private void RemoveHiddenAttribute(string path) + { + if (string.IsNullOrEmpty(path)) + { + throw new ArgumentNullException("path"); + } + + var currentFile = new FileInfo(path); + + // This will fail if the file is hidden + if (currentFile.Exists) + { + if ((currentFile.Attributes & FileAttributes.Hidden) == FileAttributes.Hidden) + { + currentFile.Attributes &= ~FileAttributes.Hidden; + } + } + } + + public bool ContainsSubPath(string parentPath, string path) + { + if (string.IsNullOrEmpty(parentPath)) + { + throw new ArgumentNullException("parentPath"); + } + + if (string.IsNullOrEmpty(path)) + { + throw new ArgumentNullException("path"); + } + + return path.IndexOf(parentPath.TrimEnd(Path.DirectorySeparatorChar) + Path.DirectorySeparatorChar, StringComparison.OrdinalIgnoreCase) != -1; + } + + public bool IsRootPath(string path) + { + if (string.IsNullOrEmpty(path)) + { + throw new ArgumentNullException("path"); + } + + var parent = Path.GetDirectoryName(path); + + if (!string.IsNullOrEmpty(parent)) + { + return false; + } + + return true; + } + + public string NormalizePath(string path) + { + if (string.IsNullOrEmpty(path)) + { + throw new ArgumentNullException("path"); + } + + if (path.EndsWith(":\\", StringComparison.OrdinalIgnoreCase)) + { + return path; + } + + return path.TrimEnd(Path.DirectorySeparatorChar); + } + + public string GetFileNameWithoutExtension(FileSystemMetadata info) + { + if (info.IsDirectory) + { + return info.Name; + } + + return Path.GetFileNameWithoutExtension(info.FullName); + } + + public string GetFileNameWithoutExtension(string path) + { + return Path.GetFileNameWithoutExtension(path); + } + + public bool IsPathFile(string path) + { + if (string.IsNullOrWhiteSpace(path)) + { + throw new ArgumentNullException("path"); + } + + // Cannot use Path.IsPathRooted because it returns false under mono when using windows-based paths, e.g. C:\\ + + if (path.IndexOf("://", StringComparison.OrdinalIgnoreCase) != -1 && + !path.StartsWith("file://", StringComparison.OrdinalIgnoreCase)) + { + return false; + } + return true; + + //return Path.IsPathRooted(path); + } + + public void DeleteFile(string path) + { + File.Delete(path); + } + + public void DeleteDirectory(string path, bool recursive) + { + Directory.Delete(path, recursive); + } + + public void CreateDirectory(string path) + { + Directory.CreateDirectory(path); + } + + public IEnumerable GetDirectories(string path, bool recursive = false) + { + var searchOption = recursive ? SearchOption.AllDirectories : SearchOption.TopDirectoryOnly; + + return ToMetadata(path, new DirectoryInfo(path).EnumerateDirectories("*", searchOption)); + } + + public IEnumerable GetFiles(string path, bool recursive = false) + { + var searchOption = recursive ? SearchOption.AllDirectories : SearchOption.TopDirectoryOnly; + + return ToMetadata(path, new DirectoryInfo(path).EnumerateFiles("*", searchOption)); + } + + public IEnumerable GetFileSystemEntries(string path, bool recursive = false) + { + var directoryInfo = new DirectoryInfo(path); + var searchOption = recursive ? SearchOption.AllDirectories : SearchOption.TopDirectoryOnly; + + if (EnableFileSystemRequestConcat) + { + return ToMetadata(path, directoryInfo.EnumerateDirectories("*", searchOption)) + .Concat(ToMetadata(path, directoryInfo.EnumerateFiles("*", searchOption))); + } + + return ToMetadata(path, directoryInfo.EnumerateFileSystemInfos("*", searchOption)); + } + + private IEnumerable ToMetadata(string parentPath, IEnumerable infos) + { + return infos.Select(i => + { + try + { + return GetFileSystemMetadata(i); + } + catch (PathTooLongException) + { + // Can't log using the FullName because it will throw the PathTooLongExceptiona again + //Logger.Warn("Path too long: {0}", i.FullName); + Logger.Warn("File or directory path too long. Parent folder: {0}", parentPath); + return null; + } + + }).Where(i => i != null); + } + + public Stream OpenRead(string path) + { + return File.OpenRead(path); + } + + public void CopyFile(string source, string target, bool overwrite) + { + File.Copy(source, target, overwrite); + } + + public void MoveFile(string source, string target) + { + File.Move(source, target); + } + + public void MoveDirectory(string source, string target) + { + Directory.Move(source, target); + } + + public bool DirectoryExists(string path) + { + return Directory.Exists(path); + } + + public bool FileExists(string path) + { + return File.Exists(path); + } + + public string ReadAllText(string path) + { + return File.ReadAllText(path); + } + + public byte[] ReadAllBytes(string path) + { + return File.ReadAllBytes(path); + } + + public void WriteAllText(string path, string text, Encoding encoding) + { + File.WriteAllText(path, text, encoding); + } + + public void WriteAllText(string path, string text) + { + File.WriteAllText(path, text); + } + + public void WriteAllBytes(string path, byte[] bytes) + { + File.WriteAllBytes(path, bytes); + } + + public string ReadAllText(string path, Encoding encoding) + { + return File.ReadAllText(path, encoding); + } + + public IEnumerable GetDirectoryPaths(string path, bool recursive = false) + { + var searchOption = recursive ? SearchOption.AllDirectories : SearchOption.TopDirectoryOnly; + return Directory.EnumerateDirectories(path, "*", searchOption); + } + + public IEnumerable GetFilePaths(string path, bool recursive = false) + { + var searchOption = recursive ? SearchOption.AllDirectories : SearchOption.TopDirectoryOnly; + return Directory.EnumerateFiles(path, "*", searchOption); + } + + public IEnumerable GetFileSystemEntryPaths(string path, bool recursive = false) + { + var searchOption = recursive ? SearchOption.AllDirectories : SearchOption.TopDirectoryOnly; + return Directory.EnumerateFileSystemEntries(path, "*", searchOption); + } + } +} diff --git a/Emby.Common.Implementations/IO/WindowsFileSystem.cs b/Emby.Common.Implementations/IO/WindowsFileSystem.cs new file mode 100644 index 000000000..3eafeb2f7 --- /dev/null +++ b/Emby.Common.Implementations/IO/WindowsFileSystem.cs @@ -0,0 +1,13 @@ +using MediaBrowser.Model.Logging; + +namespace Emby.Common.Implementations.IO +{ + public class WindowsFileSystem : ManagedFileSystem + { + public WindowsFileSystem(ILogger logger) + : base(logger, true, true) + { + EnableFileSystemRequestConcat = false; + } + } +} diff --git a/Emby.Common.Implementations/Networking/BaseNetworkManager.cs b/Emby.Common.Implementations/Networking/BaseNetworkManager.cs new file mode 100644 index 000000000..f251d8f70 --- /dev/null +++ b/Emby.Common.Implementations/Networking/BaseNetworkManager.cs @@ -0,0 +1,385 @@ +using MediaBrowser.Model.Logging; +using System; +using System.Collections.Generic; +using System.Globalization; +using System.Linq; +using System.Net; +using System.Net.NetworkInformation; +using System.Net.Sockets; +using MediaBrowser.Model.Extensions; + +namespace Emby.Common.Implementations.Networking +{ + public abstract class BaseNetworkManager + { + protected ILogger Logger { get; private set; } + private DateTime _lastRefresh; + + protected BaseNetworkManager(ILogger logger) + { + Logger = logger; + } + + private List _localIpAddresses; + private readonly object _localIpAddressSyncLock = new object(); + + /// + /// Gets the machine's local ip address + /// + /// IPAddress. + public IEnumerable GetLocalIpAddresses() + { + const int cacheMinutes = 5; + + lock (_localIpAddressSyncLock) + { + var forceRefresh = (DateTime.UtcNow - _lastRefresh).TotalMinutes >= cacheMinutes; + + if (_localIpAddresses == null || forceRefresh) + { + var addresses = GetLocalIpAddressesInternal().ToList(); + + _localIpAddresses = addresses; + _lastRefresh = DateTime.UtcNow; + + return addresses; + } + } + + return _localIpAddresses; + } + + private IEnumerable GetLocalIpAddressesInternal() + { + var list = GetIPsDefault() + .ToList(); + + if (list.Count == 0) + { + list.AddRange(GetLocalIpAddressesFallback()); + } + + return list.Where(FilterIpAddress).DistinctBy(i => i.ToString()); + } + + private bool FilterIpAddress(IPAddress address) + { + var addressString = address.ToString (); + + if (addressString.StartsWith("169.", StringComparison.OrdinalIgnoreCase)) + { + return false; + } + + return true; + } + + public bool IsInPrivateAddressSpace(string endpoint) + { + if (string.Equals(endpoint, "::1", StringComparison.OrdinalIgnoreCase)) + { + return true; + } + + // Handle ipv4 mapped to ipv6 + endpoint = endpoint.Replace("::ffff:", string.Empty); + + // Private address space: + // http://en.wikipedia.org/wiki/Private_network + + if (endpoint.StartsWith("172.", StringComparison.OrdinalIgnoreCase)) + { + return Is172AddressPrivate(endpoint); + } + + return + + endpoint.StartsWith("localhost", StringComparison.OrdinalIgnoreCase) || + endpoint.StartsWith("127.", StringComparison.OrdinalIgnoreCase) || + endpoint.StartsWith("10.", StringComparison.OrdinalIgnoreCase) || + endpoint.StartsWith("192.168", StringComparison.OrdinalIgnoreCase) || + endpoint.StartsWith("169.", StringComparison.OrdinalIgnoreCase); + } + + private bool Is172AddressPrivate(string endpoint) + { + for (var i = 16; i <= 31; i++) + { + if (endpoint.StartsWith("172." + i.ToString(CultureInfo.InvariantCulture) + ".", StringComparison.OrdinalIgnoreCase)) + { + return true; + } + } + + return false; + } + + public bool IsInLocalNetwork(string endpoint) + { + return IsInLocalNetworkInternal(endpoint, true); + } + + public bool IsInLocalNetworkInternal(string endpoint, bool resolveHost) + { + if (string.IsNullOrWhiteSpace(endpoint)) + { + throw new ArgumentNullException("endpoint"); + } + + IPAddress address; + if (IPAddress.TryParse(endpoint, out address)) + { + var addressString = address.ToString(); + + int lengthMatch = 100; + if (address.AddressFamily == AddressFamily.InterNetwork) + { + lengthMatch = 4; + if (IsInPrivateAddressSpace(addressString)) + { + return true; + } + } + else if (address.AddressFamily == AddressFamily.InterNetworkV6) + { + lengthMatch = 10; + if (IsInPrivateAddressSpace(endpoint)) + { + return true; + } + } + + // Should be even be doing this with ipv6? + if (addressString.Length >= lengthMatch) + { + var prefix = addressString.Substring(0, lengthMatch); + + if (GetLocalIpAddresses().Any(i => i.ToString().StartsWith(prefix, StringComparison.OrdinalIgnoreCase))) + { + return true; + } + } + } + else if (resolveHost) + { + Uri uri; + if (Uri.TryCreate(endpoint, UriKind.RelativeOrAbsolute, out uri)) + { + try + { + var host = uri.DnsSafeHost; + Logger.Debug("Resolving host {0}", host); + + address = GetIpAddresses(host).FirstOrDefault(); + + if (address != null) + { + Logger.Debug("{0} resolved to {1}", host, address); + + return IsInLocalNetworkInternal(address.ToString(), false); + } + } + catch (InvalidOperationException) + { + // Can happen with reverse proxy or IIS url rewriting + } + catch (Exception ex) + { + Logger.ErrorException("Error resovling hostname", ex); + } + } + } + + return false; + } + + public IEnumerable GetIpAddresses(string hostName) + { + return Dns.GetHostAddresses(hostName); + } + + private List GetIPsDefault() + { + NetworkInterface[] interfaces; + + try + { + interfaces = NetworkInterface.GetAllNetworkInterfaces(); + } + catch (Exception ex) + { + Logger.ErrorException("Error in GetAllNetworkInterfaces", ex); + return new List(); + } + + return interfaces.SelectMany(network => { + + try + { + Logger.Debug("Querying interface: {0}. Type: {1}. Status: {2}", network.Name, network.NetworkInterfaceType, network.OperationalStatus); + + var properties = network.GetIPProperties(); + + return properties.UnicastAddresses + .Where(i => i.IsDnsEligible) + .Select(i => i.Address) + .Where(i => i.AddressFamily == AddressFamily.InterNetwork) + .ToList(); + } + catch (Exception ex) + { + Logger.ErrorException("Error querying network interface", ex); + return new List(); + } + + }).DistinctBy(i => i.ToString()) + .ToList(); + } + + private IEnumerable GetLocalIpAddressesFallback() + { + var host = Dns.GetHostEntry(Dns.GetHostName()); + + // Reverse them because the last one is usually the correct one + // It's not fool-proof so ultimately the consumer will have to examine them and decide + return host.AddressList + .Where(i => i.AddressFamily == AddressFamily.InterNetwork) + .Reverse(); + } + + /// + /// Gets a random port number that is currently available + /// + /// System.Int32. + public int GetRandomUnusedPort() + { + var listener = new TcpListener(IPAddress.Any, 0); + listener.Start(); + var port = ((IPEndPoint)listener.LocalEndpoint).Port; + listener.Stop(); + return port; + } + + /// + /// Returns MAC Address from first Network Card in Computer + /// + /// [string] MAC Address + public string GetMacAddress() + { + return NetworkInterface.GetAllNetworkInterfaces() + .Where(i => i.NetworkInterfaceType != NetworkInterfaceType.Loopback) + .Select(i => BitConverter.ToString(i.GetPhysicalAddress().GetAddressBytes())) + .FirstOrDefault(); + } + + /// + /// Parses the specified endpointstring. + /// + /// The endpointstring. + /// IPEndPoint. + public IPEndPoint Parse(string endpointstring) + { + return Parse(endpointstring, -1); + } + + /// + /// Parses the specified endpointstring. + /// + /// The endpointstring. + /// The defaultport. + /// IPEndPoint. + /// Endpoint descriptor may not be empty. + /// + private static IPEndPoint Parse(string endpointstring, int defaultport) + { + if (String.IsNullOrEmpty(endpointstring) + || endpointstring.Trim().Length == 0) + { + throw new ArgumentException("Endpoint descriptor may not be empty."); + } + + if (defaultport != -1 && + (defaultport < IPEndPoint.MinPort + || defaultport > IPEndPoint.MaxPort)) + { + throw new ArgumentException(String.Format("Invalid default port '{0}'", defaultport)); + } + + string[] values = endpointstring.Split(new char[] { ':' }); + IPAddress ipaddy; + int port = -1; + + //check if we have an IPv6 or ports + if (values.Length <= 2) // ipv4 or hostname + { + port = values.Length == 1 ? defaultport : GetPort(values[1]); + + //try to use the address as IPv4, otherwise get hostname + if (!IPAddress.TryParse(values[0], out ipaddy)) + ipaddy = GetIPfromHost(values[0]); + } + else if (values.Length > 2) //ipv6 + { + //could [a:b:c]:d + if (values[0].StartsWith("[") && values[values.Length - 2].EndsWith("]")) + { + string ipaddressstring = String.Join(":", values.Take(values.Length - 1).ToArray()); + ipaddy = IPAddress.Parse(ipaddressstring); + port = GetPort(values[values.Length - 1]); + } + else //[a:b:c] or a:b:c + { + ipaddy = IPAddress.Parse(endpointstring); + port = defaultport; + } + } + else + { + throw new FormatException(String.Format("Invalid endpoint ipaddress '{0}'", endpointstring)); + } + + if (port == -1) + throw new ArgumentException(String.Format("No port specified: '{0}'", endpointstring)); + + return new IPEndPoint(ipaddy, port); + } + + protected static readonly CultureInfo UsCulture = new CultureInfo("en-US"); + + /// + /// Gets the port. + /// + /// The p. + /// System.Int32. + /// + private static int GetPort(string p) + { + int port; + + if (!Int32.TryParse(p, out port) + || port < IPEndPoint.MinPort + || port > IPEndPoint.MaxPort) + { + throw new FormatException(String.Format("Invalid end point port '{0}'", p)); + } + + return port; + } + + /// + /// Gets the I pfrom host. + /// + /// The p. + /// IPAddress. + /// + private static IPAddress GetIPfromHost(string p) + { + var hosts = Dns.GetHostAddresses(p); + + if (hosts == null || hosts.Length == 0) + throw new ArgumentException(String.Format("Host not found: {0}", p)); + + return hosts[0]; + } + } +} diff --git a/Emby.Common.Implementations/Properties/AssemblyInfo.cs b/Emby.Common.Implementations/Properties/AssemblyInfo.cs new file mode 100644 index 000000000..1a5abcb27 --- /dev/null +++ b/Emby.Common.Implementations/Properties/AssemblyInfo.cs @@ -0,0 +1,19 @@ +using System.Reflection; +using System.Runtime.CompilerServices; +using System.Runtime.InteropServices; + +// General Information about an assembly is controlled through the following +// set of attributes. Change these attribute values to modify the information +// associated with an assembly. +[assembly: AssemblyConfiguration("")] +[assembly: AssemblyCompany("")] +[assembly: AssemblyProduct("Emby.Common.Implementations")] +[assembly: AssemblyTrademark("")] + +// Setting ComVisible to false makes the types in this assembly not visible +// to COM components. If you need to access a type in this assembly from +// COM, set the ComVisible attribute to true on that type. +[assembly: ComVisible(false)] + +// The following GUID is for the ID of the typelib if this project is exposed to COM +[assembly: Guid("5a27010a-09c6-4e86-93ea-437484c10917")] diff --git a/Emby.Common.Implementations/ScheduledTasks/DailyTrigger.cs b/Emby.Common.Implementations/ScheduledTasks/DailyTrigger.cs new file mode 100644 index 000000000..5735f8026 --- /dev/null +++ b/Emby.Common.Implementations/ScheduledTasks/DailyTrigger.cs @@ -0,0 +1,91 @@ +using System; +using System.Globalization; +using System.Threading; +using MediaBrowser.Model.Events; +using MediaBrowser.Model.Logging; +using MediaBrowser.Model.Tasks; + +namespace Emby.Common.Implementations.ScheduledTasks +{ + /// + /// Represents a task trigger that fires everyday + /// + public class DailyTrigger : ITaskTrigger + { + /// + /// Get the time of day to trigger the task to run + /// + /// The time of day. + public TimeSpan TimeOfDay { get; set; } + + /// + /// Gets or sets the timer. + /// + /// The timer. + private Timer Timer { get; set; } + + /// + /// Gets the execution properties of this task. + /// + /// + /// The execution properties of this task. + /// + public TaskExecutionOptions TaskOptions { get; set; } + + /// + /// Stars waiting for the trigger action + /// + /// The last result. + /// if set to true [is application startup]. + public void Start(TaskResult lastResult, ILogger logger, string taskName, bool isApplicationStartup) + { + DisposeTimer(); + + var now = DateTime.Now; + + var triggerDate = now.TimeOfDay > TimeOfDay ? now.Date.AddDays(1) : now.Date; + triggerDate = triggerDate.Add(TimeOfDay); + + var dueTime = triggerDate - now; + + logger.Info("Daily trigger for {0} set to fire at {1}, which is {2} minutes from now.", taskName, triggerDate.ToString(), dueTime.TotalMinutes.ToString(CultureInfo.InvariantCulture)); + + Timer = new Timer(state => OnTriggered(), null, dueTime, TimeSpan.FromMilliseconds(-1)); + } + + /// + /// Stops waiting for the trigger action + /// + public void Stop() + { + DisposeTimer(); + } + + /// + /// Disposes the timer. + /// + private void DisposeTimer() + { + if (Timer != null) + { + Timer.Dispose(); + } + } + + /// + /// Occurs when [triggered]. + /// + public event EventHandler> Triggered; + + /// + /// Called when [triggered]. + /// + private void OnTriggered() + { + if (Triggered != null) + { + Triggered(this, new GenericEventArgs(TaskOptions)); + } + } + } +} diff --git a/Emby.Common.Implementations/ScheduledTasks/IntervalTrigger.cs b/Emby.Common.Implementations/ScheduledTasks/IntervalTrigger.cs new file mode 100644 index 000000000..4d2769d8f --- /dev/null +++ b/Emby.Common.Implementations/ScheduledTasks/IntervalTrigger.cs @@ -0,0 +1,112 @@ +using System; +using System.Linq; +using System.Threading; +using MediaBrowser.Model.Events; +using MediaBrowser.Model.Logging; +using MediaBrowser.Model.Tasks; + +namespace Emby.Common.Implementations.ScheduledTasks +{ + /// + /// Represents a task trigger that runs repeatedly on an interval + /// + public class IntervalTrigger : ITaskTrigger + { + /// + /// Gets or sets the interval. + /// + /// The interval. + public TimeSpan Interval { get; set; } + + /// + /// Gets or sets the timer. + /// + /// The timer. + private Timer Timer { get; set; } + + /// + /// Gets the execution properties of this task. + /// + /// + /// The execution properties of this task. + /// + public TaskExecutionOptions TaskOptions { get; set; } + + private DateTime _lastStartDate; + + /// + /// Stars waiting for the trigger action + /// + /// The last result. + /// if set to true [is application startup]. + public void Start(TaskResult lastResult, ILogger logger, string taskName, bool isApplicationStartup) + { + DisposeTimer(); + + DateTime triggerDate; + + if (lastResult == null) + { + // Task has never been completed before + triggerDate = DateTime.UtcNow.AddHours(1); + } + else + { + triggerDate = new[] { lastResult.EndTimeUtc, _lastStartDate }.Max().Add(Interval); + } + + if (DateTime.UtcNow > triggerDate) + { + triggerDate = DateTime.UtcNow.AddMinutes(1); + } + + var dueTime = triggerDate - DateTime.UtcNow; + var maxDueTime = TimeSpan.FromDays(7); + + if (dueTime > maxDueTime) + { + dueTime = maxDueTime; + } + + Timer = new Timer(state => OnTriggered(), null, dueTime, TimeSpan.FromMilliseconds(-1)); + } + + /// + /// Stops waiting for the trigger action + /// + public void Stop() + { + DisposeTimer(); + } + + /// + /// Disposes the timer. + /// + private void DisposeTimer() + { + if (Timer != null) + { + Timer.Dispose(); + } + } + + /// + /// Occurs when [triggered]. + /// + public event EventHandler> Triggered; + + /// + /// Called when [triggered]. + /// + private void OnTriggered() + { + DisposeTimer(); + + if (Triggered != null) + { + _lastStartDate = DateTime.UtcNow; + Triggered(this, new GenericEventArgs(TaskOptions)); + } + } + } +} diff --git a/Emby.Common.Implementations/ScheduledTasks/ScheduledTaskWorker.cs b/Emby.Common.Implementations/ScheduledTasks/ScheduledTaskWorker.cs new file mode 100644 index 000000000..f288c5c0f --- /dev/null +++ b/Emby.Common.Implementations/ScheduledTasks/ScheduledTaskWorker.cs @@ -0,0 +1,782 @@ +using System; +using System.Collections.Generic; +using System.IO; +using System.Linq; +using System.Threading; +using System.Threading.Tasks; +using MediaBrowser.Common.Configuration; +using MediaBrowser.Common.Events; +using MediaBrowser.Common.Extensions; +using MediaBrowser.Model.Events; +using MediaBrowser.Model.IO; +using MediaBrowser.Model.Logging; +using MediaBrowser.Model.Serialization; +using MediaBrowser.Model.System; +using MediaBrowser.Model.Tasks; + +namespace Emby.Common.Implementations.ScheduledTasks +{ + /// + /// Class ScheduledTaskWorker + /// + public class ScheduledTaskWorker : IScheduledTaskWorker + { + public event EventHandler> TaskProgress; + + /// + /// Gets or sets the scheduled task. + /// + /// The scheduled task. + public IScheduledTask ScheduledTask { get; private set; } + + /// + /// Gets or sets the json serializer. + /// + /// The json serializer. + private IJsonSerializer JsonSerializer { get; set; } + + /// + /// Gets or sets the application paths. + /// + /// The application paths. + private IApplicationPaths ApplicationPaths { get; set; } + + /// + /// Gets the logger. + /// + /// The logger. + private ILogger Logger { get; set; } + + /// + /// Gets the task manager. + /// + /// The task manager. + private ITaskManager TaskManager { get; set; } + private readonly IFileSystem _fileSystem; + private readonly ISystemEvents _systemEvents; + + /// + /// Initializes a new instance of the class. + /// + /// The scheduled task. + /// The application paths. + /// The task manager. + /// The json serializer. + /// The logger. + /// + /// scheduledTask + /// or + /// applicationPaths + /// or + /// taskManager + /// or + /// jsonSerializer + /// or + /// logger + /// + public ScheduledTaskWorker(IScheduledTask scheduledTask, IApplicationPaths applicationPaths, ITaskManager taskManager, IJsonSerializer jsonSerializer, ILogger logger, IFileSystem fileSystem, ISystemEvents systemEvents) + { + if (scheduledTask == null) + { + throw new ArgumentNullException("scheduledTask"); + } + if (applicationPaths == null) + { + throw new ArgumentNullException("applicationPaths"); + } + if (taskManager == null) + { + throw new ArgumentNullException("taskManager"); + } + if (jsonSerializer == null) + { + throw new ArgumentNullException("jsonSerializer"); + } + if (logger == null) + { + throw new ArgumentNullException("logger"); + } + + ScheduledTask = scheduledTask; + ApplicationPaths = applicationPaths; + TaskManager = taskManager; + JsonSerializer = jsonSerializer; + Logger = logger; + _fileSystem = fileSystem; + _systemEvents = systemEvents; + + InitTriggerEvents(); + } + + private bool _readFromFile = false; + /// + /// The _last execution result + /// + private TaskResult _lastExecutionResult; + /// + /// The _last execution result sync lock + /// + private readonly object _lastExecutionResultSyncLock = new object(); + /// + /// Gets the last execution result. + /// + /// The last execution result. + public TaskResult LastExecutionResult + { + get + { + var path = GetHistoryFilePath(); + + lock (_lastExecutionResultSyncLock) + { + if (_lastExecutionResult == null && !_readFromFile) + { + try + { + _lastExecutionResult = JsonSerializer.DeserializeFromFile(path); + } + catch (DirectoryNotFoundException) + { + // File doesn't exist. No biggie + } + catch (FileNotFoundException) + { + // File doesn't exist. No biggie + } + catch (Exception ex) + { + Logger.ErrorException("Error deserializing {0}", ex, path); + } + _readFromFile = true; + } + } + + return _lastExecutionResult; + } + private set + { + _lastExecutionResult = value; + + var path = GetHistoryFilePath(); + _fileSystem.CreateDirectory(Path.GetDirectoryName(path)); + + lock (_lastExecutionResultSyncLock) + { + JsonSerializer.SerializeToFile(value, path); + } + } + } + + /// + /// Gets the name. + /// + /// The name. + public string Name + { + get { return ScheduledTask.Name; } + } + + /// + /// Gets the description. + /// + /// The description. + public string Description + { + get { return ScheduledTask.Description; } + } + + /// + /// Gets the category. + /// + /// The category. + public string Category + { + get { return ScheduledTask.Category; } + } + + /// + /// Gets the current cancellation token + /// + /// The current cancellation token source. + private CancellationTokenSource CurrentCancellationTokenSource { get; set; } + + /// + /// Gets or sets the current execution start time. + /// + /// The current execution start time. + private DateTime CurrentExecutionStartTime { get; set; } + + /// + /// Gets the state. + /// + /// The state. + public TaskState State + { + get + { + if (CurrentCancellationTokenSource != null) + { + return CurrentCancellationTokenSource.IsCancellationRequested + ? TaskState.Cancelling + : TaskState.Running; + } + + return TaskState.Idle; + } + } + + /// + /// Gets the current progress. + /// + /// The current progress. + public double? CurrentProgress { get; private set; } + + /// + /// The _triggers + /// + private Tuple[] _triggers; + /// + /// Gets the triggers that define when the task will run + /// + /// The triggers. + private Tuple[] InternalTriggers + { + get + { + return _triggers; + } + set + { + if (value == null) + { + throw new ArgumentNullException("value"); + } + + // Cleanup current triggers + if (_triggers != null) + { + DisposeTriggers(); + } + + _triggers = value.ToArray(); + + ReloadTriggerEvents(false); + } + } + + /// + /// Gets the triggers that define when the task will run + /// + /// The triggers. + /// value + public TaskTriggerInfo[] Triggers + { + get + { + return InternalTriggers.Select(i => i.Item1).ToArray(); + } + set + { + if (value == null) + { + throw new ArgumentNullException("value"); + } + + SaveTriggers(value); + + InternalTriggers = value.Select(i => new Tuple(i, GetTrigger(i))).ToArray(); + } + } + + /// + /// The _id + /// + private string _id; + + /// + /// Gets the unique id. + /// + /// The unique id. + public string Id + { + get + { + if (_id == null) + { + _id = ScheduledTask.GetType().FullName.GetMD5().ToString("N"); + } + + return _id; + } + } + + private void InitTriggerEvents() + { + _triggers = LoadTriggers(); + ReloadTriggerEvents(true); + } + + public void ReloadTriggerEvents() + { + ReloadTriggerEvents(false); + } + + /// + /// Reloads the trigger events. + /// + /// if set to true [is application startup]. + private void ReloadTriggerEvents(bool isApplicationStartup) + { + foreach (var triggerInfo in InternalTriggers) + { + var trigger = triggerInfo.Item2; + + trigger.Stop(); + + trigger.Triggered -= trigger_Triggered; + trigger.Triggered += trigger_Triggered; + trigger.Start(LastExecutionResult, Logger, Name, isApplicationStartup); + } + } + + /// + /// Handles the Triggered event of the trigger control. + /// + /// The source of the event. + /// The instance containing the event data. + async void trigger_Triggered(object sender, GenericEventArgs e) + { + var trigger = (ITaskTrigger)sender; + + var configurableTask = ScheduledTask as IConfigurableScheduledTask; + + if (configurableTask != null && !configurableTask.IsEnabled) + { + return; + } + + Logger.Info("{0} fired for task: {1}", trigger.GetType().Name, Name); + + trigger.Stop(); + + TaskManager.QueueScheduledTask(ScheduledTask, e.Argument); + + await Task.Delay(1000).ConfigureAwait(false); + + trigger.Start(LastExecutionResult, Logger, Name, false); + } + + private Task _currentTask; + + /// + /// Executes the task + /// + /// Task options. + /// Task. + /// Cannot execute a Task that is already running + public async Task Execute(TaskExecutionOptions options) + { + var task = ExecuteInternal(options); + + _currentTask = task; + + try + { + await task.ConfigureAwait(false); + } + finally + { + _currentTask = null; + } + } + + private async Task ExecuteInternal(TaskExecutionOptions options) + { + // Cancel the current execution, if any + if (CurrentCancellationTokenSource != null) + { + throw new InvalidOperationException("Cannot execute a Task that is already running"); + } + + var progress = new Progress(); + + CurrentCancellationTokenSource = new CancellationTokenSource(); + + Logger.Info("Executing {0}", Name); + + ((TaskManager)TaskManager).OnTaskExecuting(this); + + progress.ProgressChanged += progress_ProgressChanged; + + TaskCompletionStatus status; + CurrentExecutionStartTime = DateTime.UtcNow; + + Exception failureException = null; + + try + { + if (options != null && options.MaxRuntimeMs.HasValue) + { + CurrentCancellationTokenSource.CancelAfter(options.MaxRuntimeMs.Value); + } + + var localTask = ScheduledTask.Execute(CurrentCancellationTokenSource.Token, progress); + + await localTask.ConfigureAwait(false); + + status = TaskCompletionStatus.Completed; + } + catch (OperationCanceledException) + { + status = TaskCompletionStatus.Cancelled; + } + catch (Exception ex) + { + Logger.ErrorException("Error", ex); + + failureException = ex; + + status = TaskCompletionStatus.Failed; + } + + var startTime = CurrentExecutionStartTime; + var endTime = DateTime.UtcNow; + + progress.ProgressChanged -= progress_ProgressChanged; + CurrentCancellationTokenSource.Dispose(); + CurrentCancellationTokenSource = null; + CurrentProgress = null; + + OnTaskCompleted(startTime, endTime, status, failureException); + } + + /// + /// Progress_s the progress changed. + /// + /// The sender. + /// The e. + void progress_ProgressChanged(object sender, double e) + { + CurrentProgress = e; + + EventHelper.FireEventIfNotNull(TaskProgress, this, new GenericEventArgs + { + Argument = e + + }, Logger); + } + + /// + /// Stops the task if it is currently executing + /// + /// Cannot cancel a Task unless it is in the Running state. + public void Cancel() + { + if (State != TaskState.Running) + { + throw new InvalidOperationException("Cannot cancel a Task unless it is in the Running state."); + } + + CancelIfRunning(); + } + + /// + /// Cancels if running. + /// + public void CancelIfRunning() + { + if (State == TaskState.Running) + { + Logger.Info("Attempting to cancel Scheduled Task {0}", Name); + CurrentCancellationTokenSource.Cancel(); + } + } + + /// + /// Gets the scheduled tasks configuration directory. + /// + /// System.String. + private string GetScheduledTasksConfigurationDirectory() + { + return Path.Combine(ApplicationPaths.ConfigurationDirectoryPath, "ScheduledTasks"); + } + + /// + /// Gets the scheduled tasks data directory. + /// + /// System.String. + private string GetScheduledTasksDataDirectory() + { + return Path.Combine(ApplicationPaths.DataPath, "ScheduledTasks"); + } + + /// + /// Gets the history file path. + /// + /// The history file path. + private string GetHistoryFilePath() + { + return Path.Combine(GetScheduledTasksDataDirectory(), new Guid(Id) + ".js"); + } + + /// + /// Gets the configuration file path. + /// + /// System.String. + private string GetConfigurationFilePath() + { + return Path.Combine(GetScheduledTasksConfigurationDirectory(), new Guid(Id) + ".js"); + } + + /// + /// Loads the triggers. + /// + /// IEnumerable{BaseTaskTrigger}. + private Tuple[] LoadTriggers() + { + var settings = LoadTriggerSettings(); + + return settings.Select(i => new Tuple(i, GetTrigger(i))).ToArray(); + } + + private TaskTriggerInfo[] LoadTriggerSettings() + { + try + { + return JsonSerializer.DeserializeFromFile>(GetConfigurationFilePath()) + .ToArray(); + } + catch (FileNotFoundException) + { + // File doesn't exist. No biggie. Return defaults. + return ScheduledTask.GetDefaultTriggers().ToArray(); + } + catch (DirectoryNotFoundException) + { + // File doesn't exist. No biggie. Return defaults. + return ScheduledTask.GetDefaultTriggers().ToArray(); + } + } + + /// + /// Saves the triggers. + /// + /// The triggers. + private void SaveTriggers(TaskTriggerInfo[] triggers) + { + var path = GetConfigurationFilePath(); + + _fileSystem.CreateDirectory(Path.GetDirectoryName(path)); + + JsonSerializer.SerializeToFile(triggers, path); + } + + /// + /// Called when [task completed]. + /// + /// The start time. + /// The end time. + /// The status. + private void OnTaskCompleted(DateTime startTime, DateTime endTime, TaskCompletionStatus status, Exception ex) + { + var elapsedTime = endTime - startTime; + + Logger.Info("{0} {1} after {2} minute(s) and {3} seconds", Name, status, Math.Truncate(elapsedTime.TotalMinutes), elapsedTime.Seconds); + + var result = new TaskResult + { + StartTimeUtc = startTime, + EndTimeUtc = endTime, + Status = status, + Name = Name, + Id = Id + }; + + result.Key = ScheduledTask.Key; + + if (ex != null) + { + result.ErrorMessage = ex.Message; + result.LongErrorMessage = ex.StackTrace; + } + + LastExecutionResult = result; + + ((TaskManager)TaskManager).OnTaskCompleted(this, result); + } + + /// + /// Performs application-defined tasks associated with freeing, releasing, or resetting unmanaged resources. + /// + public void Dispose() + { + Dispose(true); + GC.SuppressFinalize(this); + } + + /// + /// Releases unmanaged and - optionally - managed resources. + /// + /// true to release both managed and unmanaged resources; false to release only unmanaged resources. + protected virtual void Dispose(bool dispose) + { + if (dispose) + { + DisposeTriggers(); + + var wassRunning = State == TaskState.Running; + var startTime = CurrentExecutionStartTime; + + var token = CurrentCancellationTokenSource; + if (token != null) + { + try + { + Logger.Info(Name + ": Cancelling"); + token.Cancel(); + } + catch (Exception ex) + { + Logger.ErrorException("Error calling CancellationToken.Cancel();", ex); + } + } + var task = _currentTask; + if (task != null) + { + try + { + Logger.Info(Name + ": Waiting on Task"); + var exited = Task.WaitAll(new[] { task }, 2000); + + if (exited) + { + Logger.Info(Name + ": Task exited"); + } + else + { + Logger.Info(Name + ": Timed out waiting for task to stop"); + } + } + catch (Exception ex) + { + Logger.ErrorException("Error calling Task.WaitAll();", ex); + } + } + + if (token != null) + { + try + { + Logger.Debug(Name + ": Disposing CancellationToken"); + token.Dispose(); + } + catch (Exception ex) + { + Logger.ErrorException("Error calling CancellationToken.Dispose();", ex); + } + } + if (wassRunning) + { + OnTaskCompleted(startTime, DateTime.UtcNow, TaskCompletionStatus.Aborted, null); + } + } + } + + /// + /// Converts a TaskTriggerInfo into a concrete BaseTaskTrigger + /// + /// The info. + /// BaseTaskTrigger. + /// + /// Invalid trigger type: + info.Type + private ITaskTrigger GetTrigger(TaskTriggerInfo info) + { + var options = new TaskExecutionOptions + { + MaxRuntimeMs = info.MaxRuntimeMs + }; + + if (info.Type.Equals(typeof(DailyTrigger).Name, StringComparison.OrdinalIgnoreCase)) + { + if (!info.TimeOfDayTicks.HasValue) + { + throw new ArgumentNullException(); + } + + return new DailyTrigger + { + TimeOfDay = TimeSpan.FromTicks(info.TimeOfDayTicks.Value), + TaskOptions = options + }; + } + + if (info.Type.Equals(typeof(WeeklyTrigger).Name, StringComparison.OrdinalIgnoreCase)) + { + if (!info.TimeOfDayTicks.HasValue) + { + throw new ArgumentNullException(); + } + + if (!info.DayOfWeek.HasValue) + { + throw new ArgumentNullException(); + } + + return new WeeklyTrigger + { + TimeOfDay = TimeSpan.FromTicks(info.TimeOfDayTicks.Value), + DayOfWeek = info.DayOfWeek.Value, + TaskOptions = options + }; + } + + if (info.Type.Equals(typeof(IntervalTrigger).Name, StringComparison.OrdinalIgnoreCase)) + { + if (!info.IntervalTicks.HasValue) + { + throw new ArgumentNullException(); + } + + return new IntervalTrigger + { + Interval = TimeSpan.FromTicks(info.IntervalTicks.Value), + TaskOptions = options + }; + } + + if (info.Type.Equals(typeof(SystemEventTrigger).Name, StringComparison.OrdinalIgnoreCase)) + { + if (!info.SystemEvent.HasValue) + { + throw new ArgumentNullException(); + } + + return new SystemEventTrigger(_systemEvents) + { + SystemEvent = info.SystemEvent.Value, + TaskOptions = options + }; + } + + if (info.Type.Equals(typeof(StartupTrigger).Name, StringComparison.OrdinalIgnoreCase)) + { + return new StartupTrigger(); + } + + throw new ArgumentException("Unrecognized trigger type: " + info.Type); + } + + /// + /// Disposes each trigger + /// + private void DisposeTriggers() + { + foreach (var triggerInfo in InternalTriggers) + { + var trigger = triggerInfo.Item2; + trigger.Triggered -= trigger_Triggered; + trigger.Stop(); + } + } + } +} diff --git a/Emby.Common.Implementations/ScheduledTasks/StartupTrigger.cs b/Emby.Common.Implementations/ScheduledTasks/StartupTrigger.cs new file mode 100644 index 000000000..8aae644bc --- /dev/null +++ b/Emby.Common.Implementations/ScheduledTasks/StartupTrigger.cs @@ -0,0 +1,67 @@ +using System; +using System.Threading.Tasks; +using MediaBrowser.Model.Events; +using MediaBrowser.Model.Logging; +using MediaBrowser.Model.Tasks; + +namespace Emby.Common.Implementations.ScheduledTasks +{ + /// + /// Class StartupTaskTrigger + /// + public class StartupTrigger : ITaskTrigger + { + public int DelayMs { get; set; } + + /// + /// Gets the execution properties of this task. + /// + /// + /// The execution properties of this task. + /// + public TaskExecutionOptions TaskOptions { get; set; } + + public StartupTrigger() + { + DelayMs = 3000; + } + + /// + /// Stars waiting for the trigger action + /// + /// The last result. + /// if set to true [is application startup]. + public async void Start(TaskResult lastResult, ILogger logger, string taskName, bool isApplicationStartup) + { + if (isApplicationStartup) + { + await Task.Delay(DelayMs).ConfigureAwait(false); + + OnTriggered(); + } + } + + /// + /// Stops waiting for the trigger action + /// + public void Stop() + { + } + + /// + /// Occurs when [triggered]. + /// + public event EventHandler> Triggered; + + /// + /// Called when [triggered]. + /// + private void OnTriggered() + { + if (Triggered != null) + { + Triggered(this, new GenericEventArgs(TaskOptions)); + } + } + } +} diff --git a/Emby.Common.Implementations/ScheduledTasks/SystemEventTrigger.cs b/Emby.Common.Implementations/ScheduledTasks/SystemEventTrigger.cs new file mode 100644 index 000000000..a136a975a --- /dev/null +++ b/Emby.Common.Implementations/ScheduledTasks/SystemEventTrigger.cs @@ -0,0 +1,86 @@ +using System; +using System.Threading.Tasks; +using MediaBrowser.Model.Events; +using MediaBrowser.Model.Logging; +using MediaBrowser.Model.System; +using MediaBrowser.Model.Tasks; + +namespace Emby.Common.Implementations.ScheduledTasks +{ + /// + /// Class SystemEventTrigger + /// + public class SystemEventTrigger : ITaskTrigger + { + /// + /// Gets or sets the system event. + /// + /// The system event. + public SystemEvent SystemEvent { get; set; } + + /// + /// Gets the execution properties of this task. + /// + /// + /// The execution properties of this task. + /// + public TaskExecutionOptions TaskOptions { get; set; } + + private readonly ISystemEvents _systemEvents; + + public SystemEventTrigger(ISystemEvents systemEvents) + { + _systemEvents = systemEvents; + } + + /// + /// Stars waiting for the trigger action + /// + /// The last result. + /// if set to true [is application startup]. + public void Start(TaskResult lastResult, ILogger logger, string taskName, bool isApplicationStartup) + { + switch (SystemEvent) + { + case SystemEvent.WakeFromSleep: + _systemEvents.Resume += _systemEvents_Resume; + break; + } + } + + private async void _systemEvents_Resume(object sender, EventArgs e) + { + if (SystemEvent == SystemEvent.WakeFromSleep) + { + // This value is a bit arbitrary, but add a delay to help ensure network connections have been restored before running the task + await Task.Delay(10000).ConfigureAwait(false); + + OnTriggered(); + } + } + + /// + /// Stops waiting for the trigger action + /// + public void Stop() + { + _systemEvents.Resume -= _systemEvents_Resume; + } + + /// + /// Occurs when [triggered]. + /// + public event EventHandler> Triggered; + + /// + /// Called when [triggered]. + /// + private void OnTriggered() + { + if (Triggered != null) + { + Triggered(this, new GenericEventArgs(TaskOptions)); + } + } + } +} diff --git a/Emby.Common.Implementations/ScheduledTasks/TaskManager.cs b/Emby.Common.Implementations/ScheduledTasks/TaskManager.cs new file mode 100644 index 000000000..15c36e53a --- /dev/null +++ b/Emby.Common.Implementations/ScheduledTasks/TaskManager.cs @@ -0,0 +1,358 @@ +using MediaBrowser.Common.Configuration; +using MediaBrowser.Common.Events; +using MediaBrowser.Model.Events; +using MediaBrowser.Model.Logging; +using MediaBrowser.Model.Serialization; +using MediaBrowser.Model.Tasks; +using System; +using System.Collections.Concurrent; +using System.Collections.Generic; +using System.Linq; +using System.Threading.Tasks; +using MediaBrowser.Model.IO; +using MediaBrowser.Model.System; + +namespace Emby.Common.Implementations.ScheduledTasks +{ + /// + /// Class TaskManager + /// + public class TaskManager : ITaskManager + { + public event EventHandler> TaskExecuting; + public event EventHandler TaskCompleted; + + /// + /// Gets the list of Scheduled Tasks + /// + /// The scheduled tasks. + public IScheduledTaskWorker[] ScheduledTasks { get; private set; } + + /// + /// The _task queue + /// + private readonly ConcurrentQueue> _taskQueue = + new ConcurrentQueue>(); + + /// + /// Gets or sets the json serializer. + /// + /// The json serializer. + private IJsonSerializer JsonSerializer { get; set; } + + /// + /// Gets or sets the application paths. + /// + /// The application paths. + private IApplicationPaths ApplicationPaths { get; set; } + + private readonly ISystemEvents _systemEvents; + + /// + /// Gets the logger. + /// + /// The logger. + private ILogger Logger { get; set; } + private readonly IFileSystem _fileSystem; + + private bool _suspendTriggers; + + public bool SuspendTriggers + { + get { return _suspendTriggers; } + set + { + Logger.Info("Setting SuspendTriggers to {0}", value); + var executeQueued = _suspendTriggers && !value; + + _suspendTriggers = value; + + if (executeQueued) + { + ExecuteQueuedTasks(); + } + } + } + + /// + /// Initializes a new instance of the class. + /// + /// The application paths. + /// The json serializer. + /// The logger. + /// kernel + public TaskManager(IApplicationPaths applicationPaths, IJsonSerializer jsonSerializer, ILogger logger, IFileSystem fileSystem, ISystemEvents systemEvents) + { + ApplicationPaths = applicationPaths; + JsonSerializer = jsonSerializer; + Logger = logger; + _fileSystem = fileSystem; + _systemEvents = systemEvents; + + ScheduledTasks = new IScheduledTaskWorker[] { }; + } + + private void BindToSystemEvent() + { + _systemEvents.Resume += _systemEvents_Resume; + } + + private void _systemEvents_Resume(object sender, EventArgs e) + { + foreach (var task in ScheduledTasks) + { + task.ReloadTriggerEvents(); + } + } + + /// + /// Cancels if running and queue. + /// + /// + /// Task options. + public void CancelIfRunningAndQueue(TaskExecutionOptions options) + where T : IScheduledTask + { + var task = ScheduledTasks.First(t => t.ScheduledTask.GetType() == typeof(T)); + ((ScheduledTaskWorker)task).CancelIfRunning(); + + QueueScheduledTask(options); + } + + public void CancelIfRunningAndQueue() + where T : IScheduledTask + { + CancelIfRunningAndQueue(new TaskExecutionOptions()); + } + + /// + /// Cancels if running + /// + /// + public void CancelIfRunning() + where T : IScheduledTask + { + var task = ScheduledTasks.First(t => t.ScheduledTask.GetType() == typeof(T)); + ((ScheduledTaskWorker)task).CancelIfRunning(); + } + + /// + /// Queues the scheduled task. + /// + /// + /// Task options + public void QueueScheduledTask(TaskExecutionOptions options) + where T : IScheduledTask + { + var scheduledTask = ScheduledTasks.FirstOrDefault(t => t.ScheduledTask.GetType() == typeof(T)); + + if (scheduledTask == null) + { + Logger.Error("Unable to find scheduled task of type {0} in QueueScheduledTask.", typeof(T).Name); + } + else + { + QueueScheduledTask(scheduledTask, options); + } + } + + public void QueueScheduledTask() + where T : IScheduledTask + { + QueueScheduledTask(new TaskExecutionOptions()); + } + + public void QueueIfNotRunning() + where T : IScheduledTask + { + var task = ScheduledTasks.First(t => t.ScheduledTask.GetType() == typeof(T)); + + if (task.State != TaskState.Running) + { + QueueScheduledTask(new TaskExecutionOptions()); + } + } + + public void Execute() + where T : IScheduledTask + { + var scheduledTask = ScheduledTasks.FirstOrDefault(t => t.ScheduledTask.GetType() == typeof(T)); + + if (scheduledTask == null) + { + Logger.Error("Unable to find scheduled task of type {0} in Execute.", typeof(T).Name); + } + else + { + var type = scheduledTask.ScheduledTask.GetType(); + + Logger.Info("Queueing task {0}", type.Name); + + lock (_taskQueue) + { + if (scheduledTask.State == TaskState.Idle) + { + Execute(scheduledTask, new TaskExecutionOptions()); + } + } + } + } + + /// + /// Queues the scheduled task. + /// + /// The task. + /// The task options. + public void QueueScheduledTask(IScheduledTask task, TaskExecutionOptions options) + { + var scheduledTask = ScheduledTasks.FirstOrDefault(t => t.ScheduledTask.GetType() == task.GetType()); + + if (scheduledTask == null) + { + Logger.Error("Unable to find scheduled task of type {0} in QueueScheduledTask.", task.GetType().Name); + } + else + { + QueueScheduledTask(scheduledTask, options); + } + } + + /// + /// Queues the scheduled task. + /// + /// The task. + /// The task options. + private void QueueScheduledTask(IScheduledTaskWorker task, TaskExecutionOptions options) + { + var type = task.ScheduledTask.GetType(); + + Logger.Info("Queueing task {0}", type.Name); + + lock (_taskQueue) + { + if (task.State == TaskState.Idle && !SuspendTriggers) + { + Execute(task, options); + return; + } + + _taskQueue.Enqueue(new Tuple(type, options)); + } + } + + /// + /// Adds the tasks. + /// + /// The tasks. + public void AddTasks(IEnumerable tasks) + { + var myTasks = ScheduledTasks.ToList(); + + var list = tasks.ToList(); + myTasks.AddRange(list.Select(t => new ScheduledTaskWorker(t, ApplicationPaths, this, JsonSerializer, Logger, _fileSystem))); + + ScheduledTasks = myTasks.ToArray(); + + BindToSystemEvent(); + } + + /// + /// Performs application-defined tasks associated with freeing, releasing, or resetting unmanaged resources. + /// + public void Dispose() + { + Dispose(true); + GC.SuppressFinalize(this); + } + + /// + /// Releases unmanaged and - optionally - managed resources. + /// + /// true to release both managed and unmanaged resources; false to release only unmanaged resources. + protected virtual void Dispose(bool dispose) + { + foreach (var task in ScheduledTasks) + { + task.Dispose(); + } + } + + public void Cancel(IScheduledTaskWorker task) + { + ((ScheduledTaskWorker)task).Cancel(); + } + + public Task Execute(IScheduledTaskWorker task, TaskExecutionOptions options) + { + return ((ScheduledTaskWorker)task).Execute(options); + } + + /// + /// Called when [task executing]. + /// + /// The task. + internal void OnTaskExecuting(IScheduledTaskWorker task) + { + EventHelper.FireEventIfNotNull(TaskExecuting, this, new GenericEventArgs + { + Argument = task + + }, Logger); + } + + /// + /// Called when [task completed]. + /// + /// The task. + /// The result. + internal void OnTaskCompleted(IScheduledTaskWorker task, TaskResult result) + { + EventHelper.FireEventIfNotNull(TaskCompleted, task, new TaskCompletionEventArgs + { + Result = result, + Task = task + + }, Logger); + + ExecuteQueuedTasks(); + } + + /// + /// Executes the queued tasks. + /// + private void ExecuteQueuedTasks() + { + if (SuspendTriggers) + { + return; + } + + Logger.Info("ExecuteQueuedTasks"); + + // Execute queued tasks + lock (_taskQueue) + { + var list = new List>(); + + Tuple item; + while (_taskQueue.TryDequeue(out item)) + { + if (list.All(i => i.Item1 != item.Item1)) + { + list.Add(item); + } + } + + foreach (var enqueuedType in list) + { + var scheduledTask = ScheduledTasks.First(t => t.ScheduledTask.GetType() == enqueuedType.Item1); + + if (scheduledTask.State == TaskState.Idle) + { + Execute(scheduledTask, enqueuedType.Item2); + } + } + } + } + } +} diff --git a/Emby.Common.Implementations/ScheduledTasks/Tasks/DeleteCacheFileTask.cs b/Emby.Common.Implementations/ScheduledTasks/Tasks/DeleteCacheFileTask.cs new file mode 100644 index 000000000..1cad2e9b8 --- /dev/null +++ b/Emby.Common.Implementations/ScheduledTasks/Tasks/DeleteCacheFileTask.cs @@ -0,0 +1,215 @@ +using System; +using System.Collections.Generic; +using System.IO; +using System.Linq; +using System.Threading; +using System.Threading.Tasks; +using MediaBrowser.Common.Configuration; +using MediaBrowser.Model.IO; +using MediaBrowser.Model.Logging; +using MediaBrowser.Model.Tasks; + +namespace Emby.Common.Implementations.ScheduledTasks.Tasks +{ + /// + /// Deletes old cache files + /// + public class DeleteCacheFileTask : IScheduledTask, IConfigurableScheduledTask + { + /// + /// Gets or sets the application paths. + /// + /// The application paths. + private IApplicationPaths ApplicationPaths { get; set; } + + private readonly ILogger _logger; + + private readonly IFileSystem _fileSystem; + + /// + /// Initializes a new instance of the class. + /// + public DeleteCacheFileTask(IApplicationPaths appPaths, ILogger logger, IFileSystem fileSystem) + { + ApplicationPaths = appPaths; + _logger = logger; + _fileSystem = fileSystem; + } + + /// + /// Creates the triggers that define when the task will run + /// + /// IEnumerable{BaseTaskTrigger}. + public IEnumerable GetDefaultTriggers() + { + return new[] { + + // Every so often + new TaskTriggerInfo { Type = TaskTriggerInfo.TriggerInterval, IntervalTicks = TimeSpan.FromHours(24).Ticks} + }; + } + + /// + /// Returns the task to be executed + /// + /// The cancellation token. + /// The progress. + /// Task. + public Task Execute(CancellationToken cancellationToken, IProgress progress) + { + var minDateModified = DateTime.UtcNow.AddDays(-30); + + try + { + DeleteCacheFilesFromDirectory(cancellationToken, ApplicationPaths.CachePath, minDateModified, progress); + } + catch (DirectoryNotFoundException) + { + // No biggie here. Nothing to delete + } + + progress.Report(90); + + minDateModified = DateTime.UtcNow.AddDays(-1); + + try + { + DeleteCacheFilesFromDirectory(cancellationToken, ApplicationPaths.TempDirectory, minDateModified, progress); + } + catch (DirectoryNotFoundException) + { + // No biggie here. Nothing to delete + } + + return Task.FromResult(true); + } + + + /// + /// Deletes the cache files from directory with a last write time less than a given date + /// + /// The task cancellation token. + /// The directory. + /// The min date modified. + /// The progress. + private void DeleteCacheFilesFromDirectory(CancellationToken cancellationToken, string directory, DateTime minDateModified, IProgress progress) + { + var filesToDelete = _fileSystem.GetFiles(directory, true) + .Where(f => _fileSystem.GetLastWriteTimeUtc(f) < minDateModified) + .ToList(); + + var index = 0; + + foreach (var file in filesToDelete) + { + double percent = index; + percent /= filesToDelete.Count; + + progress.Report(100 * percent); + + cancellationToken.ThrowIfCancellationRequested(); + + DeleteFile(file.FullName); + + index++; + } + + DeleteEmptyFolders(directory); + + progress.Report(100); + } + + private void DeleteEmptyFolders(string parent) + { + foreach (var directory in _fileSystem.GetDirectoryPaths(parent)) + { + DeleteEmptyFolders(directory); + if (!_fileSystem.GetFileSystemEntryPaths(directory).Any()) + { + try + { + _fileSystem.DeleteDirectory(directory, false); + } + catch (UnauthorizedAccessException ex) + { + _logger.ErrorException("Error deleting directory {0}", ex, directory); + } + catch (IOException ex) + { + _logger.ErrorException("Error deleting directory {0}", ex, directory); + } + } + } + } + + private void DeleteFile(string path) + { + try + { + _fileSystem.DeleteFile(path); + } + catch (UnauthorizedAccessException ex) + { + _logger.ErrorException("Error deleting file {0}", ex, path); + } + catch (IOException ex) + { + _logger.ErrorException("Error deleting file {0}", ex, path); + } + } + + /// + /// Gets the name of the task + /// + /// The name. + public string Name + { + get { return "Cache file cleanup"; } + } + + public string Key + { + get { return "DeleteCacheFiles"; } + } + + /// + /// Gets the description. + /// + /// The description. + public string Description + { + get { return "Deletes cache files no longer needed by the system"; } + } + + /// + /// Gets the category. + /// + /// The category. + public string Category + { + get + { + return "Maintenance"; + } + } + + /// + /// Gets a value indicating whether this instance is hidden. + /// + /// true if this instance is hidden; otherwise, false. + public bool IsHidden + { + get { return true; } + } + + public bool IsEnabled + { + get { return true; } + } + + public bool IsLogged + { + get { return true; } + } + } +} diff --git a/Emby.Common.Implementations/ScheduledTasks/Tasks/DeleteLogFileTask.cs b/Emby.Common.Implementations/ScheduledTasks/Tasks/DeleteLogFileTask.cs new file mode 100644 index 000000000..3f43fa889 --- /dev/null +++ b/Emby.Common.Implementations/ScheduledTasks/Tasks/DeleteLogFileTask.cs @@ -0,0 +1,138 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Threading; +using System.Threading.Tasks; +using MediaBrowser.Common.Configuration; +using MediaBrowser.Model.IO; +using MediaBrowser.Model.Tasks; + +namespace Emby.Common.Implementations.ScheduledTasks.Tasks +{ + /// + /// Deletes old log files + /// + public class DeleteLogFileTask : IScheduledTask, IConfigurableScheduledTask + { + /// + /// Gets or sets the configuration manager. + /// + /// The configuration manager. + private IConfigurationManager ConfigurationManager { get; set; } + + private readonly IFileSystem _fileSystem; + + /// + /// Initializes a new instance of the class. + /// + /// The configuration manager. + public DeleteLogFileTask(IConfigurationManager configurationManager, IFileSystem fileSystem) + { + ConfigurationManager = configurationManager; + _fileSystem = fileSystem; + } + + /// + /// Creates the triggers that define when the task will run + /// + /// IEnumerable{BaseTaskTrigger}. + public IEnumerable GetDefaultTriggers() + { + return new[] { + + // Every so often + new TaskTriggerInfo { Type = TaskTriggerInfo.TriggerInterval, IntervalTicks = TimeSpan.FromHours(24).Ticks} + }; + } + + /// + /// Returns the task to be executed + /// + /// The cancellation token. + /// The progress. + /// Task. + public Task Execute(CancellationToken cancellationToken, IProgress progress) + { + // Delete log files more than n days old + var minDateModified = DateTime.UtcNow.AddDays(-ConfigurationManager.CommonConfiguration.LogFileRetentionDays); + + var filesToDelete = _fileSystem.GetFiles(ConfigurationManager.CommonApplicationPaths.LogDirectoryPath, true) + .Where(f => _fileSystem.GetLastWriteTimeUtc(f) < minDateModified) + .ToList(); + + var index = 0; + + foreach (var file in filesToDelete) + { + double percent = index; + percent /= filesToDelete.Count; + + progress.Report(100 * percent); + + cancellationToken.ThrowIfCancellationRequested(); + + _fileSystem.DeleteFile(file.FullName); + + index++; + } + + progress.Report(100); + + return Task.FromResult(true); + } + + public string Key + { + get { return "CleanLogFiles"; } + } + + /// + /// Gets the name of the task + /// + /// The name. + public string Name + { + get { return "Log file cleanup"; } + } + + /// + /// Gets the description. + /// + /// The description. + public string Description + { + get { return string.Format("Deletes log files that are more than {0} days old.", ConfigurationManager.CommonConfiguration.LogFileRetentionDays); } + } + + /// + /// Gets the category. + /// + /// The category. + public string Category + { + get + { + return "Maintenance"; + } + } + + /// + /// Gets a value indicating whether this instance is hidden. + /// + /// true if this instance is hidden; otherwise, false. + public bool IsHidden + { + get { return true; } + } + + public bool IsEnabled + { + get { return true; } + } + + public bool IsLogged + { + get { return true; } + } + } +} diff --git a/Emby.Common.Implementations/ScheduledTasks/Tasks/ReloadLoggerFileTask.cs b/Emby.Common.Implementations/ScheduledTasks/Tasks/ReloadLoggerFileTask.cs new file mode 100644 index 000000000..80411de05 --- /dev/null +++ b/Emby.Common.Implementations/ScheduledTasks/Tasks/ReloadLoggerFileTask.cs @@ -0,0 +1,112 @@ +using System; +using System.Collections.Generic; +using System.Threading; +using System.Threading.Tasks; +using MediaBrowser.Common.Configuration; +using MediaBrowser.Model.Logging; +using MediaBrowser.Model.Tasks; + +namespace Emby.Common.Implementations.ScheduledTasks.Tasks +{ + /// + /// Class ReloadLoggerFileTask + /// + public class ReloadLoggerFileTask : IScheduledTask, IConfigurableScheduledTask + { + /// + /// Gets or sets the log manager. + /// + /// The log manager. + private ILogManager LogManager { get; set; } + /// + /// Gets or sets the configuration manager. + /// + /// The configuration manager. + private IConfigurationManager ConfigurationManager { get; set; } + + /// + /// Initializes a new instance of the class. + /// + /// The logManager. + /// The configuration manager. + public ReloadLoggerFileTask(ILogManager logManager, IConfigurationManager configurationManager) + { + LogManager = logManager; + ConfigurationManager = configurationManager; + } + + /// + /// Gets the default triggers. + /// + /// IEnumerable{BaseTaskTrigger}. + public IEnumerable GetDefaultTriggers() + { + var trigger = new TaskTriggerInfo { Type = TaskTriggerInfo.TriggerDaily, TimeOfDayTicks = TimeSpan.FromHours(0).Ticks }; //12am + + return new[] { trigger }; + } + + /// + /// Executes the internal. + /// + /// The cancellation token. + /// The progress. + /// Task. + public Task Execute(CancellationToken cancellationToken, IProgress progress) + { + cancellationToken.ThrowIfCancellationRequested(); + + progress.Report(0); + + LogManager.ReloadLogger(ConfigurationManager.CommonConfiguration.EnableDebugLevelLogging + ? LogSeverity.Debug + : LogSeverity.Info); + + return Task.FromResult(true); + } + + /// + /// Gets the name. + /// + /// The name. + public string Name + { + get { return "Start new log file"; } + } + + public string Key { get; } + + /// + /// Gets the description. + /// + /// The description. + public string Description + { + get { return "Moves logging to a new file to help reduce log file sizes."; } + } + + /// + /// Gets the category. + /// + /// The category. + public string Category + { + get { return "Application"; } + } + + public bool IsHidden + { + get { return true; } + } + + public bool IsEnabled + { + get { return true; } + } + + public bool IsLogged + { + get { return true; } + } + } +} diff --git a/Emby.Common.Implementations/ScheduledTasks/WeeklyTrigger.cs b/Emby.Common.Implementations/ScheduledTasks/WeeklyTrigger.cs new file mode 100644 index 000000000..91540ba16 --- /dev/null +++ b/Emby.Common.Implementations/ScheduledTasks/WeeklyTrigger.cs @@ -0,0 +1,116 @@ +using System; +using System.Threading; +using MediaBrowser.Model.Events; +using MediaBrowser.Model.Logging; +using MediaBrowser.Model.Tasks; + +namespace Emby.Common.Implementations.ScheduledTasks +{ + /// + /// Represents a task trigger that fires on a weekly basis + /// + public class WeeklyTrigger : ITaskTrigger + { + /// + /// Get the time of day to trigger the task to run + /// + /// The time of day. + public TimeSpan TimeOfDay { get; set; } + + /// + /// Gets or sets the day of week. + /// + /// The day of week. + public DayOfWeek DayOfWeek { get; set; } + + /// + /// Gets the execution properties of this task. + /// + /// + /// The execution properties of this task. + /// + public TaskExecutionOptions TaskOptions { get; set; } + + /// + /// Gets or sets the timer. + /// + /// The timer. + private Timer Timer { get; set; } + + /// + /// Stars waiting for the trigger action + /// + /// The last result. + /// if set to true [is application startup]. + public void Start(TaskResult lastResult, ILogger logger, string taskName, bool isApplicationStartup) + { + DisposeTimer(); + + var triggerDate = GetNextTriggerDateTime(); + + Timer = new Timer(state => OnTriggered(), null, triggerDate - DateTime.Now, TimeSpan.FromMilliseconds(-1)); + } + + /// + /// Gets the next trigger date time. + /// + /// DateTime. + private DateTime GetNextTriggerDateTime() + { + var now = DateTime.Now; + + // If it's on the same day + if (now.DayOfWeek == DayOfWeek) + { + // It's either later today, or a week from now + return now.TimeOfDay < TimeOfDay ? now.Date.Add(TimeOfDay) : now.Date.AddDays(7).Add(TimeOfDay); + } + + var triggerDate = now.Date; + + // Walk the date forward until we get to the trigger day + while (triggerDate.DayOfWeek != DayOfWeek) + { + triggerDate = triggerDate.AddDays(1); + } + + // Return the trigger date plus the time offset + return triggerDate.Add(TimeOfDay); + } + + /// + /// Stops waiting for the trigger action + /// + public void Stop() + { + DisposeTimer(); + } + + /// + /// Disposes the timer. + /// + private void DisposeTimer() + { + if (Timer != null) + { + Timer.Dispose(); + } + } + + /// + /// Occurs when [triggered]. + /// + public event EventHandler> Triggered; + + /// + /// Called when [triggered]. + /// + private void OnTriggered() + { + if (Triggered != null) + { + Triggered(this, new GenericEventArgs(TaskOptions)); + } + } + } +} diff --git a/Emby.Common.Implementations/Serialization/XmlSerializer.cs b/Emby.Common.Implementations/Serialization/XmlSerializer.cs new file mode 100644 index 000000000..ca162e868 --- /dev/null +++ b/Emby.Common.Implementations/Serialization/XmlSerializer.cs @@ -0,0 +1,130 @@ +using MediaBrowser.Model.Serialization; +using System; +using System.Collections.Concurrent; +using System.Collections.Generic; +using System.IO; +using System.Xml; +using MediaBrowser.Common.IO; +using MediaBrowser.Model.IO; +using MediaBrowser.Model.Logging; + +namespace Emby.Common.Implementations.Serialization +{ + /// + /// Provides a wrapper around third party xml serialization. + /// + public class XmlSerializer : IXmlSerializer + { + private readonly IFileSystem _fileSystem; + private readonly ILogger _logger; + + public XmlSerializer(IFileSystem fileSystem, ILogger logger) + { + _fileSystem = fileSystem; + _logger = logger; + } + + // Need to cache these + // http://dotnetcodebox.blogspot.com/2013/01/xmlserializer-class-may-result-in.html + private readonly Dictionary _serializers = + new Dictionary(); + + private System.Xml.Serialization.XmlSerializer GetSerializer(Type type) + { + var key = type.FullName; + lock (_serializers) + { + System.Xml.Serialization.XmlSerializer serializer; + if (!_serializers.TryGetValue(key, out serializer)) + { + serializer = new System.Xml.Serialization.XmlSerializer(type); + _serializers[key] = serializer; + } + return serializer; + } + } + + /// + /// Serializes to writer. + /// + /// The obj. + /// The writer. + private void SerializeToWriter(object obj, XmlWriter writer) + { + //writer.Formatting = Formatting.Indented; + var netSerializer = GetSerializer(obj.GetType()); + netSerializer.Serialize(writer, obj); + } + + /// + /// Deserializes from stream. + /// + /// The type. + /// The stream. + /// System.Object. + public object DeserializeFromStream(Type type, Stream stream) + { + using (var reader = XmlReader.Create(stream)) + { + var netSerializer = GetSerializer(type); + return netSerializer.Deserialize(reader); + } + } + + /// + /// Serializes to stream. + /// + /// The obj. + /// The stream. + public void SerializeToStream(object obj, Stream stream) + { + using (var writer = XmlWriter.Create(stream)) + { + SerializeToWriter(obj, writer); + } + } + + /// + /// Serializes to file. + /// + /// The obj. + /// The file. + public void SerializeToFile(object obj, string file) + { + _logger.Debug("Serializing to file {0}", file); + using (var stream = new FileStream(file, FileMode.Create)) + { + SerializeToStream(obj, stream); + } + } + + /// + /// Deserializes from file. + /// + /// The type. + /// The file. + /// System.Object. + public object DeserializeFromFile(Type type, string file) + { + _logger.Debug("Deserializing file {0}", file); + using (var stream = _fileSystem.OpenRead(file)) + { + return DeserializeFromStream(type, stream); + } + } + + /// + /// Deserializes from bytes. + /// + /// The type. + /// The buffer. + /// System.Object. + public object DeserializeFromBytes(Type type, byte[] buffer) + { + using (var stream = new MemoryStream(buffer)) + { + return DeserializeFromStream(type, stream); + } + } + } +} diff --git a/Emby.Common.Implementations/Updates/GithubUpdater.cs b/Emby.Common.Implementations/Updates/GithubUpdater.cs new file mode 100644 index 000000000..42bc29ed5 --- /dev/null +++ b/Emby.Common.Implementations/Updates/GithubUpdater.cs @@ -0,0 +1,269 @@ +using System; +using System.Collections.Generic; +using System.IO; +using System.Linq; +using System.Threading; +using System.Threading.Tasks; +using MediaBrowser.Common.Net; +using MediaBrowser.Model.Serialization; +using MediaBrowser.Model.Updates; + +namespace Emby.Common.Implementations.Updates +{ + public class GithubUpdater + { + private readonly IHttpClient _httpClient; + private readonly IJsonSerializer _jsonSerializer; + + public GithubUpdater(IHttpClient httpClient, IJsonSerializer jsonSerializer) + { + _httpClient = httpClient; + _jsonSerializer = jsonSerializer; + } + + public async Task CheckForUpdateResult(string organzation, string repository, Version minVersion, PackageVersionClass updateLevel, string assetFilename, string packageName, string targetFilename, TimeSpan cacheLength, CancellationToken cancellationToken) + { + var url = string.Format("https://api.github.com/repos/{0}/{1}/releases", organzation, repository); + + var options = new HttpRequestOptions + { + Url = url, + EnableKeepAlive = false, + CancellationToken = cancellationToken, + UserAgent = "Emby/3.0", + BufferContent = false + }; + + if (cacheLength.Ticks > 0) + { + options.CacheMode = CacheMode.Unconditional; + options.CacheLength = cacheLength; + } + + using (var stream = await _httpClient.Get(options).ConfigureAwait(false)) + { + var obj = _jsonSerializer.DeserializeFromStream(stream); + + return CheckForUpdateResult(obj, minVersion, updateLevel, assetFilename, packageName, targetFilename); + } + } + + private CheckForUpdateResult CheckForUpdateResult(RootObject[] obj, Version minVersion, PackageVersionClass updateLevel, string assetFilename, string packageName, string targetFilename) + { + if (updateLevel == PackageVersionClass.Release) + { + // Technically all we need to do is check that it's not pre-release + // But let's addititional checks for -beta and -dev to handle builds that might be temporarily tagged incorrectly. + obj = obj.Where(i => !i.prerelease && !i.name.EndsWith("-beta", StringComparison.OrdinalIgnoreCase) && !i.name.EndsWith("-dev", StringComparison.OrdinalIgnoreCase)).ToArray(); + } + else if (updateLevel == PackageVersionClass.Beta) + { + obj = obj.Where(i => !i.prerelease || i.name.EndsWith("-beta", StringComparison.OrdinalIgnoreCase)).ToArray(); + } + else if (updateLevel == PackageVersionClass.Dev) + { + obj = obj.Where(i => !i.prerelease || i.name.EndsWith("-beta", StringComparison.OrdinalIgnoreCase) || i.name.EndsWith("-dev", StringComparison.OrdinalIgnoreCase)).ToArray(); + } + + var availableUpdate = obj + .Select(i => CheckForUpdateResult(i, minVersion, assetFilename, packageName, targetFilename)) + .Where(i => i != null) + .OrderByDescending(i => Version.Parse(i.AvailableVersion)) + .FirstOrDefault(); + + return availableUpdate ?? new CheckForUpdateResult + { + IsUpdateAvailable = false + }; + } + + private bool MatchesUpdateLevel(RootObject i, PackageVersionClass updateLevel) + { + if (updateLevel == PackageVersionClass.Beta) + { + return !i.prerelease || i.name.EndsWith("-beta", StringComparison.OrdinalIgnoreCase); + } + if (updateLevel == PackageVersionClass.Dev) + { + return !i.prerelease || i.name.EndsWith("-beta", StringComparison.OrdinalIgnoreCase) || + i.name.EndsWith("-dev", StringComparison.OrdinalIgnoreCase); + } + + // Technically all we need to do is check that it's not pre-release + // But let's addititional checks for -beta and -dev to handle builds that might be temporarily tagged incorrectly. + return !i.prerelease && !i.name.EndsWith("-beta", StringComparison.OrdinalIgnoreCase) && + !i.name.EndsWith("-dev", StringComparison.OrdinalIgnoreCase); + } + + public async Task> GetLatestReleases(string organzation, string repository, string assetFilename, CancellationToken cancellationToken) + { + var list = new List(); + + var url = string.Format("https://api.github.com/repos/{0}/{1}/releases", organzation, repository); + + var options = new HttpRequestOptions + { + Url = url, + EnableKeepAlive = false, + CancellationToken = cancellationToken, + UserAgent = "Emby/3.0", + BufferContent = false + }; + + using (var stream = await _httpClient.Get(options).ConfigureAwait(false)) + { + var obj = _jsonSerializer.DeserializeFromStream(stream); + + obj = obj.Where(i => (i.assets ?? new List()).Any(a => IsAsset(a, assetFilename))).ToArray(); + + list.AddRange(obj.Where(i => MatchesUpdateLevel(i, PackageVersionClass.Release)).OrderByDescending(GetVersion).Take(1)); + list.AddRange(obj.Where(i => MatchesUpdateLevel(i, PackageVersionClass.Beta)).OrderByDescending(GetVersion).Take(1)); + list.AddRange(obj.Where(i => MatchesUpdateLevel(i, PackageVersionClass.Dev)).OrderByDescending(GetVersion).Take(1)); + + return list; + } + } + + public Version GetVersion(RootObject obj) + { + Version version; + if (!Version.TryParse(obj.tag_name, out version)) + { + return new Version(1, 0); + } + + return version; + } + + private CheckForUpdateResult CheckForUpdateResult(RootObject obj, Version minVersion, string assetFilename, string packageName, string targetFilename) + { + Version version; + if (!Version.TryParse(obj.tag_name, out version)) + { + return null; + } + + if (version < minVersion) + { + return null; + } + + var asset = (obj.assets ?? new List()).FirstOrDefault(i => IsAsset(i, assetFilename)); + + if (asset == null) + { + return null; + } + + return new CheckForUpdateResult + { + AvailableVersion = version.ToString(), + IsUpdateAvailable = version > minVersion, + Package = new PackageVersionInfo + { + classification = obj.prerelease ? + (obj.name.EndsWith("-dev", StringComparison.OrdinalIgnoreCase) ? PackageVersionClass.Dev : PackageVersionClass.Beta) : + PackageVersionClass.Release, + name = packageName, + sourceUrl = asset.browser_download_url, + targetFilename = targetFilename, + versionStr = version.ToString(), + requiredVersionStr = "1.0.0", + description = obj.body, + infoUrl = obj.html_url + } + }; + } + + private bool IsAsset(Asset asset, string assetFilename) + { + var downloadFilename = Path.GetFileName(asset.browser_download_url) ?? string.Empty; + + if (downloadFilename.IndexOf(assetFilename, StringComparison.OrdinalIgnoreCase) != -1) + { + return true; + } + + return string.Equals(assetFilename, downloadFilename, StringComparison.OrdinalIgnoreCase); + } + + public class Uploader + { + public string login { get; set; } + public int id { get; set; } + public string avatar_url { get; set; } + public string gravatar_id { get; set; } + public string url { get; set; } + public string html_url { get; set; } + public string followers_url { get; set; } + public string following_url { get; set; } + public string gists_url { get; set; } + public string starred_url { get; set; } + public string subscriptions_url { get; set; } + public string organizations_url { get; set; } + public string repos_url { get; set; } + public string events_url { get; set; } + public string received_events_url { get; set; } + public string type { get; set; } + public bool site_admin { get; set; } + } + + public class Asset + { + public string url { get; set; } + public int id { get; set; } + public string name { get; set; } + public object label { get; set; } + public Uploader uploader { get; set; } + public string content_type { get; set; } + public string state { get; set; } + public int size { get; set; } + public int download_count { get; set; } + public string created_at { get; set; } + public string updated_at { get; set; } + public string browser_download_url { get; set; } + } + + public class Author + { + public string login { get; set; } + public int id { get; set; } + public string avatar_url { get; set; } + public string gravatar_id { get; set; } + public string url { get; set; } + public string html_url { get; set; } + public string followers_url { get; set; } + public string following_url { get; set; } + public string gists_url { get; set; } + public string starred_url { get; set; } + public string subscriptions_url { get; set; } + public string organizations_url { get; set; } + public string repos_url { get; set; } + public string events_url { get; set; } + public string received_events_url { get; set; } + public string type { get; set; } + public bool site_admin { get; set; } + } + + public class RootObject + { + public string url { get; set; } + public string assets_url { get; set; } + public string upload_url { get; set; } + public string html_url { get; set; } + public int id { get; set; } + public string tag_name { get; set; } + public string target_commitish { get; set; } + public string name { get; set; } + public bool draft { get; set; } + public Author author { get; set; } + public bool prerelease { get; set; } + public string created_at { get; set; } + public string published_at { get; set; } + public List assets { get; set; } + public string tarball_url { get; set; } + public string zipball_url { get; set; } + public string body { get; set; } + } + } +} diff --git a/Emby.Common.Implementations/project.fragment.lock.json b/Emby.Common.Implementations/project.fragment.lock.json new file mode 100644 index 000000000..6a89a6320 --- /dev/null +++ b/Emby.Common.Implementations/project.fragment.lock.json @@ -0,0 +1,39 @@ +{ + "version": 2, + "exports": { + "MediaBrowser.Common/1.0.0": { + "type": "project", + "framework": ".NETPortable,Version=v4.5,Profile=Profile7", + "compile": { + "bin/Debug/MediaBrowser.Common.dll": {} + }, + "runtime": { + "bin/Debug/MediaBrowser.Common.dll": {} + }, + "contentFiles": { + "bin/Debug/MediaBrowser.Common.pdb": { + "buildAction": "None", + "codeLanguage": "any", + "copyToOutput": true + } + } + }, + "MediaBrowser.Model/1.0.0": { + "type": "project", + "framework": ".NETPortable,Version=v4.5,Profile=Profile7", + "compile": { + "bin/Debug/MediaBrowser.Model.dll": {} + }, + "runtime": { + "bin/Debug/MediaBrowser.Model.dll": {} + }, + "contentFiles": { + "bin/Debug/MediaBrowser.Model.pdb": { + "buildAction": "None", + "codeLanguage": "any", + "copyToOutput": true + } + } + } + } +} \ No newline at end of file diff --git a/Emby.Common.Implementations/project.json b/Emby.Common.Implementations/project.json new file mode 100644 index 000000000..d93921574 --- /dev/null +++ b/Emby.Common.Implementations/project.json @@ -0,0 +1,48 @@ +{ + "version": "1.0.0-*", + + "dependencies": { + + }, + + "frameworks": { + "net46": { + "frameworkAssemblies": { + "System.Collections": "4.0.0.0", + "System.IO": "4.0.0.0", + "System.Net": "4.0.0.0", + "System.Net.Http": "4.0.0.0", + "System.Net.Http.WebRequest": "4.0.0.0", + "System.Net.Primitives": "4.0.0.0", + "System.Runtime": "4.0.0.0", + "System.Text.Encoding": "4.0.0.0", + "System.Threading": "4.0.0.0", + "System.Threading.Tasks": "4.0.0.0", + "System.Xml": "4.0.0.0", + "System.Xml.Serialization": "4.0.0.0" + }, + "dependencies": { + "MediaBrowser.Common": { + "target": "project" + }, + "MediaBrowser.Model": { + "target": "project" + } + } + }, + "netstandard1.6": { + "imports": "dnxcore50", + "dependencies": { + "NETStandard.Library": "1.6.0", + "MediaBrowser.Common": { + "target": "project" + }, + "MediaBrowser.Model": { + "target": "project" + }, + "System.Net.Requests": "4.0.11", + "System.Xml.XmlSerializer": "4.0.11" + } + } + } +} diff --git a/Emby.Common.Implementations/project.lock.json b/Emby.Common.Implementations/project.lock.json new file mode 100644 index 000000000..6313434a7 --- /dev/null +++ b/Emby.Common.Implementations/project.lock.json @@ -0,0 +1,4403 @@ +{ + "locked": false, + "version": 2, + "targets": { + ".NETFramework,Version=v4.6": { + "MediaBrowser.Common/1.0.0": { + "type": "project", + "framework": ".NETPortable,Version=v4.5,Profile=Profile7", + "dependencies": { + "MediaBrowser.Model": "1.0.0" + } + }, + "MediaBrowser.Model/1.0.0": { + "type": "project", + "framework": ".NETPortable,Version=v4.5,Profile=Profile7" + } + }, + ".NETStandard,Version=v1.6": { + "Microsoft.NETCore.Platforms/1.0.1": { + "type": "package", + "compile": { + "lib/netstandard1.0/_._": {} + }, + "runtime": { + "lib/netstandard1.0/_._": {} + } + }, + "Microsoft.NETCore.Targets/1.0.1": { + "type": "package", + "compile": { + "lib/netstandard1.0/_._": {} + }, + "runtime": { + "lib/netstandard1.0/_._": {} + } + }, + "Microsoft.Win32.Primitives/4.0.1": { + "type": "package", + "dependencies": { + "Microsoft.NETCore.Platforms": "1.0.1", + "Microsoft.NETCore.Targets": "1.0.1", + "System.Runtime": "4.1.0" + }, + "compile": { + "ref/netstandard1.3/Microsoft.Win32.Primitives.dll": {} + } + }, + "NETStandard.Library/1.6.0": { + "type": "package", + "dependencies": { + "Microsoft.NETCore.Platforms": "1.0.1", + "Microsoft.Win32.Primitives": "4.0.1", + "System.AppContext": "4.1.0", + "System.Collections": "4.0.11", + "System.Collections.Concurrent": "4.0.12", + "System.Console": "4.0.0", + "System.Diagnostics.Debug": "4.0.11", + "System.Diagnostics.Tools": "4.0.1", + "System.Diagnostics.Tracing": "4.1.0", + "System.Globalization": "4.0.11", + "System.Globalization.Calendars": "4.0.1", + "System.IO": "4.1.0", + "System.IO.Compression": "4.1.0", + "System.IO.Compression.ZipFile": "4.0.1", + "System.IO.FileSystem": "4.0.1", + "System.IO.FileSystem.Primitives": "4.0.1", + "System.Linq": "4.1.0", + "System.Linq.Expressions": "4.1.0", + "System.Net.Http": "4.1.0", + "System.Net.Primitives": "4.0.11", + "System.Net.Sockets": "4.1.0", + "System.ObjectModel": "4.0.12", + "System.Reflection": "4.1.0", + "System.Reflection.Extensions": "4.0.1", + "System.Reflection.Primitives": "4.0.1", + "System.Resources.ResourceManager": "4.0.1", + "System.Runtime": "4.1.0", + "System.Runtime.Extensions": "4.1.0", + "System.Runtime.Handles": "4.0.1", + "System.Runtime.InteropServices": "4.1.0", + "System.Runtime.InteropServices.RuntimeInformation": "4.0.0", + "System.Runtime.Numerics": "4.0.1", + "System.Security.Cryptography.Algorithms": "4.2.0", + "System.Security.Cryptography.Encoding": "4.0.0", + "System.Security.Cryptography.Primitives": "4.0.0", + "System.Security.Cryptography.X509Certificates": "4.1.0", + "System.Text.Encoding": "4.0.11", + "System.Text.Encoding.Extensions": "4.0.11", + "System.Text.RegularExpressions": "4.1.0", + "System.Threading": "4.0.11", + "System.Threading.Tasks": "4.0.11", + "System.Threading.Timer": "4.0.1", + "System.Xml.ReaderWriter": "4.0.11", + "System.Xml.XDocument": "4.0.11" + } + }, + "runtime.native.System/4.0.0": { + "type": "package", + "dependencies": { + "Microsoft.NETCore.Platforms": "1.0.1", + "Microsoft.NETCore.Targets": "1.0.1" + }, + "compile": { + "lib/netstandard1.0/_._": {} + }, + "runtime": { + "lib/netstandard1.0/_._": {} + } + }, + "runtime.native.System.IO.Compression/4.1.0": { + "type": "package", + "dependencies": { + "Microsoft.NETCore.Platforms": "1.0.1", + "Microsoft.NETCore.Targets": "1.0.1" + }, + "compile": { + "lib/netstandard1.0/_._": {} + }, + "runtime": { + "lib/netstandard1.0/_._": {} + } + }, + "runtime.native.System.Net.Http/4.0.1": { + "type": "package", + "dependencies": { + "Microsoft.NETCore.Platforms": "1.0.1", + "Microsoft.NETCore.Targets": "1.0.1" + }, + "compile": { + "lib/netstandard1.0/_._": {} + }, + "runtime": { + "lib/netstandard1.0/_._": {} + } + }, + "runtime.native.System.Security.Cryptography/4.0.0": { + "type": "package", + "dependencies": { + "Microsoft.NETCore.Platforms": "1.0.1", + "Microsoft.NETCore.Targets": "1.0.1" + }, + "compile": { + "lib/netstandard1.0/_._": {} + }, + "runtime": { + "lib/netstandard1.0/_._": {} + } + }, + "System.AppContext/4.1.0": { + "type": "package", + "dependencies": { + "System.Runtime": "4.1.0" + }, + "compile": { + "ref/netstandard1.6/System.AppContext.dll": {} + }, + "runtime": { + "lib/netstandard1.6/System.AppContext.dll": {} + } + }, + "System.Buffers/4.0.0": { + "type": "package", + "dependencies": { + "System.Diagnostics.Debug": "4.0.11", + "System.Diagnostics.Tracing": "4.1.0", + "System.Resources.ResourceManager": "4.0.1", + "System.Runtime": "4.1.0", + "System.Threading": "4.0.11" + }, + "compile": { + "lib/netstandard1.1/_._": {} + }, + "runtime": { + "lib/netstandard1.1/System.Buffers.dll": {} + } + }, + "System.Collections/4.0.11": { + "type": "package", + "dependencies": { + "Microsoft.NETCore.Platforms": "1.0.1", + "Microsoft.NETCore.Targets": "1.0.1", + "System.Runtime": "4.1.0" + }, + "compile": { + "ref/netstandard1.3/System.Collections.dll": {} + } + }, + "System.Collections.Concurrent/4.0.12": { + "type": "package", + "dependencies": { + "System.Collections": "4.0.11", + "System.Diagnostics.Debug": "4.0.11", + "System.Diagnostics.Tracing": "4.1.0", + "System.Globalization": "4.0.11", + "System.Reflection": "4.1.0", + "System.Resources.ResourceManager": "4.0.1", + "System.Runtime": "4.1.0", + "System.Runtime.Extensions": "4.1.0", + "System.Threading": "4.0.11", + "System.Threading.Tasks": "4.0.11" + }, + "compile": { + "ref/netstandard1.3/System.Collections.Concurrent.dll": {} + }, + "runtime": { + "lib/netstandard1.3/System.Collections.Concurrent.dll": {} + } + }, + "System.Console/4.0.0": { + "type": "package", + "dependencies": { + "Microsoft.NETCore.Platforms": "1.0.1", + "Microsoft.NETCore.Targets": "1.0.1", + "System.IO": "4.1.0", + "System.Runtime": "4.1.0", + "System.Text.Encoding": "4.0.11" + }, + "compile": { + "ref/netstandard1.3/System.Console.dll": {} + } + }, + "System.Diagnostics.Debug/4.0.11": { + "type": "package", + "dependencies": { + "Microsoft.NETCore.Platforms": "1.0.1", + "Microsoft.NETCore.Targets": "1.0.1", + "System.Runtime": "4.1.0" + }, + "compile": { + "ref/netstandard1.3/System.Diagnostics.Debug.dll": {} + } + }, + "System.Diagnostics.DiagnosticSource/4.0.0": { + "type": "package", + "dependencies": { + "System.Collections": "4.0.11", + "System.Diagnostics.Tracing": "4.1.0", + "System.Reflection": "4.1.0", + "System.Runtime": "4.1.0", + "System.Threading": "4.0.11" + }, + "compile": { + "lib/netstandard1.3/_._": {} + }, + "runtime": { + "lib/netstandard1.3/System.Diagnostics.DiagnosticSource.dll": {} + } + }, + "System.Diagnostics.Tools/4.0.1": { + "type": "package", + "dependencies": { + "Microsoft.NETCore.Platforms": "1.0.1", + "Microsoft.NETCore.Targets": "1.0.1", + "System.Runtime": "4.1.0" + }, + "compile": { + "ref/netstandard1.0/System.Diagnostics.Tools.dll": {} + } + }, + "System.Diagnostics.Tracing/4.1.0": { + "type": "package", + "dependencies": { + "Microsoft.NETCore.Platforms": "1.0.1", + "Microsoft.NETCore.Targets": "1.0.1", + "System.Runtime": "4.1.0" + }, + "compile": { + "ref/netstandard1.5/System.Diagnostics.Tracing.dll": {} + } + }, + "System.Globalization/4.0.11": { + "type": "package", + "dependencies": { + "Microsoft.NETCore.Platforms": "1.0.1", + "Microsoft.NETCore.Targets": "1.0.1", + "System.Runtime": "4.1.0" + }, + "compile": { + "ref/netstandard1.3/System.Globalization.dll": {} + } + }, + "System.Globalization.Calendars/4.0.1": { + "type": "package", + "dependencies": { + "Microsoft.NETCore.Platforms": "1.0.1", + "Microsoft.NETCore.Targets": "1.0.1", + "System.Globalization": "4.0.11", + "System.Runtime": "4.1.0" + }, + "compile": { + "ref/netstandard1.3/System.Globalization.Calendars.dll": {} + } + }, + "System.Globalization.Extensions/4.0.1": { + "type": "package", + "dependencies": { + "Microsoft.NETCore.Platforms": "1.0.1", + "System.Globalization": "4.0.11", + "System.Resources.ResourceManager": "4.0.1", + "System.Runtime": "4.1.0", + "System.Runtime.Extensions": "4.1.0", + "System.Runtime.InteropServices": "4.1.0" + }, + "compile": { + "ref/netstandard1.3/_._": {} + }, + "runtimeTargets": { + "runtimes/unix/lib/netstandard1.3/System.Globalization.Extensions.dll": { + "assetType": "runtime", + "rid": "unix" + }, + "runtimes/win/lib/netstandard1.3/System.Globalization.Extensions.dll": { + "assetType": "runtime", + "rid": "win" + } + } + }, + "System.IO/4.1.0": { + "type": "package", + "dependencies": { + "Microsoft.NETCore.Platforms": "1.0.1", + "Microsoft.NETCore.Targets": "1.0.1", + "System.Runtime": "4.1.0", + "System.Text.Encoding": "4.0.11", + "System.Threading.Tasks": "4.0.11" + }, + "compile": { + "ref/netstandard1.5/System.IO.dll": {} + } + }, + "System.IO.Compression/4.1.0": { + "type": "package", + "dependencies": { + "Microsoft.NETCore.Platforms": "1.0.1", + "System.Collections": "4.0.11", + "System.Diagnostics.Debug": "4.0.11", + "System.IO": "4.1.0", + "System.Resources.ResourceManager": "4.0.1", + "System.Runtime": "4.1.0", + "System.Runtime.Extensions": "4.1.0", + "System.Runtime.Handles": "4.0.1", + "System.Runtime.InteropServices": "4.1.0", + "System.Text.Encoding": "4.0.11", + "System.Threading": "4.0.11", + "System.Threading.Tasks": "4.0.11", + "runtime.native.System": "4.0.0", + "runtime.native.System.IO.Compression": "4.1.0" + }, + "compile": { + "ref/netstandard1.3/System.IO.Compression.dll": {} + }, + "runtimeTargets": { + "runtimes/unix/lib/netstandard1.3/System.IO.Compression.dll": { + "assetType": "runtime", + "rid": "unix" + }, + "runtimes/win/lib/netstandard1.3/System.IO.Compression.dll": { + "assetType": "runtime", + "rid": "win" + } + } + }, + "System.IO.Compression.ZipFile/4.0.1": { + "type": "package", + "dependencies": { + "System.Buffers": "4.0.0", + "System.IO": "4.1.0", + "System.IO.Compression": "4.1.0", + "System.IO.FileSystem": "4.0.1", + "System.IO.FileSystem.Primitives": "4.0.1", + "System.Resources.ResourceManager": "4.0.1", + "System.Runtime": "4.1.0", + "System.Runtime.Extensions": "4.1.0", + "System.Text.Encoding": "4.0.11" + }, + "compile": { + "ref/netstandard1.3/System.IO.Compression.ZipFile.dll": {} + }, + "runtime": { + "lib/netstandard1.3/System.IO.Compression.ZipFile.dll": {} + } + }, + "System.IO.FileSystem/4.0.1": { + "type": "package", + "dependencies": { + "Microsoft.NETCore.Platforms": "1.0.1", + "Microsoft.NETCore.Targets": "1.0.1", + "System.IO": "4.1.0", + "System.IO.FileSystem.Primitives": "4.0.1", + "System.Runtime": "4.1.0", + "System.Runtime.Handles": "4.0.1", + "System.Text.Encoding": "4.0.11", + "System.Threading.Tasks": "4.0.11" + }, + "compile": { + "ref/netstandard1.3/System.IO.FileSystem.dll": {} + } + }, + "System.IO.FileSystem.Primitives/4.0.1": { + "type": "package", + "dependencies": { + "System.Runtime": "4.1.0" + }, + "compile": { + "ref/netstandard1.3/System.IO.FileSystem.Primitives.dll": {} + }, + "runtime": { + "lib/netstandard1.3/System.IO.FileSystem.Primitives.dll": {} + } + }, + "System.Linq/4.1.0": { + "type": "package", + "dependencies": { + "System.Collections": "4.0.11", + "System.Diagnostics.Debug": "4.0.11", + "System.Resources.ResourceManager": "4.0.1", + "System.Runtime": "4.1.0", + "System.Runtime.Extensions": "4.1.0" + }, + "compile": { + "ref/netstandard1.6/System.Linq.dll": {} + }, + "runtime": { + "lib/netstandard1.6/System.Linq.dll": {} + } + }, + "System.Linq.Expressions/4.1.0": { + "type": "package", + "dependencies": { + "System.Collections": "4.0.11", + "System.Diagnostics.Debug": "4.0.11", + "System.Globalization": "4.0.11", + "System.IO": "4.1.0", + "System.Linq": "4.1.0", + "System.ObjectModel": "4.0.12", + "System.Reflection": "4.1.0", + "System.Reflection.Emit": "4.0.1", + "System.Reflection.Emit.ILGeneration": "4.0.1", + "System.Reflection.Emit.Lightweight": "4.0.1", + "System.Reflection.Extensions": "4.0.1", + "System.Reflection.Primitives": "4.0.1", + "System.Reflection.TypeExtensions": "4.1.0", + "System.Resources.ResourceManager": "4.0.1", + "System.Runtime": "4.1.0", + "System.Runtime.Extensions": "4.1.0", + "System.Threading": "4.0.11" + }, + "compile": { + "ref/netstandard1.6/System.Linq.Expressions.dll": {} + }, + "runtime": { + "lib/netstandard1.6/System.Linq.Expressions.dll": {} + } + }, + "System.Net.Http/4.1.0": { + "type": "package", + "dependencies": { + "Microsoft.NETCore.Platforms": "1.0.1", + "System.Collections": "4.0.11", + "System.Diagnostics.Debug": "4.0.11", + "System.Diagnostics.DiagnosticSource": "4.0.0", + "System.Diagnostics.Tracing": "4.1.0", + "System.Globalization": "4.0.11", + "System.Globalization.Extensions": "4.0.1", + "System.IO": "4.1.0", + "System.IO.FileSystem": "4.0.1", + "System.Net.Primitives": "4.0.11", + "System.Resources.ResourceManager": "4.0.1", + "System.Runtime": "4.1.0", + "System.Runtime.Extensions": "4.1.0", + "System.Runtime.Handles": "4.0.1", + "System.Runtime.InteropServices": "4.1.0", + "System.Security.Cryptography.Algorithms": "4.2.0", + "System.Security.Cryptography.Encoding": "4.0.0", + "System.Security.Cryptography.OpenSsl": "4.0.0", + "System.Security.Cryptography.Primitives": "4.0.0", + "System.Security.Cryptography.X509Certificates": "4.1.0", + "System.Text.Encoding": "4.0.11", + "System.Threading": "4.0.11", + "System.Threading.Tasks": "4.0.11", + "runtime.native.System": "4.0.0", + "runtime.native.System.Net.Http": "4.0.1", + "runtime.native.System.Security.Cryptography": "4.0.0" + }, + "compile": { + "ref/netstandard1.3/System.Net.Http.dll": {} + }, + "runtimeTargets": { + "runtimes/unix/lib/netstandard1.6/System.Net.Http.dll": { + "assetType": "runtime", + "rid": "unix" + }, + "runtimes/win/lib/netstandard1.3/System.Net.Http.dll": { + "assetType": "runtime", + "rid": "win" + } + } + }, + "System.Net.Primitives/4.0.11": { + "type": "package", + "dependencies": { + "Microsoft.NETCore.Platforms": "1.0.1", + "Microsoft.NETCore.Targets": "1.0.1", + "System.Runtime": "4.1.0", + "System.Runtime.Handles": "4.0.1" + }, + "compile": { + "ref/netstandard1.3/System.Net.Primitives.dll": {} + } + }, + "System.Net.Requests/4.0.11": { + "type": "package", + "dependencies": { + "Microsoft.NETCore.Platforms": "1.0.1", + "System.Collections": "4.0.11", + "System.Diagnostics.Debug": "4.0.11", + "System.Diagnostics.Tracing": "4.1.0", + "System.Globalization": "4.0.11", + "System.IO": "4.1.0", + "System.Net.Http": "4.1.0", + "System.Net.Primitives": "4.0.11", + "System.Net.WebHeaderCollection": "4.0.1", + "System.Resources.ResourceManager": "4.0.1", + "System.Runtime": "4.1.0", + "System.Threading": "4.0.11", + "System.Threading.Tasks": "4.0.11" + }, + "compile": { + "ref/netstandard1.3/System.Net.Requests.dll": {} + }, + "runtimeTargets": { + "runtimes/unix/lib/netstandard1.3/System.Net.Requests.dll": { + "assetType": "runtime", + "rid": "unix" + }, + "runtimes/win/lib/netstandard1.3/System.Net.Requests.dll": { + "assetType": "runtime", + "rid": "win" + } + } + }, + "System.Net.Sockets/4.1.0": { + "type": "package", + "dependencies": { + "Microsoft.NETCore.Platforms": "1.0.1", + "Microsoft.NETCore.Targets": "1.0.1", + "System.IO": "4.1.0", + "System.Net.Primitives": "4.0.11", + "System.Runtime": "4.1.0", + "System.Threading.Tasks": "4.0.11" + }, + "compile": { + "ref/netstandard1.3/System.Net.Sockets.dll": {} + } + }, + "System.Net.WebHeaderCollection/4.0.1": { + "type": "package", + "dependencies": { + "System.Collections": "4.0.11", + "System.Resources.ResourceManager": "4.0.1", + "System.Runtime": "4.1.0", + "System.Runtime.Extensions": "4.1.0" + }, + "compile": { + "ref/netstandard1.3/System.Net.WebHeaderCollection.dll": {} + }, + "runtime": { + "lib/netstandard1.3/System.Net.WebHeaderCollection.dll": {} + } + }, + "System.ObjectModel/4.0.12": { + "type": "package", + "dependencies": { + "System.Collections": "4.0.11", + "System.Diagnostics.Debug": "4.0.11", + "System.Resources.ResourceManager": "4.0.1", + "System.Runtime": "4.1.0", + "System.Threading": "4.0.11" + }, + "compile": { + "ref/netstandard1.3/System.ObjectModel.dll": {} + }, + "runtime": { + "lib/netstandard1.3/System.ObjectModel.dll": {} + } + }, + "System.Reflection/4.1.0": { + "type": "package", + "dependencies": { + "Microsoft.NETCore.Platforms": "1.0.1", + "Microsoft.NETCore.Targets": "1.0.1", + "System.IO": "4.1.0", + "System.Reflection.Primitives": "4.0.1", + "System.Runtime": "4.1.0" + }, + "compile": { + "ref/netstandard1.5/System.Reflection.dll": {} + } + }, + "System.Reflection.Emit/4.0.1": { + "type": "package", + "dependencies": { + "System.IO": "4.1.0", + "System.Reflection": "4.1.0", + "System.Reflection.Emit.ILGeneration": "4.0.1", + "System.Reflection.Primitives": "4.0.1", + "System.Runtime": "4.1.0" + }, + "compile": { + "ref/netstandard1.1/_._": {} + }, + "runtime": { + "lib/netstandard1.3/System.Reflection.Emit.dll": {} + } + }, + "System.Reflection.Emit.ILGeneration/4.0.1": { + "type": "package", + "dependencies": { + "System.Reflection": "4.1.0", + "System.Reflection.Primitives": "4.0.1", + "System.Runtime": "4.1.0" + }, + "compile": { + "ref/netstandard1.0/_._": {} + }, + "runtime": { + "lib/netstandard1.3/System.Reflection.Emit.ILGeneration.dll": {} + } + }, + "System.Reflection.Emit.Lightweight/4.0.1": { + "type": "package", + "dependencies": { + "System.Reflection": "4.1.0", + "System.Reflection.Emit.ILGeneration": "4.0.1", + "System.Reflection.Primitives": "4.0.1", + "System.Runtime": "4.1.0" + }, + "compile": { + "ref/netstandard1.0/_._": {} + }, + "runtime": { + "lib/netstandard1.3/System.Reflection.Emit.Lightweight.dll": {} + } + }, + "System.Reflection.Extensions/4.0.1": { + "type": "package", + "dependencies": { + "Microsoft.NETCore.Platforms": "1.0.1", + "Microsoft.NETCore.Targets": "1.0.1", + "System.Reflection": "4.1.0", + "System.Runtime": "4.1.0" + }, + "compile": { + "ref/netstandard1.0/System.Reflection.Extensions.dll": {} + } + }, + "System.Reflection.Primitives/4.0.1": { + "type": "package", + "dependencies": { + "Microsoft.NETCore.Platforms": "1.0.1", + "Microsoft.NETCore.Targets": "1.0.1", + "System.Runtime": "4.1.0" + }, + "compile": { + "ref/netstandard1.0/System.Reflection.Primitives.dll": {} + } + }, + "System.Reflection.TypeExtensions/4.1.0": { + "type": "package", + "dependencies": { + "System.Reflection": "4.1.0", + "System.Runtime": "4.1.0" + }, + "compile": { + "ref/netstandard1.5/_._": {} + }, + "runtime": { + "lib/netstandard1.5/System.Reflection.TypeExtensions.dll": {} + } + }, + "System.Resources.ResourceManager/4.0.1": { + "type": "package", + "dependencies": { + "Microsoft.NETCore.Platforms": "1.0.1", + "Microsoft.NETCore.Targets": "1.0.1", + "System.Globalization": "4.0.11", + "System.Reflection": "4.1.0", + "System.Runtime": "4.1.0" + }, + "compile": { + "ref/netstandard1.0/System.Resources.ResourceManager.dll": {} + } + }, + "System.Runtime/4.1.0": { + "type": "package", + "dependencies": { + "Microsoft.NETCore.Platforms": "1.0.1", + "Microsoft.NETCore.Targets": "1.0.1" + }, + "compile": { + "ref/netstandard1.5/System.Runtime.dll": {} + } + }, + "System.Runtime.Extensions/4.1.0": { + "type": "package", + "dependencies": { + "Microsoft.NETCore.Platforms": "1.0.1", + "Microsoft.NETCore.Targets": "1.0.1", + "System.Runtime": "4.1.0" + }, + "compile": { + "ref/netstandard1.5/System.Runtime.Extensions.dll": {} + } + }, + "System.Runtime.Handles/4.0.1": { + "type": "package", + "dependencies": { + "Microsoft.NETCore.Platforms": "1.0.1", + "Microsoft.NETCore.Targets": "1.0.1", + "System.Runtime": "4.1.0" + }, + "compile": { + "ref/netstandard1.3/System.Runtime.Handles.dll": {} + } + }, + "System.Runtime.InteropServices/4.1.0": { + "type": "package", + "dependencies": { + "Microsoft.NETCore.Platforms": "1.0.1", + "Microsoft.NETCore.Targets": "1.0.1", + "System.Reflection": "4.1.0", + "System.Reflection.Primitives": "4.0.1", + "System.Runtime": "4.1.0", + "System.Runtime.Handles": "4.0.1" + }, + "compile": { + "ref/netstandard1.5/System.Runtime.InteropServices.dll": {} + } + }, + "System.Runtime.InteropServices.RuntimeInformation/4.0.0": { + "type": "package", + "dependencies": { + "Microsoft.NETCore.Platforms": "1.0.1", + "System.Reflection": "4.1.0", + "System.Resources.ResourceManager": "4.0.1", + "System.Runtime": "4.1.0", + "System.Runtime.InteropServices": "4.1.0", + "System.Threading": "4.0.11", + "runtime.native.System": "4.0.0" + }, + "compile": { + "ref/netstandard1.1/System.Runtime.InteropServices.RuntimeInformation.dll": {} + }, + "runtimeTargets": { + "runtimes/unix/lib/netstandard1.1/System.Runtime.InteropServices.RuntimeInformation.dll": { + "assetType": "runtime", + "rid": "unix" + }, + "runtimes/win/lib/netstandard1.1/System.Runtime.InteropServices.RuntimeInformation.dll": { + "assetType": "runtime", + "rid": "win" + } + } + }, + "System.Runtime.Numerics/4.0.1": { + "type": "package", + "dependencies": { + "System.Globalization": "4.0.11", + "System.Resources.ResourceManager": "4.0.1", + "System.Runtime": "4.1.0", + "System.Runtime.Extensions": "4.1.0" + }, + "compile": { + "ref/netstandard1.1/System.Runtime.Numerics.dll": {} + }, + "runtime": { + "lib/netstandard1.3/System.Runtime.Numerics.dll": {} + } + }, + "System.Security.Cryptography.Algorithms/4.2.0": { + "type": "package", + "dependencies": { + "Microsoft.NETCore.Platforms": "1.0.1", + "System.Collections": "4.0.11", + "System.IO": "4.1.0", + "System.Resources.ResourceManager": "4.0.1", + "System.Runtime": "4.1.0", + "System.Runtime.Extensions": "4.1.0", + "System.Runtime.Handles": "4.0.1", + "System.Runtime.InteropServices": "4.1.0", + "System.Runtime.Numerics": "4.0.1", + "System.Security.Cryptography.Encoding": "4.0.0", + "System.Security.Cryptography.Primitives": "4.0.0", + "System.Text.Encoding": "4.0.11", + "runtime.native.System.Security.Cryptography": "4.0.0" + }, + "compile": { + "ref/netstandard1.6/System.Security.Cryptography.Algorithms.dll": {} + }, + "runtimeTargets": { + "runtimes/unix/lib/netstandard1.6/System.Security.Cryptography.Algorithms.dll": { + "assetType": "runtime", + "rid": "unix" + }, + "runtimes/win/lib/netstandard1.6/System.Security.Cryptography.Algorithms.dll": { + "assetType": "runtime", + "rid": "win" + } + } + }, + "System.Security.Cryptography.Cng/4.2.0": { + "type": "package", + "dependencies": { + "Microsoft.NETCore.Platforms": "1.0.1", + "System.IO": "4.1.0", + "System.Resources.ResourceManager": "4.0.1", + "System.Runtime": "4.1.0", + "System.Runtime.Extensions": "4.1.0", + "System.Runtime.Handles": "4.0.1", + "System.Runtime.InteropServices": "4.1.0", + "System.Security.Cryptography.Algorithms": "4.2.0", + "System.Security.Cryptography.Encoding": "4.0.0", + "System.Security.Cryptography.Primitives": "4.0.0", + "System.Text.Encoding": "4.0.11" + }, + "compile": { + "ref/netstandard1.6/_._": {} + }, + "runtimeTargets": { + "runtimes/unix/lib/netstandard1.6/System.Security.Cryptography.Cng.dll": { + "assetType": "runtime", + "rid": "unix" + }, + "runtimes/win/lib/netstandard1.6/System.Security.Cryptography.Cng.dll": { + "assetType": "runtime", + "rid": "win" + } + } + }, + "System.Security.Cryptography.Csp/4.0.0": { + "type": "package", + "dependencies": { + "Microsoft.NETCore.Platforms": "1.0.1", + "System.IO": "4.1.0", + "System.Reflection": "4.1.0", + "System.Resources.ResourceManager": "4.0.1", + "System.Runtime": "4.1.0", + "System.Runtime.Extensions": "4.1.0", + "System.Runtime.Handles": "4.0.1", + "System.Runtime.InteropServices": "4.1.0", + "System.Security.Cryptography.Algorithms": "4.2.0", + "System.Security.Cryptography.Encoding": "4.0.0", + "System.Security.Cryptography.Primitives": "4.0.0", + "System.Text.Encoding": "4.0.11", + "System.Threading": "4.0.11" + }, + "compile": { + "ref/netstandard1.3/_._": {} + }, + "runtimeTargets": { + "runtimes/unix/lib/netstandard1.3/System.Security.Cryptography.Csp.dll": { + "assetType": "runtime", + "rid": "unix" + }, + "runtimes/win/lib/netstandard1.3/System.Security.Cryptography.Csp.dll": { + "assetType": "runtime", + "rid": "win" + } + } + }, + "System.Security.Cryptography.Encoding/4.0.0": { + "type": "package", + "dependencies": { + "Microsoft.NETCore.Platforms": "1.0.1", + "System.Collections": "4.0.11", + "System.Collections.Concurrent": "4.0.12", + "System.Linq": "4.1.0", + "System.Resources.ResourceManager": "4.0.1", + "System.Runtime": "4.1.0", + "System.Runtime.Extensions": "4.1.0", + "System.Runtime.Handles": "4.0.1", + "System.Runtime.InteropServices": "4.1.0", + "System.Security.Cryptography.Primitives": "4.0.0", + "System.Text.Encoding": "4.0.11", + "runtime.native.System.Security.Cryptography": "4.0.0" + }, + "compile": { + "ref/netstandard1.3/System.Security.Cryptography.Encoding.dll": {} + }, + "runtimeTargets": { + "runtimes/unix/lib/netstandard1.3/System.Security.Cryptography.Encoding.dll": { + "assetType": "runtime", + "rid": "unix" + }, + "runtimes/win/lib/netstandard1.3/System.Security.Cryptography.Encoding.dll": { + "assetType": "runtime", + "rid": "win" + } + } + }, + "System.Security.Cryptography.OpenSsl/4.0.0": { + "type": "package", + "dependencies": { + "System.Collections": "4.0.11", + "System.IO": "4.1.0", + "System.Resources.ResourceManager": "4.0.1", + "System.Runtime": "4.1.0", + "System.Runtime.Extensions": "4.1.0", + "System.Runtime.Handles": "4.0.1", + "System.Runtime.InteropServices": "4.1.0", + "System.Runtime.Numerics": "4.0.1", + "System.Security.Cryptography.Algorithms": "4.2.0", + "System.Security.Cryptography.Encoding": "4.0.0", + "System.Security.Cryptography.Primitives": "4.0.0", + "System.Text.Encoding": "4.0.11", + "runtime.native.System.Security.Cryptography": "4.0.0" + }, + "compile": { + "ref/netstandard1.6/_._": {} + }, + "runtime": { + "lib/netstandard1.6/System.Security.Cryptography.OpenSsl.dll": {} + }, + "runtimeTargets": { + "runtimes/unix/lib/netstandard1.6/System.Security.Cryptography.OpenSsl.dll": { + "assetType": "runtime", + "rid": "unix" + } + } + }, + "System.Security.Cryptography.Primitives/4.0.0": { + "type": "package", + "dependencies": { + "System.Diagnostics.Debug": "4.0.11", + "System.Globalization": "4.0.11", + "System.IO": "4.1.0", + "System.Resources.ResourceManager": "4.0.1", + "System.Runtime": "4.1.0", + "System.Threading": "4.0.11", + "System.Threading.Tasks": "4.0.11" + }, + "compile": { + "ref/netstandard1.3/System.Security.Cryptography.Primitives.dll": {} + }, + "runtime": { + "lib/netstandard1.3/System.Security.Cryptography.Primitives.dll": {} + } + }, + "System.Security.Cryptography.X509Certificates/4.1.0": { + "type": "package", + "dependencies": { + "Microsoft.NETCore.Platforms": "1.0.1", + "System.Collections": "4.0.11", + "System.Diagnostics.Debug": "4.0.11", + "System.Globalization": "4.0.11", + "System.Globalization.Calendars": "4.0.1", + "System.IO": "4.1.0", + "System.IO.FileSystem": "4.0.1", + "System.IO.FileSystem.Primitives": "4.0.1", + "System.Resources.ResourceManager": "4.0.1", + "System.Runtime": "4.1.0", + "System.Runtime.Extensions": "4.1.0", + "System.Runtime.Handles": "4.0.1", + "System.Runtime.InteropServices": "4.1.0", + "System.Runtime.Numerics": "4.0.1", + "System.Security.Cryptography.Algorithms": "4.2.0", + "System.Security.Cryptography.Cng": "4.2.0", + "System.Security.Cryptography.Csp": "4.0.0", + "System.Security.Cryptography.Encoding": "4.0.0", + "System.Security.Cryptography.OpenSsl": "4.0.0", + "System.Security.Cryptography.Primitives": "4.0.0", + "System.Text.Encoding": "4.0.11", + "System.Threading": "4.0.11", + "runtime.native.System": "4.0.0", + "runtime.native.System.Net.Http": "4.0.1", + "runtime.native.System.Security.Cryptography": "4.0.0" + }, + "compile": { + "ref/netstandard1.4/System.Security.Cryptography.X509Certificates.dll": {} + }, + "runtimeTargets": { + "runtimes/unix/lib/netstandard1.6/System.Security.Cryptography.X509Certificates.dll": { + "assetType": "runtime", + "rid": "unix" + }, + "runtimes/win/lib/netstandard1.6/System.Security.Cryptography.X509Certificates.dll": { + "assetType": "runtime", + "rid": "win" + } + } + }, + "System.Text.Encoding/4.0.11": { + "type": "package", + "dependencies": { + "Microsoft.NETCore.Platforms": "1.0.1", + "Microsoft.NETCore.Targets": "1.0.1", + "System.Runtime": "4.1.0" + }, + "compile": { + "ref/netstandard1.3/System.Text.Encoding.dll": {} + } + }, + "System.Text.Encoding.Extensions/4.0.11": { + "type": "package", + "dependencies": { + "Microsoft.NETCore.Platforms": "1.0.1", + "Microsoft.NETCore.Targets": "1.0.1", + "System.Runtime": "4.1.0", + "System.Text.Encoding": "4.0.11" + }, + "compile": { + "ref/netstandard1.3/System.Text.Encoding.Extensions.dll": {} + } + }, + "System.Text.RegularExpressions/4.1.0": { + "type": "package", + "dependencies": { + "System.Collections": "4.0.11", + "System.Globalization": "4.0.11", + "System.Resources.ResourceManager": "4.0.1", + "System.Runtime": "4.1.0", + "System.Runtime.Extensions": "4.1.0", + "System.Threading": "4.0.11" + }, + "compile": { + "ref/netstandard1.6/System.Text.RegularExpressions.dll": {} + }, + "runtime": { + "lib/netstandard1.6/System.Text.RegularExpressions.dll": {} + } + }, + "System.Threading/4.0.11": { + "type": "package", + "dependencies": { + "System.Runtime": "4.1.0", + "System.Threading.Tasks": "4.0.11" + }, + "compile": { + "ref/netstandard1.3/System.Threading.dll": {} + }, + "runtime": { + "lib/netstandard1.3/System.Threading.dll": {} + } + }, + "System.Threading.Tasks/4.0.11": { + "type": "package", + "dependencies": { + "Microsoft.NETCore.Platforms": "1.0.1", + "Microsoft.NETCore.Targets": "1.0.1", + "System.Runtime": "4.1.0" + }, + "compile": { + "ref/netstandard1.3/System.Threading.Tasks.dll": {} + } + }, + "System.Threading.Tasks.Extensions/4.0.0": { + "type": "package", + "dependencies": { + "System.Collections": "4.0.11", + "System.Runtime": "4.1.0", + "System.Threading.Tasks": "4.0.11" + }, + "compile": { + "lib/netstandard1.0/_._": {} + }, + "runtime": { + "lib/netstandard1.0/System.Threading.Tasks.Extensions.dll": {} + } + }, + "System.Threading.Timer/4.0.1": { + "type": "package", + "dependencies": { + "Microsoft.NETCore.Platforms": "1.0.1", + "Microsoft.NETCore.Targets": "1.0.1", + "System.Runtime": "4.1.0" + }, + "compile": { + "ref/netstandard1.2/System.Threading.Timer.dll": {} + } + }, + "System.Xml.ReaderWriter/4.0.11": { + "type": "package", + "dependencies": { + "System.Collections": "4.0.11", + "System.Diagnostics.Debug": "4.0.11", + "System.Globalization": "4.0.11", + "System.IO": "4.1.0", + "System.IO.FileSystem": "4.0.1", + "System.IO.FileSystem.Primitives": "4.0.1", + "System.Resources.ResourceManager": "4.0.1", + "System.Runtime": "4.1.0", + "System.Runtime.Extensions": "4.1.0", + "System.Runtime.InteropServices": "4.1.0", + "System.Text.Encoding": "4.0.11", + "System.Text.Encoding.Extensions": "4.0.11", + "System.Text.RegularExpressions": "4.1.0", + "System.Threading.Tasks": "4.0.11", + "System.Threading.Tasks.Extensions": "4.0.0" + }, + "compile": { + "ref/netstandard1.3/System.Xml.ReaderWriter.dll": {} + }, + "runtime": { + "lib/netstandard1.3/System.Xml.ReaderWriter.dll": {} + } + }, + "System.Xml.XDocument/4.0.11": { + "type": "package", + "dependencies": { + "System.Collections": "4.0.11", + "System.Diagnostics.Debug": "4.0.11", + "System.Diagnostics.Tools": "4.0.1", + "System.Globalization": "4.0.11", + "System.IO": "4.1.0", + "System.Reflection": "4.1.0", + "System.Resources.ResourceManager": "4.0.1", + "System.Runtime": "4.1.0", + "System.Runtime.Extensions": "4.1.0", + "System.Text.Encoding": "4.0.11", + "System.Threading": "4.0.11", + "System.Xml.ReaderWriter": "4.0.11" + }, + "compile": { + "ref/netstandard1.3/System.Xml.XDocument.dll": {} + }, + "runtime": { + "lib/netstandard1.3/System.Xml.XDocument.dll": {} + } + }, + "System.Xml.XmlDocument/4.0.1": { + "type": "package", + "dependencies": { + "System.Collections": "4.0.11", + "System.Diagnostics.Debug": "4.0.11", + "System.Globalization": "4.0.11", + "System.IO": "4.1.0", + "System.Resources.ResourceManager": "4.0.1", + "System.Runtime": "4.1.0", + "System.Runtime.Extensions": "4.1.0", + "System.Text.Encoding": "4.0.11", + "System.Threading": "4.0.11", + "System.Xml.ReaderWriter": "4.0.11" + }, + "compile": { + "ref/netstandard1.3/_._": {} + }, + "runtime": { + "lib/netstandard1.3/System.Xml.XmlDocument.dll": {} + } + }, + "System.Xml.XmlSerializer/4.0.11": { + "type": "package", + "dependencies": { + "System.Collections": "4.0.11", + "System.Globalization": "4.0.11", + "System.IO": "4.1.0", + "System.Linq": "4.1.0", + "System.Reflection": "4.1.0", + "System.Reflection.Emit": "4.0.1", + "System.Reflection.Emit.ILGeneration": "4.0.1", + "System.Reflection.Extensions": "4.0.1", + "System.Reflection.Primitives": "4.0.1", + "System.Reflection.TypeExtensions": "4.1.0", + "System.Resources.ResourceManager": "4.0.1", + "System.Runtime": "4.1.0", + "System.Runtime.Extensions": "4.1.0", + "System.Text.RegularExpressions": "4.1.0", + "System.Threading": "4.0.11", + "System.Xml.ReaderWriter": "4.0.11", + "System.Xml.XmlDocument": "4.0.1" + }, + "compile": { + "ref/netstandard1.3/System.Xml.XmlSerializer.dll": {} + }, + "runtime": { + "lib/netstandard1.3/System.Xml.XmlSerializer.dll": {} + } + }, + "MediaBrowser.Common/1.0.0": { + "type": "project", + "framework": ".NETStandard,Version=v1.6", + "dependencies": { + "MediaBrowser.Model": "1.0.0", + "NETStandard.Library": "1.6.0" + } + }, + "MediaBrowser.Model/1.0.0": { + "type": "project", + "framework": ".NETStandard,Version=v1.6", + "dependencies": { + "NETStandard.Library": "1.6.0" + } + } + } + }, + "libraries": { + "Microsoft.NETCore.Platforms/1.0.1": { + "sha512": "2G6OjjJzwBfNOO8myRV/nFrbTw5iA+DEm0N+qUqhrOmaVtn4pC77h38I1jsXGw5VH55+dPfQsqHD0We9sCl9FQ==", + "type": "package", + "path": "Microsoft.NETCore.Platforms/1.0.1", + "files": [ + "Microsoft.NETCore.Platforms.1.0.1.nupkg.sha512", + "Microsoft.NETCore.Platforms.nuspec", + "ThirdPartyNotices.txt", + "dotnet_library_license.txt", + "lib/netstandard1.0/_._", + "runtime.json" + ] + }, + "Microsoft.NETCore.Targets/1.0.1": { + "sha512": "rkn+fKobF/cbWfnnfBOQHKVKIOpxMZBvlSHkqDWgBpwGDcLRduvs3D9OLGeV6GWGvVwNlVi2CBbTjuPmtHvyNw==", + "type": "package", + "path": "Microsoft.NETCore.Targets/1.0.1", + "files": [ + "Microsoft.NETCore.Targets.1.0.1.nupkg.sha512", + "Microsoft.NETCore.Targets.nuspec", + "ThirdPartyNotices.txt", + "dotnet_library_license.txt", + "lib/netstandard1.0/_._", + "runtime.json" + ] + }, + "Microsoft.Win32.Primitives/4.0.1": { + "sha512": "fQnBHO9DgcmkC9dYSJoBqo6sH1VJwJprUHh8F3hbcRlxiQiBUuTntdk8tUwV490OqC2kQUrinGwZyQHTieuXRA==", + "type": "package", + "path": "Microsoft.Win32.Primitives/4.0.1", + "files": [ + "Microsoft.Win32.Primitives.4.0.1.nupkg.sha512", + "Microsoft.Win32.Primitives.nuspec", + "ThirdPartyNotices.txt", + "dotnet_library_license.txt", + "lib/MonoAndroid10/_._", + "lib/MonoTouch10/_._", + "lib/net46/Microsoft.Win32.Primitives.dll", + "lib/xamarinios10/_._", + "lib/xamarinmac20/_._", + "lib/xamarintvos10/_._", + "lib/xamarinwatchos10/_._", + "ref/MonoAndroid10/_._", + "ref/MonoTouch10/_._", + "ref/net46/Microsoft.Win32.Primitives.dll", + "ref/netstandard1.3/Microsoft.Win32.Primitives.dll", + "ref/netstandard1.3/Microsoft.Win32.Primitives.xml", + "ref/netstandard1.3/de/Microsoft.Win32.Primitives.xml", + "ref/netstandard1.3/es/Microsoft.Win32.Primitives.xml", + "ref/netstandard1.3/fr/Microsoft.Win32.Primitives.xml", + "ref/netstandard1.3/it/Microsoft.Win32.Primitives.xml", + "ref/netstandard1.3/ja/Microsoft.Win32.Primitives.xml", + "ref/netstandard1.3/ko/Microsoft.Win32.Primitives.xml", + "ref/netstandard1.3/ru/Microsoft.Win32.Primitives.xml", + "ref/netstandard1.3/zh-hans/Microsoft.Win32.Primitives.xml", + "ref/netstandard1.3/zh-hant/Microsoft.Win32.Primitives.xml", + "ref/xamarinios10/_._", + "ref/xamarinmac20/_._", + "ref/xamarintvos10/_._", + "ref/xamarinwatchos10/_._" + ] + }, + "NETStandard.Library/1.6.0": { + "sha512": "ypsCvIdCZ4IoYASJHt6tF2fMo7N30NLgV1EbmC+snO490OMl9FvVxmumw14rhReWU3j3g7BYudG6YCrchwHJlA==", + "type": "package", + "path": "NETStandard.Library/1.6.0", + "files": [ + "NETStandard.Library.1.6.0.nupkg.sha512", + "NETStandard.Library.nuspec", + "ThirdPartyNotices.txt", + "dotnet_library_license.txt" + ] + }, + "runtime.native.System/4.0.0": { + "sha512": "QfS/nQI7k/BLgmLrw7qm7YBoULEvgWnPI+cYsbfCVFTW8Aj+i8JhccxcFMu1RWms0YZzF+UHguNBK4Qn89e2Sg==", + "type": "package", + "path": "runtime.native.System/4.0.0", + "files": [ + "ThirdPartyNotices.txt", + "dotnet_library_license.txt", + "lib/netstandard1.0/_._", + "runtime.native.System.4.0.0.nupkg.sha512", + "runtime.native.System.nuspec" + ] + }, + "runtime.native.System.IO.Compression/4.1.0": { + "sha512": "Ob7nvnJBox1aaB222zSVZSkf4WrebPG4qFscfK7vmD7P7NxoSxACQLtO7ytWpqXDn2wcd/+45+EAZ7xjaPip8A==", + "type": "package", + "path": "runtime.native.System.IO.Compression/4.1.0", + "files": [ + "ThirdPartyNotices.txt", + "dotnet_library_license.txt", + "lib/netstandard1.0/_._", + "runtime.native.System.IO.Compression.4.1.0.nupkg.sha512", + "runtime.native.System.IO.Compression.nuspec" + ] + }, + "runtime.native.System.Net.Http/4.0.1": { + "sha512": "Nh0UPZx2Vifh8r+J+H2jxifZUD3sBrmolgiFWJd2yiNrxO0xTa6bAw3YwRn1VOiSen/tUXMS31ttNItCZ6lKuA==", + "type": "package", + "path": "runtime.native.System.Net.Http/4.0.1", + "files": [ + "ThirdPartyNotices.txt", + "dotnet_library_license.txt", + "lib/netstandard1.0/_._", + "runtime.native.System.Net.Http.4.0.1.nupkg.sha512", + "runtime.native.System.Net.Http.nuspec" + ] + }, + "runtime.native.System.Security.Cryptography/4.0.0": { + "sha512": "2CQK0jmO6Eu7ZeMgD+LOFbNJSXHFVQbCJJkEyEwowh1SCgYnrn9W9RykMfpeeVGw7h4IBvYikzpGUlmZTUafJw==", + "type": "package", + "path": "runtime.native.System.Security.Cryptography/4.0.0", + "files": [ + "ThirdPartyNotices.txt", + "dotnet_library_license.txt", + "lib/netstandard1.0/_._", + "runtime.native.System.Security.Cryptography.4.0.0.nupkg.sha512", + "runtime.native.System.Security.Cryptography.nuspec" + ] + }, + "System.AppContext/4.1.0": { + "sha512": "3QjO4jNV7PdKkmQAVp9atA+usVnKRwI3Kx1nMwJ93T0LcQfx7pKAYk0nKz5wn1oP5iqlhZuy6RXOFdhr7rDwow==", + "type": "package", + "path": "System.AppContext/4.1.0", + "files": [ + "System.AppContext.4.1.0.nupkg.sha512", + "System.AppContext.nuspec", + "ThirdPartyNotices.txt", + "dotnet_library_license.txt", + "lib/MonoAndroid10/_._", + "lib/MonoTouch10/_._", + "lib/net46/System.AppContext.dll", + "lib/net463/System.AppContext.dll", + "lib/netcore50/System.AppContext.dll", + "lib/netstandard1.6/System.AppContext.dll", + "lib/xamarinios10/_._", + "lib/xamarinmac20/_._", + "lib/xamarintvos10/_._", + "lib/xamarinwatchos10/_._", + "ref/MonoAndroid10/_._", + "ref/MonoTouch10/_._", + "ref/net46/System.AppContext.dll", + "ref/net463/System.AppContext.dll", + "ref/netstandard/_._", + "ref/netstandard1.3/System.AppContext.dll", + "ref/netstandard1.3/System.AppContext.xml", + "ref/netstandard1.3/de/System.AppContext.xml", + "ref/netstandard1.3/es/System.AppContext.xml", + "ref/netstandard1.3/fr/System.AppContext.xml", + "ref/netstandard1.3/it/System.AppContext.xml", + "ref/netstandard1.3/ja/System.AppContext.xml", + "ref/netstandard1.3/ko/System.AppContext.xml", + "ref/netstandard1.3/ru/System.AppContext.xml", + "ref/netstandard1.3/zh-hans/System.AppContext.xml", + "ref/netstandard1.3/zh-hant/System.AppContext.xml", + "ref/netstandard1.6/System.AppContext.dll", + "ref/netstandard1.6/System.AppContext.xml", + "ref/netstandard1.6/de/System.AppContext.xml", + "ref/netstandard1.6/es/System.AppContext.xml", + "ref/netstandard1.6/fr/System.AppContext.xml", + "ref/netstandard1.6/it/System.AppContext.xml", + "ref/netstandard1.6/ja/System.AppContext.xml", + "ref/netstandard1.6/ko/System.AppContext.xml", + "ref/netstandard1.6/ru/System.AppContext.xml", + "ref/netstandard1.6/zh-hans/System.AppContext.xml", + "ref/netstandard1.6/zh-hant/System.AppContext.xml", + "ref/xamarinios10/_._", + "ref/xamarinmac20/_._", + "ref/xamarintvos10/_._", + "ref/xamarinwatchos10/_._", + "runtimes/aot/lib/netcore50/System.AppContext.dll" + ] + }, + "System.Buffers/4.0.0": { + "sha512": "msXumHfjjURSkvxUjYuq4N2ghHoRi2VpXcKMA7gK6ujQfU3vGpl+B6ld0ATRg+FZFpRyA6PgEPA+VlIkTeNf2w==", + "type": "package", + "path": "System.Buffers/4.0.0", + "files": [ + "System.Buffers.4.0.0.nupkg.sha512", + "System.Buffers.nuspec", + "ThirdPartyNotices.txt", + "dotnet_library_license.txt", + "lib/netstandard1.1/.xml", + "lib/netstandard1.1/System.Buffers.dll" + ] + }, + "System.Collections/4.0.11": { + "sha512": "YUJGz6eFKqS0V//mLt25vFGrrCvOnsXjlvFQs+KimpwNxug9x0Pzy4PlFMU3Q2IzqAa9G2L4LsK3+9vCBK7oTg==", + "type": "package", + "path": "System.Collections/4.0.11", + "files": [ + "System.Collections.4.0.11.nupkg.sha512", + "System.Collections.nuspec", + "ThirdPartyNotices.txt", + "dotnet_library_license.txt", + "lib/MonoAndroid10/_._", + "lib/MonoTouch10/_._", + "lib/net45/_._", + "lib/portable-net45+win8+wp8+wpa81/_._", + "lib/win8/_._", + "lib/wp80/_._", + "lib/wpa81/_._", + "lib/xamarinios10/_._", + "lib/xamarinmac20/_._", + "lib/xamarintvos10/_._", + "lib/xamarinwatchos10/_._", + "ref/MonoAndroid10/_._", + "ref/MonoTouch10/_._", + "ref/net45/_._", + "ref/netcore50/System.Collections.dll", + "ref/netcore50/System.Collections.xml", + "ref/netcore50/de/System.Collections.xml", + "ref/netcore50/es/System.Collections.xml", + "ref/netcore50/fr/System.Collections.xml", + "ref/netcore50/it/System.Collections.xml", + "ref/netcore50/ja/System.Collections.xml", + "ref/netcore50/ko/System.Collections.xml", + "ref/netcore50/ru/System.Collections.xml", + "ref/netcore50/zh-hans/System.Collections.xml", + "ref/netcore50/zh-hant/System.Collections.xml", + "ref/netstandard1.0/System.Collections.dll", + "ref/netstandard1.0/System.Collections.xml", + "ref/netstandard1.0/de/System.Collections.xml", + "ref/netstandard1.0/es/System.Collections.xml", + "ref/netstandard1.0/fr/System.Collections.xml", + "ref/netstandard1.0/it/System.Collections.xml", + "ref/netstandard1.0/ja/System.Collections.xml", + "ref/netstandard1.0/ko/System.Collections.xml", + "ref/netstandard1.0/ru/System.Collections.xml", + "ref/netstandard1.0/zh-hans/System.Collections.xml", + "ref/netstandard1.0/zh-hant/System.Collections.xml", + "ref/netstandard1.3/System.Collections.dll", + "ref/netstandard1.3/System.Collections.xml", + "ref/netstandard1.3/de/System.Collections.xml", + "ref/netstandard1.3/es/System.Collections.xml", + "ref/netstandard1.3/fr/System.Collections.xml", + "ref/netstandard1.3/it/System.Collections.xml", + "ref/netstandard1.3/ja/System.Collections.xml", + "ref/netstandard1.3/ko/System.Collections.xml", + "ref/netstandard1.3/ru/System.Collections.xml", + "ref/netstandard1.3/zh-hans/System.Collections.xml", + "ref/netstandard1.3/zh-hant/System.Collections.xml", + "ref/portable-net45+win8+wp8+wpa81/_._", + "ref/win8/_._", + "ref/wp80/_._", + "ref/wpa81/_._", + "ref/xamarinios10/_._", + "ref/xamarinmac20/_._", + "ref/xamarintvos10/_._", + "ref/xamarinwatchos10/_._" + ] + }, + "System.Collections.Concurrent/4.0.12": { + "sha512": "2gBcbb3drMLgxlI0fBfxMA31ec6AEyYCHygGse4vxceJan8mRIWeKJ24BFzN7+bi/NFTgdIgufzb94LWO5EERQ==", + "type": "package", + "path": "System.Collections.Concurrent/4.0.12", + "files": [ + "System.Collections.Concurrent.4.0.12.nupkg.sha512", + "System.Collections.Concurrent.nuspec", + "ThirdPartyNotices.txt", + "dotnet_library_license.txt", + "lib/MonoAndroid10/_._", + "lib/MonoTouch10/_._", + "lib/net45/_._", + "lib/netcore50/System.Collections.Concurrent.dll", + "lib/netstandard1.3/System.Collections.Concurrent.dll", + "lib/portable-net45+win8+wpa81/_._", + "lib/win8/_._", + "lib/wpa81/_._", + "lib/xamarinios10/_._", + "lib/xamarinmac20/_._", + "lib/xamarintvos10/_._", + "lib/xamarinwatchos10/_._", + "ref/MonoAndroid10/_._", + "ref/MonoTouch10/_._", + "ref/net45/_._", + "ref/netcore50/System.Collections.Concurrent.dll", + "ref/netcore50/System.Collections.Concurrent.xml", + "ref/netcore50/de/System.Collections.Concurrent.xml", + "ref/netcore50/es/System.Collections.Concurrent.xml", + "ref/netcore50/fr/System.Collections.Concurrent.xml", + "ref/netcore50/it/System.Collections.Concurrent.xml", + "ref/netcore50/ja/System.Collections.Concurrent.xml", + "ref/netcore50/ko/System.Collections.Concurrent.xml", + "ref/netcore50/ru/System.Collections.Concurrent.xml", + "ref/netcore50/zh-hans/System.Collections.Concurrent.xml", + "ref/netcore50/zh-hant/System.Collections.Concurrent.xml", + "ref/netstandard1.1/System.Collections.Concurrent.dll", + "ref/netstandard1.1/System.Collections.Concurrent.xml", + "ref/netstandard1.1/de/System.Collections.Concurrent.xml", + "ref/netstandard1.1/es/System.Collections.Concurrent.xml", + "ref/netstandard1.1/fr/System.Collections.Concurrent.xml", + "ref/netstandard1.1/it/System.Collections.Concurrent.xml", + "ref/netstandard1.1/ja/System.Collections.Concurrent.xml", + "ref/netstandard1.1/ko/System.Collections.Concurrent.xml", + "ref/netstandard1.1/ru/System.Collections.Concurrent.xml", + "ref/netstandard1.1/zh-hans/System.Collections.Concurrent.xml", + "ref/netstandard1.1/zh-hant/System.Collections.Concurrent.xml", + "ref/netstandard1.3/System.Collections.Concurrent.dll", + "ref/netstandard1.3/System.Collections.Concurrent.xml", + "ref/netstandard1.3/de/System.Collections.Concurrent.xml", + "ref/netstandard1.3/es/System.Collections.Concurrent.xml", + "ref/netstandard1.3/fr/System.Collections.Concurrent.xml", + "ref/netstandard1.3/it/System.Collections.Concurrent.xml", + "ref/netstandard1.3/ja/System.Collections.Concurrent.xml", + "ref/netstandard1.3/ko/System.Collections.Concurrent.xml", + "ref/netstandard1.3/ru/System.Collections.Concurrent.xml", + "ref/netstandard1.3/zh-hans/System.Collections.Concurrent.xml", + "ref/netstandard1.3/zh-hant/System.Collections.Concurrent.xml", + "ref/portable-net45+win8+wpa81/_._", + "ref/win8/_._", + "ref/wpa81/_._", + "ref/xamarinios10/_._", + "ref/xamarinmac20/_._", + "ref/xamarintvos10/_._", + "ref/xamarinwatchos10/_._" + ] + }, + "System.Console/4.0.0": { + "sha512": "qSKUSOIiYA/a0g5XXdxFcUFmv1hNICBD7QZ0QhGYVipPIhvpiydY8VZqr1thmCXvmn8aipMg64zuanB4eotK9A==", + "type": "package", + "path": "System.Console/4.0.0", + "files": [ + "System.Console.4.0.0.nupkg.sha512", + "System.Console.nuspec", + "ThirdPartyNotices.txt", + "dotnet_library_license.txt", + "lib/MonoAndroid10/_._", + "lib/MonoTouch10/_._", + "lib/net46/System.Console.dll", + "lib/xamarinios10/_._", + "lib/xamarinmac20/_._", + "lib/xamarintvos10/_._", + "lib/xamarinwatchos10/_._", + "ref/MonoAndroid10/_._", + "ref/MonoTouch10/_._", + "ref/net46/System.Console.dll", + "ref/netstandard1.3/System.Console.dll", + "ref/netstandard1.3/System.Console.xml", + "ref/netstandard1.3/de/System.Console.xml", + "ref/netstandard1.3/es/System.Console.xml", + "ref/netstandard1.3/fr/System.Console.xml", + "ref/netstandard1.3/it/System.Console.xml", + "ref/netstandard1.3/ja/System.Console.xml", + "ref/netstandard1.3/ko/System.Console.xml", + "ref/netstandard1.3/ru/System.Console.xml", + "ref/netstandard1.3/zh-hans/System.Console.xml", + "ref/netstandard1.3/zh-hant/System.Console.xml", + "ref/xamarinios10/_._", + "ref/xamarinmac20/_._", + "ref/xamarintvos10/_._", + "ref/xamarinwatchos10/_._" + ] + }, + "System.Diagnostics.Debug/4.0.11": { + "sha512": "w5U95fVKHY4G8ASs/K5iK3J5LY+/dLFd4vKejsnI/ZhBsWS9hQakfx3Zr7lRWKg4tAw9r4iktyvsTagWkqYCiw==", + "type": "package", + "path": "System.Diagnostics.Debug/4.0.11", + "files": [ + "System.Diagnostics.Debug.4.0.11.nupkg.sha512", + "System.Diagnostics.Debug.nuspec", + "ThirdPartyNotices.txt", + "dotnet_library_license.txt", + "lib/MonoAndroid10/_._", + "lib/MonoTouch10/_._", + "lib/net45/_._", + "lib/portable-net45+win8+wp8+wpa81/_._", + "lib/win8/_._", + "lib/wp80/_._", + "lib/wpa81/_._", + "lib/xamarinios10/_._", + "lib/xamarinmac20/_._", + "lib/xamarintvos10/_._", + "lib/xamarinwatchos10/_._", + "ref/MonoAndroid10/_._", + "ref/MonoTouch10/_._", + "ref/net45/_._", + "ref/netcore50/System.Diagnostics.Debug.dll", + "ref/netcore50/System.Diagnostics.Debug.xml", + "ref/netcore50/de/System.Diagnostics.Debug.xml", + "ref/netcore50/es/System.Diagnostics.Debug.xml", + "ref/netcore50/fr/System.Diagnostics.Debug.xml", + "ref/netcore50/it/System.Diagnostics.Debug.xml", + "ref/netcore50/ja/System.Diagnostics.Debug.xml", + "ref/netcore50/ko/System.Diagnostics.Debug.xml", + "ref/netcore50/ru/System.Diagnostics.Debug.xml", + "ref/netcore50/zh-hans/System.Diagnostics.Debug.xml", + "ref/netcore50/zh-hant/System.Diagnostics.Debug.xml", + "ref/netstandard1.0/System.Diagnostics.Debug.dll", + "ref/netstandard1.0/System.Diagnostics.Debug.xml", + "ref/netstandard1.0/de/System.Diagnostics.Debug.xml", + "ref/netstandard1.0/es/System.Diagnostics.Debug.xml", + "ref/netstandard1.0/fr/System.Diagnostics.Debug.xml", + "ref/netstandard1.0/it/System.Diagnostics.Debug.xml", + "ref/netstandard1.0/ja/System.Diagnostics.Debug.xml", + "ref/netstandard1.0/ko/System.Diagnostics.Debug.xml", + "ref/netstandard1.0/ru/System.Diagnostics.Debug.xml", + "ref/netstandard1.0/zh-hans/System.Diagnostics.Debug.xml", + "ref/netstandard1.0/zh-hant/System.Diagnostics.Debug.xml", + "ref/netstandard1.3/System.Diagnostics.Debug.dll", + "ref/netstandard1.3/System.Diagnostics.Debug.xml", + "ref/netstandard1.3/de/System.Diagnostics.Debug.xml", + "ref/netstandard1.3/es/System.Diagnostics.Debug.xml", + "ref/netstandard1.3/fr/System.Diagnostics.Debug.xml", + "ref/netstandard1.3/it/System.Diagnostics.Debug.xml", + "ref/netstandard1.3/ja/System.Diagnostics.Debug.xml", + "ref/netstandard1.3/ko/System.Diagnostics.Debug.xml", + "ref/netstandard1.3/ru/System.Diagnostics.Debug.xml", + "ref/netstandard1.3/zh-hans/System.Diagnostics.Debug.xml", + "ref/netstandard1.3/zh-hant/System.Diagnostics.Debug.xml", + "ref/portable-net45+win8+wp8+wpa81/_._", + "ref/win8/_._", + "ref/wp80/_._", + "ref/wpa81/_._", + "ref/xamarinios10/_._", + "ref/xamarinmac20/_._", + "ref/xamarintvos10/_._", + "ref/xamarinwatchos10/_._" + ] + }, + "System.Diagnostics.DiagnosticSource/4.0.0": { + "sha512": "YKglnq4BMTJxfcr6nuT08g+yJ0UxdePIHxosiLuljuHIUR6t4KhFsyaHOaOc1Ofqp0PUvJ0EmcgiEz6T7vEx3w==", + "type": "package", + "path": "System.Diagnostics.DiagnosticSource/4.0.0", + "files": [ + "System.Diagnostics.DiagnosticSource.4.0.0.nupkg.sha512", + "System.Diagnostics.DiagnosticSource.nuspec", + "ThirdPartyNotices.txt", + "dotnet_library_license.txt", + "lib/net46/System.Diagnostics.DiagnosticSource.dll", + "lib/net46/System.Diagnostics.DiagnosticSource.xml", + "lib/netstandard1.1/System.Diagnostics.DiagnosticSource.dll", + "lib/netstandard1.1/System.Diagnostics.DiagnosticSource.xml", + "lib/netstandard1.3/System.Diagnostics.DiagnosticSource.dll", + "lib/netstandard1.3/System.Diagnostics.DiagnosticSource.xml", + "lib/portable-net45+win8+wpa81/System.Diagnostics.DiagnosticSource.dll", + "lib/portable-net45+win8+wpa81/System.Diagnostics.DiagnosticSource.xml" + ] + }, + "System.Diagnostics.Tools/4.0.1": { + "sha512": "xBfJ8pnd4C17dWaC9FM6aShzbJcRNMChUMD42I6772KGGrqaFdumwhn9OdM68erj1ueNo3xdQ1EwiFjK5k8p0g==", + "type": "package", + "path": "System.Diagnostics.Tools/4.0.1", + "files": [ + "System.Diagnostics.Tools.4.0.1.nupkg.sha512", + "System.Diagnostics.Tools.nuspec", + "ThirdPartyNotices.txt", + "dotnet_library_license.txt", + "lib/MonoAndroid10/_._", + "lib/MonoTouch10/_._", + "lib/net45/_._", + "lib/portable-net45+win8+wp8+wpa81/_._", + "lib/win8/_._", + "lib/wp80/_._", + "lib/wpa81/_._", + "lib/xamarinios10/_._", + "lib/xamarinmac20/_._", + "lib/xamarintvos10/_._", + "lib/xamarinwatchos10/_._", + "ref/MonoAndroid10/_._", + "ref/MonoTouch10/_._", + "ref/net45/_._", + "ref/netcore50/System.Diagnostics.Tools.dll", + "ref/netcore50/System.Diagnostics.Tools.xml", + "ref/netcore50/de/System.Diagnostics.Tools.xml", + "ref/netcore50/es/System.Diagnostics.Tools.xml", + "ref/netcore50/fr/System.Diagnostics.Tools.xml", + "ref/netcore50/it/System.Diagnostics.Tools.xml", + "ref/netcore50/ja/System.Diagnostics.Tools.xml", + "ref/netcore50/ko/System.Diagnostics.Tools.xml", + "ref/netcore50/ru/System.Diagnostics.Tools.xml", + "ref/netcore50/zh-hans/System.Diagnostics.Tools.xml", + "ref/netcore50/zh-hant/System.Diagnostics.Tools.xml", + "ref/netstandard1.0/System.Diagnostics.Tools.dll", + "ref/netstandard1.0/System.Diagnostics.Tools.xml", + "ref/netstandard1.0/de/System.Diagnostics.Tools.xml", + "ref/netstandard1.0/es/System.Diagnostics.Tools.xml", + "ref/netstandard1.0/fr/System.Diagnostics.Tools.xml", + "ref/netstandard1.0/it/System.Diagnostics.Tools.xml", + "ref/netstandard1.0/ja/System.Diagnostics.Tools.xml", + "ref/netstandard1.0/ko/System.Diagnostics.Tools.xml", + "ref/netstandard1.0/ru/System.Diagnostics.Tools.xml", + "ref/netstandard1.0/zh-hans/System.Diagnostics.Tools.xml", + "ref/netstandard1.0/zh-hant/System.Diagnostics.Tools.xml", + "ref/portable-net45+win8+wp8+wpa81/_._", + "ref/win8/_._", + "ref/wp80/_._", + "ref/wpa81/_._", + "ref/xamarinios10/_._", + "ref/xamarinmac20/_._", + "ref/xamarintvos10/_._", + "ref/xamarinwatchos10/_._" + ] + }, + "System.Diagnostics.Tracing/4.1.0": { + "sha512": "vDN1PoMZCkkdNjvZLql592oYJZgS7URcJzJ7bxeBgGtx5UtR5leNm49VmfHGqIffX4FKacHbI3H6UyNSHQknBg==", + "type": "package", + "path": "System.Diagnostics.Tracing/4.1.0", + "files": [ + "System.Diagnostics.Tracing.4.1.0.nupkg.sha512", + "System.Diagnostics.Tracing.nuspec", + "ThirdPartyNotices.txt", + "dotnet_library_license.txt", + "lib/MonoAndroid10/_._", + "lib/MonoTouch10/_._", + "lib/net45/_._", + "lib/net462/System.Diagnostics.Tracing.dll", + "lib/portable-net45+win8+wpa81/_._", + "lib/win8/_._", + "lib/wpa81/_._", + "lib/xamarinios10/_._", + "lib/xamarinmac20/_._", + "lib/xamarintvos10/_._", + "lib/xamarinwatchos10/_._", + "ref/MonoAndroid10/_._", + "ref/MonoTouch10/_._", + "ref/net45/_._", + "ref/net462/System.Diagnostics.Tracing.dll", + "ref/netcore50/System.Diagnostics.Tracing.dll", + "ref/netcore50/System.Diagnostics.Tracing.xml", + "ref/netcore50/de/System.Diagnostics.Tracing.xml", + "ref/netcore50/es/System.Diagnostics.Tracing.xml", + "ref/netcore50/fr/System.Diagnostics.Tracing.xml", + "ref/netcore50/it/System.Diagnostics.Tracing.xml", + "ref/netcore50/ja/System.Diagnostics.Tracing.xml", + "ref/netcore50/ko/System.Diagnostics.Tracing.xml", + "ref/netcore50/ru/System.Diagnostics.Tracing.xml", + "ref/netcore50/zh-hans/System.Diagnostics.Tracing.xml", + "ref/netcore50/zh-hant/System.Diagnostics.Tracing.xml", + "ref/netstandard1.1/System.Diagnostics.Tracing.dll", + "ref/netstandard1.1/System.Diagnostics.Tracing.xml", + "ref/netstandard1.1/de/System.Diagnostics.Tracing.xml", + "ref/netstandard1.1/es/System.Diagnostics.Tracing.xml", + "ref/netstandard1.1/fr/System.Diagnostics.Tracing.xml", + "ref/netstandard1.1/it/System.Diagnostics.Tracing.xml", + "ref/netstandard1.1/ja/System.Diagnostics.Tracing.xml", + "ref/netstandard1.1/ko/System.Diagnostics.Tracing.xml", + "ref/netstandard1.1/ru/System.Diagnostics.Tracing.xml", + "ref/netstandard1.1/zh-hans/System.Diagnostics.Tracing.xml", + "ref/netstandard1.1/zh-hant/System.Diagnostics.Tracing.xml", + "ref/netstandard1.2/System.Diagnostics.Tracing.dll", + "ref/netstandard1.2/System.Diagnostics.Tracing.xml", + "ref/netstandard1.2/de/System.Diagnostics.Tracing.xml", + "ref/netstandard1.2/es/System.Diagnostics.Tracing.xml", + "ref/netstandard1.2/fr/System.Diagnostics.Tracing.xml", + "ref/netstandard1.2/it/System.Diagnostics.Tracing.xml", + "ref/netstandard1.2/ja/System.Diagnostics.Tracing.xml", + "ref/netstandard1.2/ko/System.Diagnostics.Tracing.xml", + "ref/netstandard1.2/ru/System.Diagnostics.Tracing.xml", + "ref/netstandard1.2/zh-hans/System.Diagnostics.Tracing.xml", + "ref/netstandard1.2/zh-hant/System.Diagnostics.Tracing.xml", + "ref/netstandard1.3/System.Diagnostics.Tracing.dll", + "ref/netstandard1.3/System.Diagnostics.Tracing.xml", + "ref/netstandard1.3/de/System.Diagnostics.Tracing.xml", + "ref/netstandard1.3/es/System.Diagnostics.Tracing.xml", + "ref/netstandard1.3/fr/System.Diagnostics.Tracing.xml", + "ref/netstandard1.3/it/System.Diagnostics.Tracing.xml", + "ref/netstandard1.3/ja/System.Diagnostics.Tracing.xml", + "ref/netstandard1.3/ko/System.Diagnostics.Tracing.xml", + "ref/netstandard1.3/ru/System.Diagnostics.Tracing.xml", + "ref/netstandard1.3/zh-hans/System.Diagnostics.Tracing.xml", + "ref/netstandard1.3/zh-hant/System.Diagnostics.Tracing.xml", + "ref/netstandard1.5/System.Diagnostics.Tracing.dll", + "ref/netstandard1.5/System.Diagnostics.Tracing.xml", + "ref/netstandard1.5/de/System.Diagnostics.Tracing.xml", + "ref/netstandard1.5/es/System.Diagnostics.Tracing.xml", + "ref/netstandard1.5/fr/System.Diagnostics.Tracing.xml", + "ref/netstandard1.5/it/System.Diagnostics.Tracing.xml", + "ref/netstandard1.5/ja/System.Diagnostics.Tracing.xml", + "ref/netstandard1.5/ko/System.Diagnostics.Tracing.xml", + "ref/netstandard1.5/ru/System.Diagnostics.Tracing.xml", + "ref/netstandard1.5/zh-hans/System.Diagnostics.Tracing.xml", + "ref/netstandard1.5/zh-hant/System.Diagnostics.Tracing.xml", + "ref/portable-net45+win8+wpa81/_._", + "ref/win8/_._", + "ref/wpa81/_._", + "ref/xamarinios10/_._", + "ref/xamarinmac20/_._", + "ref/xamarintvos10/_._", + "ref/xamarinwatchos10/_._" + ] + }, + "System.Globalization/4.0.11": { + "sha512": "B95h0YLEL2oSnwF/XjqSWKnwKOy/01VWkNlsCeMTFJLLabflpGV26nK164eRs5GiaRSBGpOxQ3pKoSnnyZN5pg==", + "type": "package", + "path": "System.Globalization/4.0.11", + "files": [ + "System.Globalization.4.0.11.nupkg.sha512", + "System.Globalization.nuspec", + "ThirdPartyNotices.txt", + "dotnet_library_license.txt", + "lib/MonoAndroid10/_._", + "lib/MonoTouch10/_._", + "lib/net45/_._", + "lib/portable-net45+win8+wp8+wpa81/_._", + "lib/win8/_._", + "lib/wp80/_._", + "lib/wpa81/_._", + "lib/xamarinios10/_._", + "lib/xamarinmac20/_._", + "lib/xamarintvos10/_._", + "lib/xamarinwatchos10/_._", + "ref/MonoAndroid10/_._", + "ref/MonoTouch10/_._", + "ref/net45/_._", + "ref/netcore50/System.Globalization.dll", + "ref/netcore50/System.Globalization.xml", + "ref/netcore50/de/System.Globalization.xml", + "ref/netcore50/es/System.Globalization.xml", + "ref/netcore50/fr/System.Globalization.xml", + "ref/netcore50/it/System.Globalization.xml", + "ref/netcore50/ja/System.Globalization.xml", + "ref/netcore50/ko/System.Globalization.xml", + "ref/netcore50/ru/System.Globalization.xml", + "ref/netcore50/zh-hans/System.Globalization.xml", + "ref/netcore50/zh-hant/System.Globalization.xml", + "ref/netstandard1.0/System.Globalization.dll", + "ref/netstandard1.0/System.Globalization.xml", + "ref/netstandard1.0/de/System.Globalization.xml", + "ref/netstandard1.0/es/System.Globalization.xml", + "ref/netstandard1.0/fr/System.Globalization.xml", + "ref/netstandard1.0/it/System.Globalization.xml", + "ref/netstandard1.0/ja/System.Globalization.xml", + "ref/netstandard1.0/ko/System.Globalization.xml", + "ref/netstandard1.0/ru/System.Globalization.xml", + "ref/netstandard1.0/zh-hans/System.Globalization.xml", + "ref/netstandard1.0/zh-hant/System.Globalization.xml", + "ref/netstandard1.3/System.Globalization.dll", + "ref/netstandard1.3/System.Globalization.xml", + "ref/netstandard1.3/de/System.Globalization.xml", + "ref/netstandard1.3/es/System.Globalization.xml", + "ref/netstandard1.3/fr/System.Globalization.xml", + "ref/netstandard1.3/it/System.Globalization.xml", + "ref/netstandard1.3/ja/System.Globalization.xml", + "ref/netstandard1.3/ko/System.Globalization.xml", + "ref/netstandard1.3/ru/System.Globalization.xml", + "ref/netstandard1.3/zh-hans/System.Globalization.xml", + "ref/netstandard1.3/zh-hant/System.Globalization.xml", + "ref/portable-net45+win8+wp8+wpa81/_._", + "ref/win8/_._", + "ref/wp80/_._", + "ref/wpa81/_._", + "ref/xamarinios10/_._", + "ref/xamarinmac20/_._", + "ref/xamarintvos10/_._", + "ref/xamarinwatchos10/_._" + ] + }, + "System.Globalization.Calendars/4.0.1": { + "sha512": "L1c6IqeQ88vuzC1P81JeHmHA8mxq8a18NUBNXnIY/BVb+TCyAaGIFbhpZt60h9FJNmisymoQkHEFSE9Vslja1Q==", + "type": "package", + "path": "System.Globalization.Calendars/4.0.1", + "files": [ + "System.Globalization.Calendars.4.0.1.nupkg.sha512", + "System.Globalization.Calendars.nuspec", + "ThirdPartyNotices.txt", + "dotnet_library_license.txt", + "lib/MonoAndroid10/_._", + "lib/MonoTouch10/_._", + "lib/net46/System.Globalization.Calendars.dll", + "lib/xamarinios10/_._", + "lib/xamarinmac20/_._", + "lib/xamarintvos10/_._", + "lib/xamarinwatchos10/_._", + "ref/MonoAndroid10/_._", + "ref/MonoTouch10/_._", + "ref/net46/System.Globalization.Calendars.dll", + "ref/netstandard1.3/System.Globalization.Calendars.dll", + "ref/netstandard1.3/System.Globalization.Calendars.xml", + "ref/netstandard1.3/de/System.Globalization.Calendars.xml", + "ref/netstandard1.3/es/System.Globalization.Calendars.xml", + "ref/netstandard1.3/fr/System.Globalization.Calendars.xml", + "ref/netstandard1.3/it/System.Globalization.Calendars.xml", + "ref/netstandard1.3/ja/System.Globalization.Calendars.xml", + "ref/netstandard1.3/ko/System.Globalization.Calendars.xml", + "ref/netstandard1.3/ru/System.Globalization.Calendars.xml", + "ref/netstandard1.3/zh-hans/System.Globalization.Calendars.xml", + "ref/netstandard1.3/zh-hant/System.Globalization.Calendars.xml", + "ref/xamarinios10/_._", + "ref/xamarinmac20/_._", + "ref/xamarintvos10/_._", + "ref/xamarinwatchos10/_._" + ] + }, + "System.Globalization.Extensions/4.0.1": { + "sha512": "KKo23iKeOaIg61SSXwjANN7QYDr/3op3OWGGzDzz7mypx0Za0fZSeG0l6cco8Ntp8YMYkIQcAqlk8yhm5/Uhcg==", + "type": "package", + "path": "System.Globalization.Extensions/4.0.1", + "files": [ + "System.Globalization.Extensions.4.0.1.nupkg.sha512", + "System.Globalization.Extensions.nuspec", + "ThirdPartyNotices.txt", + "dotnet_library_license.txt", + "lib/MonoAndroid10/_._", + "lib/MonoTouch10/_._", + "lib/net46/System.Globalization.Extensions.dll", + "lib/xamarinios10/_._", + "lib/xamarinmac20/_._", + "lib/xamarintvos10/_._", + "lib/xamarinwatchos10/_._", + "ref/MonoAndroid10/_._", + "ref/MonoTouch10/_._", + "ref/net46/System.Globalization.Extensions.dll", + "ref/netstandard1.3/System.Globalization.Extensions.dll", + "ref/netstandard1.3/System.Globalization.Extensions.xml", + "ref/netstandard1.3/de/System.Globalization.Extensions.xml", + "ref/netstandard1.3/es/System.Globalization.Extensions.xml", + "ref/netstandard1.3/fr/System.Globalization.Extensions.xml", + "ref/netstandard1.3/it/System.Globalization.Extensions.xml", + "ref/netstandard1.3/ja/System.Globalization.Extensions.xml", + "ref/netstandard1.3/ko/System.Globalization.Extensions.xml", + "ref/netstandard1.3/ru/System.Globalization.Extensions.xml", + "ref/netstandard1.3/zh-hans/System.Globalization.Extensions.xml", + "ref/netstandard1.3/zh-hant/System.Globalization.Extensions.xml", + "ref/xamarinios10/_._", + "ref/xamarinmac20/_._", + "ref/xamarintvos10/_._", + "ref/xamarinwatchos10/_._", + "runtimes/unix/lib/netstandard1.3/System.Globalization.Extensions.dll", + "runtimes/win/lib/net46/System.Globalization.Extensions.dll", + "runtimes/win/lib/netstandard1.3/System.Globalization.Extensions.dll" + ] + }, + "System.IO/4.1.0": { + "sha512": "3KlTJceQc3gnGIaHZ7UBZO26SHL1SHE4ddrmiwumFnId+CEHP+O8r386tZKaE6zlk5/mF8vifMBzHj9SaXN+mQ==", + "type": "package", + "path": "System.IO/4.1.0", + "files": [ + "System.IO.4.1.0.nupkg.sha512", + "System.IO.nuspec", + "ThirdPartyNotices.txt", + "dotnet_library_license.txt", + "lib/MonoAndroid10/_._", + "lib/MonoTouch10/_._", + "lib/net45/_._", + "lib/net462/System.IO.dll", + "lib/portable-net45+win8+wp8+wpa81/_._", + "lib/win8/_._", + "lib/wp80/_._", + "lib/wpa81/_._", + "lib/xamarinios10/_._", + "lib/xamarinmac20/_._", + "lib/xamarintvos10/_._", + "lib/xamarinwatchos10/_._", + "ref/MonoAndroid10/_._", + "ref/MonoTouch10/_._", + "ref/net45/_._", + "ref/net462/System.IO.dll", + "ref/netcore50/System.IO.dll", + "ref/netcore50/System.IO.xml", + "ref/netcore50/de/System.IO.xml", + "ref/netcore50/es/System.IO.xml", + "ref/netcore50/fr/System.IO.xml", + "ref/netcore50/it/System.IO.xml", + "ref/netcore50/ja/System.IO.xml", + "ref/netcore50/ko/System.IO.xml", + "ref/netcore50/ru/System.IO.xml", + "ref/netcore50/zh-hans/System.IO.xml", + "ref/netcore50/zh-hant/System.IO.xml", + "ref/netstandard1.0/System.IO.dll", + "ref/netstandard1.0/System.IO.xml", + "ref/netstandard1.0/de/System.IO.xml", + "ref/netstandard1.0/es/System.IO.xml", + "ref/netstandard1.0/fr/System.IO.xml", + "ref/netstandard1.0/it/System.IO.xml", + "ref/netstandard1.0/ja/System.IO.xml", + "ref/netstandard1.0/ko/System.IO.xml", + "ref/netstandard1.0/ru/System.IO.xml", + "ref/netstandard1.0/zh-hans/System.IO.xml", + "ref/netstandard1.0/zh-hant/System.IO.xml", + "ref/netstandard1.3/System.IO.dll", + "ref/netstandard1.3/System.IO.xml", + "ref/netstandard1.3/de/System.IO.xml", + "ref/netstandard1.3/es/System.IO.xml", + "ref/netstandard1.3/fr/System.IO.xml", + "ref/netstandard1.3/it/System.IO.xml", + "ref/netstandard1.3/ja/System.IO.xml", + "ref/netstandard1.3/ko/System.IO.xml", + "ref/netstandard1.3/ru/System.IO.xml", + "ref/netstandard1.3/zh-hans/System.IO.xml", + "ref/netstandard1.3/zh-hant/System.IO.xml", + "ref/netstandard1.5/System.IO.dll", + "ref/netstandard1.5/System.IO.xml", + "ref/netstandard1.5/de/System.IO.xml", + "ref/netstandard1.5/es/System.IO.xml", + "ref/netstandard1.5/fr/System.IO.xml", + "ref/netstandard1.5/it/System.IO.xml", + "ref/netstandard1.5/ja/System.IO.xml", + "ref/netstandard1.5/ko/System.IO.xml", + "ref/netstandard1.5/ru/System.IO.xml", + "ref/netstandard1.5/zh-hans/System.IO.xml", + "ref/netstandard1.5/zh-hant/System.IO.xml", + "ref/portable-net45+win8+wp8+wpa81/_._", + "ref/win8/_._", + "ref/wp80/_._", + "ref/wpa81/_._", + "ref/xamarinios10/_._", + "ref/xamarinmac20/_._", + "ref/xamarintvos10/_._", + "ref/xamarinwatchos10/_._" + ] + }, + "System.IO.Compression/4.1.0": { + "sha512": "TjnBS6eztThSzeSib+WyVbLzEdLKUcEHN69VtS3u8aAsSc18FU6xCZlNWWsEd8SKcXAE+y1sOu7VbU8sUeM0sg==", + "type": "package", + "path": "System.IO.Compression/4.1.0", + "files": [ + "System.IO.Compression.4.1.0.nupkg.sha512", + "System.IO.Compression.nuspec", + "ThirdPartyNotices.txt", + "dotnet_library_license.txt", + "lib/MonoAndroid10/_._", + "lib/MonoTouch10/_._", + "lib/net45/_._", + "lib/net46/System.IO.Compression.dll", + "lib/portable-net45+win8+wpa81/_._", + "lib/win8/_._", + "lib/wpa81/_._", + "lib/xamarinios10/_._", + "lib/xamarinmac20/_._", + "lib/xamarintvos10/_._", + "lib/xamarinwatchos10/_._", + "ref/MonoAndroid10/_._", + "ref/MonoTouch10/_._", + "ref/net45/_._", + "ref/net46/System.IO.Compression.dll", + "ref/netcore50/System.IO.Compression.dll", + "ref/netcore50/System.IO.Compression.xml", + "ref/netcore50/de/System.IO.Compression.xml", + "ref/netcore50/es/System.IO.Compression.xml", + "ref/netcore50/fr/System.IO.Compression.xml", + "ref/netcore50/it/System.IO.Compression.xml", + "ref/netcore50/ja/System.IO.Compression.xml", + "ref/netcore50/ko/System.IO.Compression.xml", + "ref/netcore50/ru/System.IO.Compression.xml", + "ref/netcore50/zh-hans/System.IO.Compression.xml", + "ref/netcore50/zh-hant/System.IO.Compression.xml", + "ref/netstandard1.1/System.IO.Compression.dll", + "ref/netstandard1.1/System.IO.Compression.xml", + "ref/netstandard1.1/de/System.IO.Compression.xml", + "ref/netstandard1.1/es/System.IO.Compression.xml", + "ref/netstandard1.1/fr/System.IO.Compression.xml", + "ref/netstandard1.1/it/System.IO.Compression.xml", + "ref/netstandard1.1/ja/System.IO.Compression.xml", + "ref/netstandard1.1/ko/System.IO.Compression.xml", + "ref/netstandard1.1/ru/System.IO.Compression.xml", + "ref/netstandard1.1/zh-hans/System.IO.Compression.xml", + "ref/netstandard1.1/zh-hant/System.IO.Compression.xml", + "ref/netstandard1.3/System.IO.Compression.dll", + "ref/netstandard1.3/System.IO.Compression.xml", + "ref/netstandard1.3/de/System.IO.Compression.xml", + "ref/netstandard1.3/es/System.IO.Compression.xml", + "ref/netstandard1.3/fr/System.IO.Compression.xml", + "ref/netstandard1.3/it/System.IO.Compression.xml", + "ref/netstandard1.3/ja/System.IO.Compression.xml", + "ref/netstandard1.3/ko/System.IO.Compression.xml", + "ref/netstandard1.3/ru/System.IO.Compression.xml", + "ref/netstandard1.3/zh-hans/System.IO.Compression.xml", + "ref/netstandard1.3/zh-hant/System.IO.Compression.xml", + "ref/portable-net45+win8+wpa81/_._", + "ref/win8/_._", + "ref/wpa81/_._", + "ref/xamarinios10/_._", + "ref/xamarinmac20/_._", + "ref/xamarintvos10/_._", + "ref/xamarinwatchos10/_._", + "runtimes/unix/lib/netstandard1.3/System.IO.Compression.dll", + "runtimes/win/lib/net46/System.IO.Compression.dll", + "runtimes/win/lib/netstandard1.3/System.IO.Compression.dll" + ] + }, + "System.IO.Compression.ZipFile/4.0.1": { + "sha512": "hBQYJzfTbQURF10nLhd+az2NHxsU6MU7AB8RUf4IolBP5lOAm4Luho851xl+CqslmhI5ZH/el8BlngEk4lBkaQ==", + "type": "package", + "path": "System.IO.Compression.ZipFile/4.0.1", + "files": [ + "System.IO.Compression.ZipFile.4.0.1.nupkg.sha512", + "System.IO.Compression.ZipFile.nuspec", + "ThirdPartyNotices.txt", + "dotnet_library_license.txt", + "lib/MonoAndroid10/_._", + "lib/MonoTouch10/_._", + "lib/net46/System.IO.Compression.ZipFile.dll", + "lib/netstandard1.3/System.IO.Compression.ZipFile.dll", + "lib/xamarinios10/_._", + "lib/xamarinmac20/_._", + "lib/xamarintvos10/_._", + "lib/xamarinwatchos10/_._", + "ref/MonoAndroid10/_._", + "ref/MonoTouch10/_._", + "ref/net46/System.IO.Compression.ZipFile.dll", + "ref/netstandard1.3/System.IO.Compression.ZipFile.dll", + "ref/netstandard1.3/System.IO.Compression.ZipFile.xml", + "ref/netstandard1.3/de/System.IO.Compression.ZipFile.xml", + "ref/netstandard1.3/es/System.IO.Compression.ZipFile.xml", + "ref/netstandard1.3/fr/System.IO.Compression.ZipFile.xml", + "ref/netstandard1.3/it/System.IO.Compression.ZipFile.xml", + "ref/netstandard1.3/ja/System.IO.Compression.ZipFile.xml", + "ref/netstandard1.3/ko/System.IO.Compression.ZipFile.xml", + "ref/netstandard1.3/ru/System.IO.Compression.ZipFile.xml", + "ref/netstandard1.3/zh-hans/System.IO.Compression.ZipFile.xml", + "ref/netstandard1.3/zh-hant/System.IO.Compression.ZipFile.xml", + "ref/xamarinios10/_._", + "ref/xamarinmac20/_._", + "ref/xamarintvos10/_._", + "ref/xamarinwatchos10/_._" + ] + }, + "System.IO.FileSystem/4.0.1": { + "sha512": "IBErlVq5jOggAD69bg1t0pJcHaDbJbWNUZTPI96fkYWzwYbN6D9wRHMULLDd9dHsl7C2YsxXL31LMfPI1SWt8w==", + "type": "package", + "path": "System.IO.FileSystem/4.0.1", + "files": [ + "System.IO.FileSystem.4.0.1.nupkg.sha512", + "System.IO.FileSystem.nuspec", + "ThirdPartyNotices.txt", + "dotnet_library_license.txt", + "lib/MonoAndroid10/_._", + "lib/MonoTouch10/_._", + "lib/net46/System.IO.FileSystem.dll", + "lib/xamarinios10/_._", + "lib/xamarinmac20/_._", + "lib/xamarintvos10/_._", + "lib/xamarinwatchos10/_._", + "ref/MonoAndroid10/_._", + "ref/MonoTouch10/_._", + "ref/net46/System.IO.FileSystem.dll", + "ref/netstandard1.3/System.IO.FileSystem.dll", + "ref/netstandard1.3/System.IO.FileSystem.xml", + "ref/netstandard1.3/de/System.IO.FileSystem.xml", + "ref/netstandard1.3/es/System.IO.FileSystem.xml", + "ref/netstandard1.3/fr/System.IO.FileSystem.xml", + "ref/netstandard1.3/it/System.IO.FileSystem.xml", + "ref/netstandard1.3/ja/System.IO.FileSystem.xml", + "ref/netstandard1.3/ko/System.IO.FileSystem.xml", + "ref/netstandard1.3/ru/System.IO.FileSystem.xml", + "ref/netstandard1.3/zh-hans/System.IO.FileSystem.xml", + "ref/netstandard1.3/zh-hant/System.IO.FileSystem.xml", + "ref/xamarinios10/_._", + "ref/xamarinmac20/_._", + "ref/xamarintvos10/_._", + "ref/xamarinwatchos10/_._" + ] + }, + "System.IO.FileSystem.Primitives/4.0.1": { + "sha512": "kWkKD203JJKxJeE74p8aF8y4Qc9r9WQx4C0cHzHPrY3fv/L/IhWnyCHaFJ3H1QPOH6A93whlQ2vG5nHlBDvzWQ==", + "type": "package", + "path": "System.IO.FileSystem.Primitives/4.0.1", + "files": [ + "System.IO.FileSystem.Primitives.4.0.1.nupkg.sha512", + "System.IO.FileSystem.Primitives.nuspec", + "ThirdPartyNotices.txt", + "dotnet_library_license.txt", + "lib/MonoAndroid10/_._", + "lib/MonoTouch10/_._", + "lib/net46/System.IO.FileSystem.Primitives.dll", + "lib/netstandard1.3/System.IO.FileSystem.Primitives.dll", + "lib/xamarinios10/_._", + "lib/xamarinmac20/_._", + "lib/xamarintvos10/_._", + "lib/xamarinwatchos10/_._", + "ref/MonoAndroid10/_._", + "ref/MonoTouch10/_._", + "ref/net46/System.IO.FileSystem.Primitives.dll", + "ref/netstandard1.3/System.IO.FileSystem.Primitives.dll", + "ref/netstandard1.3/System.IO.FileSystem.Primitives.xml", + "ref/netstandard1.3/de/System.IO.FileSystem.Primitives.xml", + "ref/netstandard1.3/es/System.IO.FileSystem.Primitives.xml", + "ref/netstandard1.3/fr/System.IO.FileSystem.Primitives.xml", + "ref/netstandard1.3/it/System.IO.FileSystem.Primitives.xml", + "ref/netstandard1.3/ja/System.IO.FileSystem.Primitives.xml", + "ref/netstandard1.3/ko/System.IO.FileSystem.Primitives.xml", + "ref/netstandard1.3/ru/System.IO.FileSystem.Primitives.xml", + "ref/netstandard1.3/zh-hans/System.IO.FileSystem.Primitives.xml", + "ref/netstandard1.3/zh-hant/System.IO.FileSystem.Primitives.xml", + "ref/xamarinios10/_._", + "ref/xamarinmac20/_._", + "ref/xamarintvos10/_._", + "ref/xamarinwatchos10/_._" + ] + }, + "System.Linq/4.1.0": { + "sha512": "bQ0iYFOQI0nuTnt+NQADns6ucV4DUvMdwN6CbkB1yj8i7arTGiTN5eok1kQwdnnNWSDZfIUySQY+J3d5KjWn0g==", + "type": "package", + "path": "System.Linq/4.1.0", + "files": [ + "System.Linq.4.1.0.nupkg.sha512", + "System.Linq.nuspec", + "ThirdPartyNotices.txt", + "dotnet_library_license.txt", + "lib/MonoAndroid10/_._", + "lib/MonoTouch10/_._", + "lib/net45/_._", + "lib/net463/System.Linq.dll", + "lib/netcore50/System.Linq.dll", + "lib/netstandard1.6/System.Linq.dll", + "lib/portable-net45+win8+wp8+wpa81/_._", + "lib/win8/_._", + "lib/wp80/_._", + "lib/wpa81/_._", + "lib/xamarinios10/_._", + "lib/xamarinmac20/_._", + "lib/xamarintvos10/_._", + "lib/xamarinwatchos10/_._", + "ref/MonoAndroid10/_._", + "ref/MonoTouch10/_._", + "ref/net45/_._", + "ref/net463/System.Linq.dll", + "ref/netcore50/System.Linq.dll", + "ref/netcore50/System.Linq.xml", + "ref/netcore50/de/System.Linq.xml", + "ref/netcore50/es/System.Linq.xml", + "ref/netcore50/fr/System.Linq.xml", + "ref/netcore50/it/System.Linq.xml", + "ref/netcore50/ja/System.Linq.xml", + "ref/netcore50/ko/System.Linq.xml", + "ref/netcore50/ru/System.Linq.xml", + "ref/netcore50/zh-hans/System.Linq.xml", + "ref/netcore50/zh-hant/System.Linq.xml", + "ref/netstandard1.0/System.Linq.dll", + "ref/netstandard1.0/System.Linq.xml", + "ref/netstandard1.0/de/System.Linq.xml", + "ref/netstandard1.0/es/System.Linq.xml", + "ref/netstandard1.0/fr/System.Linq.xml", + "ref/netstandard1.0/it/System.Linq.xml", + "ref/netstandard1.0/ja/System.Linq.xml", + "ref/netstandard1.0/ko/System.Linq.xml", + "ref/netstandard1.0/ru/System.Linq.xml", + "ref/netstandard1.0/zh-hans/System.Linq.xml", + "ref/netstandard1.0/zh-hant/System.Linq.xml", + "ref/netstandard1.6/System.Linq.dll", + "ref/netstandard1.6/System.Linq.xml", + "ref/netstandard1.6/de/System.Linq.xml", + "ref/netstandard1.6/es/System.Linq.xml", + "ref/netstandard1.6/fr/System.Linq.xml", + "ref/netstandard1.6/it/System.Linq.xml", + "ref/netstandard1.6/ja/System.Linq.xml", + "ref/netstandard1.6/ko/System.Linq.xml", + "ref/netstandard1.6/ru/System.Linq.xml", + "ref/netstandard1.6/zh-hans/System.Linq.xml", + "ref/netstandard1.6/zh-hant/System.Linq.xml", + "ref/portable-net45+win8+wp8+wpa81/_._", + "ref/win8/_._", + "ref/wp80/_._", + "ref/wpa81/_._", + "ref/xamarinios10/_._", + "ref/xamarinmac20/_._", + "ref/xamarintvos10/_._", + "ref/xamarinwatchos10/_._" + ] + }, + "System.Linq.Expressions/4.1.0": { + "sha512": "I+y02iqkgmCAyfbqOmSDOgqdZQ5tTj80Akm5BPSS8EeB0VGWdy6X1KCoYe8Pk6pwDoAKZUOdLVxnTJcExiv5zw==", + "type": "package", + "path": "System.Linq.Expressions/4.1.0", + "files": [ + "System.Linq.Expressions.4.1.0.nupkg.sha512", + "System.Linq.Expressions.nuspec", + "ThirdPartyNotices.txt", + "dotnet_library_license.txt", + "lib/MonoAndroid10/_._", + "lib/MonoTouch10/_._", + "lib/net45/_._", + "lib/net463/System.Linq.Expressions.dll", + "lib/netcore50/System.Linq.Expressions.dll", + "lib/netstandard1.6/System.Linq.Expressions.dll", + "lib/portable-net45+win8+wp8+wpa81/_._", + "lib/win8/_._", + "lib/wp80/_._", + "lib/wpa81/_._", + "lib/xamarinios10/_._", + "lib/xamarinmac20/_._", + "lib/xamarintvos10/_._", + "lib/xamarinwatchos10/_._", + "ref/MonoAndroid10/_._", + "ref/MonoTouch10/_._", + "ref/net45/_._", + "ref/net463/System.Linq.Expressions.dll", + "ref/netcore50/System.Linq.Expressions.dll", + "ref/netcore50/System.Linq.Expressions.xml", + "ref/netcore50/de/System.Linq.Expressions.xml", + "ref/netcore50/es/System.Linq.Expressions.xml", + "ref/netcore50/fr/System.Linq.Expressions.xml", + "ref/netcore50/it/System.Linq.Expressions.xml", + "ref/netcore50/ja/System.Linq.Expressions.xml", + "ref/netcore50/ko/System.Linq.Expressions.xml", + "ref/netcore50/ru/System.Linq.Expressions.xml", + "ref/netcore50/zh-hans/System.Linq.Expressions.xml", + "ref/netcore50/zh-hant/System.Linq.Expressions.xml", + "ref/netstandard1.0/System.Linq.Expressions.dll", + "ref/netstandard1.0/System.Linq.Expressions.xml", + "ref/netstandard1.0/de/System.Linq.Expressions.xml", + "ref/netstandard1.0/es/System.Linq.Expressions.xml", + "ref/netstandard1.0/fr/System.Linq.Expressions.xml", + "ref/netstandard1.0/it/System.Linq.Expressions.xml", + "ref/netstandard1.0/ja/System.Linq.Expressions.xml", + "ref/netstandard1.0/ko/System.Linq.Expressions.xml", + "ref/netstandard1.0/ru/System.Linq.Expressions.xml", + "ref/netstandard1.0/zh-hans/System.Linq.Expressions.xml", + "ref/netstandard1.0/zh-hant/System.Linq.Expressions.xml", + "ref/netstandard1.3/System.Linq.Expressions.dll", + "ref/netstandard1.3/System.Linq.Expressions.xml", + "ref/netstandard1.3/de/System.Linq.Expressions.xml", + "ref/netstandard1.3/es/System.Linq.Expressions.xml", + "ref/netstandard1.3/fr/System.Linq.Expressions.xml", + "ref/netstandard1.3/it/System.Linq.Expressions.xml", + "ref/netstandard1.3/ja/System.Linq.Expressions.xml", + "ref/netstandard1.3/ko/System.Linq.Expressions.xml", + "ref/netstandard1.3/ru/System.Linq.Expressions.xml", + "ref/netstandard1.3/zh-hans/System.Linq.Expressions.xml", + "ref/netstandard1.3/zh-hant/System.Linq.Expressions.xml", + "ref/netstandard1.6/System.Linq.Expressions.dll", + "ref/netstandard1.6/System.Linq.Expressions.xml", + "ref/netstandard1.6/de/System.Linq.Expressions.xml", + "ref/netstandard1.6/es/System.Linq.Expressions.xml", + "ref/netstandard1.6/fr/System.Linq.Expressions.xml", + "ref/netstandard1.6/it/System.Linq.Expressions.xml", + "ref/netstandard1.6/ja/System.Linq.Expressions.xml", + "ref/netstandard1.6/ko/System.Linq.Expressions.xml", + "ref/netstandard1.6/ru/System.Linq.Expressions.xml", + "ref/netstandard1.6/zh-hans/System.Linq.Expressions.xml", + "ref/netstandard1.6/zh-hant/System.Linq.Expressions.xml", + "ref/portable-net45+win8+wp8+wpa81/_._", + "ref/win8/_._", + "ref/wp80/_._", + "ref/wpa81/_._", + "ref/xamarinios10/_._", + "ref/xamarinmac20/_._", + "ref/xamarintvos10/_._", + "ref/xamarinwatchos10/_._", + "runtimes/aot/lib/netcore50/System.Linq.Expressions.dll" + ] + }, + "System.Net.Http/4.1.0": { + "sha512": "ULq9g3SOPVuupt+Y3U+A37coXzdNisB1neFCSKzBwo182u0RDddKJF8I5+HfyXqK6OhJPgeoAwWXrbiUXuRDsg==", + "type": "package", + "path": "System.Net.Http/4.1.0", + "files": [ + "System.Net.Http.4.1.0.nupkg.sha512", + "System.Net.Http.nuspec", + "ThirdPartyNotices.txt", + "dotnet_library_license.txt", + "lib/Xamarinmac20/_._", + "lib/monoandroid10/_._", + "lib/monotouch10/_._", + "lib/net45/_._", + "lib/net46/System.Net.Http.dll", + "lib/portable-net45+win8+wpa81/_._", + "lib/win8/_._", + "lib/wpa81/_._", + "lib/xamarinios10/_._", + "lib/xamarintvos10/_._", + "lib/xamarinwatchos10/_._", + "ref/Xamarinmac20/_._", + "ref/monoandroid10/_._", + "ref/monotouch10/_._", + "ref/net45/_._", + "ref/net46/System.Net.Http.dll", + "ref/net46/System.Net.Http.xml", + "ref/net46/de/System.Net.Http.xml", + "ref/net46/es/System.Net.Http.xml", + "ref/net46/fr/System.Net.Http.xml", + "ref/net46/it/System.Net.Http.xml", + "ref/net46/ja/System.Net.Http.xml", + "ref/net46/ko/System.Net.Http.xml", + "ref/net46/ru/System.Net.Http.xml", + "ref/net46/zh-hans/System.Net.Http.xml", + "ref/net46/zh-hant/System.Net.Http.xml", + "ref/netcore50/System.Net.Http.dll", + "ref/netcore50/System.Net.Http.xml", + "ref/netcore50/de/System.Net.Http.xml", + "ref/netcore50/es/System.Net.Http.xml", + "ref/netcore50/fr/System.Net.Http.xml", + "ref/netcore50/it/System.Net.Http.xml", + "ref/netcore50/ja/System.Net.Http.xml", + "ref/netcore50/ko/System.Net.Http.xml", + "ref/netcore50/ru/System.Net.Http.xml", + "ref/netcore50/zh-hans/System.Net.Http.xml", + "ref/netcore50/zh-hant/System.Net.Http.xml", + "ref/netstandard1.1/System.Net.Http.dll", + "ref/netstandard1.1/System.Net.Http.xml", + "ref/netstandard1.1/de/System.Net.Http.xml", + "ref/netstandard1.1/es/System.Net.Http.xml", + "ref/netstandard1.1/fr/System.Net.Http.xml", + "ref/netstandard1.1/it/System.Net.Http.xml", + "ref/netstandard1.1/ja/System.Net.Http.xml", + "ref/netstandard1.1/ko/System.Net.Http.xml", + "ref/netstandard1.1/ru/System.Net.Http.xml", + "ref/netstandard1.1/zh-hans/System.Net.Http.xml", + "ref/netstandard1.1/zh-hant/System.Net.Http.xml", + "ref/netstandard1.3/System.Net.Http.dll", + "ref/netstandard1.3/System.Net.Http.xml", + "ref/netstandard1.3/de/System.Net.Http.xml", + "ref/netstandard1.3/es/System.Net.Http.xml", + "ref/netstandard1.3/fr/System.Net.Http.xml", + "ref/netstandard1.3/it/System.Net.Http.xml", + "ref/netstandard1.3/ja/System.Net.Http.xml", + "ref/netstandard1.3/ko/System.Net.Http.xml", + "ref/netstandard1.3/ru/System.Net.Http.xml", + "ref/netstandard1.3/zh-hans/System.Net.Http.xml", + "ref/netstandard1.3/zh-hant/System.Net.Http.xml", + "ref/portable-net45+win8+wpa81/_._", + "ref/win8/_._", + "ref/wpa81/_._", + "ref/xamarinios10/_._", + "ref/xamarintvos10/_._", + "ref/xamarinwatchos10/_._", + "runtimes/unix/lib/netstandard1.6/System.Net.Http.dll", + "runtimes/win/lib/net46/System.Net.Http.dll", + "runtimes/win/lib/netcore50/System.Net.Http.dll", + "runtimes/win/lib/netstandard1.3/System.Net.Http.dll" + ] + }, + "System.Net.Primitives/4.0.11": { + "sha512": "hVvfl4405DRjA2408luZekbPhplJK03j2Y2lSfMlny7GHXlkByw1iLnc9mgKW0GdQn73vvMcWrWewAhylXA4Nw==", + "type": "package", + "path": "System.Net.Primitives/4.0.11", + "files": [ + "System.Net.Primitives.4.0.11.nupkg.sha512", + "System.Net.Primitives.nuspec", + "ThirdPartyNotices.txt", + "dotnet_library_license.txt", + "lib/MonoAndroid10/_._", + "lib/MonoTouch10/_._", + "lib/net45/_._", + "lib/portable-net45+win8+wp8+wpa81/_._", + "lib/win8/_._", + "lib/wp80/_._", + "lib/wpa81/_._", + "lib/xamarinios10/_._", + "lib/xamarinmac20/_._", + "lib/xamarintvos10/_._", + "lib/xamarinwatchos10/_._", + "ref/MonoAndroid10/_._", + "ref/MonoTouch10/_._", + "ref/net45/_._", + "ref/netcore50/System.Net.Primitives.dll", + "ref/netcore50/System.Net.Primitives.xml", + "ref/netcore50/de/System.Net.Primitives.xml", + "ref/netcore50/es/System.Net.Primitives.xml", + "ref/netcore50/fr/System.Net.Primitives.xml", + "ref/netcore50/it/System.Net.Primitives.xml", + "ref/netcore50/ja/System.Net.Primitives.xml", + "ref/netcore50/ko/System.Net.Primitives.xml", + "ref/netcore50/ru/System.Net.Primitives.xml", + "ref/netcore50/zh-hans/System.Net.Primitives.xml", + "ref/netcore50/zh-hant/System.Net.Primitives.xml", + "ref/netstandard1.0/System.Net.Primitives.dll", + "ref/netstandard1.0/System.Net.Primitives.xml", + "ref/netstandard1.0/de/System.Net.Primitives.xml", + "ref/netstandard1.0/es/System.Net.Primitives.xml", + "ref/netstandard1.0/fr/System.Net.Primitives.xml", + "ref/netstandard1.0/it/System.Net.Primitives.xml", + "ref/netstandard1.0/ja/System.Net.Primitives.xml", + "ref/netstandard1.0/ko/System.Net.Primitives.xml", + "ref/netstandard1.0/ru/System.Net.Primitives.xml", + "ref/netstandard1.0/zh-hans/System.Net.Primitives.xml", + "ref/netstandard1.0/zh-hant/System.Net.Primitives.xml", + "ref/netstandard1.1/System.Net.Primitives.dll", + "ref/netstandard1.1/System.Net.Primitives.xml", + "ref/netstandard1.1/de/System.Net.Primitives.xml", + "ref/netstandard1.1/es/System.Net.Primitives.xml", + "ref/netstandard1.1/fr/System.Net.Primitives.xml", + "ref/netstandard1.1/it/System.Net.Primitives.xml", + "ref/netstandard1.1/ja/System.Net.Primitives.xml", + "ref/netstandard1.1/ko/System.Net.Primitives.xml", + "ref/netstandard1.1/ru/System.Net.Primitives.xml", + "ref/netstandard1.1/zh-hans/System.Net.Primitives.xml", + "ref/netstandard1.1/zh-hant/System.Net.Primitives.xml", + "ref/netstandard1.3/System.Net.Primitives.dll", + "ref/netstandard1.3/System.Net.Primitives.xml", + "ref/netstandard1.3/de/System.Net.Primitives.xml", + "ref/netstandard1.3/es/System.Net.Primitives.xml", + "ref/netstandard1.3/fr/System.Net.Primitives.xml", + "ref/netstandard1.3/it/System.Net.Primitives.xml", + "ref/netstandard1.3/ja/System.Net.Primitives.xml", + "ref/netstandard1.3/ko/System.Net.Primitives.xml", + "ref/netstandard1.3/ru/System.Net.Primitives.xml", + "ref/netstandard1.3/zh-hans/System.Net.Primitives.xml", + "ref/netstandard1.3/zh-hant/System.Net.Primitives.xml", + "ref/portable-net45+win8+wp8+wpa81/_._", + "ref/win8/_._", + "ref/wp80/_._", + "ref/wpa81/_._", + "ref/xamarinios10/_._", + "ref/xamarinmac20/_._", + "ref/xamarintvos10/_._", + "ref/xamarinwatchos10/_._" + ] + }, + "System.Net.Requests/4.0.11": { + "sha512": "e7FQ55FBFfztR50qocJdMcwxivKsZw1vcxUXILwdCd1YuGv734JIJuW/jX66/VStDfary3/2+G36A8a3AInpfg==", + "type": "package", + "path": "System.Net.Requests/4.0.11", + "files": [ + "System.Net.Requests.4.0.11.nupkg.sha512", + "System.Net.Requests.nuspec", + "ThirdPartyNotices.txt", + "dotnet_library_license.txt", + "lib/MonoAndroid10/_._", + "lib/MonoTouch10/_._", + "lib/net45/_._", + "lib/portable-net45+win8+wp8+wpa81/_._", + "lib/win8/_._", + "lib/wp80/_._", + "lib/wpa81/_._", + "lib/xamarinios10/_._", + "lib/xamarinmac20/_._", + "lib/xamarintvos10/_._", + "lib/xamarinwatchos10/_._", + "ref/MonoAndroid10/_._", + "ref/MonoTouch10/_._", + "ref/net45/_._", + "ref/net46/_._", + "ref/netcore50/System.Net.Requests.dll", + "ref/netcore50/System.Net.Requests.xml", + "ref/netcore50/de/System.Net.Requests.xml", + "ref/netcore50/es/System.Net.Requests.xml", + "ref/netcore50/fr/System.Net.Requests.xml", + "ref/netcore50/it/System.Net.Requests.xml", + "ref/netcore50/ja/System.Net.Requests.xml", + "ref/netcore50/ko/System.Net.Requests.xml", + "ref/netcore50/ru/System.Net.Requests.xml", + "ref/netcore50/zh-hans/System.Net.Requests.xml", + "ref/netcore50/zh-hant/System.Net.Requests.xml", + "ref/netstandard1.0/System.Net.Requests.dll", + "ref/netstandard1.0/System.Net.Requests.xml", + "ref/netstandard1.0/de/System.Net.Requests.xml", + "ref/netstandard1.0/es/System.Net.Requests.xml", + "ref/netstandard1.0/fr/System.Net.Requests.xml", + "ref/netstandard1.0/it/System.Net.Requests.xml", + "ref/netstandard1.0/ja/System.Net.Requests.xml", + "ref/netstandard1.0/ko/System.Net.Requests.xml", + "ref/netstandard1.0/ru/System.Net.Requests.xml", + "ref/netstandard1.0/zh-hans/System.Net.Requests.xml", + "ref/netstandard1.0/zh-hant/System.Net.Requests.xml", + "ref/netstandard1.1/System.Net.Requests.dll", + "ref/netstandard1.1/System.Net.Requests.xml", + "ref/netstandard1.1/de/System.Net.Requests.xml", + "ref/netstandard1.1/es/System.Net.Requests.xml", + "ref/netstandard1.1/fr/System.Net.Requests.xml", + "ref/netstandard1.1/it/System.Net.Requests.xml", + "ref/netstandard1.1/ja/System.Net.Requests.xml", + "ref/netstandard1.1/ko/System.Net.Requests.xml", + "ref/netstandard1.1/ru/System.Net.Requests.xml", + "ref/netstandard1.1/zh-hans/System.Net.Requests.xml", + "ref/netstandard1.1/zh-hant/System.Net.Requests.xml", + "ref/netstandard1.3/System.Net.Requests.dll", + "ref/netstandard1.3/System.Net.Requests.xml", + "ref/netstandard1.3/de/System.Net.Requests.xml", + "ref/netstandard1.3/es/System.Net.Requests.xml", + "ref/netstandard1.3/fr/System.Net.Requests.xml", + "ref/netstandard1.3/it/System.Net.Requests.xml", + "ref/netstandard1.3/ja/System.Net.Requests.xml", + "ref/netstandard1.3/ko/System.Net.Requests.xml", + "ref/netstandard1.3/ru/System.Net.Requests.xml", + "ref/netstandard1.3/zh-hans/System.Net.Requests.xml", + "ref/netstandard1.3/zh-hant/System.Net.Requests.xml", + "ref/portable-net45+win8+wp8+wpa81/_._", + "ref/win8/_._", + "ref/wp80/_._", + "ref/wpa81/_._", + "ref/xamarinios10/_._", + "ref/xamarinmac20/_._", + "ref/xamarintvos10/_._", + "ref/xamarinwatchos10/_._", + "runtimes/unix/lib/netstandard1.3/System.Net.Requests.dll", + "runtimes/win/lib/net46/_._", + "runtimes/win/lib/netstandard1.3/System.Net.Requests.dll" + ] + }, + "System.Net.Sockets/4.1.0": { + "sha512": "xAz0N3dAV/aR/9g8r0Y5oEqU1JRsz29F5EGb/WVHmX3jVSLqi2/92M5hTad2aNWovruXrJpJtgZ9fccPMG9uSw==", + "type": "package", + "path": "System.Net.Sockets/4.1.0", + "files": [ + "System.Net.Sockets.4.1.0.nupkg.sha512", + "System.Net.Sockets.nuspec", + "ThirdPartyNotices.txt", + "dotnet_library_license.txt", + "lib/MonoAndroid10/_._", + "lib/MonoTouch10/_._", + "lib/net46/System.Net.Sockets.dll", + "lib/xamarinios10/_._", + "lib/xamarinmac20/_._", + "lib/xamarintvos10/_._", + "lib/xamarinwatchos10/_._", + "ref/MonoAndroid10/_._", + "ref/MonoTouch10/_._", + "ref/net46/System.Net.Sockets.dll", + "ref/netstandard1.3/System.Net.Sockets.dll", + "ref/netstandard1.3/System.Net.Sockets.xml", + "ref/netstandard1.3/de/System.Net.Sockets.xml", + "ref/netstandard1.3/es/System.Net.Sockets.xml", + "ref/netstandard1.3/fr/System.Net.Sockets.xml", + "ref/netstandard1.3/it/System.Net.Sockets.xml", + "ref/netstandard1.3/ja/System.Net.Sockets.xml", + "ref/netstandard1.3/ko/System.Net.Sockets.xml", + "ref/netstandard1.3/ru/System.Net.Sockets.xml", + "ref/netstandard1.3/zh-hans/System.Net.Sockets.xml", + "ref/netstandard1.3/zh-hant/System.Net.Sockets.xml", + "ref/xamarinios10/_._", + "ref/xamarinmac20/_._", + "ref/xamarintvos10/_._", + "ref/xamarinwatchos10/_._" + ] + }, + "System.Net.WebHeaderCollection/4.0.1": { + "sha512": "Hs0P/pYpYfmKlS+C3djfbMKZhnVhQeZn0R2ETB4a6DZ0lvj3ij+sRtJ4VGXEVRa08DRhKhRlm3Rz3O+f62qzTQ==", + "type": "package", + "path": "System.Net.WebHeaderCollection/4.0.1", + "files": [ + "System.Net.WebHeaderCollection.4.0.1.nupkg.sha512", + "System.Net.WebHeaderCollection.nuspec", + "ThirdPartyNotices.txt", + "dotnet_library_license.txt", + "lib/MonoAndroid10/_._", + "lib/MonoTouch10/_._", + "lib/net46/_._", + "lib/netstandard1.3/System.Net.WebHeaderCollection.dll", + "lib/xamarinios10/_._", + "lib/xamarinmac20/_._", + "lib/xamarintvos10/_._", + "lib/xamarinwatchos10/_._", + "ref/MonoAndroid10/_._", + "ref/MonoTouch10/_._", + "ref/net46/_._", + "ref/netstandard1.3/System.Net.WebHeaderCollection.dll", + "ref/netstandard1.3/System.Net.WebHeaderCollection.xml", + "ref/netstandard1.3/de/System.Net.WebHeaderCollection.xml", + "ref/netstandard1.3/es/System.Net.WebHeaderCollection.xml", + "ref/netstandard1.3/fr/System.Net.WebHeaderCollection.xml", + "ref/netstandard1.3/it/System.Net.WebHeaderCollection.xml", + "ref/netstandard1.3/ja/System.Net.WebHeaderCollection.xml", + "ref/netstandard1.3/ko/System.Net.WebHeaderCollection.xml", + "ref/netstandard1.3/ru/System.Net.WebHeaderCollection.xml", + "ref/netstandard1.3/zh-hans/System.Net.WebHeaderCollection.xml", + "ref/netstandard1.3/zh-hant/System.Net.WebHeaderCollection.xml", + "ref/xamarinios10/_._", + "ref/xamarinmac20/_._", + "ref/xamarintvos10/_._", + "ref/xamarinwatchos10/_._" + ] + }, + "System.ObjectModel/4.0.12": { + "sha512": "tAgJM1xt3ytyMoW4qn4wIqgJYm7L7TShRZG4+Q4Qsi2PCcj96pXN7nRywS9KkB3p/xDUjc2HSwP9SROyPYDYKQ==", + "type": "package", + "path": "System.ObjectModel/4.0.12", + "files": [ + "System.ObjectModel.4.0.12.nupkg.sha512", + "System.ObjectModel.nuspec", + "ThirdPartyNotices.txt", + "dotnet_library_license.txt", + "lib/MonoAndroid10/_._", + "lib/MonoTouch10/_._", + "lib/net45/_._", + "lib/netcore50/System.ObjectModel.dll", + "lib/netstandard1.3/System.ObjectModel.dll", + "lib/portable-net45+win8+wp8+wpa81/_._", + "lib/win8/_._", + "lib/wp80/_._", + "lib/wpa81/_._", + "lib/xamarinios10/_._", + "lib/xamarinmac20/_._", + "lib/xamarintvos10/_._", + "lib/xamarinwatchos10/_._", + "ref/MonoAndroid10/_._", + "ref/MonoTouch10/_._", + "ref/net45/_._", + "ref/netcore50/System.ObjectModel.dll", + "ref/netcore50/System.ObjectModel.xml", + "ref/netcore50/de/System.ObjectModel.xml", + "ref/netcore50/es/System.ObjectModel.xml", + "ref/netcore50/fr/System.ObjectModel.xml", + "ref/netcore50/it/System.ObjectModel.xml", + "ref/netcore50/ja/System.ObjectModel.xml", + "ref/netcore50/ko/System.ObjectModel.xml", + "ref/netcore50/ru/System.ObjectModel.xml", + "ref/netcore50/zh-hans/System.ObjectModel.xml", + "ref/netcore50/zh-hant/System.ObjectModel.xml", + "ref/netstandard1.0/System.ObjectModel.dll", + "ref/netstandard1.0/System.ObjectModel.xml", + "ref/netstandard1.0/de/System.ObjectModel.xml", + "ref/netstandard1.0/es/System.ObjectModel.xml", + "ref/netstandard1.0/fr/System.ObjectModel.xml", + "ref/netstandard1.0/it/System.ObjectModel.xml", + "ref/netstandard1.0/ja/System.ObjectModel.xml", + "ref/netstandard1.0/ko/System.ObjectModel.xml", + "ref/netstandard1.0/ru/System.ObjectModel.xml", + "ref/netstandard1.0/zh-hans/System.ObjectModel.xml", + "ref/netstandard1.0/zh-hant/System.ObjectModel.xml", + "ref/netstandard1.3/System.ObjectModel.dll", + "ref/netstandard1.3/System.ObjectModel.xml", + "ref/netstandard1.3/de/System.ObjectModel.xml", + "ref/netstandard1.3/es/System.ObjectModel.xml", + "ref/netstandard1.3/fr/System.ObjectModel.xml", + "ref/netstandard1.3/it/System.ObjectModel.xml", + "ref/netstandard1.3/ja/System.ObjectModel.xml", + "ref/netstandard1.3/ko/System.ObjectModel.xml", + "ref/netstandard1.3/ru/System.ObjectModel.xml", + "ref/netstandard1.3/zh-hans/System.ObjectModel.xml", + "ref/netstandard1.3/zh-hant/System.ObjectModel.xml", + "ref/portable-net45+win8+wp8+wpa81/_._", + "ref/win8/_._", + "ref/wp80/_._", + "ref/wpa81/_._", + "ref/xamarinios10/_._", + "ref/xamarinmac20/_._", + "ref/xamarintvos10/_._", + "ref/xamarinwatchos10/_._" + ] + }, + "System.Reflection/4.1.0": { + "sha512": "JCKANJ0TI7kzoQzuwB/OoJANy1Lg338B6+JVacPl4TpUwi3cReg3nMLplMq2uqYfHFQpKIlHAUVAJlImZz/4ng==", + "type": "package", + "path": "System.Reflection/4.1.0", + "files": [ + "System.Reflection.4.1.0.nupkg.sha512", + "System.Reflection.nuspec", + "ThirdPartyNotices.txt", + "dotnet_library_license.txt", + "lib/MonoAndroid10/_._", + "lib/MonoTouch10/_._", + "lib/net45/_._", + "lib/net462/System.Reflection.dll", + "lib/portable-net45+win8+wp8+wpa81/_._", + "lib/win8/_._", + "lib/wp80/_._", + "lib/wpa81/_._", + "lib/xamarinios10/_._", + "lib/xamarinmac20/_._", + "lib/xamarintvos10/_._", + "lib/xamarinwatchos10/_._", + "ref/MonoAndroid10/_._", + "ref/MonoTouch10/_._", + "ref/net45/_._", + "ref/net462/System.Reflection.dll", + "ref/netcore50/System.Reflection.dll", + "ref/netcore50/System.Reflection.xml", + "ref/netcore50/de/System.Reflection.xml", + "ref/netcore50/es/System.Reflection.xml", + "ref/netcore50/fr/System.Reflection.xml", + "ref/netcore50/it/System.Reflection.xml", + "ref/netcore50/ja/System.Reflection.xml", + "ref/netcore50/ko/System.Reflection.xml", + "ref/netcore50/ru/System.Reflection.xml", + "ref/netcore50/zh-hans/System.Reflection.xml", + "ref/netcore50/zh-hant/System.Reflection.xml", + "ref/netstandard1.0/System.Reflection.dll", + "ref/netstandard1.0/System.Reflection.xml", + "ref/netstandard1.0/de/System.Reflection.xml", + "ref/netstandard1.0/es/System.Reflection.xml", + "ref/netstandard1.0/fr/System.Reflection.xml", + "ref/netstandard1.0/it/System.Reflection.xml", + "ref/netstandard1.0/ja/System.Reflection.xml", + "ref/netstandard1.0/ko/System.Reflection.xml", + "ref/netstandard1.0/ru/System.Reflection.xml", + "ref/netstandard1.0/zh-hans/System.Reflection.xml", + "ref/netstandard1.0/zh-hant/System.Reflection.xml", + "ref/netstandard1.3/System.Reflection.dll", + "ref/netstandard1.3/System.Reflection.xml", + "ref/netstandard1.3/de/System.Reflection.xml", + "ref/netstandard1.3/es/System.Reflection.xml", + "ref/netstandard1.3/fr/System.Reflection.xml", + "ref/netstandard1.3/it/System.Reflection.xml", + "ref/netstandard1.3/ja/System.Reflection.xml", + "ref/netstandard1.3/ko/System.Reflection.xml", + "ref/netstandard1.3/ru/System.Reflection.xml", + "ref/netstandard1.3/zh-hans/System.Reflection.xml", + "ref/netstandard1.3/zh-hant/System.Reflection.xml", + "ref/netstandard1.5/System.Reflection.dll", + "ref/netstandard1.5/System.Reflection.xml", + "ref/netstandard1.5/de/System.Reflection.xml", + "ref/netstandard1.5/es/System.Reflection.xml", + "ref/netstandard1.5/fr/System.Reflection.xml", + "ref/netstandard1.5/it/System.Reflection.xml", + "ref/netstandard1.5/ja/System.Reflection.xml", + "ref/netstandard1.5/ko/System.Reflection.xml", + "ref/netstandard1.5/ru/System.Reflection.xml", + "ref/netstandard1.5/zh-hans/System.Reflection.xml", + "ref/netstandard1.5/zh-hant/System.Reflection.xml", + "ref/portable-net45+win8+wp8+wpa81/_._", + "ref/win8/_._", + "ref/wp80/_._", + "ref/wpa81/_._", + "ref/xamarinios10/_._", + "ref/xamarinmac20/_._", + "ref/xamarintvos10/_._", + "ref/xamarinwatchos10/_._" + ] + }, + "System.Reflection.Emit/4.0.1": { + "sha512": "P2wqAj72fFjpP6wb9nSfDqNBMab+2ovzSDzUZK7MVIm54tBJEPr9jWfSjjoTpPwj1LeKcmX3vr0ttyjSSFM47g==", + "type": "package", + "path": "System.Reflection.Emit/4.0.1", + "files": [ + "System.Reflection.Emit.4.0.1.nupkg.sha512", + "System.Reflection.Emit.nuspec", + "ThirdPartyNotices.txt", + "dotnet_library_license.txt", + "lib/MonoAndroid10/_._", + "lib/net45/_._", + "lib/netcore50/System.Reflection.Emit.dll", + "lib/netstandard1.3/System.Reflection.Emit.dll", + "lib/xamarinmac20/_._", + "ref/MonoAndroid10/_._", + "ref/net45/_._", + "ref/netstandard1.1/System.Reflection.Emit.dll", + "ref/netstandard1.1/System.Reflection.Emit.xml", + "ref/netstandard1.1/de/System.Reflection.Emit.xml", + "ref/netstandard1.1/es/System.Reflection.Emit.xml", + "ref/netstandard1.1/fr/System.Reflection.Emit.xml", + "ref/netstandard1.1/it/System.Reflection.Emit.xml", + "ref/netstandard1.1/ja/System.Reflection.Emit.xml", + "ref/netstandard1.1/ko/System.Reflection.Emit.xml", + "ref/netstandard1.1/ru/System.Reflection.Emit.xml", + "ref/netstandard1.1/zh-hans/System.Reflection.Emit.xml", + "ref/netstandard1.1/zh-hant/System.Reflection.Emit.xml", + "ref/xamarinmac20/_._" + ] + }, + "System.Reflection.Emit.ILGeneration/4.0.1": { + "sha512": "Ov6dU8Bu15Bc7zuqttgHF12J5lwSWyTf1S+FJouUXVMSqImLZzYaQ+vRr1rQ0OZ0HqsrwWl4dsKHELckQkVpgA==", + "type": "package", + "path": "System.Reflection.Emit.ILGeneration/4.0.1", + "files": [ + "System.Reflection.Emit.ILGeneration.4.0.1.nupkg.sha512", + "System.Reflection.Emit.ILGeneration.nuspec", + "ThirdPartyNotices.txt", + "dotnet_library_license.txt", + "lib/net45/_._", + "lib/netcore50/System.Reflection.Emit.ILGeneration.dll", + "lib/netstandard1.3/System.Reflection.Emit.ILGeneration.dll", + "lib/portable-net45+wp8/_._", + "lib/wp80/_._", + "ref/net45/_._", + "ref/netstandard1.0/System.Reflection.Emit.ILGeneration.dll", + "ref/netstandard1.0/System.Reflection.Emit.ILGeneration.xml", + "ref/netstandard1.0/de/System.Reflection.Emit.ILGeneration.xml", + "ref/netstandard1.0/es/System.Reflection.Emit.ILGeneration.xml", + "ref/netstandard1.0/fr/System.Reflection.Emit.ILGeneration.xml", + "ref/netstandard1.0/it/System.Reflection.Emit.ILGeneration.xml", + "ref/netstandard1.0/ja/System.Reflection.Emit.ILGeneration.xml", + "ref/netstandard1.0/ko/System.Reflection.Emit.ILGeneration.xml", + "ref/netstandard1.0/ru/System.Reflection.Emit.ILGeneration.xml", + "ref/netstandard1.0/zh-hans/System.Reflection.Emit.ILGeneration.xml", + "ref/netstandard1.0/zh-hant/System.Reflection.Emit.ILGeneration.xml", + "ref/portable-net45+wp8/_._", + "ref/wp80/_._", + "runtimes/aot/lib/netcore50/_._" + ] + }, + "System.Reflection.Emit.Lightweight/4.0.1": { + "sha512": "sSzHHXueZ5Uh0OLpUQprhr+ZYJrLPA2Cmr4gn0wj9+FftNKXx8RIMKvO9qnjk2ebPYUjZ+F2ulGdPOsvj+MEjA==", + "type": "package", + "path": "System.Reflection.Emit.Lightweight/4.0.1", + "files": [ + "System.Reflection.Emit.Lightweight.4.0.1.nupkg.sha512", + "System.Reflection.Emit.Lightweight.nuspec", + "ThirdPartyNotices.txt", + "dotnet_library_license.txt", + "lib/net45/_._", + "lib/netcore50/System.Reflection.Emit.Lightweight.dll", + "lib/netstandard1.3/System.Reflection.Emit.Lightweight.dll", + "lib/portable-net45+wp8/_._", + "lib/wp80/_._", + "ref/net45/_._", + "ref/netstandard1.0/System.Reflection.Emit.Lightweight.dll", + "ref/netstandard1.0/System.Reflection.Emit.Lightweight.xml", + "ref/netstandard1.0/de/System.Reflection.Emit.Lightweight.xml", + "ref/netstandard1.0/es/System.Reflection.Emit.Lightweight.xml", + "ref/netstandard1.0/fr/System.Reflection.Emit.Lightweight.xml", + "ref/netstandard1.0/it/System.Reflection.Emit.Lightweight.xml", + "ref/netstandard1.0/ja/System.Reflection.Emit.Lightweight.xml", + "ref/netstandard1.0/ko/System.Reflection.Emit.Lightweight.xml", + "ref/netstandard1.0/ru/System.Reflection.Emit.Lightweight.xml", + "ref/netstandard1.0/zh-hans/System.Reflection.Emit.Lightweight.xml", + "ref/netstandard1.0/zh-hant/System.Reflection.Emit.Lightweight.xml", + "ref/portable-net45+wp8/_._", + "ref/wp80/_._", + "runtimes/aot/lib/netcore50/_._" + ] + }, + "System.Reflection.Extensions/4.0.1": { + "sha512": "GYrtRsZcMuHF3sbmRHfMYpvxZoIN2bQGrYGerUiWLEkqdEUQZhH3TRSaC/oI4wO0II1RKBPlpIa1TOMxIcOOzQ==", + "type": "package", + "path": "System.Reflection.Extensions/4.0.1", + "files": [ + "System.Reflection.Extensions.4.0.1.nupkg.sha512", + "System.Reflection.Extensions.nuspec", + "ThirdPartyNotices.txt", + "dotnet_library_license.txt", + "lib/MonoAndroid10/_._", + "lib/MonoTouch10/_._", + "lib/net45/_._", + "lib/portable-net45+win8+wp8+wpa81/_._", + "lib/win8/_._", + "lib/wp80/_._", + "lib/wpa81/_._", + "lib/xamarinios10/_._", + "lib/xamarinmac20/_._", + "lib/xamarintvos10/_._", + "lib/xamarinwatchos10/_._", + "ref/MonoAndroid10/_._", + "ref/MonoTouch10/_._", + "ref/net45/_._", + "ref/netcore50/System.Reflection.Extensions.dll", + "ref/netcore50/System.Reflection.Extensions.xml", + "ref/netcore50/de/System.Reflection.Extensions.xml", + "ref/netcore50/es/System.Reflection.Extensions.xml", + "ref/netcore50/fr/System.Reflection.Extensions.xml", + "ref/netcore50/it/System.Reflection.Extensions.xml", + "ref/netcore50/ja/System.Reflection.Extensions.xml", + "ref/netcore50/ko/System.Reflection.Extensions.xml", + "ref/netcore50/ru/System.Reflection.Extensions.xml", + "ref/netcore50/zh-hans/System.Reflection.Extensions.xml", + "ref/netcore50/zh-hant/System.Reflection.Extensions.xml", + "ref/netstandard1.0/System.Reflection.Extensions.dll", + "ref/netstandard1.0/System.Reflection.Extensions.xml", + "ref/netstandard1.0/de/System.Reflection.Extensions.xml", + "ref/netstandard1.0/es/System.Reflection.Extensions.xml", + "ref/netstandard1.0/fr/System.Reflection.Extensions.xml", + "ref/netstandard1.0/it/System.Reflection.Extensions.xml", + "ref/netstandard1.0/ja/System.Reflection.Extensions.xml", + "ref/netstandard1.0/ko/System.Reflection.Extensions.xml", + "ref/netstandard1.0/ru/System.Reflection.Extensions.xml", + "ref/netstandard1.0/zh-hans/System.Reflection.Extensions.xml", + "ref/netstandard1.0/zh-hant/System.Reflection.Extensions.xml", + "ref/portable-net45+win8+wp8+wpa81/_._", + "ref/win8/_._", + "ref/wp80/_._", + "ref/wpa81/_._", + "ref/xamarinios10/_._", + "ref/xamarinmac20/_._", + "ref/xamarintvos10/_._", + "ref/xamarinwatchos10/_._" + ] + }, + "System.Reflection.Primitives/4.0.1": { + "sha512": "4inTox4wTBaDhB7V3mPvp9XlCbeGYWVEM9/fXALd52vNEAVisc1BoVWQPuUuD0Ga//dNbA/WeMy9u9mzLxGTHQ==", + "type": "package", + "path": "System.Reflection.Primitives/4.0.1", + "files": [ + "System.Reflection.Primitives.4.0.1.nupkg.sha512", + "System.Reflection.Primitives.nuspec", + "ThirdPartyNotices.txt", + "dotnet_library_license.txt", + "lib/MonoAndroid10/_._", + "lib/MonoTouch10/_._", + "lib/net45/_._", + "lib/portable-net45+win8+wp8+wpa81/_._", + "lib/win8/_._", + "lib/wp80/_._", + "lib/wpa81/_._", + "lib/xamarinios10/_._", + "lib/xamarinmac20/_._", + "lib/xamarintvos10/_._", + "lib/xamarinwatchos10/_._", + "ref/MonoAndroid10/_._", + "ref/MonoTouch10/_._", + "ref/net45/_._", + "ref/netcore50/System.Reflection.Primitives.dll", + "ref/netcore50/System.Reflection.Primitives.xml", + "ref/netcore50/de/System.Reflection.Primitives.xml", + "ref/netcore50/es/System.Reflection.Primitives.xml", + "ref/netcore50/fr/System.Reflection.Primitives.xml", + "ref/netcore50/it/System.Reflection.Primitives.xml", + "ref/netcore50/ja/System.Reflection.Primitives.xml", + "ref/netcore50/ko/System.Reflection.Primitives.xml", + "ref/netcore50/ru/System.Reflection.Primitives.xml", + "ref/netcore50/zh-hans/System.Reflection.Primitives.xml", + "ref/netcore50/zh-hant/System.Reflection.Primitives.xml", + "ref/netstandard1.0/System.Reflection.Primitives.dll", + "ref/netstandard1.0/System.Reflection.Primitives.xml", + "ref/netstandard1.0/de/System.Reflection.Primitives.xml", + "ref/netstandard1.0/es/System.Reflection.Primitives.xml", + "ref/netstandard1.0/fr/System.Reflection.Primitives.xml", + "ref/netstandard1.0/it/System.Reflection.Primitives.xml", + "ref/netstandard1.0/ja/System.Reflection.Primitives.xml", + "ref/netstandard1.0/ko/System.Reflection.Primitives.xml", + "ref/netstandard1.0/ru/System.Reflection.Primitives.xml", + "ref/netstandard1.0/zh-hans/System.Reflection.Primitives.xml", + "ref/netstandard1.0/zh-hant/System.Reflection.Primitives.xml", + "ref/portable-net45+win8+wp8+wpa81/_._", + "ref/win8/_._", + "ref/wp80/_._", + "ref/wpa81/_._", + "ref/xamarinios10/_._", + "ref/xamarinmac20/_._", + "ref/xamarintvos10/_._", + "ref/xamarinwatchos10/_._" + ] + }, + "System.Reflection.TypeExtensions/4.1.0": { + "sha512": "tsQ/ptQ3H5FYfON8lL4MxRk/8kFyE0A+tGPXmVP967cT/gzLHYxIejIYSxp4JmIeFHVP78g/F2FE1mUUTbDtrg==", + "type": "package", + "path": "System.Reflection.TypeExtensions/4.1.0", + "files": [ + "System.Reflection.TypeExtensions.4.1.0.nupkg.sha512", + "System.Reflection.TypeExtensions.nuspec", + "ThirdPartyNotices.txt", + "dotnet_library_license.txt", + "lib/MonoAndroid10/_._", + "lib/MonoTouch10/_._", + "lib/net46/System.Reflection.TypeExtensions.dll", + "lib/net462/System.Reflection.TypeExtensions.dll", + "lib/netcore50/System.Reflection.TypeExtensions.dll", + "lib/netstandard1.5/System.Reflection.TypeExtensions.dll", + "lib/xamarinios10/_._", + "lib/xamarinmac20/_._", + "lib/xamarintvos10/_._", + "lib/xamarinwatchos10/_._", + "ref/MonoAndroid10/_._", + "ref/MonoTouch10/_._", + "ref/net46/System.Reflection.TypeExtensions.dll", + "ref/net462/System.Reflection.TypeExtensions.dll", + "ref/netstandard1.3/System.Reflection.TypeExtensions.dll", + "ref/netstandard1.3/System.Reflection.TypeExtensions.xml", + "ref/netstandard1.3/de/System.Reflection.TypeExtensions.xml", + "ref/netstandard1.3/es/System.Reflection.TypeExtensions.xml", + "ref/netstandard1.3/fr/System.Reflection.TypeExtensions.xml", + "ref/netstandard1.3/it/System.Reflection.TypeExtensions.xml", + "ref/netstandard1.3/ja/System.Reflection.TypeExtensions.xml", + "ref/netstandard1.3/ko/System.Reflection.TypeExtensions.xml", + "ref/netstandard1.3/ru/System.Reflection.TypeExtensions.xml", + "ref/netstandard1.3/zh-hans/System.Reflection.TypeExtensions.xml", + "ref/netstandard1.3/zh-hant/System.Reflection.TypeExtensions.xml", + "ref/netstandard1.5/System.Reflection.TypeExtensions.dll", + "ref/netstandard1.5/System.Reflection.TypeExtensions.xml", + "ref/netstandard1.5/de/System.Reflection.TypeExtensions.xml", + "ref/netstandard1.5/es/System.Reflection.TypeExtensions.xml", + "ref/netstandard1.5/fr/System.Reflection.TypeExtensions.xml", + "ref/netstandard1.5/it/System.Reflection.TypeExtensions.xml", + "ref/netstandard1.5/ja/System.Reflection.TypeExtensions.xml", + "ref/netstandard1.5/ko/System.Reflection.TypeExtensions.xml", + "ref/netstandard1.5/ru/System.Reflection.TypeExtensions.xml", + "ref/netstandard1.5/zh-hans/System.Reflection.TypeExtensions.xml", + "ref/netstandard1.5/zh-hant/System.Reflection.TypeExtensions.xml", + "ref/xamarinios10/_._", + "ref/xamarinmac20/_._", + "ref/xamarintvos10/_._", + "ref/xamarinwatchos10/_._", + "runtimes/aot/lib/netcore50/System.Reflection.TypeExtensions.dll" + ] + }, + "System.Resources.ResourceManager/4.0.1": { + "sha512": "TxwVeUNoTgUOdQ09gfTjvW411MF+w9MBYL7AtNVc+HtBCFlutPLhUCdZjNkjbhj3bNQWMdHboF0KIWEOjJssbA==", + "type": "package", + "path": "System.Resources.ResourceManager/4.0.1", + "files": [ + "System.Resources.ResourceManager.4.0.1.nupkg.sha512", + "System.Resources.ResourceManager.nuspec", + "ThirdPartyNotices.txt", + "dotnet_library_license.txt", + "lib/MonoAndroid10/_._", + "lib/MonoTouch10/_._", + "lib/net45/_._", + "lib/portable-net45+win8+wp8+wpa81/_._", + "lib/win8/_._", + "lib/wp80/_._", + "lib/wpa81/_._", + "lib/xamarinios10/_._", + "lib/xamarinmac20/_._", + "lib/xamarintvos10/_._", + "lib/xamarinwatchos10/_._", + "ref/MonoAndroid10/_._", + "ref/MonoTouch10/_._", + "ref/net45/_._", + "ref/netcore50/System.Resources.ResourceManager.dll", + "ref/netcore50/System.Resources.ResourceManager.xml", + "ref/netcore50/de/System.Resources.ResourceManager.xml", + "ref/netcore50/es/System.Resources.ResourceManager.xml", + "ref/netcore50/fr/System.Resources.ResourceManager.xml", + "ref/netcore50/it/System.Resources.ResourceManager.xml", + "ref/netcore50/ja/System.Resources.ResourceManager.xml", + "ref/netcore50/ko/System.Resources.ResourceManager.xml", + "ref/netcore50/ru/System.Resources.ResourceManager.xml", + "ref/netcore50/zh-hans/System.Resources.ResourceManager.xml", + "ref/netcore50/zh-hant/System.Resources.ResourceManager.xml", + "ref/netstandard1.0/System.Resources.ResourceManager.dll", + "ref/netstandard1.0/System.Resources.ResourceManager.xml", + "ref/netstandard1.0/de/System.Resources.ResourceManager.xml", + "ref/netstandard1.0/es/System.Resources.ResourceManager.xml", + "ref/netstandard1.0/fr/System.Resources.ResourceManager.xml", + "ref/netstandard1.0/it/System.Resources.ResourceManager.xml", + "ref/netstandard1.0/ja/System.Resources.ResourceManager.xml", + "ref/netstandard1.0/ko/System.Resources.ResourceManager.xml", + "ref/netstandard1.0/ru/System.Resources.ResourceManager.xml", + "ref/netstandard1.0/zh-hans/System.Resources.ResourceManager.xml", + "ref/netstandard1.0/zh-hant/System.Resources.ResourceManager.xml", + "ref/portable-net45+win8+wp8+wpa81/_._", + "ref/win8/_._", + "ref/wp80/_._", + "ref/wpa81/_._", + "ref/xamarinios10/_._", + "ref/xamarinmac20/_._", + "ref/xamarintvos10/_._", + "ref/xamarinwatchos10/_._" + ] + }, + "System.Runtime/4.1.0": { + "sha512": "v6c/4Yaa9uWsq+JMhnOFewrYkgdNHNG2eMKuNqRn8P733rNXeRCGvV5FkkjBXn2dbVkPXOsO0xjsEeM1q2zC0g==", + "type": "package", + "path": "System.Runtime/4.1.0", + "files": [ + "System.Runtime.4.1.0.nupkg.sha512", + "System.Runtime.nuspec", + "ThirdPartyNotices.txt", + "dotnet_library_license.txt", + "lib/MonoAndroid10/_._", + "lib/MonoTouch10/_._", + "lib/net45/_._", + "lib/net462/System.Runtime.dll", + "lib/portable-net45+win8+wp80+wpa81/_._", + "lib/win8/_._", + "lib/wp80/_._", + "lib/wpa81/_._", + "lib/xamarinios10/_._", + "lib/xamarinmac20/_._", + "lib/xamarintvos10/_._", + "lib/xamarinwatchos10/_._", + "ref/MonoAndroid10/_._", + "ref/MonoTouch10/_._", + "ref/net45/_._", + "ref/net462/System.Runtime.dll", + "ref/netcore50/System.Runtime.dll", + "ref/netcore50/System.Runtime.xml", + "ref/netcore50/de/System.Runtime.xml", + "ref/netcore50/es/System.Runtime.xml", + "ref/netcore50/fr/System.Runtime.xml", + "ref/netcore50/it/System.Runtime.xml", + "ref/netcore50/ja/System.Runtime.xml", + "ref/netcore50/ko/System.Runtime.xml", + "ref/netcore50/ru/System.Runtime.xml", + "ref/netcore50/zh-hans/System.Runtime.xml", + "ref/netcore50/zh-hant/System.Runtime.xml", + "ref/netstandard1.0/System.Runtime.dll", + "ref/netstandard1.0/System.Runtime.xml", + "ref/netstandard1.0/de/System.Runtime.xml", + "ref/netstandard1.0/es/System.Runtime.xml", + "ref/netstandard1.0/fr/System.Runtime.xml", + "ref/netstandard1.0/it/System.Runtime.xml", + "ref/netstandard1.0/ja/System.Runtime.xml", + "ref/netstandard1.0/ko/System.Runtime.xml", + "ref/netstandard1.0/ru/System.Runtime.xml", + "ref/netstandard1.0/zh-hans/System.Runtime.xml", + "ref/netstandard1.0/zh-hant/System.Runtime.xml", + "ref/netstandard1.2/System.Runtime.dll", + "ref/netstandard1.2/System.Runtime.xml", + "ref/netstandard1.2/de/System.Runtime.xml", + "ref/netstandard1.2/es/System.Runtime.xml", + "ref/netstandard1.2/fr/System.Runtime.xml", + "ref/netstandard1.2/it/System.Runtime.xml", + "ref/netstandard1.2/ja/System.Runtime.xml", + "ref/netstandard1.2/ko/System.Runtime.xml", + "ref/netstandard1.2/ru/System.Runtime.xml", + "ref/netstandard1.2/zh-hans/System.Runtime.xml", + "ref/netstandard1.2/zh-hant/System.Runtime.xml", + "ref/netstandard1.3/System.Runtime.dll", + "ref/netstandard1.3/System.Runtime.xml", + "ref/netstandard1.3/de/System.Runtime.xml", + "ref/netstandard1.3/es/System.Runtime.xml", + "ref/netstandard1.3/fr/System.Runtime.xml", + "ref/netstandard1.3/it/System.Runtime.xml", + "ref/netstandard1.3/ja/System.Runtime.xml", + "ref/netstandard1.3/ko/System.Runtime.xml", + "ref/netstandard1.3/ru/System.Runtime.xml", + "ref/netstandard1.3/zh-hans/System.Runtime.xml", + "ref/netstandard1.3/zh-hant/System.Runtime.xml", + "ref/netstandard1.5/System.Runtime.dll", + "ref/netstandard1.5/System.Runtime.xml", + "ref/netstandard1.5/de/System.Runtime.xml", + "ref/netstandard1.5/es/System.Runtime.xml", + "ref/netstandard1.5/fr/System.Runtime.xml", + "ref/netstandard1.5/it/System.Runtime.xml", + "ref/netstandard1.5/ja/System.Runtime.xml", + "ref/netstandard1.5/ko/System.Runtime.xml", + "ref/netstandard1.5/ru/System.Runtime.xml", + "ref/netstandard1.5/zh-hans/System.Runtime.xml", + "ref/netstandard1.5/zh-hant/System.Runtime.xml", + "ref/portable-net45+win8+wp80+wpa81/_._", + "ref/win8/_._", + "ref/wp80/_._", + "ref/wpa81/_._", + "ref/xamarinios10/_._", + "ref/xamarinmac20/_._", + "ref/xamarintvos10/_._", + "ref/xamarinwatchos10/_._" + ] + }, + "System.Runtime.Extensions/4.1.0": { + "sha512": "CUOHjTT/vgP0qGW22U4/hDlOqXmcPq5YicBaXdUR2UiUoLwBT+olO6we4DVbq57jeX5uXH2uerVZhf0qGj+sVQ==", + "type": "package", + "path": "System.Runtime.Extensions/4.1.0", + "files": [ + "System.Runtime.Extensions.4.1.0.nupkg.sha512", + "System.Runtime.Extensions.nuspec", + "ThirdPartyNotices.txt", + "dotnet_library_license.txt", + "lib/MonoAndroid10/_._", + "lib/MonoTouch10/_._", + "lib/net45/_._", + "lib/net462/System.Runtime.Extensions.dll", + "lib/portable-net45+win8+wp8+wpa81/_._", + "lib/win8/_._", + "lib/wp80/_._", + "lib/wpa81/_._", + "lib/xamarinios10/_._", + "lib/xamarinmac20/_._", + "lib/xamarintvos10/_._", + "lib/xamarinwatchos10/_._", + "ref/MonoAndroid10/_._", + "ref/MonoTouch10/_._", + "ref/net45/_._", + "ref/net462/System.Runtime.Extensions.dll", + "ref/netcore50/System.Runtime.Extensions.dll", + "ref/netcore50/System.Runtime.Extensions.xml", + "ref/netcore50/de/System.Runtime.Extensions.xml", + "ref/netcore50/es/System.Runtime.Extensions.xml", + "ref/netcore50/fr/System.Runtime.Extensions.xml", + "ref/netcore50/it/System.Runtime.Extensions.xml", + "ref/netcore50/ja/System.Runtime.Extensions.xml", + "ref/netcore50/ko/System.Runtime.Extensions.xml", + "ref/netcore50/ru/System.Runtime.Extensions.xml", + "ref/netcore50/zh-hans/System.Runtime.Extensions.xml", + "ref/netcore50/zh-hant/System.Runtime.Extensions.xml", + "ref/netstandard1.0/System.Runtime.Extensions.dll", + "ref/netstandard1.0/System.Runtime.Extensions.xml", + "ref/netstandard1.0/de/System.Runtime.Extensions.xml", + "ref/netstandard1.0/es/System.Runtime.Extensions.xml", + "ref/netstandard1.0/fr/System.Runtime.Extensions.xml", + "ref/netstandard1.0/it/System.Runtime.Extensions.xml", + "ref/netstandard1.0/ja/System.Runtime.Extensions.xml", + "ref/netstandard1.0/ko/System.Runtime.Extensions.xml", + "ref/netstandard1.0/ru/System.Runtime.Extensions.xml", + "ref/netstandard1.0/zh-hans/System.Runtime.Extensions.xml", + "ref/netstandard1.0/zh-hant/System.Runtime.Extensions.xml", + "ref/netstandard1.3/System.Runtime.Extensions.dll", + "ref/netstandard1.3/System.Runtime.Extensions.xml", + "ref/netstandard1.3/de/System.Runtime.Extensions.xml", + "ref/netstandard1.3/es/System.Runtime.Extensions.xml", + "ref/netstandard1.3/fr/System.Runtime.Extensions.xml", + "ref/netstandard1.3/it/System.Runtime.Extensions.xml", + "ref/netstandard1.3/ja/System.Runtime.Extensions.xml", + "ref/netstandard1.3/ko/System.Runtime.Extensions.xml", + "ref/netstandard1.3/ru/System.Runtime.Extensions.xml", + "ref/netstandard1.3/zh-hans/System.Runtime.Extensions.xml", + "ref/netstandard1.3/zh-hant/System.Runtime.Extensions.xml", + "ref/netstandard1.5/System.Runtime.Extensions.dll", + "ref/netstandard1.5/System.Runtime.Extensions.xml", + "ref/netstandard1.5/de/System.Runtime.Extensions.xml", + "ref/netstandard1.5/es/System.Runtime.Extensions.xml", + "ref/netstandard1.5/fr/System.Runtime.Extensions.xml", + "ref/netstandard1.5/it/System.Runtime.Extensions.xml", + "ref/netstandard1.5/ja/System.Runtime.Extensions.xml", + "ref/netstandard1.5/ko/System.Runtime.Extensions.xml", + "ref/netstandard1.5/ru/System.Runtime.Extensions.xml", + "ref/netstandard1.5/zh-hans/System.Runtime.Extensions.xml", + "ref/netstandard1.5/zh-hant/System.Runtime.Extensions.xml", + "ref/portable-net45+win8+wp8+wpa81/_._", + "ref/win8/_._", + "ref/wp80/_._", + "ref/wpa81/_._", + "ref/xamarinios10/_._", + "ref/xamarinmac20/_._", + "ref/xamarintvos10/_._", + "ref/xamarinwatchos10/_._" + ] + }, + "System.Runtime.Handles/4.0.1": { + "sha512": "nCJvEKguXEvk2ymk1gqj625vVnlK3/xdGzx0vOKicQkoquaTBJTP13AIYkocSUwHCLNBwUbXTqTWGDxBTWpt7g==", + "type": "package", + "path": "System.Runtime.Handles/4.0.1", + "files": [ + "System.Runtime.Handles.4.0.1.nupkg.sha512", + "System.Runtime.Handles.nuspec", + "ThirdPartyNotices.txt", + "dotnet_library_license.txt", + "lib/MonoAndroid10/_._", + "lib/MonoTouch10/_._", + "lib/net46/_._", + "lib/xamarinios10/_._", + "lib/xamarinmac20/_._", + "lib/xamarintvos10/_._", + "lib/xamarinwatchos10/_._", + "ref/MonoAndroid10/_._", + "ref/MonoTouch10/_._", + "ref/net46/_._", + "ref/netstandard1.3/System.Runtime.Handles.dll", + "ref/netstandard1.3/System.Runtime.Handles.xml", + "ref/netstandard1.3/de/System.Runtime.Handles.xml", + "ref/netstandard1.3/es/System.Runtime.Handles.xml", + "ref/netstandard1.3/fr/System.Runtime.Handles.xml", + "ref/netstandard1.3/it/System.Runtime.Handles.xml", + "ref/netstandard1.3/ja/System.Runtime.Handles.xml", + "ref/netstandard1.3/ko/System.Runtime.Handles.xml", + "ref/netstandard1.3/ru/System.Runtime.Handles.xml", + "ref/netstandard1.3/zh-hans/System.Runtime.Handles.xml", + "ref/netstandard1.3/zh-hant/System.Runtime.Handles.xml", + "ref/xamarinios10/_._", + "ref/xamarinmac20/_._", + "ref/xamarintvos10/_._", + "ref/xamarinwatchos10/_._" + ] + }, + "System.Runtime.InteropServices/4.1.0": { + "sha512": "16eu3kjHS633yYdkjwShDHZLRNMKVi/s0bY8ODiqJ2RfMhDMAwxZaUaWVnZ2P71kr/or+X9o/xFWtNqz8ivieQ==", + "type": "package", + "path": "System.Runtime.InteropServices/4.1.0", + "files": [ + "System.Runtime.InteropServices.4.1.0.nupkg.sha512", + "System.Runtime.InteropServices.nuspec", + "ThirdPartyNotices.txt", + "dotnet_library_license.txt", + "lib/MonoAndroid10/_._", + "lib/MonoTouch10/_._", + "lib/net45/_._", + "lib/net462/System.Runtime.InteropServices.dll", + "lib/portable-net45+win8+wpa81/_._", + "lib/win8/_._", + "lib/wpa81/_._", + "lib/xamarinios10/_._", + "lib/xamarinmac20/_._", + "lib/xamarintvos10/_._", + "lib/xamarinwatchos10/_._", + "ref/MonoAndroid10/_._", + "ref/MonoTouch10/_._", + "ref/net45/_._", + "ref/net462/System.Runtime.InteropServices.dll", + "ref/netcore50/System.Runtime.InteropServices.dll", + "ref/netcore50/System.Runtime.InteropServices.xml", + "ref/netcore50/de/System.Runtime.InteropServices.xml", + "ref/netcore50/es/System.Runtime.InteropServices.xml", + "ref/netcore50/fr/System.Runtime.InteropServices.xml", + "ref/netcore50/it/System.Runtime.InteropServices.xml", + "ref/netcore50/ja/System.Runtime.InteropServices.xml", + "ref/netcore50/ko/System.Runtime.InteropServices.xml", + "ref/netcore50/ru/System.Runtime.InteropServices.xml", + "ref/netcore50/zh-hans/System.Runtime.InteropServices.xml", + "ref/netcore50/zh-hant/System.Runtime.InteropServices.xml", + "ref/netstandard1.1/System.Runtime.InteropServices.dll", + "ref/netstandard1.1/System.Runtime.InteropServices.xml", + "ref/netstandard1.1/de/System.Runtime.InteropServices.xml", + "ref/netstandard1.1/es/System.Runtime.InteropServices.xml", + "ref/netstandard1.1/fr/System.Runtime.InteropServices.xml", + "ref/netstandard1.1/it/System.Runtime.InteropServices.xml", + "ref/netstandard1.1/ja/System.Runtime.InteropServices.xml", + "ref/netstandard1.1/ko/System.Runtime.InteropServices.xml", + "ref/netstandard1.1/ru/System.Runtime.InteropServices.xml", + "ref/netstandard1.1/zh-hans/System.Runtime.InteropServices.xml", + "ref/netstandard1.1/zh-hant/System.Runtime.InteropServices.xml", + "ref/netstandard1.2/System.Runtime.InteropServices.dll", + "ref/netstandard1.2/System.Runtime.InteropServices.xml", + "ref/netstandard1.2/de/System.Runtime.InteropServices.xml", + "ref/netstandard1.2/es/System.Runtime.InteropServices.xml", + "ref/netstandard1.2/fr/System.Runtime.InteropServices.xml", + "ref/netstandard1.2/it/System.Runtime.InteropServices.xml", + "ref/netstandard1.2/ja/System.Runtime.InteropServices.xml", + "ref/netstandard1.2/ko/System.Runtime.InteropServices.xml", + "ref/netstandard1.2/ru/System.Runtime.InteropServices.xml", + "ref/netstandard1.2/zh-hans/System.Runtime.InteropServices.xml", + "ref/netstandard1.2/zh-hant/System.Runtime.InteropServices.xml", + "ref/netstandard1.3/System.Runtime.InteropServices.dll", + "ref/netstandard1.3/System.Runtime.InteropServices.xml", + "ref/netstandard1.3/de/System.Runtime.InteropServices.xml", + "ref/netstandard1.3/es/System.Runtime.InteropServices.xml", + "ref/netstandard1.3/fr/System.Runtime.InteropServices.xml", + "ref/netstandard1.3/it/System.Runtime.InteropServices.xml", + "ref/netstandard1.3/ja/System.Runtime.InteropServices.xml", + "ref/netstandard1.3/ko/System.Runtime.InteropServices.xml", + "ref/netstandard1.3/ru/System.Runtime.InteropServices.xml", + "ref/netstandard1.3/zh-hans/System.Runtime.InteropServices.xml", + "ref/netstandard1.3/zh-hant/System.Runtime.InteropServices.xml", + "ref/netstandard1.5/System.Runtime.InteropServices.dll", + "ref/netstandard1.5/System.Runtime.InteropServices.xml", + "ref/netstandard1.5/de/System.Runtime.InteropServices.xml", + "ref/netstandard1.5/es/System.Runtime.InteropServices.xml", + "ref/netstandard1.5/fr/System.Runtime.InteropServices.xml", + "ref/netstandard1.5/it/System.Runtime.InteropServices.xml", + "ref/netstandard1.5/ja/System.Runtime.InteropServices.xml", + "ref/netstandard1.5/ko/System.Runtime.InteropServices.xml", + "ref/netstandard1.5/ru/System.Runtime.InteropServices.xml", + "ref/netstandard1.5/zh-hans/System.Runtime.InteropServices.xml", + "ref/netstandard1.5/zh-hant/System.Runtime.InteropServices.xml", + "ref/portable-net45+win8+wpa81/_._", + "ref/win8/_._", + "ref/wpa81/_._", + "ref/xamarinios10/_._", + "ref/xamarinmac20/_._", + "ref/xamarintvos10/_._", + "ref/xamarinwatchos10/_._" + ] + }, + "System.Runtime.InteropServices.RuntimeInformation/4.0.0": { + "sha512": "hWPhJxc453RCa8Z29O91EmfGeZIHX1ZH2A8L6lYQVSaKzku2DfArSfMEb1/MYYzPQRJZeu0c9dmYeJKxW5Fgng==", + "type": "package", + "path": "System.Runtime.InteropServices.RuntimeInformation/4.0.0", + "files": [ + "System.Runtime.InteropServices.RuntimeInformation.4.0.0.nupkg.sha512", + "System.Runtime.InteropServices.RuntimeInformation.nuspec", + "ThirdPartyNotices.txt", + "dotnet_library_license.txt", + "lib/MonoAndroid10/_._", + "lib/MonoTouch10/_._", + "lib/net45/System.Runtime.InteropServices.RuntimeInformation.dll", + "lib/win8/System.Runtime.InteropServices.RuntimeInformation.dll", + "lib/wpa81/System.Runtime.InteropServices.RuntimeInformation.dll", + "lib/xamarinios10/_._", + "lib/xamarinmac20/_._", + "lib/xamarintvos10/_._", + "lib/xamarinwatchos10/_._", + "ref/MonoAndroid10/_._", + "ref/MonoTouch10/_._", + "ref/netstandard1.1/System.Runtime.InteropServices.RuntimeInformation.dll", + "ref/xamarinios10/_._", + "ref/xamarinmac20/_._", + "ref/xamarintvos10/_._", + "ref/xamarinwatchos10/_._", + "runtimes/aot/lib/netcore50/System.Runtime.InteropServices.RuntimeInformation.dll", + "runtimes/unix/lib/netstandard1.1/System.Runtime.InteropServices.RuntimeInformation.dll", + "runtimes/win/lib/net45/System.Runtime.InteropServices.RuntimeInformation.dll", + "runtimes/win/lib/netcore50/System.Runtime.InteropServices.RuntimeInformation.dll", + "runtimes/win/lib/netstandard1.1/System.Runtime.InteropServices.RuntimeInformation.dll" + ] + }, + "System.Runtime.Numerics/4.0.1": { + "sha512": "+XbKFuzdmLP3d1o9pdHu2nxjNr2OEPqGzKeegPLCUMM71a0t50A/rOcIRmGs9wR7a8KuHX6hYs/7/TymIGLNqg==", + "type": "package", + "path": "System.Runtime.Numerics/4.0.1", + "files": [ + "System.Runtime.Numerics.4.0.1.nupkg.sha512", + "System.Runtime.Numerics.nuspec", + "ThirdPartyNotices.txt", + "dotnet_library_license.txt", + "lib/MonoAndroid10/_._", + "lib/MonoTouch10/_._", + "lib/net45/_._", + "lib/netcore50/System.Runtime.Numerics.dll", + "lib/netstandard1.3/System.Runtime.Numerics.dll", + "lib/portable-net45+win8+wpa81/_._", + "lib/win8/_._", + "lib/wpa81/_._", + "lib/xamarinios10/_._", + "lib/xamarinmac20/_._", + "lib/xamarintvos10/_._", + "lib/xamarinwatchos10/_._", + "ref/MonoAndroid10/_._", + "ref/MonoTouch10/_._", + "ref/net45/_._", + "ref/netcore50/System.Runtime.Numerics.dll", + "ref/netcore50/System.Runtime.Numerics.xml", + "ref/netcore50/de/System.Runtime.Numerics.xml", + "ref/netcore50/es/System.Runtime.Numerics.xml", + "ref/netcore50/fr/System.Runtime.Numerics.xml", + "ref/netcore50/it/System.Runtime.Numerics.xml", + "ref/netcore50/ja/System.Runtime.Numerics.xml", + "ref/netcore50/ko/System.Runtime.Numerics.xml", + "ref/netcore50/ru/System.Runtime.Numerics.xml", + "ref/netcore50/zh-hans/System.Runtime.Numerics.xml", + "ref/netcore50/zh-hant/System.Runtime.Numerics.xml", + "ref/netstandard1.1/System.Runtime.Numerics.dll", + "ref/netstandard1.1/System.Runtime.Numerics.xml", + "ref/netstandard1.1/de/System.Runtime.Numerics.xml", + "ref/netstandard1.1/es/System.Runtime.Numerics.xml", + "ref/netstandard1.1/fr/System.Runtime.Numerics.xml", + "ref/netstandard1.1/it/System.Runtime.Numerics.xml", + "ref/netstandard1.1/ja/System.Runtime.Numerics.xml", + "ref/netstandard1.1/ko/System.Runtime.Numerics.xml", + "ref/netstandard1.1/ru/System.Runtime.Numerics.xml", + "ref/netstandard1.1/zh-hans/System.Runtime.Numerics.xml", + "ref/netstandard1.1/zh-hant/System.Runtime.Numerics.xml", + "ref/portable-net45+win8+wpa81/_._", + "ref/win8/_._", + "ref/wpa81/_._", + "ref/xamarinios10/_._", + "ref/xamarinmac20/_._", + "ref/xamarintvos10/_._", + "ref/xamarinwatchos10/_._" + ] + }, + "System.Security.Cryptography.Algorithms/4.2.0": { + "sha512": "8JQFxbLVdrtIOKMDN38Fn0GWnqYZw/oMlwOUG/qz1jqChvyZlnUmu+0s7wLx7JYua/nAXoESpHA3iw11QFWhXg==", + "type": "package", + "path": "System.Security.Cryptography.Algorithms/4.2.0", + "files": [ + "System.Security.Cryptography.Algorithms.4.2.0.nupkg.sha512", + "System.Security.Cryptography.Algorithms.nuspec", + "ThirdPartyNotices.txt", + "dotnet_library_license.txt", + "lib/MonoAndroid10/_._", + "lib/MonoTouch10/_._", + "lib/net46/System.Security.Cryptography.Algorithms.dll", + "lib/net461/System.Security.Cryptography.Algorithms.dll", + "lib/net463/System.Security.Cryptography.Algorithms.dll", + "lib/xamarinios10/_._", + "lib/xamarinmac20/_._", + "lib/xamarintvos10/_._", + "lib/xamarinwatchos10/_._", + "ref/MonoAndroid10/_._", + "ref/MonoTouch10/_._", + "ref/net46/System.Security.Cryptography.Algorithms.dll", + "ref/net461/System.Security.Cryptography.Algorithms.dll", + "ref/net463/System.Security.Cryptography.Algorithms.dll", + "ref/netstandard1.3/System.Security.Cryptography.Algorithms.dll", + "ref/netstandard1.4/System.Security.Cryptography.Algorithms.dll", + "ref/netstandard1.6/System.Security.Cryptography.Algorithms.dll", + "ref/xamarinios10/_._", + "ref/xamarinmac20/_._", + "ref/xamarintvos10/_._", + "ref/xamarinwatchos10/_._", + "runtimes/unix/lib/netstandard1.6/System.Security.Cryptography.Algorithms.dll", + "runtimes/win/lib/net46/System.Security.Cryptography.Algorithms.dll", + "runtimes/win/lib/net461/System.Security.Cryptography.Algorithms.dll", + "runtimes/win/lib/net463/System.Security.Cryptography.Algorithms.dll", + "runtimes/win/lib/netcore50/System.Security.Cryptography.Algorithms.dll", + "runtimes/win/lib/netstandard1.6/System.Security.Cryptography.Algorithms.dll" + ] + }, + "System.Security.Cryptography.Cng/4.2.0": { + "sha512": "cUJ2h+ZvONDe28Szw3st5dOHdjndhJzQ2WObDEXAWRPEQBtVItVoxbXM/OEsTthl3cNn2dk2k0I3y45igCQcLw==", + "type": "package", + "path": "System.Security.Cryptography.Cng/4.2.0", + "files": [ + "System.Security.Cryptography.Cng.4.2.0.nupkg.sha512", + "System.Security.Cryptography.Cng.nuspec", + "ThirdPartyNotices.txt", + "dotnet_library_license.txt", + "lib/net46/System.Security.Cryptography.Cng.dll", + "lib/net461/System.Security.Cryptography.Cng.dll", + "lib/net463/System.Security.Cryptography.Cng.dll", + "ref/net46/System.Security.Cryptography.Cng.dll", + "ref/net461/System.Security.Cryptography.Cng.dll", + "ref/net463/System.Security.Cryptography.Cng.dll", + "ref/netstandard1.3/System.Security.Cryptography.Cng.dll", + "ref/netstandard1.4/System.Security.Cryptography.Cng.dll", + "ref/netstandard1.6/System.Security.Cryptography.Cng.dll", + "runtimes/unix/lib/netstandard1.6/System.Security.Cryptography.Cng.dll", + "runtimes/win/lib/net46/System.Security.Cryptography.Cng.dll", + "runtimes/win/lib/net461/System.Security.Cryptography.Cng.dll", + "runtimes/win/lib/net463/System.Security.Cryptography.Cng.dll", + "runtimes/win/lib/netstandard1.4/System.Security.Cryptography.Cng.dll", + "runtimes/win/lib/netstandard1.6/System.Security.Cryptography.Cng.dll" + ] + }, + "System.Security.Cryptography.Csp/4.0.0": { + "sha512": "/i1Usuo4PgAqgbPNC0NjbO3jPW//BoBlTpcWFD1EHVbidH21y4c1ap5bbEMSGAXjAShhMH4abi/K8fILrnu4BQ==", + "type": "package", + "path": "System.Security.Cryptography.Csp/4.0.0", + "files": [ + "System.Security.Cryptography.Csp.4.0.0.nupkg.sha512", + "System.Security.Cryptography.Csp.nuspec", + "ThirdPartyNotices.txt", + "dotnet_library_license.txt", + "lib/MonoAndroid10/_._", + "lib/MonoTouch10/_._", + "lib/net46/System.Security.Cryptography.Csp.dll", + "lib/xamarinios10/_._", + "lib/xamarinmac20/_._", + "lib/xamarintvos10/_._", + "lib/xamarinwatchos10/_._", + "ref/MonoAndroid10/_._", + "ref/MonoTouch10/_._", + "ref/net46/System.Security.Cryptography.Csp.dll", + "ref/netstandard1.3/System.Security.Cryptography.Csp.dll", + "ref/xamarinios10/_._", + "ref/xamarinmac20/_._", + "ref/xamarintvos10/_._", + "ref/xamarinwatchos10/_._", + "runtimes/unix/lib/netstandard1.3/System.Security.Cryptography.Csp.dll", + "runtimes/win/lib/net46/System.Security.Cryptography.Csp.dll", + "runtimes/win/lib/netcore50/_._", + "runtimes/win/lib/netstandard1.3/System.Security.Cryptography.Csp.dll" + ] + }, + "System.Security.Cryptography.Encoding/4.0.0": { + "sha512": "FbKgE5MbxSQMPcSVRgwM6bXN3GtyAh04NkV8E5zKCBE26X0vYW0UtTa2FIgkH33WVqBVxRgxljlVYumWtU+HcQ==", + "type": "package", + "path": "System.Security.Cryptography.Encoding/4.0.0", + "files": [ + "System.Security.Cryptography.Encoding.4.0.0.nupkg.sha512", + "System.Security.Cryptography.Encoding.nuspec", + "ThirdPartyNotices.txt", + "dotnet_library_license.txt", + "lib/MonoAndroid10/_._", + "lib/MonoTouch10/_._", + "lib/net46/System.Security.Cryptography.Encoding.dll", + "lib/xamarinios10/_._", + "lib/xamarinmac20/_._", + "lib/xamarintvos10/_._", + "lib/xamarinwatchos10/_._", + "ref/MonoAndroid10/_._", + "ref/MonoTouch10/_._", + "ref/net46/System.Security.Cryptography.Encoding.dll", + "ref/netstandard1.3/System.Security.Cryptography.Encoding.dll", + "ref/netstandard1.3/System.Security.Cryptography.Encoding.xml", + "ref/netstandard1.3/de/System.Security.Cryptography.Encoding.xml", + "ref/netstandard1.3/es/System.Security.Cryptography.Encoding.xml", + "ref/netstandard1.3/fr/System.Security.Cryptography.Encoding.xml", + "ref/netstandard1.3/it/System.Security.Cryptography.Encoding.xml", + "ref/netstandard1.3/ja/System.Security.Cryptography.Encoding.xml", + "ref/netstandard1.3/ko/System.Security.Cryptography.Encoding.xml", + "ref/netstandard1.3/ru/System.Security.Cryptography.Encoding.xml", + "ref/netstandard1.3/zh-hans/System.Security.Cryptography.Encoding.xml", + "ref/netstandard1.3/zh-hant/System.Security.Cryptography.Encoding.xml", + "ref/xamarinios10/_._", + "ref/xamarinmac20/_._", + "ref/xamarintvos10/_._", + "ref/xamarinwatchos10/_._", + "runtimes/unix/lib/netstandard1.3/System.Security.Cryptography.Encoding.dll", + "runtimes/win/lib/net46/System.Security.Cryptography.Encoding.dll", + "runtimes/win/lib/netstandard1.3/System.Security.Cryptography.Encoding.dll" + ] + }, + "System.Security.Cryptography.OpenSsl/4.0.0": { + "sha512": "HUG/zNUJwEiLkoURDixzkzZdB5yGA5pQhDP93ArOpDPQMteURIGERRNzzoJlmTreLBWr5lkFSjjMSk8ySEpQMw==", + "type": "package", + "path": "System.Security.Cryptography.OpenSsl/4.0.0", + "files": [ + "System.Security.Cryptography.OpenSsl.4.0.0.nupkg.sha512", + "System.Security.Cryptography.OpenSsl.nuspec", + "ThirdPartyNotices.txt", + "dotnet_library_license.txt", + "lib/netstandard1.6/System.Security.Cryptography.OpenSsl.dll", + "ref/netstandard1.6/System.Security.Cryptography.OpenSsl.dll", + "runtimes/unix/lib/netstandard1.6/System.Security.Cryptography.OpenSsl.dll" + ] + }, + "System.Security.Cryptography.Primitives/4.0.0": { + "sha512": "Wkd7QryWYjkQclX0bngpntW5HSlMzeJU24UaLJQ7YTfI8ydAVAaU2J+HXLLABOVJlKTVvAeL0Aj39VeTe7L+oA==", + "type": "package", + "path": "System.Security.Cryptography.Primitives/4.0.0", + "files": [ + "System.Security.Cryptography.Primitives.4.0.0.nupkg.sha512", + "System.Security.Cryptography.Primitives.nuspec", + "ThirdPartyNotices.txt", + "dotnet_library_license.txt", + "lib/MonoAndroid10/_._", + "lib/MonoTouch10/_._", + "lib/net46/System.Security.Cryptography.Primitives.dll", + "lib/netstandard1.3/System.Security.Cryptography.Primitives.dll", + "lib/xamarinios10/_._", + "lib/xamarinmac20/_._", + "lib/xamarintvos10/_._", + "lib/xamarinwatchos10/_._", + "ref/MonoAndroid10/_._", + "ref/MonoTouch10/_._", + "ref/net46/System.Security.Cryptography.Primitives.dll", + "ref/netstandard1.3/System.Security.Cryptography.Primitives.dll", + "ref/xamarinios10/_._", + "ref/xamarinmac20/_._", + "ref/xamarintvos10/_._", + "ref/xamarinwatchos10/_._" + ] + }, + "System.Security.Cryptography.X509Certificates/4.1.0": { + "sha512": "4HEfsQIKAhA1+ApNn729Gi09zh+lYWwyIuViihoMDWp1vQnEkL2ct7mAbhBlLYm+x/L4Rr/pyGge1lIY635e0w==", + "type": "package", + "path": "System.Security.Cryptography.X509Certificates/4.1.0", + "files": [ + "System.Security.Cryptography.X509Certificates.4.1.0.nupkg.sha512", + "System.Security.Cryptography.X509Certificates.nuspec", + "ThirdPartyNotices.txt", + "dotnet_library_license.txt", + "lib/MonoAndroid10/_._", + "lib/MonoTouch10/_._", + "lib/net46/System.Security.Cryptography.X509Certificates.dll", + "lib/net461/System.Security.Cryptography.X509Certificates.dll", + "lib/xamarinios10/_._", + "lib/xamarinmac20/_._", + "lib/xamarintvos10/_._", + "lib/xamarinwatchos10/_._", + "ref/MonoAndroid10/_._", + "ref/MonoTouch10/_._", + "ref/net46/System.Security.Cryptography.X509Certificates.dll", + "ref/net461/System.Security.Cryptography.X509Certificates.dll", + "ref/netstandard1.3/System.Security.Cryptography.X509Certificates.dll", + "ref/netstandard1.3/System.Security.Cryptography.X509Certificates.xml", + "ref/netstandard1.3/de/System.Security.Cryptography.X509Certificates.xml", + "ref/netstandard1.3/es/System.Security.Cryptography.X509Certificates.xml", + "ref/netstandard1.3/fr/System.Security.Cryptography.X509Certificates.xml", + "ref/netstandard1.3/it/System.Security.Cryptography.X509Certificates.xml", + "ref/netstandard1.3/ja/System.Security.Cryptography.X509Certificates.xml", + "ref/netstandard1.3/ko/System.Security.Cryptography.X509Certificates.xml", + "ref/netstandard1.3/ru/System.Security.Cryptography.X509Certificates.xml", + "ref/netstandard1.3/zh-hans/System.Security.Cryptography.X509Certificates.xml", + "ref/netstandard1.3/zh-hant/System.Security.Cryptography.X509Certificates.xml", + "ref/netstandard1.4/System.Security.Cryptography.X509Certificates.dll", + "ref/netstandard1.4/System.Security.Cryptography.X509Certificates.xml", + "ref/netstandard1.4/de/System.Security.Cryptography.X509Certificates.xml", + "ref/netstandard1.4/es/System.Security.Cryptography.X509Certificates.xml", + "ref/netstandard1.4/fr/System.Security.Cryptography.X509Certificates.xml", + "ref/netstandard1.4/it/System.Security.Cryptography.X509Certificates.xml", + "ref/netstandard1.4/ja/System.Security.Cryptography.X509Certificates.xml", + "ref/netstandard1.4/ko/System.Security.Cryptography.X509Certificates.xml", + "ref/netstandard1.4/ru/System.Security.Cryptography.X509Certificates.xml", + "ref/netstandard1.4/zh-hans/System.Security.Cryptography.X509Certificates.xml", + "ref/netstandard1.4/zh-hant/System.Security.Cryptography.X509Certificates.xml", + "ref/xamarinios10/_._", + "ref/xamarinmac20/_._", + "ref/xamarintvos10/_._", + "ref/xamarinwatchos10/_._", + "runtimes/unix/lib/netstandard1.6/System.Security.Cryptography.X509Certificates.dll", + "runtimes/win/lib/net46/System.Security.Cryptography.X509Certificates.dll", + "runtimes/win/lib/net461/System.Security.Cryptography.X509Certificates.dll", + "runtimes/win/lib/netcore50/System.Security.Cryptography.X509Certificates.dll", + "runtimes/win/lib/netstandard1.6/System.Security.Cryptography.X509Certificates.dll" + ] + }, + "System.Text.Encoding/4.0.11": { + "sha512": "U3gGeMlDZXxCEiY4DwVLSacg+DFWCvoiX+JThA/rvw37Sqrku7sEFeVBBBMBnfB6FeZHsyDx85HlKL19x0HtZA==", + "type": "package", + "path": "System.Text.Encoding/4.0.11", + "files": [ + "System.Text.Encoding.4.0.11.nupkg.sha512", + "System.Text.Encoding.nuspec", + "ThirdPartyNotices.txt", + "dotnet_library_license.txt", + "lib/MonoAndroid10/_._", + "lib/MonoTouch10/_._", + "lib/net45/_._", + "lib/portable-net45+win8+wp8+wpa81/_._", + "lib/win8/_._", + "lib/wp80/_._", + "lib/wpa81/_._", + "lib/xamarinios10/_._", + "lib/xamarinmac20/_._", + "lib/xamarintvos10/_._", + "lib/xamarinwatchos10/_._", + "ref/MonoAndroid10/_._", + "ref/MonoTouch10/_._", + "ref/net45/_._", + "ref/netcore50/System.Text.Encoding.dll", + "ref/netcore50/System.Text.Encoding.xml", + "ref/netcore50/de/System.Text.Encoding.xml", + "ref/netcore50/es/System.Text.Encoding.xml", + "ref/netcore50/fr/System.Text.Encoding.xml", + "ref/netcore50/it/System.Text.Encoding.xml", + "ref/netcore50/ja/System.Text.Encoding.xml", + "ref/netcore50/ko/System.Text.Encoding.xml", + "ref/netcore50/ru/System.Text.Encoding.xml", + "ref/netcore50/zh-hans/System.Text.Encoding.xml", + "ref/netcore50/zh-hant/System.Text.Encoding.xml", + "ref/netstandard1.0/System.Text.Encoding.dll", + "ref/netstandard1.0/System.Text.Encoding.xml", + "ref/netstandard1.0/de/System.Text.Encoding.xml", + "ref/netstandard1.0/es/System.Text.Encoding.xml", + "ref/netstandard1.0/fr/System.Text.Encoding.xml", + "ref/netstandard1.0/it/System.Text.Encoding.xml", + "ref/netstandard1.0/ja/System.Text.Encoding.xml", + "ref/netstandard1.0/ko/System.Text.Encoding.xml", + "ref/netstandard1.0/ru/System.Text.Encoding.xml", + "ref/netstandard1.0/zh-hans/System.Text.Encoding.xml", + "ref/netstandard1.0/zh-hant/System.Text.Encoding.xml", + "ref/netstandard1.3/System.Text.Encoding.dll", + "ref/netstandard1.3/System.Text.Encoding.xml", + "ref/netstandard1.3/de/System.Text.Encoding.xml", + "ref/netstandard1.3/es/System.Text.Encoding.xml", + "ref/netstandard1.3/fr/System.Text.Encoding.xml", + "ref/netstandard1.3/it/System.Text.Encoding.xml", + "ref/netstandard1.3/ja/System.Text.Encoding.xml", + "ref/netstandard1.3/ko/System.Text.Encoding.xml", + "ref/netstandard1.3/ru/System.Text.Encoding.xml", + "ref/netstandard1.3/zh-hans/System.Text.Encoding.xml", + "ref/netstandard1.3/zh-hant/System.Text.Encoding.xml", + "ref/portable-net45+win8+wp8+wpa81/_._", + "ref/win8/_._", + "ref/wp80/_._", + "ref/wpa81/_._", + "ref/xamarinios10/_._", + "ref/xamarinmac20/_._", + "ref/xamarintvos10/_._", + "ref/xamarinwatchos10/_._" + ] + }, + "System.Text.Encoding.Extensions/4.0.11": { + "sha512": "jtbiTDtvfLYgXn8PTfWI+SiBs51rrmO4AAckx4KR6vFK9Wzf6tI8kcRdsYQNwriUeQ1+CtQbM1W4cMbLXnj/OQ==", + "type": "package", + "path": "System.Text.Encoding.Extensions/4.0.11", + "files": [ + "System.Text.Encoding.Extensions.4.0.11.nupkg.sha512", + "System.Text.Encoding.Extensions.nuspec", + "ThirdPartyNotices.txt", + "dotnet_library_license.txt", + "lib/MonoAndroid10/_._", + "lib/MonoTouch10/_._", + "lib/net45/_._", + "lib/portable-net45+win8+wp8+wpa81/_._", + "lib/win8/_._", + "lib/wp80/_._", + "lib/wpa81/_._", + "lib/xamarinios10/_._", + "lib/xamarinmac20/_._", + "lib/xamarintvos10/_._", + "lib/xamarinwatchos10/_._", + "ref/MonoAndroid10/_._", + "ref/MonoTouch10/_._", + "ref/net45/_._", + "ref/netcore50/System.Text.Encoding.Extensions.dll", + "ref/netcore50/System.Text.Encoding.Extensions.xml", + "ref/netcore50/de/System.Text.Encoding.Extensions.xml", + "ref/netcore50/es/System.Text.Encoding.Extensions.xml", + "ref/netcore50/fr/System.Text.Encoding.Extensions.xml", + "ref/netcore50/it/System.Text.Encoding.Extensions.xml", + "ref/netcore50/ja/System.Text.Encoding.Extensions.xml", + "ref/netcore50/ko/System.Text.Encoding.Extensions.xml", + "ref/netcore50/ru/System.Text.Encoding.Extensions.xml", + "ref/netcore50/zh-hans/System.Text.Encoding.Extensions.xml", + "ref/netcore50/zh-hant/System.Text.Encoding.Extensions.xml", + "ref/netstandard1.0/System.Text.Encoding.Extensions.dll", + "ref/netstandard1.0/System.Text.Encoding.Extensions.xml", + "ref/netstandard1.0/de/System.Text.Encoding.Extensions.xml", + "ref/netstandard1.0/es/System.Text.Encoding.Extensions.xml", + "ref/netstandard1.0/fr/System.Text.Encoding.Extensions.xml", + "ref/netstandard1.0/it/System.Text.Encoding.Extensions.xml", + "ref/netstandard1.0/ja/System.Text.Encoding.Extensions.xml", + "ref/netstandard1.0/ko/System.Text.Encoding.Extensions.xml", + "ref/netstandard1.0/ru/System.Text.Encoding.Extensions.xml", + "ref/netstandard1.0/zh-hans/System.Text.Encoding.Extensions.xml", + "ref/netstandard1.0/zh-hant/System.Text.Encoding.Extensions.xml", + "ref/netstandard1.3/System.Text.Encoding.Extensions.dll", + "ref/netstandard1.3/System.Text.Encoding.Extensions.xml", + "ref/netstandard1.3/de/System.Text.Encoding.Extensions.xml", + "ref/netstandard1.3/es/System.Text.Encoding.Extensions.xml", + "ref/netstandard1.3/fr/System.Text.Encoding.Extensions.xml", + "ref/netstandard1.3/it/System.Text.Encoding.Extensions.xml", + "ref/netstandard1.3/ja/System.Text.Encoding.Extensions.xml", + "ref/netstandard1.3/ko/System.Text.Encoding.Extensions.xml", + "ref/netstandard1.3/ru/System.Text.Encoding.Extensions.xml", + "ref/netstandard1.3/zh-hans/System.Text.Encoding.Extensions.xml", + "ref/netstandard1.3/zh-hant/System.Text.Encoding.Extensions.xml", + "ref/portable-net45+win8+wp8+wpa81/_._", + "ref/win8/_._", + "ref/wp80/_._", + "ref/wpa81/_._", + "ref/xamarinios10/_._", + "ref/xamarinmac20/_._", + "ref/xamarintvos10/_._", + "ref/xamarinwatchos10/_._" + ] + }, + "System.Text.RegularExpressions/4.1.0": { + "sha512": "i88YCXpRTjCnoSQZtdlHkAOx4KNNik4hMy83n0+Ftlb7jvV6ZiZWMpnEZHhjBp6hQVh8gWd/iKNPzlPF7iyA2g==", + "type": "package", + "path": "System.Text.RegularExpressions/4.1.0", + "files": [ + "System.Text.RegularExpressions.4.1.0.nupkg.sha512", + "System.Text.RegularExpressions.nuspec", + "ThirdPartyNotices.txt", + "dotnet_library_license.txt", + "lib/MonoAndroid10/_._", + "lib/MonoTouch10/_._", + "lib/net45/_._", + "lib/net463/System.Text.RegularExpressions.dll", + "lib/netcore50/System.Text.RegularExpressions.dll", + "lib/netstandard1.6/System.Text.RegularExpressions.dll", + "lib/portable-net45+win8+wp8+wpa81/_._", + "lib/win8/_._", + "lib/wp80/_._", + "lib/wpa81/_._", + "lib/xamarinios10/_._", + "lib/xamarinmac20/_._", + "lib/xamarintvos10/_._", + "lib/xamarinwatchos10/_._", + "ref/MonoAndroid10/_._", + "ref/MonoTouch10/_._", + "ref/net45/_._", + "ref/net463/System.Text.RegularExpressions.dll", + "ref/netcore50/System.Text.RegularExpressions.dll", + "ref/netcore50/System.Text.RegularExpressions.xml", + "ref/netcore50/de/System.Text.RegularExpressions.xml", + "ref/netcore50/es/System.Text.RegularExpressions.xml", + "ref/netcore50/fr/System.Text.RegularExpressions.xml", + "ref/netcore50/it/System.Text.RegularExpressions.xml", + "ref/netcore50/ja/System.Text.RegularExpressions.xml", + "ref/netcore50/ko/System.Text.RegularExpressions.xml", + "ref/netcore50/ru/System.Text.RegularExpressions.xml", + "ref/netcore50/zh-hans/System.Text.RegularExpressions.xml", + "ref/netcore50/zh-hant/System.Text.RegularExpressions.xml", + "ref/netstandard1.0/System.Text.RegularExpressions.dll", + "ref/netstandard1.0/System.Text.RegularExpressions.xml", + "ref/netstandard1.0/de/System.Text.RegularExpressions.xml", + "ref/netstandard1.0/es/System.Text.RegularExpressions.xml", + "ref/netstandard1.0/fr/System.Text.RegularExpressions.xml", + "ref/netstandard1.0/it/System.Text.RegularExpressions.xml", + "ref/netstandard1.0/ja/System.Text.RegularExpressions.xml", + "ref/netstandard1.0/ko/System.Text.RegularExpressions.xml", + "ref/netstandard1.0/ru/System.Text.RegularExpressions.xml", + "ref/netstandard1.0/zh-hans/System.Text.RegularExpressions.xml", + "ref/netstandard1.0/zh-hant/System.Text.RegularExpressions.xml", + "ref/netstandard1.3/System.Text.RegularExpressions.dll", + "ref/netstandard1.3/System.Text.RegularExpressions.xml", + "ref/netstandard1.3/de/System.Text.RegularExpressions.xml", + "ref/netstandard1.3/es/System.Text.RegularExpressions.xml", + "ref/netstandard1.3/fr/System.Text.RegularExpressions.xml", + "ref/netstandard1.3/it/System.Text.RegularExpressions.xml", + "ref/netstandard1.3/ja/System.Text.RegularExpressions.xml", + "ref/netstandard1.3/ko/System.Text.RegularExpressions.xml", + "ref/netstandard1.3/ru/System.Text.RegularExpressions.xml", + "ref/netstandard1.3/zh-hans/System.Text.RegularExpressions.xml", + "ref/netstandard1.3/zh-hant/System.Text.RegularExpressions.xml", + "ref/netstandard1.6/System.Text.RegularExpressions.dll", + "ref/netstandard1.6/System.Text.RegularExpressions.xml", + "ref/netstandard1.6/de/System.Text.RegularExpressions.xml", + "ref/netstandard1.6/es/System.Text.RegularExpressions.xml", + "ref/netstandard1.6/fr/System.Text.RegularExpressions.xml", + "ref/netstandard1.6/it/System.Text.RegularExpressions.xml", + "ref/netstandard1.6/ja/System.Text.RegularExpressions.xml", + "ref/netstandard1.6/ko/System.Text.RegularExpressions.xml", + "ref/netstandard1.6/ru/System.Text.RegularExpressions.xml", + "ref/netstandard1.6/zh-hans/System.Text.RegularExpressions.xml", + "ref/netstandard1.6/zh-hant/System.Text.RegularExpressions.xml", + "ref/portable-net45+win8+wp8+wpa81/_._", + "ref/win8/_._", + "ref/wp80/_._", + "ref/wpa81/_._", + "ref/xamarinios10/_._", + "ref/xamarinmac20/_._", + "ref/xamarintvos10/_._", + "ref/xamarinwatchos10/_._" + ] + }, + "System.Threading/4.0.11": { + "sha512": "N+3xqIcg3VDKyjwwCGaZ9HawG9aC6cSDI+s7ROma310GQo8vilFZa86hqKppwTHleR/G0sfOzhvgnUxWCR/DrQ==", + "type": "package", + "path": "System.Threading/4.0.11", + "files": [ + "System.Threading.4.0.11.nupkg.sha512", + "System.Threading.nuspec", + "ThirdPartyNotices.txt", + "dotnet_library_license.txt", + "lib/MonoAndroid10/_._", + "lib/MonoTouch10/_._", + "lib/net45/_._", + "lib/netcore50/System.Threading.dll", + "lib/netstandard1.3/System.Threading.dll", + "lib/portable-net45+win8+wp8+wpa81/_._", + "lib/win8/_._", + "lib/wp80/_._", + "lib/wpa81/_._", + "lib/xamarinios10/_._", + "lib/xamarinmac20/_._", + "lib/xamarintvos10/_._", + "lib/xamarinwatchos10/_._", + "ref/MonoAndroid10/_._", + "ref/MonoTouch10/_._", + "ref/net45/_._", + "ref/netcore50/System.Threading.dll", + "ref/netcore50/System.Threading.xml", + "ref/netcore50/de/System.Threading.xml", + "ref/netcore50/es/System.Threading.xml", + "ref/netcore50/fr/System.Threading.xml", + "ref/netcore50/it/System.Threading.xml", + "ref/netcore50/ja/System.Threading.xml", + "ref/netcore50/ko/System.Threading.xml", + "ref/netcore50/ru/System.Threading.xml", + "ref/netcore50/zh-hans/System.Threading.xml", + "ref/netcore50/zh-hant/System.Threading.xml", + "ref/netstandard1.0/System.Threading.dll", + "ref/netstandard1.0/System.Threading.xml", + "ref/netstandard1.0/de/System.Threading.xml", + "ref/netstandard1.0/es/System.Threading.xml", + "ref/netstandard1.0/fr/System.Threading.xml", + "ref/netstandard1.0/it/System.Threading.xml", + "ref/netstandard1.0/ja/System.Threading.xml", + "ref/netstandard1.0/ko/System.Threading.xml", + "ref/netstandard1.0/ru/System.Threading.xml", + "ref/netstandard1.0/zh-hans/System.Threading.xml", + "ref/netstandard1.0/zh-hant/System.Threading.xml", + "ref/netstandard1.3/System.Threading.dll", + "ref/netstandard1.3/System.Threading.xml", + "ref/netstandard1.3/de/System.Threading.xml", + "ref/netstandard1.3/es/System.Threading.xml", + "ref/netstandard1.3/fr/System.Threading.xml", + "ref/netstandard1.3/it/System.Threading.xml", + "ref/netstandard1.3/ja/System.Threading.xml", + "ref/netstandard1.3/ko/System.Threading.xml", + "ref/netstandard1.3/ru/System.Threading.xml", + "ref/netstandard1.3/zh-hans/System.Threading.xml", + "ref/netstandard1.3/zh-hant/System.Threading.xml", + "ref/portable-net45+win8+wp8+wpa81/_._", + "ref/win8/_._", + "ref/wp80/_._", + "ref/wpa81/_._", + "ref/xamarinios10/_._", + "ref/xamarinmac20/_._", + "ref/xamarintvos10/_._", + "ref/xamarinwatchos10/_._", + "runtimes/aot/lib/netcore50/System.Threading.dll" + ] + }, + "System.Threading.Tasks/4.0.11": { + "sha512": "k1S4Gc6IGwtHGT8188RSeGaX86Qw/wnrgNLshJvsdNUOPP9etMmo8S07c+UlOAx4K/xLuN9ivA1bD0LVurtIxQ==", + "type": "package", + "path": "System.Threading.Tasks/4.0.11", + "files": [ + "System.Threading.Tasks.4.0.11.nupkg.sha512", + "System.Threading.Tasks.nuspec", + "ThirdPartyNotices.txt", + "dotnet_library_license.txt", + "lib/MonoAndroid10/_._", + "lib/MonoTouch10/_._", + "lib/net45/_._", + "lib/portable-net45+win8+wp8+wpa81/_._", + "lib/win8/_._", + "lib/wp80/_._", + "lib/wpa81/_._", + "lib/xamarinios10/_._", + "lib/xamarinmac20/_._", + "lib/xamarintvos10/_._", + "lib/xamarinwatchos10/_._", + "ref/MonoAndroid10/_._", + "ref/MonoTouch10/_._", + "ref/net45/_._", + "ref/netcore50/System.Threading.Tasks.dll", + "ref/netcore50/System.Threading.Tasks.xml", + "ref/netcore50/de/System.Threading.Tasks.xml", + "ref/netcore50/es/System.Threading.Tasks.xml", + "ref/netcore50/fr/System.Threading.Tasks.xml", + "ref/netcore50/it/System.Threading.Tasks.xml", + "ref/netcore50/ja/System.Threading.Tasks.xml", + "ref/netcore50/ko/System.Threading.Tasks.xml", + "ref/netcore50/ru/System.Threading.Tasks.xml", + "ref/netcore50/zh-hans/System.Threading.Tasks.xml", + "ref/netcore50/zh-hant/System.Threading.Tasks.xml", + "ref/netstandard1.0/System.Threading.Tasks.dll", + "ref/netstandard1.0/System.Threading.Tasks.xml", + "ref/netstandard1.0/de/System.Threading.Tasks.xml", + "ref/netstandard1.0/es/System.Threading.Tasks.xml", + "ref/netstandard1.0/fr/System.Threading.Tasks.xml", + "ref/netstandard1.0/it/System.Threading.Tasks.xml", + "ref/netstandard1.0/ja/System.Threading.Tasks.xml", + "ref/netstandard1.0/ko/System.Threading.Tasks.xml", + "ref/netstandard1.0/ru/System.Threading.Tasks.xml", + "ref/netstandard1.0/zh-hans/System.Threading.Tasks.xml", + "ref/netstandard1.0/zh-hant/System.Threading.Tasks.xml", + "ref/netstandard1.3/System.Threading.Tasks.dll", + "ref/netstandard1.3/System.Threading.Tasks.xml", + "ref/netstandard1.3/de/System.Threading.Tasks.xml", + "ref/netstandard1.3/es/System.Threading.Tasks.xml", + "ref/netstandard1.3/fr/System.Threading.Tasks.xml", + "ref/netstandard1.3/it/System.Threading.Tasks.xml", + "ref/netstandard1.3/ja/System.Threading.Tasks.xml", + "ref/netstandard1.3/ko/System.Threading.Tasks.xml", + "ref/netstandard1.3/ru/System.Threading.Tasks.xml", + "ref/netstandard1.3/zh-hans/System.Threading.Tasks.xml", + "ref/netstandard1.3/zh-hant/System.Threading.Tasks.xml", + "ref/portable-net45+win8+wp8+wpa81/_._", + "ref/win8/_._", + "ref/wp80/_._", + "ref/wpa81/_._", + "ref/xamarinios10/_._", + "ref/xamarinmac20/_._", + "ref/xamarintvos10/_._", + "ref/xamarinwatchos10/_._" + ] + }, + "System.Threading.Tasks.Extensions/4.0.0": { + "sha512": "pH4FZDsZQ/WmgJtN4LWYmRdJAEeVkyriSwrv2Teoe5FOU0Yxlb6II6GL8dBPOfRmutHGATduj3ooMt7dJ2+i+w==", + "type": "package", + "path": "System.Threading.Tasks.Extensions/4.0.0", + "files": [ + "System.Threading.Tasks.Extensions.4.0.0.nupkg.sha512", + "System.Threading.Tasks.Extensions.nuspec", + "ThirdPartyNotices.txt", + "dotnet_library_license.txt", + "lib/netstandard1.0/System.Threading.Tasks.Extensions.dll", + "lib/netstandard1.0/System.Threading.Tasks.Extensions.xml", + "lib/portable-net45+win8+wp8+wpa81/System.Threading.Tasks.Extensions.dll", + "lib/portable-net45+win8+wp8+wpa81/System.Threading.Tasks.Extensions.xml" + ] + }, + "System.Threading.Timer/4.0.1": { + "sha512": "saGfUV8uqVW6LeURiqxcGhZ24PzuRNaUBtbhVeuUAvky1naH395A/1nY0P2bWvrw/BreRtIB/EzTDkGBpqCwEw==", + "type": "package", + "path": "System.Threading.Timer/4.0.1", + "files": [ + "System.Threading.Timer.4.0.1.nupkg.sha512", + "System.Threading.Timer.nuspec", + "ThirdPartyNotices.txt", + "dotnet_library_license.txt", + "lib/MonoAndroid10/_._", + "lib/MonoTouch10/_._", + "lib/net451/_._", + "lib/portable-net451+win81+wpa81/_._", + "lib/win81/_._", + "lib/wpa81/_._", + "lib/xamarinios10/_._", + "lib/xamarinmac20/_._", + "lib/xamarintvos10/_._", + "lib/xamarinwatchos10/_._", + "ref/MonoAndroid10/_._", + "ref/MonoTouch10/_._", + "ref/net451/_._", + "ref/netcore50/System.Threading.Timer.dll", + "ref/netcore50/System.Threading.Timer.xml", + "ref/netcore50/de/System.Threading.Timer.xml", + "ref/netcore50/es/System.Threading.Timer.xml", + "ref/netcore50/fr/System.Threading.Timer.xml", + "ref/netcore50/it/System.Threading.Timer.xml", + "ref/netcore50/ja/System.Threading.Timer.xml", + "ref/netcore50/ko/System.Threading.Timer.xml", + "ref/netcore50/ru/System.Threading.Timer.xml", + "ref/netcore50/zh-hans/System.Threading.Timer.xml", + "ref/netcore50/zh-hant/System.Threading.Timer.xml", + "ref/netstandard1.2/System.Threading.Timer.dll", + "ref/netstandard1.2/System.Threading.Timer.xml", + "ref/netstandard1.2/de/System.Threading.Timer.xml", + "ref/netstandard1.2/es/System.Threading.Timer.xml", + "ref/netstandard1.2/fr/System.Threading.Timer.xml", + "ref/netstandard1.2/it/System.Threading.Timer.xml", + "ref/netstandard1.2/ja/System.Threading.Timer.xml", + "ref/netstandard1.2/ko/System.Threading.Timer.xml", + "ref/netstandard1.2/ru/System.Threading.Timer.xml", + "ref/netstandard1.2/zh-hans/System.Threading.Timer.xml", + "ref/netstandard1.2/zh-hant/System.Threading.Timer.xml", + "ref/portable-net451+win81+wpa81/_._", + "ref/win81/_._", + "ref/wpa81/_._", + "ref/xamarinios10/_._", + "ref/xamarinmac20/_._", + "ref/xamarintvos10/_._", + "ref/xamarinwatchos10/_._" + ] + }, + "System.Xml.ReaderWriter/4.0.11": { + "sha512": "ZIiLPsf67YZ9zgr31vzrFaYQqxRPX9cVHjtPSnmx4eN6lbS/yEyYNr2vs1doGDEscF0tjCZFsk9yUg1sC9e8tg==", + "type": "package", + "path": "System.Xml.ReaderWriter/4.0.11", + "files": [ + "System.Xml.ReaderWriter.4.0.11.nupkg.sha512", + "System.Xml.ReaderWriter.nuspec", + "ThirdPartyNotices.txt", + "dotnet_library_license.txt", + "lib/MonoAndroid10/_._", + "lib/MonoTouch10/_._", + "lib/net45/_._", + "lib/netcore50/System.Xml.ReaderWriter.dll", + "lib/netstandard1.3/System.Xml.ReaderWriter.dll", + "lib/portable-net45+win8+wp8+wpa81/_._", + "lib/win8/_._", + "lib/wp80/_._", + "lib/wpa81/_._", + "lib/xamarinios10/_._", + "lib/xamarinmac20/_._", + "lib/xamarintvos10/_._", + "lib/xamarinwatchos10/_._", + "ref/MonoAndroid10/_._", + "ref/MonoTouch10/_._", + "ref/net45/_._", + "ref/netcore50/System.Xml.ReaderWriter.dll", + "ref/netcore50/System.Xml.ReaderWriter.xml", + "ref/netcore50/de/System.Xml.ReaderWriter.xml", + "ref/netcore50/es/System.Xml.ReaderWriter.xml", + "ref/netcore50/fr/System.Xml.ReaderWriter.xml", + "ref/netcore50/it/System.Xml.ReaderWriter.xml", + "ref/netcore50/ja/System.Xml.ReaderWriter.xml", + "ref/netcore50/ko/System.Xml.ReaderWriter.xml", + "ref/netcore50/ru/System.Xml.ReaderWriter.xml", + "ref/netcore50/zh-hans/System.Xml.ReaderWriter.xml", + "ref/netcore50/zh-hant/System.Xml.ReaderWriter.xml", + "ref/netstandard1.0/System.Xml.ReaderWriter.dll", + "ref/netstandard1.0/System.Xml.ReaderWriter.xml", + "ref/netstandard1.0/de/System.Xml.ReaderWriter.xml", + "ref/netstandard1.0/es/System.Xml.ReaderWriter.xml", + "ref/netstandard1.0/fr/System.Xml.ReaderWriter.xml", + "ref/netstandard1.0/it/System.Xml.ReaderWriter.xml", + "ref/netstandard1.0/ja/System.Xml.ReaderWriter.xml", + "ref/netstandard1.0/ko/System.Xml.ReaderWriter.xml", + "ref/netstandard1.0/ru/System.Xml.ReaderWriter.xml", + "ref/netstandard1.0/zh-hans/System.Xml.ReaderWriter.xml", + "ref/netstandard1.0/zh-hant/System.Xml.ReaderWriter.xml", + "ref/netstandard1.3/System.Xml.ReaderWriter.dll", + "ref/netstandard1.3/System.Xml.ReaderWriter.xml", + "ref/netstandard1.3/de/System.Xml.ReaderWriter.xml", + "ref/netstandard1.3/es/System.Xml.ReaderWriter.xml", + "ref/netstandard1.3/fr/System.Xml.ReaderWriter.xml", + "ref/netstandard1.3/it/System.Xml.ReaderWriter.xml", + "ref/netstandard1.3/ja/System.Xml.ReaderWriter.xml", + "ref/netstandard1.3/ko/System.Xml.ReaderWriter.xml", + "ref/netstandard1.3/ru/System.Xml.ReaderWriter.xml", + "ref/netstandard1.3/zh-hans/System.Xml.ReaderWriter.xml", + "ref/netstandard1.3/zh-hant/System.Xml.ReaderWriter.xml", + "ref/portable-net45+win8+wp8+wpa81/_._", + "ref/win8/_._", + "ref/wp80/_._", + "ref/wpa81/_._", + "ref/xamarinios10/_._", + "ref/xamarinmac20/_._", + "ref/xamarintvos10/_._", + "ref/xamarinwatchos10/_._" + ] + }, + "System.Xml.XDocument/4.0.11": { + "sha512": "Mk2mKmPi0nWaoiYeotq1dgeNK1fqWh61+EK+w4Wu8SWuTYLzpUnschb59bJtGywaPq7SmTuPf44wrXRwbIrukg==", + "type": "package", + "path": "System.Xml.XDocument/4.0.11", + "files": [ + "System.Xml.XDocument.4.0.11.nupkg.sha512", + "System.Xml.XDocument.nuspec", + "ThirdPartyNotices.txt", + "dotnet_library_license.txt", + "lib/MonoAndroid10/_._", + "lib/MonoTouch10/_._", + "lib/net45/_._", + "lib/netcore50/System.Xml.XDocument.dll", + "lib/netstandard1.3/System.Xml.XDocument.dll", + "lib/portable-net45+win8+wp8+wpa81/_._", + "lib/win8/_._", + "lib/wp80/_._", + "lib/wpa81/_._", + "lib/xamarinios10/_._", + "lib/xamarinmac20/_._", + "lib/xamarintvos10/_._", + "lib/xamarinwatchos10/_._", + "ref/MonoAndroid10/_._", + "ref/MonoTouch10/_._", + "ref/net45/_._", + "ref/netcore50/System.Xml.XDocument.dll", + "ref/netcore50/System.Xml.XDocument.xml", + "ref/netcore50/de/System.Xml.XDocument.xml", + "ref/netcore50/es/System.Xml.XDocument.xml", + "ref/netcore50/fr/System.Xml.XDocument.xml", + "ref/netcore50/it/System.Xml.XDocument.xml", + "ref/netcore50/ja/System.Xml.XDocument.xml", + "ref/netcore50/ko/System.Xml.XDocument.xml", + "ref/netcore50/ru/System.Xml.XDocument.xml", + "ref/netcore50/zh-hans/System.Xml.XDocument.xml", + "ref/netcore50/zh-hant/System.Xml.XDocument.xml", + "ref/netstandard1.0/System.Xml.XDocument.dll", + "ref/netstandard1.0/System.Xml.XDocument.xml", + "ref/netstandard1.0/de/System.Xml.XDocument.xml", + "ref/netstandard1.0/es/System.Xml.XDocument.xml", + "ref/netstandard1.0/fr/System.Xml.XDocument.xml", + "ref/netstandard1.0/it/System.Xml.XDocument.xml", + "ref/netstandard1.0/ja/System.Xml.XDocument.xml", + "ref/netstandard1.0/ko/System.Xml.XDocument.xml", + "ref/netstandard1.0/ru/System.Xml.XDocument.xml", + "ref/netstandard1.0/zh-hans/System.Xml.XDocument.xml", + "ref/netstandard1.0/zh-hant/System.Xml.XDocument.xml", + "ref/netstandard1.3/System.Xml.XDocument.dll", + "ref/netstandard1.3/System.Xml.XDocument.xml", + "ref/netstandard1.3/de/System.Xml.XDocument.xml", + "ref/netstandard1.3/es/System.Xml.XDocument.xml", + "ref/netstandard1.3/fr/System.Xml.XDocument.xml", + "ref/netstandard1.3/it/System.Xml.XDocument.xml", + "ref/netstandard1.3/ja/System.Xml.XDocument.xml", + "ref/netstandard1.3/ko/System.Xml.XDocument.xml", + "ref/netstandard1.3/ru/System.Xml.XDocument.xml", + "ref/netstandard1.3/zh-hans/System.Xml.XDocument.xml", + "ref/netstandard1.3/zh-hant/System.Xml.XDocument.xml", + "ref/portable-net45+win8+wp8+wpa81/_._", + "ref/win8/_._", + "ref/wp80/_._", + "ref/wpa81/_._", + "ref/xamarinios10/_._", + "ref/xamarinmac20/_._", + "ref/xamarintvos10/_._", + "ref/xamarinwatchos10/_._" + ] + }, + "System.Xml.XmlDocument/4.0.1": { + "sha512": "sDTrZPX5RBEsyGtaNEM48kd2SjfcyF+Nol2SdfrtOVbbjxe3lrJ+EfuidLgzTfd6SZoBi+nI2X8McT/kTp3/RQ==", + "type": "package", + "path": "System.Xml.XmlDocument/4.0.1", + "files": [ + "System.Xml.XmlDocument.4.0.1.nupkg.sha512", + "System.Xml.XmlDocument.nuspec", + "ThirdPartyNotices.txt", + "dotnet_library_license.txt", + "lib/MonoAndroid10/_._", + "lib/MonoTouch10/_._", + "lib/net46/System.Xml.XmlDocument.dll", + "lib/netstandard1.3/System.Xml.XmlDocument.dll", + "lib/xamarinios10/_._", + "lib/xamarinmac20/_._", + "lib/xamarintvos10/_._", + "lib/xamarinwatchos10/_._", + "ref/MonoAndroid10/_._", + "ref/MonoTouch10/_._", + "ref/net46/System.Xml.XmlDocument.dll", + "ref/netstandard1.3/System.Xml.XmlDocument.dll", + "ref/netstandard1.3/System.Xml.XmlDocument.xml", + "ref/netstandard1.3/de/System.Xml.XmlDocument.xml", + "ref/netstandard1.3/es/System.Xml.XmlDocument.xml", + "ref/netstandard1.3/fr/System.Xml.XmlDocument.xml", + "ref/netstandard1.3/it/System.Xml.XmlDocument.xml", + "ref/netstandard1.3/ja/System.Xml.XmlDocument.xml", + "ref/netstandard1.3/ko/System.Xml.XmlDocument.xml", + "ref/netstandard1.3/ru/System.Xml.XmlDocument.xml", + "ref/netstandard1.3/zh-hans/System.Xml.XmlDocument.xml", + "ref/netstandard1.3/zh-hant/System.Xml.XmlDocument.xml", + "ref/xamarinios10/_._", + "ref/xamarinmac20/_._", + "ref/xamarintvos10/_._", + "ref/xamarinwatchos10/_._" + ] + }, + "System.Xml.XmlSerializer/4.0.11": { + "sha512": "FrazwwqfIXTfq23mfv4zH+BjqkSFNaNFBtjzu3I9NRmG8EELYyrv/fJnttCIwRMFRR/YKXF1hmsMmMEnl55HGw==", + "type": "package", + "path": "System.Xml.XmlSerializer/4.0.11", + "files": [ + "System.Xml.XmlSerializer.4.0.11.nupkg.sha512", + "System.Xml.XmlSerializer.nuspec", + "ThirdPartyNotices.txt", + "dotnet_library_license.txt", + "lib/MonoAndroid10/_._", + "lib/MonoTouch10/_._", + "lib/net45/_._", + "lib/netcore50/System.Xml.XmlSerializer.dll", + "lib/netstandard1.3/System.Xml.XmlSerializer.dll", + "lib/portable-net45+win8+wp8+wpa81/_._", + "lib/win8/_._", + "lib/wp80/_._", + "lib/wpa81/_._", + "lib/xamarinios10/_._", + "lib/xamarinmac20/_._", + "lib/xamarintvos10/_._", + "lib/xamarinwatchos10/_._", + "ref/MonoAndroid10/_._", + "ref/MonoTouch10/_._", + "ref/net45/_._", + "ref/netcore50/System.Xml.XmlSerializer.dll", + "ref/netcore50/System.Xml.XmlSerializer.xml", + "ref/netcore50/de/System.Xml.XmlSerializer.xml", + "ref/netcore50/es/System.Xml.XmlSerializer.xml", + "ref/netcore50/fr/System.Xml.XmlSerializer.xml", + "ref/netcore50/it/System.Xml.XmlSerializer.xml", + "ref/netcore50/ja/System.Xml.XmlSerializer.xml", + "ref/netcore50/ko/System.Xml.XmlSerializer.xml", + "ref/netcore50/ru/System.Xml.XmlSerializer.xml", + "ref/netcore50/zh-hans/System.Xml.XmlSerializer.xml", + "ref/netcore50/zh-hant/System.Xml.XmlSerializer.xml", + "ref/netstandard1.0/System.Xml.XmlSerializer.dll", + "ref/netstandard1.0/System.Xml.XmlSerializer.xml", + "ref/netstandard1.0/de/System.Xml.XmlSerializer.xml", + "ref/netstandard1.0/es/System.Xml.XmlSerializer.xml", + "ref/netstandard1.0/fr/System.Xml.XmlSerializer.xml", + "ref/netstandard1.0/it/System.Xml.XmlSerializer.xml", + "ref/netstandard1.0/ja/System.Xml.XmlSerializer.xml", + "ref/netstandard1.0/ko/System.Xml.XmlSerializer.xml", + "ref/netstandard1.0/ru/System.Xml.XmlSerializer.xml", + "ref/netstandard1.0/zh-hans/System.Xml.XmlSerializer.xml", + "ref/netstandard1.0/zh-hant/System.Xml.XmlSerializer.xml", + "ref/netstandard1.3/System.Xml.XmlSerializer.dll", + "ref/netstandard1.3/System.Xml.XmlSerializer.xml", + "ref/netstandard1.3/de/System.Xml.XmlSerializer.xml", + "ref/netstandard1.3/es/System.Xml.XmlSerializer.xml", + "ref/netstandard1.3/fr/System.Xml.XmlSerializer.xml", + "ref/netstandard1.3/it/System.Xml.XmlSerializer.xml", + "ref/netstandard1.3/ja/System.Xml.XmlSerializer.xml", + "ref/netstandard1.3/ko/System.Xml.XmlSerializer.xml", + "ref/netstandard1.3/ru/System.Xml.XmlSerializer.xml", + "ref/netstandard1.3/zh-hans/System.Xml.XmlSerializer.xml", + "ref/netstandard1.3/zh-hant/System.Xml.XmlSerializer.xml", + "ref/portable-net45+win8+wp8+wpa81/_._", + "ref/win8/_._", + "ref/wp80/_._", + "ref/wpa81/_._", + "ref/xamarinios10/_._", + "ref/xamarinmac20/_._", + "ref/xamarintvos10/_._", + "ref/xamarinwatchos10/_._", + "runtimes/aot/lib/netcore50/System.Xml.XmlSerializer.dll" + ] + }, + "MediaBrowser.Common/1.0.0": { + "type": "project", + "path": "../MediaBrowser.Common/project.json", + "msbuildProject": "../MediaBrowser.Common/MediaBrowser.Common.csproj" + }, + "MediaBrowser.Model/1.0.0": { + "type": "project", + "path": "../MediaBrowser.Model/project.json", + "msbuildProject": "../MediaBrowser.Model/MediaBrowser.Model.csproj" + } + }, + "projectFileDependencyGroups": { + "": [], + ".NETFramework,Version=v4.6": [ + "MediaBrowser.Common", + "MediaBrowser.Model", + "System.Collections >= 4.0.0", + "System.IO >= 4.0.0", + "System.Net >= 4.0.0", + "System.Net.Http >= 4.0.0", + "System.Net.Http.WebRequest >= 4.0.0", + "System.Net.Primitives >= 4.0.0", + "System.Runtime >= 4.0.0", + "System.Text.Encoding >= 4.0.0", + "System.Threading >= 4.0.0", + "System.Threading.Tasks >= 4.0.0", + "System.Xml >= 4.0.0", + "System.Xml.Serialization >= 4.0.0" + ], + ".NETStandard,Version=v1.6": [ + "MediaBrowser.Common", + "MediaBrowser.Model", + "NETStandard.Library >= 1.6.0", + "System.Net.Requests >= 4.0.11", + "System.Xml.XmlSerializer >= 4.0.11" + ] + }, + "tools": {}, + "projectFileToolGroups": {} +} \ No newline at end of file diff --git a/MediaBrowser.Common.Implementations/BaseApplicationHost.cs b/MediaBrowser.Common.Implementations/BaseApplicationHost.cs index 4b9d78c9c..ec96818aa 100644 --- a/MediaBrowser.Common.Implementations/BaseApplicationHost.cs +++ b/MediaBrowser.Common.Implementations/BaseApplicationHost.cs @@ -3,7 +3,6 @@ using MediaBrowser.Common.Events; using MediaBrowser.Common.Implementations.Devices; using MediaBrowser.Common.Implementations.IO; using MediaBrowser.Common.Implementations.ScheduledTasks; -using MediaBrowser.Common.Implementations.Security; using MediaBrowser.Common.Implementations.Serialization; using MediaBrowser.Common.Implementations.Updates; using MediaBrowser.Common.Net; @@ -31,6 +30,7 @@ using MediaBrowser.Common.Extensions; using MediaBrowser.Common.Implementations.Cryptography; using MediaBrowser.Common.IO; using MediaBrowser.Model.Cryptography; +using MediaBrowser.Model.System; using MediaBrowser.Model.Tasks; namespace MediaBrowser.Common.Implementations @@ -121,11 +121,6 @@ namespace MediaBrowser.Common.Implementations /// The kernel. protected ITaskManager TaskManager { get; private set; } /// - /// Gets the security manager. - /// - /// The security manager. - protected ISecurityManager SecurityManager { get; private set; } - /// /// Gets the HTTP client. /// /// The HTTP client. @@ -142,16 +137,12 @@ namespace MediaBrowser.Common.Implementations /// The configuration manager. protected IConfigurationManager ConfigurationManager { get; private set; } - /// - /// Gets or sets the installation manager. - /// - /// The installation manager. - protected IInstallationManager InstallationManager { get; private set; } - protected IFileSystem FileSystemManager { get; private set; } protected IIsoManager IsoManager { get; private set; } + protected ISystemEvents SystemEvents { get; private set; } + /// /// Gets the name. /// @@ -221,6 +212,7 @@ namespace MediaBrowser.Common.Implementations JsonSerializer = CreateJsonSerializer(); MemoryStreamProvider = CreateMemoryStreamProvider(); + SystemEvents = CreateSystemEvents(); OnLoggerLoaded(true); LogManager.LoggerLoaded += (s, e) => OnLoggerLoaded(false); @@ -254,6 +246,7 @@ namespace MediaBrowser.Common.Implementations } protected abstract IMemoryStreamProvider CreateMemoryStreamProvider(); + protected abstract ISystemEvents CreateSystemEvents(); protected virtual void OnLoggerLoaded(bool isFirstLoad) { @@ -473,11 +466,12 @@ namespace MediaBrowser.Common.Implementations RegisterSingleInstance(ApplicationPaths); - TaskManager = new TaskManager(ApplicationPaths, JsonSerializer, LogManager.GetLogger("TaskManager"), FileSystemManager); + TaskManager = new TaskManager(ApplicationPaths, JsonSerializer, LogManager.GetLogger("TaskManager"), FileSystemManager, SystemEvents); RegisterSingleInstance(JsonSerializer); RegisterSingleInstance(XmlSerializer); RegisterSingleInstance(MemoryStreamProvider); + RegisterSingleInstance(SystemEvents); RegisterSingleInstance(LogManager); RegisterSingleInstance(Logger); @@ -492,12 +486,6 @@ namespace MediaBrowser.Common.Implementations NetworkManager = CreateNetworkManager(LogManager.GetLogger("NetworkManager")); RegisterSingleInstance(NetworkManager); - SecurityManager = new PluginSecurityManager(this, HttpClient, JsonSerializer, ApplicationPaths, LogManager); - RegisterSingleInstance(SecurityManager); - - InstallationManager = new InstallationManager(LogManager.GetLogger("InstallationManager"), this, ApplicationPaths, HttpClient, JsonSerializer, SecurityManager, ConfigurationManager, FileSystemManager); - RegisterSingleInstance(InstallationManager); - IsoManager = new IsoManager(); RegisterSingleInstance(IsoManager); diff --git a/MediaBrowser.Common.Implementations/Configuration/BaseConfigurationManager.cs b/MediaBrowser.Common.Implementations/Configuration/BaseConfigurationManager.cs index 7c1302ff6..943e6c5f8 100644 --- a/MediaBrowser.Common.Implementations/Configuration/BaseConfigurationManager.cs +++ b/MediaBrowser.Common.Implementations/Configuration/BaseConfigurationManager.cs @@ -79,7 +79,7 @@ namespace MediaBrowser.Common.Implementations.Configuration get { // Lazy load - LazyInitializer.EnsureInitialized(ref _configuration, ref _configurationLoaded, ref _configurationSyncLock, () => (BaseApplicationConfiguration)ConfigurationHelper.GetXmlConfiguration(ConfigurationType, CommonApplicationPaths.SystemConfigurationFilePath, XmlSerializer)); + LazyInitializer.EnsureInitialized(ref _configuration, ref _configurationLoaded, ref _configurationSyncLock, () => (BaseApplicationConfiguration)ConfigurationHelper.GetXmlConfiguration(ConfigurationType, CommonApplicationPaths.SystemConfigurationFilePath, XmlSerializer, FileSystem)); return _configuration; } protected set @@ -126,7 +126,7 @@ namespace MediaBrowser.Common.Implementations.Configuration Logger.Info("Saving system configuration"); var path = CommonApplicationPaths.SystemConfigurationFilePath; - Directory.CreateDirectory(Path.GetDirectoryName(path)); + FileSystem.CreateDirectory(Path.GetDirectoryName(path)); lock (_configurationSyncLock) { @@ -196,9 +196,9 @@ namespace MediaBrowser.Common.Implementations.Configuration && !string.Equals(CommonConfiguration.CachePath ?? string.Empty, newPath)) { // Validate - if (!Directory.Exists(newPath)) + if (!FileSystem.DirectoryExists(newPath)) { - throw new DirectoryNotFoundException(string.Format("{0} does not exist.", newPath)); + throw new FileNotFoundException(string.Format("{0} does not exist.", newPath)); } EnsureWriteAccess(newPath); @@ -253,7 +253,7 @@ namespace MediaBrowser.Common.Implementations.Configuration { return Activator.CreateInstance(configurationType); } - catch (DirectoryNotFoundException) + catch (IOException) { return Activator.CreateInstance(configurationType); } @@ -293,7 +293,7 @@ namespace MediaBrowser.Common.Implementations.Configuration _configurations.AddOrUpdate(key, configuration, (k, v) => configuration); var path = GetConfigurationFile(key); - Directory.CreateDirectory(Path.GetDirectoryName(path)); + FileSystem.CreateDirectory(Path.GetDirectoryName(path)); lock (_configurationSyncLock) { diff --git a/MediaBrowser.Common.Implementations/Configuration/ConfigurationHelper.cs b/MediaBrowser.Common.Implementations/Configuration/ConfigurationHelper.cs index 419b85fa7..0c1683f93 100644 --- a/MediaBrowser.Common.Implementations/Configuration/ConfigurationHelper.cs +++ b/MediaBrowser.Common.Implementations/Configuration/ConfigurationHelper.cs @@ -2,6 +2,7 @@ using System; using System.IO; using System.Linq; +using MediaBrowser.Model.IO; namespace MediaBrowser.Common.Implementations.Configuration { @@ -18,7 +19,7 @@ namespace MediaBrowser.Common.Implementations.Configuration /// The path. /// The XML serializer. /// System.Object. - public static object GetXmlConfiguration(Type type, string path, IXmlSerializer xmlSerializer) + public static object GetXmlConfiguration(Type type, string path, IXmlSerializer xmlSerializer, IFileSystem fileSystem) { object configuration; @@ -27,7 +28,7 @@ namespace MediaBrowser.Common.Implementations.Configuration // Use try/catch to avoid the extra file system lookup using File.Exists try { - buffer = File.ReadAllBytes(path); + buffer = fileSystem.ReadAllBytes(path); configuration = xmlSerializer.DeserializeFromBytes(type, buffer); } @@ -46,10 +47,10 @@ namespace MediaBrowser.Common.Implementations.Configuration // If the file didn't exist before, or if something has changed, re-save if (buffer == null || !buffer.SequenceEqual(newBytes)) { - Directory.CreateDirectory(Path.GetDirectoryName(path)); + fileSystem.CreateDirectory(Path.GetDirectoryName(path)); // Save it after load in case we got new items - File.WriteAllBytes(path, newBytes); + fileSystem.WriteAllBytes(path, newBytes); } return configuration; diff --git a/MediaBrowser.Common.Implementations/IO/ManagedFileSystem.cs b/MediaBrowser.Common.Implementations/IO/ManagedFileSystem.cs index 8b027d41a..4f6c34cb7 100644 --- a/MediaBrowser.Common.Implementations/IO/ManagedFileSystem.cs +++ b/MediaBrowser.Common.Implementations/IO/ManagedFileSystem.cs @@ -3,7 +3,6 @@ using System.Collections.Generic; using System.IO; using System.Linq; using System.Text; -using MediaBrowser.Common.IO; using MediaBrowser.Model.IO; using MediaBrowser.Model.Logging; @@ -660,6 +659,11 @@ namespace MediaBrowser.Common.Implementations.IO return File.ReadAllText(path); } + public byte[] ReadAllBytes(string path) + { + return File.ReadAllBytes(path); + } + public void WriteAllText(string path, string text, Encoding encoding) { File.WriteAllText(path, text, encoding); @@ -670,6 +674,11 @@ namespace MediaBrowser.Common.Implementations.IO File.WriteAllText(path, text); } + public void WriteAllBytes(string path, byte[] bytes) + { + File.WriteAllBytes(path, bytes); + } + public string ReadAllText(string path, Encoding encoding) { return File.ReadAllText(path, encoding); diff --git a/MediaBrowser.Common.Implementations/MediaBrowser.Common.Implementations.csproj b/MediaBrowser.Common.Implementations/MediaBrowser.Common.Implementations.csproj index 4b3fe3dba..89e9427ae 100644 --- a/MediaBrowser.Common.Implementations/MediaBrowser.Common.Implementations.csproj +++ b/MediaBrowser.Common.Implementations/MediaBrowser.Common.Implementations.csproj @@ -79,14 +79,8 @@ - - - - - - diff --git a/MediaBrowser.Common.Implementations/ScheduledTasks/DailyTrigger.cs b/MediaBrowser.Common.Implementations/ScheduledTasks/DailyTrigger.cs index 3d33e958d..ab1d8f02d 100644 --- a/MediaBrowser.Common.Implementations/ScheduledTasks/DailyTrigger.cs +++ b/MediaBrowser.Common.Implementations/ScheduledTasks/DailyTrigger.cs @@ -1,11 +1,11 @@ -using MediaBrowser.Model.Events; -using MediaBrowser.Model.Tasks; -using System; +using System; using System.Globalization; using System.Threading; +using MediaBrowser.Model.Events; using MediaBrowser.Model.Logging; +using MediaBrowser.Model.Tasks; -namespace MediaBrowser.Common.ScheduledTasks +namespace MediaBrowser.Common.Implementations.ScheduledTasks { /// /// Represents a task trigger that fires everyday diff --git a/MediaBrowser.Common.Implementations/ScheduledTasks/IntervalTrigger.cs b/MediaBrowser.Common.Implementations/ScheduledTasks/IntervalTrigger.cs index 8038d5551..251e460cb 100644 --- a/MediaBrowser.Common.Implementations/ScheduledTasks/IntervalTrigger.cs +++ b/MediaBrowser.Common.Implementations/ScheduledTasks/IntervalTrigger.cs @@ -1,11 +1,11 @@ -using MediaBrowser.Model.Events; -using MediaBrowser.Model.Tasks; -using System; +using System; using System.Linq; using System.Threading; +using MediaBrowser.Model.Events; using MediaBrowser.Model.Logging; +using MediaBrowser.Model.Tasks; -namespace MediaBrowser.Common.ScheduledTasks +namespace MediaBrowser.Common.Implementations.ScheduledTasks { /// /// Represents a task trigger that runs repeatedly on an interval diff --git a/MediaBrowser.Common.Implementations/ScheduledTasks/StartupTrigger.cs b/MediaBrowser.Common.Implementations/ScheduledTasks/StartupTrigger.cs index 41f58a7ad..c96a41ac8 100644 --- a/MediaBrowser.Common.Implementations/ScheduledTasks/StartupTrigger.cs +++ b/MediaBrowser.Common.Implementations/ScheduledTasks/StartupTrigger.cs @@ -1,10 +1,10 @@ -using MediaBrowser.Model.Events; -using MediaBrowser.Model.Tasks; -using System; +using System; using System.Threading.Tasks; +using MediaBrowser.Model.Events; using MediaBrowser.Model.Logging; +using MediaBrowser.Model.Tasks; -namespace MediaBrowser.Common.ScheduledTasks +namespace MediaBrowser.Common.Implementations.ScheduledTasks { /// /// Class StartupTaskTrigger diff --git a/MediaBrowser.Common.Implementations/ScheduledTasks/TaskManager.cs b/MediaBrowser.Common.Implementations/ScheduledTasks/TaskManager.cs index 9a0221dea..5c721d915 100644 --- a/MediaBrowser.Common.Implementations/ScheduledTasks/TaskManager.cs +++ b/MediaBrowser.Common.Implementations/ScheduledTasks/TaskManager.cs @@ -12,6 +12,7 @@ using System.Linq; using System.Threading.Tasks; using MediaBrowser.Common.IO; using MediaBrowser.Model.IO; +using MediaBrowser.Model.System; using Microsoft.Win32; namespace MediaBrowser.Common.Implementations.ScheduledTasks @@ -48,6 +49,8 @@ namespace MediaBrowser.Common.Implementations.ScheduledTasks /// The application paths. private IApplicationPaths ApplicationPaths { get; set; } + private readonly ISystemEvents _systemEvents; + /// /// Gets the logger. /// @@ -81,29 +84,23 @@ namespace MediaBrowser.Common.Implementations.ScheduledTasks /// The json serializer. /// The logger. /// kernel - public TaskManager(IApplicationPaths applicationPaths, IJsonSerializer jsonSerializer, ILogger logger, IFileSystem fileSystem) + public TaskManager(IApplicationPaths applicationPaths, IJsonSerializer jsonSerializer, ILogger logger, IFileSystem fileSystem, ISystemEvents systemEvents) { ApplicationPaths = applicationPaths; JsonSerializer = jsonSerializer; Logger = logger; _fileSystem = fileSystem; + _systemEvents = systemEvents; ScheduledTasks = new IScheduledTaskWorker[] { }; } private void BindToSystemEvent() { - try - { - SystemEvents.PowerModeChanged += SystemEvents_PowerModeChanged; - } - catch - { - - } + _systemEvents.Resume += _systemEvents_Resume; } - void SystemEvents_PowerModeChanged(object sender, PowerModeChangedEventArgs e) + private void _systemEvents_Resume(object sender, EventArgs e) { foreach (var task in ScheduledTasks) { diff --git a/MediaBrowser.Common.Implementations/ScheduledTasks/WeeklyTrigger.cs b/MediaBrowser.Common.Implementations/ScheduledTasks/WeeklyTrigger.cs index 318802e07..0d8af4e9c 100644 --- a/MediaBrowser.Common.Implementations/ScheduledTasks/WeeklyTrigger.cs +++ b/MediaBrowser.Common.Implementations/ScheduledTasks/WeeklyTrigger.cs @@ -4,7 +4,7 @@ using MediaBrowser.Model.Events; using MediaBrowser.Model.Logging; using MediaBrowser.Model.Tasks; -namespace MediaBrowser.Common.ScheduledTasks +namespace MediaBrowser.Common.Implementations.ScheduledTasks { /// /// Represents a task trigger that fires on a weekly basis diff --git a/MediaBrowser.Common.Implementations/Security/MBLicenseFile.cs b/MediaBrowser.Common.Implementations/Security/MBLicenseFile.cs deleted file mode 100644 index 78515cd14..000000000 --- a/MediaBrowser.Common.Implementations/Security/MBLicenseFile.cs +++ /dev/null @@ -1,157 +0,0 @@ -using MediaBrowser.Common.Configuration; -using System; -using System.Collections.Concurrent; -using System.Collections.Generic; -using System.Globalization; -using System.IO; -using System.Linq; -using System.Security.Cryptography; -using System.Text; - -namespace MediaBrowser.Common.Implementations.Security -{ - internal class MBLicenseFile - { - private readonly IApplicationPaths _appPaths; - - public string RegKey - { - get { return _regKey; } - set - { - if (value != _regKey) - { - //if key is changed - clear out our saved validations - _updateRecords.Clear(); - _regKey = value; - } - } - } - - private string Filename - { - get - { - return Path.Combine(_appPaths.ConfigurationDirectoryPath, "mb.lic"); - } - } - - private readonly ConcurrentDictionary _updateRecords = new ConcurrentDictionary(); - private readonly object _fileLock = new object(); - private string _regKey; - - public MBLicenseFile(IApplicationPaths appPaths) - { - _appPaths = appPaths; - - Load(); - } - - private void SetUpdateRecord(Guid key, DateTime value) - { - _updateRecords.AddOrUpdate(key, value, (k, v) => value); - } - - public void AddRegCheck(string featureId) - { - using (var provider = new MD5CryptoServiceProvider()) - { - var key = new Guid(provider.ComputeHash(Encoding.Unicode.GetBytes(featureId))); - var value = DateTime.UtcNow; - - SetUpdateRecord(key, value); - Save(); - } - - } - - public void RemoveRegCheck(string featureId) - { - using (var provider = new MD5CryptoServiceProvider()) - { - var key = new Guid(provider.ComputeHash(Encoding.Unicode.GetBytes(featureId))); - DateTime val; - - _updateRecords.TryRemove(key, out val); - - Save(); - } - - } - - public DateTime LastChecked(string featureId) - { - using (var provider = new MD5CryptoServiceProvider()) - { - DateTime last; - _updateRecords.TryGetValue(new Guid(provider.ComputeHash(Encoding.Unicode.GetBytes(featureId))), out last); - - // guard agains people just putting a large number in the file - return last < DateTime.UtcNow ? last : DateTime.MinValue; - } - } - - private void Load() - { - string[] contents = null; - var licenseFile = Filename; - lock (_fileLock) - { - try - { - contents = File.ReadAllLines(licenseFile); - } - catch (DirectoryNotFoundException) - { - File.Create(licenseFile).Close(); - } - catch (FileNotFoundException) - { - File.Create(licenseFile).Close(); - } - } - if (contents != null && contents.Length > 0) - { - //first line is reg key - RegKey = contents[0]; - - //next is legacy key - if (contents.Length > 1) - { - // Don't need this anymore - } - - //the rest of the lines should be pairs of features and timestamps - for (var i = 2; i < contents.Length; i = i + 2) - { - var feat = Guid.Parse(contents[i]); - - SetUpdateRecord(feat, new DateTime(Convert.ToInt64(contents[i + 1]))); - } - } - } - - public void Save() - { - //build our array - var lines = new List - { - RegKey, - - // Legacy key - string.Empty - }; - - foreach (var pair in _updateRecords - .ToList()) - { - lines.Add(pair.Key.ToString()); - lines.Add(pair.Value.Ticks.ToString(CultureInfo.InvariantCulture)); - } - - var licenseFile = Filename; - Directory.CreateDirectory(Path.GetDirectoryName(licenseFile)); - lock (_fileLock) File.WriteAllLines(licenseFile, lines); - } - } -} diff --git a/MediaBrowser.Common.Implementations/Security/MbAdmin.cs b/MediaBrowser.Common.Implementations/Security/MbAdmin.cs deleted file mode 100644 index 76ff92c2e..000000000 --- a/MediaBrowser.Common.Implementations/Security/MbAdmin.cs +++ /dev/null @@ -1,13 +0,0 @@ - -namespace MediaBrowser.Common.Implementations.Security -{ - public class MbAdmin - { - public const string HttpUrl = "https://www.mb3admin.com/admin/"; - - /// - /// Leaving as http for now until we get it squared away - /// - public const string HttpsUrl = "https://www.mb3admin.com/admin/"; - } -} diff --git a/MediaBrowser.Common.Implementations/Security/PluginSecurityManager.cs b/MediaBrowser.Common.Implementations/Security/PluginSecurityManager.cs deleted file mode 100644 index 5d440609e..000000000 --- a/MediaBrowser.Common.Implementations/Security/PluginSecurityManager.cs +++ /dev/null @@ -1,337 +0,0 @@ -using System.IO; -using MediaBrowser.Common.Configuration; -using MediaBrowser.Common.Net; -using MediaBrowser.Common.Security; -using MediaBrowser.Model.Entities; -using MediaBrowser.Model.Logging; -using MediaBrowser.Model.Serialization; -using System; -using System.Collections.Generic; -using System.Linq; -using System.Net; -using System.Threading; -using System.Threading.Tasks; -using MediaBrowser.Model.Net; - -namespace MediaBrowser.Common.Implementations.Security -{ - /// - /// Class PluginSecurityManager - /// - public class PluginSecurityManager : ISecurityManager - { - private const string MBValidateUrl = MbAdmin.HttpsUrl + "service/registration/validate"; - private const string AppstoreRegUrl = /*MbAdmin.HttpsUrl*/ "https://mb3admin.com/admin/service/appstore/register"; - - /// - /// The _is MB supporter - /// - private bool? _isMbSupporter; - /// - /// The _is MB supporter initialized - /// - private bool _isMbSupporterInitialized; - /// - /// The _is MB supporter sync lock - /// - private object _isMbSupporterSyncLock = new object(); - - /// - /// Gets a value indicating whether this instance is MB supporter. - /// - /// true if this instance is MB supporter; otherwise, false. - public bool IsMBSupporter - { - get - { - LazyInitializer.EnsureInitialized(ref _isMbSupporter, ref _isMbSupporterInitialized, ref _isMbSupporterSyncLock, () => GetSupporterRegistrationStatus().Result.IsRegistered); - return _isMbSupporter.Value; - } - } - - private MBLicenseFile _licenseFile; - private MBLicenseFile LicenseFile - { - get { return _licenseFile ?? (_licenseFile = new MBLicenseFile(_appPaths)); } - } - - private readonly IHttpClient _httpClient; - private readonly IJsonSerializer _jsonSerializer; - private readonly IApplicationHost _appHost; - private readonly ILogger _logger; - private readonly IApplicationPaths _appPaths; - - private IEnumerable _registeredEntities; - protected IEnumerable RegisteredEntities - { - get - { - return _registeredEntities ?? (_registeredEntities = _appHost.GetExports()); - } - } - - /// - /// Initializes a new instance of the class. - /// - public PluginSecurityManager(IApplicationHost appHost, IHttpClient httpClient, IJsonSerializer jsonSerializer, - IApplicationPaths appPaths, ILogManager logManager) - { - if (httpClient == null) - { - throw new ArgumentNullException("httpClient"); - } - - _appHost = appHost; - _httpClient = httpClient; - _jsonSerializer = jsonSerializer; - _appPaths = appPaths; - _logger = logManager.GetLogger("SecurityManager"); - } - - /// - /// Load all registration info for all entities that require registration - /// - /// - public async Task LoadAllRegistrationInfo() - { - var tasks = new List(); - - ResetSupporterInfo(); - tasks.AddRange(RegisteredEntities.Select(i => i.LoadRegistrationInfoAsync())); - await Task.WhenAll(tasks); - } - - /// - /// Gets the registration status. - /// This overload supports existing plug-ins. - /// - /// The feature. - /// The MB2 equivalent. - /// Task{MBRegistrationRecord}. - public Task GetRegistrationStatus(string feature, string mb2Equivalent = null) - { - return GetRegistrationStatusInternal(feature, mb2Equivalent); - } - - /// - /// Gets the registration status. - /// - /// The feature. - /// The MB2 equivalent. - /// The version of this feature - /// Task{MBRegistrationRecord}. - public Task GetRegistrationStatus(string feature, string mb2Equivalent, string version) - { - return GetRegistrationStatusInternal(feature, mb2Equivalent, version); - } - - private Task GetSupporterRegistrationStatus() - { - return GetRegistrationStatusInternal("MBSupporter", null, _appHost.ApplicationVersion.ToString()); - } - - /// - /// Gets or sets the supporter key. - /// - /// The supporter key. - public string SupporterKey - { - get - { - return LicenseFile.RegKey; - } - set - { - var newValue = value; - if (newValue != null) - { - newValue = newValue.Trim(); - } - - if (newValue != LicenseFile.RegKey) - { - LicenseFile.RegKey = newValue; - LicenseFile.Save(); - - // re-load registration info - Task.Run(() => LoadAllRegistrationInfo()); - } - } - } - - /// - /// Register an app store sale with our back-end. It will validate the transaction with the store - /// and then register the proper feature and then fill in the supporter key on success. - /// - /// Json parameters to send to admin server - public async Task RegisterAppStoreSale(string parameters) - { - var options = new HttpRequestOptions() - { - Url = AppstoreRegUrl, - CancellationToken = CancellationToken.None, - BufferContent = false - }; - options.RequestHeaders.Add("X-Emby-Token", _appHost.SystemId); - options.RequestContent = parameters; - options.RequestContentType = "application/json"; - - try - { - using (var response = await _httpClient.Post(options).ConfigureAwait(false)) - { - var reg = _jsonSerializer.DeserializeFromStream(response.Content); - - if (reg == null) - { - var msg = "Result from appstore registration was null."; - _logger.Error(msg); - throw new ApplicationException(msg); - } - if (!String.IsNullOrEmpty(reg.key)) - { - SupporterKey = reg.key; - } - } - - } - catch (ApplicationException) - { - SaveAppStoreInfo(parameters); - throw; - } - catch (HttpException e) - { - _logger.ErrorException("Error registering appstore purchase {0}", e, parameters ?? "NO PARMS SENT"); - - if (e.StatusCode.HasValue && e.StatusCode.Value == HttpStatusCode.PaymentRequired) - { - throw new PaymentRequiredException(); - } - throw new ApplicationException("Error registering store sale"); - } - catch (Exception e) - { - _logger.ErrorException("Error registering appstore purchase {0}", e, parameters ?? "NO PARMS SENT"); - SaveAppStoreInfo(parameters); - //TODO - could create a re-try routine on start-up if this file is there. For now we can handle manually. - throw new ApplicationException("Error registering store sale"); - } - - } - - private void SaveAppStoreInfo(string info) - { - // Save all transaction information to a file - - try - { - File.WriteAllText(Path.Combine(_appPaths.ProgramDataPath, "apptrans-error.txt"), info); - } - catch (IOException) - { - - } - } - - private async Task GetRegistrationStatusInternal(string feature, - string mb2Equivalent = null, - string version = null) - { - var lastChecked = LicenseFile.LastChecked(feature); - - //check the reg file first to alleviate strain on the MB admin server - must actually check in every 30 days tho - var reg = new RegRecord - { - // Cache the result for up to a week - registered = lastChecked > DateTime.UtcNow.AddDays(-7) - }; - - var success = reg.registered; - - if (!(lastChecked > DateTime.UtcNow.AddDays(-1))) - { - var data = new Dictionary - { - { "feature", feature }, - { "key", SupporterKey }, - { "mac", _appHost.SystemId }, - { "systemid", _appHost.SystemId }, - { "mb2equiv", mb2Equivalent }, - { "ver", version }, - { "platform", _appHost.OperatingSystemDisplayName }, - { "isservice", _appHost.IsRunningAsService.ToString().ToLower() } - }; - - try - { - var options = new HttpRequestOptions - { - Url = MBValidateUrl, - - // Seeing block length errors - EnableHttpCompression = false, - BufferContent = false - }; - - options.SetPostData(data); - - using (var json = (await _httpClient.Post(options).ConfigureAwait(false)).Content) - { - reg = _jsonSerializer.DeserializeFromStream(json); - success = true; - } - - if (reg.registered) - { - LicenseFile.AddRegCheck(feature); - } - else - { - LicenseFile.RemoveRegCheck(feature); - } - - } - catch (Exception e) - { - _logger.ErrorException("Error checking registration status of {0}", e, feature); - } - } - - var record = new MBRegistrationRecord - { - IsRegistered = reg.registered, - ExpirationDate = reg.expDate, - RegChecked = true, - RegError = !success - }; - - record.TrialVersion = IsInTrial(reg.expDate, record.RegChecked, record.IsRegistered); - record.IsValid = !record.RegChecked || record.IsRegistered || record.TrialVersion; - - return record; - } - - private bool IsInTrial(DateTime expirationDate, bool regChecked, bool isRegistered) - { - //don't set this until we've successfully obtained exp date - if (!regChecked) - { - return false; - } - - var isInTrial = expirationDate > DateTime.UtcNow; - - return isInTrial && !isRegistered; - } - - /// - /// Resets the supporter info. - /// - private void ResetSupporterInfo() - { - _isMbSupporter = null; - _isMbSupporterInitialized = false; - } - } -} \ No newline at end of file diff --git a/MediaBrowser.Common.Implementations/Security/RegRecord.cs b/MediaBrowser.Common.Implementations/Security/RegRecord.cs deleted file mode 100644 index ece70b772..000000000 --- a/MediaBrowser.Common.Implementations/Security/RegRecord.cs +++ /dev/null @@ -1,12 +0,0 @@ -using System; - -namespace MediaBrowser.Common.Implementations.Security -{ - class RegRecord - { - public string featId { get; set; } - public bool registered { get; set; } - public DateTime expDate { get; set; } - public string key { get; set; } - } -} \ No newline at end of file diff --git a/MediaBrowser.Common.Implementations/Security/SuppporterInfoResponse.cs b/MediaBrowser.Common.Implementations/Security/SuppporterInfoResponse.cs deleted file mode 100644 index 49c5af8d8..000000000 --- a/MediaBrowser.Common.Implementations/Security/SuppporterInfoResponse.cs +++ /dev/null @@ -1,14 +0,0 @@ - -namespace MediaBrowser.Common.Implementations.Security -{ - internal class SuppporterInfoResponse - { - public string email { get; set; } - public string supporterKey { get; set; } - public int totalRegs { get; set; } - public int totalMachines { get; set; } - public string expDate { get; set; } - public string regDate { get; set; } - public string planType { get; set; } - } -} diff --git a/MediaBrowser.Common.Implementations/Updates/InstallationManager.cs b/MediaBrowser.Common.Implementations/Updates/InstallationManager.cs deleted file mode 100644 index 934898f77..000000000 --- a/MediaBrowser.Common.Implementations/Updates/InstallationManager.cs +++ /dev/null @@ -1,686 +0,0 @@ -using MediaBrowser.Common.Configuration; -using MediaBrowser.Common.Events; -using MediaBrowser.Common.Implementations.Security; -using MediaBrowser.Common.Net; -using MediaBrowser.Common.Plugins; -using MediaBrowser.Common.Progress; -using MediaBrowser.Common.Security; -using MediaBrowser.Common.Updates; -using MediaBrowser.Model.Events; -using MediaBrowser.Model.Logging; -using MediaBrowser.Model.Serialization; -using MediaBrowser.Model.Updates; -using System; -using System.Collections.Concurrent; -using System.Collections.Generic; -using System.IO; -using System.Linq; -using System.Security.Cryptography; -using System.Threading; -using System.Threading.Tasks; -using MediaBrowser.Common.IO; -using MediaBrowser.Model.IO; - -namespace MediaBrowser.Common.Implementations.Updates -{ - /// - /// Manages all install, uninstall and update operations (both plugins and system) - /// - public class InstallationManager : IInstallationManager - { - public event EventHandler PackageInstalling; - public event EventHandler PackageInstallationCompleted; - public event EventHandler PackageInstallationFailed; - public event EventHandler PackageInstallationCancelled; - - /// - /// The current installations - /// - public List> CurrentInstallations { get; set; } - - /// - /// The completed installations - /// - public ConcurrentBag CompletedInstallations { get; set; } - - #region PluginUninstalled Event - /// - /// Occurs when [plugin uninstalled]. - /// - public event EventHandler> PluginUninstalled; - - /// - /// Called when [plugin uninstalled]. - /// - /// The plugin. - private void OnPluginUninstalled(IPlugin plugin) - { - EventHelper.FireEventIfNotNull(PluginUninstalled, this, new GenericEventArgs { Argument = plugin }, _logger); - } - #endregion - - #region PluginUpdated Event - /// - /// Occurs when [plugin updated]. - /// - public event EventHandler>> PluginUpdated; - /// - /// Called when [plugin updated]. - /// - /// The plugin. - /// The new version. - private void OnPluginUpdated(IPlugin plugin, PackageVersionInfo newVersion) - { - _logger.Info("Plugin updated: {0} {1} {2}", newVersion.name, newVersion.versionStr ?? string.Empty, newVersion.classification); - - EventHelper.FireEventIfNotNull(PluginUpdated, this, new GenericEventArgs> { Argument = new Tuple(plugin, newVersion) }, _logger); - - _applicationHost.NotifyPendingRestart(); - } - #endregion - - #region PluginInstalled Event - /// - /// Occurs when [plugin updated]. - /// - public event EventHandler> PluginInstalled; - /// - /// Called when [plugin installed]. - /// - /// The package. - private void OnPluginInstalled(PackageVersionInfo package) - { - _logger.Info("New plugin installed: {0} {1} {2}", package.name, package.versionStr ?? string.Empty, package.classification); - - EventHelper.FireEventIfNotNull(PluginInstalled, this, new GenericEventArgs { Argument = package }, _logger); - - _applicationHost.NotifyPendingRestart(); - } - #endregion - - /// - /// The _logger - /// - private readonly ILogger _logger; - - private readonly IApplicationPaths _appPaths; - private readonly IHttpClient _httpClient; - private readonly IJsonSerializer _jsonSerializer; - private readonly ISecurityManager _securityManager; - private readonly IConfigurationManager _config; - private readonly IFileSystem _fileSystem; - - /// - /// Gets the application host. - /// - /// The application host. - private readonly IApplicationHost _applicationHost; - - public InstallationManager(ILogger logger, IApplicationHost appHost, IApplicationPaths appPaths, IHttpClient httpClient, IJsonSerializer jsonSerializer, ISecurityManager securityManager, IConfigurationManager config, IFileSystem fileSystem) - { - if (logger == null) - { - throw new ArgumentNullException("logger"); - } - - CurrentInstallations = new List>(); - CompletedInstallations = new ConcurrentBag(); - - _applicationHost = appHost; - _appPaths = appPaths; - _httpClient = httpClient; - _jsonSerializer = jsonSerializer; - _securityManager = securityManager; - _config = config; - _fileSystem = fileSystem; - _logger = logger; - } - - private Version GetPackageVersion(PackageVersionInfo version) - { - return new Version(ValueOrDefault(version.versionStr, "0.0.0.1")); - } - - private static string ValueOrDefault(string str, string def) - { - return string.IsNullOrEmpty(str) ? def : str; - } - - /// - /// Gets all available packages. - /// - /// Task{List{PackageInfo}}. - public async Task> GetAvailablePackages(CancellationToken cancellationToken, - bool withRegistration = true, - string packageType = null, - Version applicationVersion = null) - { - var data = new Dictionary - { - { "key", _securityManager.SupporterKey }, - { "mac", _applicationHost.SystemId }, - { "systemid", _applicationHost.SystemId } - }; - - if (withRegistration) - { - using (var json = await _httpClient.Post(MbAdmin.HttpsUrl + "service/package/retrieveall", data, cancellationToken).ConfigureAwait(false)) - { - cancellationToken.ThrowIfCancellationRequested(); - - var packages = _jsonSerializer.DeserializeFromStream>(json).ToList(); - - return FilterPackages(packages, packageType, applicationVersion); - } - } - else - { - var packages = await GetAvailablePackagesWithoutRegistrationInfo(cancellationToken).ConfigureAwait(false); - - return FilterPackages(packages.ToList(), packageType, applicationVersion); - } - } - - private DateTime _lastPackageUpdateTime; - - /// - /// Gets all available packages. - /// - /// The cancellation token. - /// Task{List{PackageInfo}}. - public async Task> GetAvailablePackagesWithoutRegistrationInfo(CancellationToken cancellationToken) - { - _logger.Info("Opening {0}", PackageCachePath); - try - { - using (var stream = _fileSystem.OpenRead(PackageCachePath)) - { - var packages = _jsonSerializer.DeserializeFromStream>(stream).ToList(); - - if (DateTime.UtcNow - _lastPackageUpdateTime > GetCacheLength()) - { - UpdateCachedPackages(CancellationToken.None, false); - } - - return packages; - } - } - catch (Exception) - { - - } - - _lastPackageUpdateTime = DateTime.MinValue; - await UpdateCachedPackages(cancellationToken, true).ConfigureAwait(false); - using (var stream = _fileSystem.OpenRead(PackageCachePath)) - { - return _jsonSerializer.DeserializeFromStream>(stream).ToList(); - } - } - - private string PackageCachePath - { - get { return Path.Combine(_appPaths.CachePath, "serverpackages.json"); } - } - - private readonly SemaphoreSlim _updateSemaphore = new SemaphoreSlim(1, 1); - private async Task UpdateCachedPackages(CancellationToken cancellationToken, bool throwErrors) - { - await _updateSemaphore.WaitAsync(cancellationToken).ConfigureAwait(false); - - try - { - if (DateTime.UtcNow - _lastPackageUpdateTime < GetCacheLength()) - { - return; - } - - var tempFile = await _httpClient.GetTempFile(new HttpRequestOptions - { - Url = MbAdmin.HttpUrl + "service/MB3Packages.json", - CancellationToken = cancellationToken, - Progress = new Progress() - - }).ConfigureAwait(false); - - _fileSystem.CreateDirectory(Path.GetDirectoryName(PackageCachePath)); - - _fileSystem.CopyFile(tempFile, PackageCachePath, true); - _lastPackageUpdateTime = DateTime.UtcNow; - } - catch (Exception ex) - { - _logger.ErrorException("Error updating package cache", ex); - - if (throwErrors) - { - throw; - } - } - finally - { - _updateSemaphore.Release(); - } - } - - private TimeSpan GetCacheLength() - { - switch (_config.CommonConfiguration.SystemUpdateLevel) - { - case PackageVersionClass.Beta: - return TimeSpan.FromMinutes(30); - case PackageVersionClass.Dev: - return TimeSpan.FromMinutes(3); - default: - return TimeSpan.FromHours(24); - } - } - - protected IEnumerable FilterPackages(List packages) - { - foreach (var package in packages) - { - package.versions = package.versions.Where(v => !string.IsNullOrWhiteSpace(v.sourceUrl)) - .OrderByDescending(GetPackageVersion).ToList(); - } - - // Remove packages with no versions - packages = packages.Where(p => p.versions.Any()).ToList(); - - return packages; - } - - protected IEnumerable FilterPackages(List packages, string packageType, Version applicationVersion) - { - foreach (var package in packages) - { - package.versions = package.versions.Where(v => !string.IsNullOrWhiteSpace(v.sourceUrl)) - .OrderByDescending(GetPackageVersion).ToList(); - } - - if (!string.IsNullOrWhiteSpace(packageType)) - { - packages = packages.Where(p => string.Equals(p.type, packageType, StringComparison.OrdinalIgnoreCase)).ToList(); - } - - // If an app version was supplied, filter the versions for each package to only include supported versions - if (applicationVersion != null) - { - foreach (var package in packages) - { - package.versions = package.versions.Where(v => IsPackageVersionUpToDate(v, applicationVersion)).ToList(); - } - } - - // Remove packages with no versions - packages = packages.Where(p => p.versions.Any()).ToList(); - - return packages; - } - - /// - /// Determines whether [is package version up to date] [the specified package version info]. - /// - /// The package version info. - /// The current server version. - /// true if [is package version up to date] [the specified package version info]; otherwise, false. - private bool IsPackageVersionUpToDate(PackageVersionInfo packageVersionInfo, Version currentServerVersion) - { - if (string.IsNullOrEmpty(packageVersionInfo.requiredVersionStr)) - { - return true; - } - - Version requiredVersion; - - return Version.TryParse(packageVersionInfo.requiredVersionStr, out requiredVersion) && currentServerVersion >= requiredVersion; - } - - /// - /// Gets the package. - /// - /// The name. - /// The assembly guid - /// The classification. - /// The version. - /// Task{PackageVersionInfo}. - public async Task GetPackage(string name, string guid, PackageVersionClass classification, Version version) - { - var packages = await GetAvailablePackages(CancellationToken.None).ConfigureAwait(false); - - var package = packages.FirstOrDefault(p => string.Equals(p.guid, guid ?? "none", StringComparison.OrdinalIgnoreCase)) - ?? packages.FirstOrDefault(p => p.name.Equals(name, StringComparison.OrdinalIgnoreCase)); - - if (package == null) - { - return null; - } - - return package.versions.FirstOrDefault(v => GetPackageVersion(v).Equals(version) && v.classification == classification); - } - - /// - /// Gets the latest compatible version. - /// - /// The name. - /// The assembly guid if this is a plug-in - /// The current server version. - /// The classification. - /// Task{PackageVersionInfo}. - public async Task GetLatestCompatibleVersion(string name, string guid, Version currentServerVersion, PackageVersionClass classification = PackageVersionClass.Release) - { - var packages = await GetAvailablePackages(CancellationToken.None).ConfigureAwait(false); - - return GetLatestCompatibleVersion(packages, name, guid, currentServerVersion, classification); - } - - /// - /// Gets the latest compatible version. - /// - /// The available packages. - /// The name. - /// The current server version. - /// The classification. - /// PackageVersionInfo. - public PackageVersionInfo GetLatestCompatibleVersion(IEnumerable availablePackages, string name, string guid, Version currentServerVersion, PackageVersionClass classification = PackageVersionClass.Release) - { - var package = availablePackages.FirstOrDefault(p => string.Equals(p.guid, guid ?? "none", StringComparison.OrdinalIgnoreCase)) - ?? availablePackages.FirstOrDefault(p => p.name.Equals(name, StringComparison.OrdinalIgnoreCase)); - - if (package == null) - { - return null; - } - - return package.versions - .OrderByDescending(GetPackageVersion) - .FirstOrDefault(v => v.classification <= classification && IsPackageVersionUpToDate(v, currentServerVersion)); - } - - /// - /// Gets the available plugin updates. - /// - /// The current server version. - /// if set to true [with auto update enabled]. - /// The cancellation token. - /// Task{IEnumerable{PackageVersionInfo}}. - public async Task> GetAvailablePluginUpdates(Version applicationVersion, bool withAutoUpdateEnabled, CancellationToken cancellationToken) - { - var catalog = await GetAvailablePackagesWithoutRegistrationInfo(cancellationToken).ConfigureAwait(false); - - var plugins = _applicationHost.Plugins.ToList(); - - if (withAutoUpdateEnabled) - { - plugins = plugins - .Where(p => _config.CommonConfiguration.EnableAutoUpdate) - .ToList(); - } - - // Figure out what needs to be installed - var packages = plugins.Select(p => - { - var latestPluginInfo = GetLatestCompatibleVersion(catalog, p.Name, p.Id.ToString(), applicationVersion, _config.CommonConfiguration.SystemUpdateLevel); - - return latestPluginInfo != null && GetPackageVersion(latestPluginInfo) > p.Version ? latestPluginInfo : null; - - }).Where(i => i != null).ToList(); - - return packages - .Where(p => !string.IsNullOrWhiteSpace(p.sourceUrl) && !CompletedInstallations.Any(i => string.Equals(i.AssemblyGuid, p.guid, StringComparison.OrdinalIgnoreCase))); - } - - /// - /// Installs the package. - /// - /// The package. - /// if set to true [is plugin]. - /// The progress. - /// The cancellation token. - /// Task. - /// package - public async Task InstallPackage(PackageVersionInfo package, bool isPlugin, IProgress progress, CancellationToken cancellationToken) - { - if (package == null) - { - throw new ArgumentNullException("package"); - } - - if (progress == null) - { - throw new ArgumentNullException("progress"); - } - - var installationInfo = new InstallationInfo - { - Id = Guid.NewGuid().ToString("N"), - Name = package.name, - AssemblyGuid = package.guid, - UpdateClass = package.classification, - Version = package.versionStr - }; - - var innerCancellationTokenSource = new CancellationTokenSource(); - - var tuple = new Tuple(installationInfo, innerCancellationTokenSource); - - // Add it to the in-progress list - lock (CurrentInstallations) - { - CurrentInstallations.Add(tuple); - } - - var innerProgress = new ActionableProgress(); - - // Whenever the progress updates, update the outer progress object and InstallationInfo - innerProgress.RegisterAction(percent => - { - progress.Report(percent); - - installationInfo.PercentComplete = percent; - }); - - var linkedToken = CancellationTokenSource.CreateLinkedTokenSource(cancellationToken, innerCancellationTokenSource.Token).Token; - - var installationEventArgs = new InstallationEventArgs - { - InstallationInfo = installationInfo, - PackageVersionInfo = package - }; - - EventHelper.FireEventIfNotNull(PackageInstalling, this, installationEventArgs, _logger); - - try - { - await InstallPackageInternal(package, isPlugin, innerProgress, linkedToken).ConfigureAwait(false); - - lock (CurrentInstallations) - { - CurrentInstallations.Remove(tuple); - } - - progress.Report(100); - - CompletedInstallations.Add(installationInfo); - - EventHelper.FireEventIfNotNull(PackageInstallationCompleted, this, installationEventArgs, _logger); - } - catch (OperationCanceledException) - { - lock (CurrentInstallations) - { - CurrentInstallations.Remove(tuple); - } - - _logger.Info("Package installation cancelled: {0} {1}", package.name, package.versionStr); - - EventHelper.FireEventIfNotNull(PackageInstallationCancelled, this, installationEventArgs, _logger); - - throw; - } - catch (Exception ex) - { - _logger.ErrorException("Package installation failed", ex); - - lock (CurrentInstallations) - { - CurrentInstallations.Remove(tuple); - } - - EventHelper.FireEventIfNotNull(PackageInstallationFailed, this, new InstallationFailedEventArgs - { - InstallationInfo = installationInfo, - Exception = ex - - }, _logger); - - throw; - } - finally - { - // Dispose the progress object and remove the installation from the in-progress list - innerProgress.Dispose(); - tuple.Item2.Dispose(); - } - } - - /// - /// Installs the package internal. - /// - /// The package. - /// if set to true [is plugin]. - /// The progress. - /// The cancellation token. - /// Task. - private async Task InstallPackageInternal(PackageVersionInfo package, bool isPlugin, IProgress progress, CancellationToken cancellationToken) - { - // Do the install - await PerformPackageInstallation(progress, package, cancellationToken).ConfigureAwait(false); - - // Do plugin-specific processing - if (isPlugin) - { - // Set last update time if we were installed before - var plugin = _applicationHost.Plugins.FirstOrDefault(p => string.Equals(p.Id.ToString(), package.guid, StringComparison.OrdinalIgnoreCase)) - ?? _applicationHost.Plugins.FirstOrDefault(p => p.Name.Equals(package.name, StringComparison.OrdinalIgnoreCase)); - - if (plugin != null) - { - OnPluginUpdated(plugin, package); - } - else - { - OnPluginInstalled(package); - } - } - } - - private async Task PerformPackageInstallation(IProgress progress, PackageVersionInfo package, CancellationToken cancellationToken) - { - // Target based on if it is an archive or single assembly - // zip archives are assumed to contain directory structures relative to our ProgramDataPath - var extension = Path.GetExtension(package.targetFilename); - var isArchive = string.Equals(extension, ".zip", StringComparison.OrdinalIgnoreCase) || string.Equals(extension, ".rar", StringComparison.OrdinalIgnoreCase) || string.Equals(extension, ".7z", StringComparison.OrdinalIgnoreCase); - var target = Path.Combine(isArchive ? _appPaths.TempUpdatePath : _appPaths.PluginsPath, package.targetFilename); - - // Download to temporary file so that, if interrupted, it won't destroy the existing installation - var tempFile = await _httpClient.GetTempFile(new HttpRequestOptions - { - Url = package.sourceUrl, - CancellationToken = cancellationToken, - Progress = progress - - }).ConfigureAwait(false); - - cancellationToken.ThrowIfCancellationRequested(); - - // Validate with a checksum - var packageChecksum = string.IsNullOrWhiteSpace(package.checksum) ? Guid.Empty : new Guid(package.checksum); - if (packageChecksum != Guid.Empty) // support for legacy uploads for now - { - using (var crypto = new MD5CryptoServiceProvider()) - using (var stream = new BufferedStream(_fileSystem.OpenRead(tempFile), 100000)) - { - var check = Guid.Parse(BitConverter.ToString(crypto.ComputeHash(stream)).Replace("-", String.Empty)); - if (check != packageChecksum) - { - throw new ApplicationException(string.Format("Download validation failed for {0}. Probably corrupted during transfer.", package.name)); - } - } - } - - cancellationToken.ThrowIfCancellationRequested(); - - // Success - move it to the real target - try - { - _fileSystem.CreateDirectory(Path.GetDirectoryName(target)); - _fileSystem.CopyFile(tempFile, target, true); - //If it is an archive - write out a version file so we know what it is - if (isArchive) - { - File.WriteAllText(target + ".ver", package.versionStr); - } - } - catch (IOException e) - { - _logger.ErrorException("Error attempting to move file from {0} to {1}", e, tempFile, target); - throw; - } - - try - { - _fileSystem.DeleteFile(tempFile); - } - catch (IOException e) - { - // Don't fail because of this - _logger.ErrorException("Error deleting temp file {0]", e, tempFile); - } - } - - /// - /// Uninstalls a plugin - /// - /// The plugin. - /// - public void UninstallPlugin(IPlugin plugin) - { - plugin.OnUninstalling(); - - // Remove it the quick way for now - _applicationHost.RemovePlugin(plugin); - - _fileSystem.DeleteFile(plugin.AssemblyFilePath); - - OnPluginUninstalled(plugin); - - _applicationHost.NotifyPendingRestart(); - } - - /// - /// Releases unmanaged and - optionally - managed resources. - /// - /// true to release both managed and unmanaged resources; false to release only unmanaged resources. - protected virtual void Dispose(bool dispose) - { - if (dispose) - { - lock (CurrentInstallations) - { - foreach (var tuple in CurrentInstallations) - { - tuple.Item2.Dispose(); - } - - CurrentInstallations.Clear(); - } - } - } - - public void Dispose() - { - Dispose(true); - } - } -} diff --git a/MediaBrowser.Model/IO/IFileSystem.cs b/MediaBrowser.Model/IO/IFileSystem.cs index b2ca6924f..4f920c3b0 100644 --- a/MediaBrowser.Model/IO/IFileSystem.cs +++ b/MediaBrowser.Model/IO/IFileSystem.cs @@ -249,6 +249,10 @@ namespace MediaBrowser.Model.IO /// System.String. string ReadAllText(string path); + byte[] ReadAllBytes(string path); + + void WriteAllBytes(string path, byte[] bytes); + /// /// Writes all text. /// diff --git a/MediaBrowser.Model/MediaBrowser.Model.csproj b/MediaBrowser.Model/MediaBrowser.Model.csproj index 912decfa3..75669b44f 100644 --- a/MediaBrowser.Model/MediaBrowser.Model.csproj +++ b/MediaBrowser.Model/MediaBrowser.Model.csproj @@ -408,6 +408,7 @@ + diff --git a/MediaBrowser.Model/System/ISystemEvents.cs b/MediaBrowser.Model/System/ISystemEvents.cs new file mode 100644 index 000000000..c50f8ce03 --- /dev/null +++ b/MediaBrowser.Model/System/ISystemEvents.cs @@ -0,0 +1,10 @@ +using System; + +namespace MediaBrowser.Model.System +{ + public interface ISystemEvents + { + event EventHandler Resume; + event EventHandler Suspend; + } +} diff --git a/MediaBrowser.Server.Implementations/MediaBrowser.Server.Implementations.csproj b/MediaBrowser.Server.Implementations/MediaBrowser.Server.Implementations.csproj index ec1fbb479..24ce4097f 100644 --- a/MediaBrowser.Server.Implementations/MediaBrowser.Server.Implementations.csproj +++ b/MediaBrowser.Server.Implementations/MediaBrowser.Server.Implementations.csproj @@ -287,6 +287,9 @@ + + + @@ -296,6 +299,7 @@ + diff --git a/MediaBrowser.Server.Implementations/Security/MBLicenseFile.cs b/MediaBrowser.Server.Implementations/Security/MBLicenseFile.cs new file mode 100644 index 000000000..7b37925ba --- /dev/null +++ b/MediaBrowser.Server.Implementations/Security/MBLicenseFile.cs @@ -0,0 +1,157 @@ +using System; +using System.Collections.Concurrent; +using System.Collections.Generic; +using System.Globalization; +using System.IO; +using System.Linq; +using System.Security.Cryptography; +using System.Text; +using MediaBrowser.Common.Configuration; + +namespace MediaBrowser.Server.Implementations.Security +{ + internal class MBLicenseFile + { + private readonly IApplicationPaths _appPaths; + + public string RegKey + { + get { return _regKey; } + set + { + if (value != _regKey) + { + //if key is changed - clear out our saved validations + _updateRecords.Clear(); + _regKey = value; + } + } + } + + private string Filename + { + get + { + return Path.Combine(_appPaths.ConfigurationDirectoryPath, "mb.lic"); + } + } + + private readonly ConcurrentDictionary _updateRecords = new ConcurrentDictionary(); + private readonly object _fileLock = new object(); + private string _regKey; + + public MBLicenseFile(IApplicationPaths appPaths) + { + _appPaths = appPaths; + + Load(); + } + + private void SetUpdateRecord(Guid key, DateTime value) + { + _updateRecords.AddOrUpdate(key, value, (k, v) => value); + } + + public void AddRegCheck(string featureId) + { + using (var provider = new MD5CryptoServiceProvider()) + { + var key = new Guid(provider.ComputeHash(Encoding.Unicode.GetBytes(featureId))); + var value = DateTime.UtcNow; + + SetUpdateRecord(key, value); + Save(); + } + + } + + public void RemoveRegCheck(string featureId) + { + using (var provider = new MD5CryptoServiceProvider()) + { + var key = new Guid(provider.ComputeHash(Encoding.Unicode.GetBytes(featureId))); + DateTime val; + + _updateRecords.TryRemove(key, out val); + + Save(); + } + + } + + public DateTime LastChecked(string featureId) + { + using (var provider = new MD5CryptoServiceProvider()) + { + DateTime last; + _updateRecords.TryGetValue(new Guid(provider.ComputeHash(Encoding.Unicode.GetBytes(featureId))), out last); + + // guard agains people just putting a large number in the file + return last < DateTime.UtcNow ? last : DateTime.MinValue; + } + } + + private void Load() + { + string[] contents = null; + var licenseFile = Filename; + lock (_fileLock) + { + try + { + contents = File.ReadAllLines(licenseFile); + } + catch (DirectoryNotFoundException) + { + File.Create(licenseFile).Close(); + } + catch (FileNotFoundException) + { + File.Create(licenseFile).Close(); + } + } + if (contents != null && contents.Length > 0) + { + //first line is reg key + RegKey = contents[0]; + + //next is legacy key + if (contents.Length > 1) + { + // Don't need this anymore + } + + //the rest of the lines should be pairs of features and timestamps + for (var i = 2; i < contents.Length; i = i + 2) + { + var feat = Guid.Parse(contents[i]); + + SetUpdateRecord(feat, new DateTime(Convert.ToInt64(contents[i + 1]))); + } + } + } + + public void Save() + { + //build our array + var lines = new List + { + RegKey, + + // Legacy key + string.Empty + }; + + foreach (var pair in _updateRecords + .ToList()) + { + lines.Add(pair.Key.ToString()); + lines.Add(pair.Value.Ticks.ToString(CultureInfo.InvariantCulture)); + } + + var licenseFile = Filename; + Directory.CreateDirectory(Path.GetDirectoryName(licenseFile)); + lock (_fileLock) File.WriteAllLines(licenseFile, lines); + } + } +} diff --git a/MediaBrowser.Server.Implementations/Security/PluginSecurityManager.cs b/MediaBrowser.Server.Implementations/Security/PluginSecurityManager.cs new file mode 100644 index 000000000..7dc78a3af --- /dev/null +++ b/MediaBrowser.Server.Implementations/Security/PluginSecurityManager.cs @@ -0,0 +1,342 @@ +using System; +using System.Collections.Generic; +using System.IO; +using System.Linq; +using System.Net; +using System.Threading; +using System.Threading.Tasks; +using MediaBrowser.Common; +using MediaBrowser.Common.Configuration; +using MediaBrowser.Common.Net; +using MediaBrowser.Common.Security; +using MediaBrowser.Controller; +using MediaBrowser.Model.Entities; +using MediaBrowser.Model.IO; +using MediaBrowser.Model.Logging; +using MediaBrowser.Model.Net; +using MediaBrowser.Model.Serialization; + +namespace MediaBrowser.Server.Implementations.Security +{ + /// + /// Class PluginSecurityManager + /// + public class PluginSecurityManager : ISecurityManager + { + private const string MBValidateUrl = "https://mb3admin.com/admin/service/registration/validate"; + private const string AppstoreRegUrl = /*MbAdmin.HttpsUrl*/ "https://mb3admin.com/admin/service/appstore/register"; + + /// + /// The _is MB supporter + /// + private bool? _isMbSupporter; + /// + /// The _is MB supporter initialized + /// + private bool _isMbSupporterInitialized; + /// + /// The _is MB supporter sync lock + /// + private object _isMbSupporterSyncLock = new object(); + + /// + /// Gets a value indicating whether this instance is MB supporter. + /// + /// true if this instance is MB supporter; otherwise, false. + public bool IsMBSupporter + { + get + { + LazyInitializer.EnsureInitialized(ref _isMbSupporter, ref _isMbSupporterInitialized, ref _isMbSupporterSyncLock, () => GetSupporterRegistrationStatus().Result.IsRegistered); + return _isMbSupporter.Value; + } + } + + private MBLicenseFile _licenseFile; + private MBLicenseFile LicenseFile + { + get { return _licenseFile ?? (_licenseFile = new MBLicenseFile(_appPaths)); } + } + + private readonly IHttpClient _httpClient; + private readonly IJsonSerializer _jsonSerializer; + private readonly IServerApplicationHost _appHost; + private readonly ILogger _logger; + private readonly IApplicationPaths _appPaths; + private readonly IFileSystem _fileSystem; + + private IEnumerable _registeredEntities; + protected IEnumerable RegisteredEntities + { + get + { + return _registeredEntities ?? (_registeredEntities = _appHost.GetExports()); + } + } + + /// + /// Initializes a new instance of the class. + /// + public PluginSecurityManager(IServerApplicationHost appHost, IHttpClient httpClient, IJsonSerializer jsonSerializer, + IApplicationPaths appPaths, ILogManager logManager, IFileSystem fileSystem) + { + if (httpClient == null) + { + throw new ArgumentNullException("httpClient"); + } + + _appHost = appHost; + _httpClient = httpClient; + _jsonSerializer = jsonSerializer; + _appPaths = appPaths; + _fileSystem = fileSystem; + _logger = logManager.GetLogger("SecurityManager"); + } + + /// + /// Load all registration info for all entities that require registration + /// + /// + public async Task LoadAllRegistrationInfo() + { + var tasks = new List(); + + ResetSupporterInfo(); + tasks.AddRange(RegisteredEntities.Select(i => i.LoadRegistrationInfoAsync())); + await Task.WhenAll(tasks); + } + + /// + /// Gets the registration status. + /// This overload supports existing plug-ins. + /// + /// The feature. + /// The MB2 equivalent. + /// Task{MBRegistrationRecord}. + public Task GetRegistrationStatus(string feature, string mb2Equivalent = null) + { + return GetRegistrationStatusInternal(feature, mb2Equivalent); + } + + /// + /// Gets the registration status. + /// + /// The feature. + /// The MB2 equivalent. + /// The version of this feature + /// Task{MBRegistrationRecord}. + public Task GetRegistrationStatus(string feature, string mb2Equivalent, string version) + { + return GetRegistrationStatusInternal(feature, mb2Equivalent, version); + } + + private Task GetSupporterRegistrationStatus() + { + return GetRegistrationStatusInternal("MBSupporter", null, _appHost.ApplicationVersion.ToString()); + } + + /// + /// Gets or sets the supporter key. + /// + /// The supporter key. + public string SupporterKey + { + get + { + return LicenseFile.RegKey; + } + set + { + var newValue = value; + if (newValue != null) + { + newValue = newValue.Trim(); + } + + if (newValue != LicenseFile.RegKey) + { + LicenseFile.RegKey = newValue; + LicenseFile.Save(); + + // re-load registration info + Task.Run(() => LoadAllRegistrationInfo()); + } + } + } + + /// + /// Register an app store sale with our back-end. It will validate the transaction with the store + /// and then register the proper feature and then fill in the supporter key on success. + /// + /// Json parameters to send to admin server + public async Task RegisterAppStoreSale(string parameters) + { + var options = new HttpRequestOptions() + { + Url = AppstoreRegUrl, + CancellationToken = CancellationToken.None, + BufferContent = false + }; + options.RequestHeaders.Add("X-Emby-Token", _appHost.SystemId); + options.RequestContent = parameters; + options.RequestContentType = "application/json"; + + try + { + using (var response = await _httpClient.Post(options).ConfigureAwait(false)) + { + var reg = _jsonSerializer.DeserializeFromStream(response.Content); + + if (reg == null) + { + var msg = "Result from appstore registration was null."; + _logger.Error(msg); + throw new ApplicationException(msg); + } + if (!String.IsNullOrEmpty(reg.key)) + { + SupporterKey = reg.key; + } + } + + } + catch (ApplicationException) + { + SaveAppStoreInfo(parameters); + throw; + } + catch (HttpException e) + { + _logger.ErrorException("Error registering appstore purchase {0}", e, parameters ?? "NO PARMS SENT"); + + if (e.StatusCode.HasValue && e.StatusCode.Value == HttpStatusCode.PaymentRequired) + { + throw new PaymentRequiredException(); + } + throw new ApplicationException("Error registering store sale"); + } + catch (Exception e) + { + _logger.ErrorException("Error registering appstore purchase {0}", e, parameters ?? "NO PARMS SENT"); + SaveAppStoreInfo(parameters); + //TODO - could create a re-try routine on start-up if this file is there. For now we can handle manually. + throw new ApplicationException("Error registering store sale"); + } + + } + + private void SaveAppStoreInfo(string info) + { + // Save all transaction information to a file + + try + { + _fileSystem.WriteAllText(Path.Combine(_appPaths.ProgramDataPath, "apptrans-error.txt"), info); + } + catch (IOException) + { + + } + } + + private async Task GetRegistrationStatusInternal(string feature, + string mb2Equivalent = null, + string version = null) + { + var lastChecked = LicenseFile.LastChecked(feature); + + //check the reg file first to alleviate strain on the MB admin server - must actually check in every 30 days tho + var reg = new RegRecord + { + // Cache the result for up to a week + registered = lastChecked > DateTime.UtcNow.AddDays(-7) + }; + + var success = reg.registered; + + if (!(lastChecked > DateTime.UtcNow.AddDays(-1))) + { + var data = new Dictionary + { + { "feature", feature }, + { "key", SupporterKey }, + { "mac", _appHost.SystemId }, + { "systemid", _appHost.SystemId }, + { "mb2equiv", mb2Equivalent }, + { "ver", version }, + { "platform", _appHost.OperatingSystemDisplayName }, + { "isservice", _appHost.IsRunningAsService.ToString().ToLower() } + }; + + try + { + var options = new HttpRequestOptions + { + Url = MBValidateUrl, + + // Seeing block length errors + EnableHttpCompression = false, + BufferContent = false + }; + + options.SetPostData(data); + + using (var json = (await _httpClient.Post(options).ConfigureAwait(false)).Content) + { + reg = _jsonSerializer.DeserializeFromStream(json); + success = true; + } + + if (reg.registered) + { + LicenseFile.AddRegCheck(feature); + } + else + { + LicenseFile.RemoveRegCheck(feature); + } + + } + catch (Exception e) + { + _logger.ErrorException("Error checking registration status of {0}", e, feature); + } + } + + var record = new MBRegistrationRecord + { + IsRegistered = reg.registered, + ExpirationDate = reg.expDate, + RegChecked = true, + RegError = !success + }; + + record.TrialVersion = IsInTrial(reg.expDate, record.RegChecked, record.IsRegistered); + record.IsValid = !record.RegChecked || record.IsRegistered || record.TrialVersion; + + return record; + } + + private bool IsInTrial(DateTime expirationDate, bool regChecked, bool isRegistered) + { + //don't set this until we've successfully obtained exp date + if (!regChecked) + { + return false; + } + + var isInTrial = expirationDate > DateTime.UtcNow; + + return isInTrial && !isRegistered; + } + + /// + /// Resets the supporter info. + /// + private void ResetSupporterInfo() + { + _isMbSupporter = null; + _isMbSupporterInitialized = false; + } + } +} \ No newline at end of file diff --git a/MediaBrowser.Server.Implementations/Security/RegRecord.cs b/MediaBrowser.Server.Implementations/Security/RegRecord.cs new file mode 100644 index 000000000..947ec629f --- /dev/null +++ b/MediaBrowser.Server.Implementations/Security/RegRecord.cs @@ -0,0 +1,12 @@ +using System; + +namespace MediaBrowser.Server.Implementations.Security +{ + class RegRecord + { + public string featId { get; set; } + public bool registered { get; set; } + public DateTime expDate { get; set; } + public string key { get; set; } + } +} \ No newline at end of file diff --git a/MediaBrowser.Server.Implementations/Updates/InstallationManager.cs b/MediaBrowser.Server.Implementations/Updates/InstallationManager.cs new file mode 100644 index 000000000..c6930e487 --- /dev/null +++ b/MediaBrowser.Server.Implementations/Updates/InstallationManager.cs @@ -0,0 +1,685 @@ +using System; +using System.Collections.Concurrent; +using System.Collections.Generic; +using System.IO; +using System.Linq; +using System.Security.Cryptography; +using System.Threading; +using System.Threading.Tasks; +using MediaBrowser.Common; +using MediaBrowser.Common.Configuration; +using MediaBrowser.Common.Events; +using MediaBrowser.Common.Net; +using MediaBrowser.Common.Plugins; +using MediaBrowser.Common.Progress; +using MediaBrowser.Common.Security; +using MediaBrowser.Common.Updates; +using MediaBrowser.Model.Events; +using MediaBrowser.Model.IO; +using MediaBrowser.Model.Logging; +using MediaBrowser.Model.Serialization; +using MediaBrowser.Model.Updates; + +namespace MediaBrowser.Server.Implementations.Updates +{ + /// + /// Manages all install, uninstall and update operations (both plugins and system) + /// + public class InstallationManager : IInstallationManager + { + public event EventHandler PackageInstalling; + public event EventHandler PackageInstallationCompleted; + public event EventHandler PackageInstallationFailed; + public event EventHandler PackageInstallationCancelled; + + /// + /// The current installations + /// + public List> CurrentInstallations { get; set; } + + /// + /// The completed installations + /// + public ConcurrentBag CompletedInstallations { get; set; } + + #region PluginUninstalled Event + /// + /// Occurs when [plugin uninstalled]. + /// + public event EventHandler> PluginUninstalled; + + /// + /// Called when [plugin uninstalled]. + /// + /// The plugin. + private void OnPluginUninstalled(IPlugin plugin) + { + EventHelper.FireEventIfNotNull(PluginUninstalled, this, new GenericEventArgs { Argument = plugin }, _logger); + } + #endregion + + #region PluginUpdated Event + /// + /// Occurs when [plugin updated]. + /// + public event EventHandler>> PluginUpdated; + /// + /// Called when [plugin updated]. + /// + /// The plugin. + /// The new version. + private void OnPluginUpdated(IPlugin plugin, PackageVersionInfo newVersion) + { + _logger.Info("Plugin updated: {0} {1} {2}", newVersion.name, newVersion.versionStr ?? string.Empty, newVersion.classification); + + EventHelper.FireEventIfNotNull(PluginUpdated, this, new GenericEventArgs> { Argument = new Tuple(plugin, newVersion) }, _logger); + + _applicationHost.NotifyPendingRestart(); + } + #endregion + + #region PluginInstalled Event + /// + /// Occurs when [plugin updated]. + /// + public event EventHandler> PluginInstalled; + /// + /// Called when [plugin installed]. + /// + /// The package. + private void OnPluginInstalled(PackageVersionInfo package) + { + _logger.Info("New plugin installed: {0} {1} {2}", package.name, package.versionStr ?? string.Empty, package.classification); + + EventHelper.FireEventIfNotNull(PluginInstalled, this, new GenericEventArgs { Argument = package }, _logger); + + _applicationHost.NotifyPendingRestart(); + } + #endregion + + /// + /// The _logger + /// + private readonly ILogger _logger; + + private readonly IApplicationPaths _appPaths; + private readonly IHttpClient _httpClient; + private readonly IJsonSerializer _jsonSerializer; + private readonly ISecurityManager _securityManager; + private readonly IConfigurationManager _config; + private readonly IFileSystem _fileSystem; + + /// + /// Gets the application host. + /// + /// The application host. + private readonly IApplicationHost _applicationHost; + + public InstallationManager(ILogger logger, IApplicationHost appHost, IApplicationPaths appPaths, IHttpClient httpClient, IJsonSerializer jsonSerializer, ISecurityManager securityManager, IConfigurationManager config, IFileSystem fileSystem) + { + if (logger == null) + { + throw new ArgumentNullException("logger"); + } + + CurrentInstallations = new List>(); + CompletedInstallations = new ConcurrentBag(); + + _applicationHost = appHost; + _appPaths = appPaths; + _httpClient = httpClient; + _jsonSerializer = jsonSerializer; + _securityManager = securityManager; + _config = config; + _fileSystem = fileSystem; + _logger = logger; + } + + private Version GetPackageVersion(PackageVersionInfo version) + { + return new Version(ValueOrDefault(version.versionStr, "0.0.0.1")); + } + + private static string ValueOrDefault(string str, string def) + { + return string.IsNullOrEmpty(str) ? def : str; + } + + /// + /// Gets all available packages. + /// + /// Task{List{PackageInfo}}. + public async Task> GetAvailablePackages(CancellationToken cancellationToken, + bool withRegistration = true, + string packageType = null, + Version applicationVersion = null) + { + var data = new Dictionary + { + { "key", _securityManager.SupporterKey }, + { "mac", _applicationHost.SystemId }, + { "systemid", _applicationHost.SystemId } + }; + + if (withRegistration) + { + using (var json = await _httpClient.Post("https://www.mb3admin.com/admin/service/package/retrieveall", data, cancellationToken).ConfigureAwait(false)) + { + cancellationToken.ThrowIfCancellationRequested(); + + var packages = _jsonSerializer.DeserializeFromStream>(json).ToList(); + + return FilterPackages(packages, packageType, applicationVersion); + } + } + else + { + var packages = await GetAvailablePackagesWithoutRegistrationInfo(cancellationToken).ConfigureAwait(false); + + return FilterPackages(packages.ToList(), packageType, applicationVersion); + } + } + + private DateTime _lastPackageUpdateTime; + + /// + /// Gets all available packages. + /// + /// The cancellation token. + /// Task{List{PackageInfo}}. + public async Task> GetAvailablePackagesWithoutRegistrationInfo(CancellationToken cancellationToken) + { + _logger.Info("Opening {0}", PackageCachePath); + try + { + using (var stream = _fileSystem.OpenRead(PackageCachePath)) + { + var packages = _jsonSerializer.DeserializeFromStream>(stream).ToList(); + + if (DateTime.UtcNow - _lastPackageUpdateTime > GetCacheLength()) + { + UpdateCachedPackages(CancellationToken.None, false); + } + + return packages; + } + } + catch (Exception) + { + + } + + _lastPackageUpdateTime = DateTime.MinValue; + await UpdateCachedPackages(cancellationToken, true).ConfigureAwait(false); + using (var stream = _fileSystem.OpenRead(PackageCachePath)) + { + return _jsonSerializer.DeserializeFromStream>(stream).ToList(); + } + } + + private string PackageCachePath + { + get { return Path.Combine(_appPaths.CachePath, "serverpackages.json"); } + } + + private readonly SemaphoreSlim _updateSemaphore = new SemaphoreSlim(1, 1); + private async Task UpdateCachedPackages(CancellationToken cancellationToken, bool throwErrors) + { + await _updateSemaphore.WaitAsync(cancellationToken).ConfigureAwait(false); + + try + { + if (DateTime.UtcNow - _lastPackageUpdateTime < GetCacheLength()) + { + return; + } + + var tempFile = await _httpClient.GetTempFile(new HttpRequestOptions + { + Url = "https://www.mb3admin.com/admin/service/MB3Packages.json", + CancellationToken = cancellationToken, + Progress = new Progress() + + }).ConfigureAwait(false); + + _fileSystem.CreateDirectory(Path.GetDirectoryName(PackageCachePath)); + + _fileSystem.CopyFile(tempFile, PackageCachePath, true); + _lastPackageUpdateTime = DateTime.UtcNow; + } + catch (Exception ex) + { + _logger.ErrorException("Error updating package cache", ex); + + if (throwErrors) + { + throw; + } + } + finally + { + _updateSemaphore.Release(); + } + } + + private TimeSpan GetCacheLength() + { + switch (_config.CommonConfiguration.SystemUpdateLevel) + { + case PackageVersionClass.Beta: + return TimeSpan.FromMinutes(30); + case PackageVersionClass.Dev: + return TimeSpan.FromMinutes(3); + default: + return TimeSpan.FromHours(24); + } + } + + protected IEnumerable FilterPackages(List packages) + { + foreach (var package in packages) + { + package.versions = package.versions.Where(v => !string.IsNullOrWhiteSpace(v.sourceUrl)) + .OrderByDescending(GetPackageVersion).ToList(); + } + + // Remove packages with no versions + packages = packages.Where(p => p.versions.Any()).ToList(); + + return packages; + } + + protected IEnumerable FilterPackages(List packages, string packageType, Version applicationVersion) + { + foreach (var package in packages) + { + package.versions = package.versions.Where(v => !string.IsNullOrWhiteSpace(v.sourceUrl)) + .OrderByDescending(GetPackageVersion).ToList(); + } + + if (!string.IsNullOrWhiteSpace(packageType)) + { + packages = packages.Where(p => string.Equals(p.type, packageType, StringComparison.OrdinalIgnoreCase)).ToList(); + } + + // If an app version was supplied, filter the versions for each package to only include supported versions + if (applicationVersion != null) + { + foreach (var package in packages) + { + package.versions = package.versions.Where(v => IsPackageVersionUpToDate(v, applicationVersion)).ToList(); + } + } + + // Remove packages with no versions + packages = packages.Where(p => p.versions.Any()).ToList(); + + return packages; + } + + /// + /// Determines whether [is package version up to date] [the specified package version info]. + /// + /// The package version info. + /// The current server version. + /// true if [is package version up to date] [the specified package version info]; otherwise, false. + private bool IsPackageVersionUpToDate(PackageVersionInfo packageVersionInfo, Version currentServerVersion) + { + if (string.IsNullOrEmpty(packageVersionInfo.requiredVersionStr)) + { + return true; + } + + Version requiredVersion; + + return Version.TryParse(packageVersionInfo.requiredVersionStr, out requiredVersion) && currentServerVersion >= requiredVersion; + } + + /// + /// Gets the package. + /// + /// The name. + /// The assembly guid + /// The classification. + /// The version. + /// Task{PackageVersionInfo}. + public async Task GetPackage(string name, string guid, PackageVersionClass classification, Version version) + { + var packages = await GetAvailablePackages(CancellationToken.None).ConfigureAwait(false); + + var package = packages.FirstOrDefault(p => string.Equals(p.guid, guid ?? "none", StringComparison.OrdinalIgnoreCase)) + ?? packages.FirstOrDefault(p => p.name.Equals(name, StringComparison.OrdinalIgnoreCase)); + + if (package == null) + { + return null; + } + + return package.versions.FirstOrDefault(v => GetPackageVersion(v).Equals(version) && v.classification == classification); + } + + /// + /// Gets the latest compatible version. + /// + /// The name. + /// The assembly guid if this is a plug-in + /// The current server version. + /// The classification. + /// Task{PackageVersionInfo}. + public async Task GetLatestCompatibleVersion(string name, string guid, Version currentServerVersion, PackageVersionClass classification = PackageVersionClass.Release) + { + var packages = await GetAvailablePackages(CancellationToken.None).ConfigureAwait(false); + + return GetLatestCompatibleVersion(packages, name, guid, currentServerVersion, classification); + } + + /// + /// Gets the latest compatible version. + /// + /// The available packages. + /// The name. + /// The current server version. + /// The classification. + /// PackageVersionInfo. + public PackageVersionInfo GetLatestCompatibleVersion(IEnumerable availablePackages, string name, string guid, Version currentServerVersion, PackageVersionClass classification = PackageVersionClass.Release) + { + var package = availablePackages.FirstOrDefault(p => string.Equals(p.guid, guid ?? "none", StringComparison.OrdinalIgnoreCase)) + ?? availablePackages.FirstOrDefault(p => p.name.Equals(name, StringComparison.OrdinalIgnoreCase)); + + if (package == null) + { + return null; + } + + return package.versions + .OrderByDescending(GetPackageVersion) + .FirstOrDefault(v => v.classification <= classification && IsPackageVersionUpToDate(v, currentServerVersion)); + } + + /// + /// Gets the available plugin updates. + /// + /// The current server version. + /// if set to true [with auto update enabled]. + /// The cancellation token. + /// Task{IEnumerable{PackageVersionInfo}}. + public async Task> GetAvailablePluginUpdates(Version applicationVersion, bool withAutoUpdateEnabled, CancellationToken cancellationToken) + { + var catalog = await GetAvailablePackagesWithoutRegistrationInfo(cancellationToken).ConfigureAwait(false); + + var plugins = _applicationHost.Plugins.ToList(); + + if (withAutoUpdateEnabled) + { + plugins = plugins + .Where(p => _config.CommonConfiguration.EnableAutoUpdate) + .ToList(); + } + + // Figure out what needs to be installed + var packages = plugins.Select(p => + { + var latestPluginInfo = GetLatestCompatibleVersion(catalog, p.Name, p.Id.ToString(), applicationVersion, _config.CommonConfiguration.SystemUpdateLevel); + + return latestPluginInfo != null && GetPackageVersion(latestPluginInfo) > p.Version ? latestPluginInfo : null; + + }).Where(i => i != null).ToList(); + + return packages + .Where(p => !string.IsNullOrWhiteSpace(p.sourceUrl) && !CompletedInstallations.Any(i => string.Equals(i.AssemblyGuid, p.guid, StringComparison.OrdinalIgnoreCase))); + } + + /// + /// Installs the package. + /// + /// The package. + /// if set to true [is plugin]. + /// The progress. + /// The cancellation token. + /// Task. + /// package + public async Task InstallPackage(PackageVersionInfo package, bool isPlugin, IProgress progress, CancellationToken cancellationToken) + { + if (package == null) + { + throw new ArgumentNullException("package"); + } + + if (progress == null) + { + throw new ArgumentNullException("progress"); + } + + var installationInfo = new InstallationInfo + { + Id = Guid.NewGuid().ToString("N"), + Name = package.name, + AssemblyGuid = package.guid, + UpdateClass = package.classification, + Version = package.versionStr + }; + + var innerCancellationTokenSource = new CancellationTokenSource(); + + var tuple = new Tuple(installationInfo, innerCancellationTokenSource); + + // Add it to the in-progress list + lock (CurrentInstallations) + { + CurrentInstallations.Add(tuple); + } + + var innerProgress = new ActionableProgress(); + + // Whenever the progress updates, update the outer progress object and InstallationInfo + innerProgress.RegisterAction(percent => + { + progress.Report(percent); + + installationInfo.PercentComplete = percent; + }); + + var linkedToken = CancellationTokenSource.CreateLinkedTokenSource(cancellationToken, innerCancellationTokenSource.Token).Token; + + var installationEventArgs = new InstallationEventArgs + { + InstallationInfo = installationInfo, + PackageVersionInfo = package + }; + + EventHelper.FireEventIfNotNull(PackageInstalling, this, installationEventArgs, _logger); + + try + { + await InstallPackageInternal(package, isPlugin, innerProgress, linkedToken).ConfigureAwait(false); + + lock (CurrentInstallations) + { + CurrentInstallations.Remove(tuple); + } + + progress.Report(100); + + CompletedInstallations.Add(installationInfo); + + EventHelper.FireEventIfNotNull(PackageInstallationCompleted, this, installationEventArgs, _logger); + } + catch (OperationCanceledException) + { + lock (CurrentInstallations) + { + CurrentInstallations.Remove(tuple); + } + + _logger.Info("Package installation cancelled: {0} {1}", package.name, package.versionStr); + + EventHelper.FireEventIfNotNull(PackageInstallationCancelled, this, installationEventArgs, _logger); + + throw; + } + catch (Exception ex) + { + _logger.ErrorException("Package installation failed", ex); + + lock (CurrentInstallations) + { + CurrentInstallations.Remove(tuple); + } + + EventHelper.FireEventIfNotNull(PackageInstallationFailed, this, new InstallationFailedEventArgs + { + InstallationInfo = installationInfo, + Exception = ex + + }, _logger); + + throw; + } + finally + { + // Dispose the progress object and remove the installation from the in-progress list + innerProgress.Dispose(); + tuple.Item2.Dispose(); + } + } + + /// + /// Installs the package internal. + /// + /// The package. + /// if set to true [is plugin]. + /// The progress. + /// The cancellation token. + /// Task. + private async Task InstallPackageInternal(PackageVersionInfo package, bool isPlugin, IProgress progress, CancellationToken cancellationToken) + { + // Do the install + await PerformPackageInstallation(progress, package, cancellationToken).ConfigureAwait(false); + + // Do plugin-specific processing + if (isPlugin) + { + // Set last update time if we were installed before + var plugin = _applicationHost.Plugins.FirstOrDefault(p => string.Equals(p.Id.ToString(), package.guid, StringComparison.OrdinalIgnoreCase)) + ?? _applicationHost.Plugins.FirstOrDefault(p => p.Name.Equals(package.name, StringComparison.OrdinalIgnoreCase)); + + if (plugin != null) + { + OnPluginUpdated(plugin, package); + } + else + { + OnPluginInstalled(package); + } + } + } + + private async Task PerformPackageInstallation(IProgress progress, PackageVersionInfo package, CancellationToken cancellationToken) + { + // Target based on if it is an archive or single assembly + // zip archives are assumed to contain directory structures relative to our ProgramDataPath + var extension = Path.GetExtension(package.targetFilename); + var isArchive = string.Equals(extension, ".zip", StringComparison.OrdinalIgnoreCase) || string.Equals(extension, ".rar", StringComparison.OrdinalIgnoreCase) || string.Equals(extension, ".7z", StringComparison.OrdinalIgnoreCase); + var target = Path.Combine(isArchive ? _appPaths.TempUpdatePath : _appPaths.PluginsPath, package.targetFilename); + + // Download to temporary file so that, if interrupted, it won't destroy the existing installation + var tempFile = await _httpClient.GetTempFile(new HttpRequestOptions + { + Url = package.sourceUrl, + CancellationToken = cancellationToken, + Progress = progress + + }).ConfigureAwait(false); + + cancellationToken.ThrowIfCancellationRequested(); + + // Validate with a checksum + var packageChecksum = string.IsNullOrWhiteSpace(package.checksum) ? Guid.Empty : new Guid(package.checksum); + if (packageChecksum != Guid.Empty) // support for legacy uploads for now + { + using (var crypto = new MD5CryptoServiceProvider()) + using (var stream = new BufferedStream(_fileSystem.OpenRead(tempFile), 100000)) + { + var check = Guid.Parse(BitConverter.ToString(crypto.ComputeHash(stream)).Replace("-", String.Empty)); + if (check != packageChecksum) + { + throw new ApplicationException(string.Format("Download validation failed for {0}. Probably corrupted during transfer.", package.name)); + } + } + } + + cancellationToken.ThrowIfCancellationRequested(); + + // Success - move it to the real target + try + { + _fileSystem.CreateDirectory(Path.GetDirectoryName(target)); + _fileSystem.CopyFile(tempFile, target, true); + //If it is an archive - write out a version file so we know what it is + if (isArchive) + { + _fileSystem.WriteAllText(target + ".ver", package.versionStr); + } + } + catch (IOException e) + { + _logger.ErrorException("Error attempting to move file from {0} to {1}", e, tempFile, target); + throw; + } + + try + { + _fileSystem.DeleteFile(tempFile); + } + catch (IOException e) + { + // Don't fail because of this + _logger.ErrorException("Error deleting temp file {0]", e, tempFile); + } + } + + /// + /// Uninstalls a plugin + /// + /// The plugin. + /// + public void UninstallPlugin(IPlugin plugin) + { + plugin.OnUninstalling(); + + // Remove it the quick way for now + _applicationHost.RemovePlugin(plugin); + + _fileSystem.DeleteFile(plugin.AssemblyFilePath); + + OnPluginUninstalled(plugin); + + _applicationHost.NotifyPendingRestart(); + } + + /// + /// Releases unmanaged and - optionally - managed resources. + /// + /// true to release both managed and unmanaged resources; false to release only unmanaged resources. + protected virtual void Dispose(bool dispose) + { + if (dispose) + { + lock (CurrentInstallations) + { + foreach (var tuple in CurrentInstallations) + { + tuple.Item2.Dispose(); + } + + CurrentInstallations.Clear(); + } + } + } + + public void Dispose() + { + Dispose(true); + } + } +} diff --git a/MediaBrowser.Server.Mono/Program.cs b/MediaBrowser.Server.Mono/Program.cs index f970f68db..051b233dc 100644 --- a/MediaBrowser.Server.Mono/Program.cs +++ b/MediaBrowser.Server.Mono/Program.cs @@ -72,7 +72,7 @@ namespace MediaBrowser.Server.Mono private static void RunApplication(ServerApplicationPaths appPaths, ILogManager logManager, StartupOptions options) { - SystemEvents.SessionEnding += SystemEvents_SessionEnding; + Microsoft.Win32.SystemEvents.SessionEnding += SystemEvents_SessionEnding; // Allow all https requests ServicePointManager.ServerCertificateValidationCallback = new RemoteCertificateValidationCallback(delegate { return true; }); diff --git a/MediaBrowser.Server.Startup.Common/ApplicationHost.cs b/MediaBrowser.Server.Startup.Common/ApplicationHost.cs index 3ef63fd94..b26edb895 100644 --- a/MediaBrowser.Server.Startup.Common/ApplicationHost.cs +++ b/MediaBrowser.Server.Startup.Common/ApplicationHost.cs @@ -104,6 +104,8 @@ using MediaBrowser.Common.Implementations.Serialization; using MediaBrowser.Common.Implementations.Updates; using MediaBrowser.Common.IO; using MediaBrowser.Common.Plugins; +using MediaBrowser.Common.Security; +using MediaBrowser.Common.Updates; using MediaBrowser.Controller.Entities.Audio; using MediaBrowser.Controller.Entities.Movies; using MediaBrowser.Controller.Entities.TV; @@ -120,6 +122,7 @@ using MediaBrowser.Model.Xml; using MediaBrowser.Server.Implementations.Archiving; using MediaBrowser.Server.Implementations.Reflection; using MediaBrowser.Server.Implementations.Serialization; +using MediaBrowser.Server.Implementations.Updates; using MediaBrowser.Server.Implementations.Xml; using OpenSubtitlesHandler; using ServiceStack; @@ -226,6 +229,17 @@ namespace MediaBrowser.Server.Startup.Common private IMediaSourceManager MediaSourceManager { get; set; } private IPlaylistManager PlaylistManager { get; set; } + /// + /// Gets or sets the installation manager. + /// + /// The installation manager. + protected IInstallationManager InstallationManager { get; private set; } + /// + /// Gets the security manager. + /// + /// The security manager. + protected ISecurityManager SecurityManager { get; private set; } + /// /// Gets or sets the zip client. /// @@ -405,6 +419,11 @@ namespace MediaBrowser.Server.Startup.Common return new MemoryStreamProvider(); } + protected override ISystemEvents CreateSystemEvents() + { + return new SystemEvents(LogManager.GetLogger("SystemEvents")); + } + protected override IJsonSerializer CreateJsonSerializer() { try @@ -636,7 +655,6 @@ namespace MediaBrowser.Server.Startup.Common { var migrations = new List { - new MovieDbEpisodeProviderMigration(ServerConfigurationManager), new DbMigration(ServerConfigurationManager, TaskManager) }; @@ -660,6 +678,12 @@ namespace MediaBrowser.Server.Startup.Common { await base.RegisterResources(progress).ConfigureAwait(false); + SecurityManager = new PluginSecurityManager(this, HttpClient, JsonSerializer, ApplicationPaths, LogManager, FileSystemManager); + RegisterSingleInstance(SecurityManager); + + InstallationManager = new InstallationManager(LogManager.GetLogger("InstallationManager"), this, ApplicationPaths, HttpClient, JsonSerializer, SecurityManager, ConfigurationManager, FileSystemManager); + RegisterSingleInstance(InstallationManager); + ZipClient = new ZipClient(FileSystemManager); RegisterSingleInstance(ZipClient); diff --git a/MediaBrowser.Server.Startup.Common/MediaBrowser.Server.Startup.Common.csproj b/MediaBrowser.Server.Startup.Common/MediaBrowser.Server.Startup.Common.csproj index c0ef484c9..53dbac53f 100644 --- a/MediaBrowser.Server.Startup.Common/MediaBrowser.Server.Startup.Common.csproj +++ b/MediaBrowser.Server.Startup.Common/MediaBrowser.Server.Startup.Common.csproj @@ -77,11 +77,11 @@ - + diff --git a/MediaBrowser.Server.Startup.Common/Migrations/MovieDbEpisodeProviderMigration.cs b/MediaBrowser.Server.Startup.Common/Migrations/MovieDbEpisodeProviderMigration.cs deleted file mode 100644 index cd2122e57..000000000 --- a/MediaBrowser.Server.Startup.Common/Migrations/MovieDbEpisodeProviderMigration.cs +++ /dev/null @@ -1,44 +0,0 @@ -using MediaBrowser.Controller.Configuration; -using System.Linq; -using System.Threading.Tasks; - -namespace MediaBrowser.Server.Startup.Common.Migrations -{ - class MovieDbEpisodeProviderMigration : IVersionMigration - { - private readonly IServerConfigurationManager _config; - private const string _providerName = "TheMovieDb"; - - public MovieDbEpisodeProviderMigration(IServerConfigurationManager config) - { - _config = config; - } - - public async Task Run() - { - var migrationKey = this.GetType().FullName; - var migrationKeyList = _config.Configuration.Migrations.ToList(); - - if (!migrationKeyList.Contains(migrationKey)) - { - foreach (var metaDataOption in _config.Configuration.MetadataOptions) - { - if (metaDataOption.ItemType == "Episode") - { - var disabledFetchers = metaDataOption.DisabledMetadataFetchers.ToList(); - if (!disabledFetchers.Contains(_providerName)) - { - disabledFetchers.Add(_providerName); - metaDataOption.DisabledMetadataFetchers = disabledFetchers.ToArray(); - } - } - } - - migrationKeyList.Add(migrationKey); - _config.Configuration.Migrations = migrationKeyList.ToArray(); - _config.SaveConfiguration(); - } - - } - } -} diff --git a/MediaBrowser.Server.Startup.Common/SystemEvents.cs b/MediaBrowser.Server.Startup.Common/SystemEvents.cs new file mode 100644 index 000000000..088d04a24 --- /dev/null +++ b/MediaBrowser.Server.Startup.Common/SystemEvents.cs @@ -0,0 +1,34 @@ +using System; +using MediaBrowser.Common.Events; +using MediaBrowser.Model.Logging; +using MediaBrowser.Model.System; + +namespace MediaBrowser.Server.Startup.Common +{ + public class SystemEvents : ISystemEvents + { + public event EventHandler Resume; + public event EventHandler Suspend; + + private readonly ILogger _logger; + + public SystemEvents(ILogger logger) + { + _logger = logger; + Microsoft.Win32.SystemEvents.PowerModeChanged += SystemEvents_PowerModeChanged; + } + + private void SystemEvents_PowerModeChanged(object sender, Microsoft.Win32.PowerModeChangedEventArgs e) + { + switch (e.Mode) + { + case Microsoft.Win32.PowerModes.Resume: + EventHelper.FireEventIfNotNull(Resume, this, EventArgs.Empty, _logger); + break; + case Microsoft.Win32.PowerModes.Suspend: + EventHelper.FireEventIfNotNull(Suspend, this, EventArgs.Empty, _logger); + break; + } + } + } +} diff --git a/MediaBrowser.ServerApplication/MainStartup.cs b/MediaBrowser.ServerApplication/MainStartup.cs index 9287be3e2..6296f0117 100644 --- a/MediaBrowser.ServerApplication/MainStartup.cs +++ b/MediaBrowser.ServerApplication/MainStartup.cs @@ -351,8 +351,8 @@ namespace MediaBrowser.ServerApplication task = InstallVcredist2013IfNeeded(_appHost, _logger); Task.WaitAll(task); - SystemEvents.SessionEnding += SystemEvents_SessionEnding; - SystemEvents.SessionSwitch += SystemEvents_SessionSwitch; + Microsoft.Win32.SystemEvents.SessionEnding += SystemEvents_SessionEnding; + Microsoft.Win32.SystemEvents.SessionSwitch += SystemEvents_SessionSwitch; HideSplashScreen(); -- cgit v1.2.3 From 13d8110ce29a7d976c3e88dc4b330922964ac11a Mon Sep 17 00:00:00 2001 From: Luke Pulverenti Date: Mon, 31 Oct 2016 23:07:45 -0400 Subject: make api project portable --- .../IO/ManagedFileSystem.cs | 17 ++ Emby.Common.Implementations/project.json | 3 +- MediaBrowser.Api/ApiEntryPoint.cs | 41 ++--- MediaBrowser.Api/BasePeriodicWebSocketListener.cs | 27 ++- MediaBrowser.Api/EnvironmentService.cs | 27 +-- MediaBrowser.Api/Images/ImageByNameService.cs | 2 +- MediaBrowser.Api/Images/ImageService.cs | 2 +- MediaBrowser.Api/Images/RemoteImageService.cs | 21 +-- MediaBrowser.Api/ItemLookupService.cs | 19 +- .../Library/FileOrganizationService.cs | 4 +- .../Library/LibraryStructureService.cs | 2 +- MediaBrowser.Api/LiveTv/LiveTvService.cs | 9 +- MediaBrowser.Api/MediaBrowser.Api.csproj | 20 +-- MediaBrowser.Api/MediaBrowser.Api.nuget.targets | 6 + MediaBrowser.Api/Playback/BaseStreamingService.cs | 199 ++++++++++----------- MediaBrowser.Api/Playback/Hls/DynamicHlsService.cs | 7 +- MediaBrowser.Api/Playback/Hls/HlsSegmentService.cs | 6 +- MediaBrowser.Api/Playback/TranscodingThrottler.cs | 16 +- .../ScheduledTasksWebSocketListener.cs | 12 +- .../Session/SessionInfoWebSocketListener.cs | 7 +- MediaBrowser.Api/Sync/SyncJobWebSocketListener.cs | 8 +- MediaBrowser.Api/Sync/SyncJobsWebSocketListener.cs | 8 +- .../System/ActivityLogWebSocketListener.cs | 7 +- .../System/SystemInfoWebSocketListener.cs | 7 +- MediaBrowser.Api/System/SystemService.cs | 2 +- MediaBrowser.Api/project.json | 17 ++ MediaBrowser.Controller/LiveTv/ILiveTvManager.cs | 3 + MediaBrowser.Model/Diagnostics/IProcess.cs | 19 ++ MediaBrowser.Model/Diagnostics/IProcessFactory.cs | 27 +++ MediaBrowser.Model/IO/IFileSystem.cs | 2 + MediaBrowser.Model/MediaBrowser.Model.csproj | 4 + MediaBrowser.Model/Threading/ITimer.cs | 10 ++ MediaBrowser.Model/Threading/ITimerFactory.cs | 10 ++ .../Manager/ItemImageProvider.cs | 2 +- .../LiveTv/LiveTvManager.cs | 10 ++ 35 files changed, 327 insertions(+), 256 deletions(-) create mode 100644 MediaBrowser.Api/MediaBrowser.Api.nuget.targets create mode 100644 MediaBrowser.Api/project.json create mode 100644 MediaBrowser.Model/Diagnostics/IProcess.cs create mode 100644 MediaBrowser.Model/Diagnostics/IProcessFactory.cs create mode 100644 MediaBrowser.Model/Threading/ITimer.cs create mode 100644 MediaBrowser.Model/Threading/ITimerFactory.cs (limited to 'MediaBrowser.Model/IO/IFileSystem.cs') diff --git a/Emby.Common.Implementations/IO/ManagedFileSystem.cs b/Emby.Common.Implementations/IO/ManagedFileSystem.cs index bfc316d3f..a8aa1a3cd 100644 --- a/Emby.Common.Implementations/IO/ManagedFileSystem.cs +++ b/Emby.Common.Implementations/IO/ManagedFileSystem.cs @@ -577,6 +577,23 @@ namespace Emby.Common.Implementations.IO Directory.CreateDirectory(path); } + public List GetDrives() + { + // Only include drives in the ready state or this method could end up being very slow, waiting for drives to timeout + return DriveInfo.GetDrives().Where(d => d.IsReady).Select(d => new FileSystemMetadata + { + Name = GetName(d), + FullName = d.RootDirectory.FullName, + IsDirectory = true + + }).ToList(); + } + + private string GetName(DriveInfo drive) + { + return drive.Name; + } + public IEnumerable GetDirectories(string path, bool recursive = false) { var searchOption = recursive ? SearchOption.AllDirectories : SearchOption.TopDirectoryOnly; diff --git a/Emby.Common.Implementations/project.json b/Emby.Common.Implementations/project.json index 4cb5213ba..444d0e13e 100644 --- a/Emby.Common.Implementations/project.json +++ b/Emby.Common.Implementations/project.json @@ -43,7 +43,8 @@ "MediaBrowser.Model": { "target": "project" }, - "System.Net.Requests": "4.0.11", + "System.IO.FileSystem.DriveInfo": "4.0.0", + "System.Net.Requests": "4.0.11", "System.Xml.XmlSerializer": "4.0.11", "System.Net.Http": "4.1.0", "System.Net.Primitives": "4.0.11", diff --git a/MediaBrowser.Api/ApiEntryPoint.cs b/MediaBrowser.Api/ApiEntryPoint.cs index 588236a39..8f5b5eaaf 100644 --- a/MediaBrowser.Api/ApiEntryPoint.cs +++ b/MediaBrowser.Api/ApiEntryPoint.cs @@ -16,9 +16,10 @@ using System.Linq; using System.Threading; using System.Threading.Tasks; using MediaBrowser.Common.IO; -using MediaBrowser.Controller.IO; +using MediaBrowser.Model.Diagnostics; using MediaBrowser.Model.IO; using MediaBrowser.Model.Dto; +using MediaBrowser.Model.Threading; namespace MediaBrowser.Api { @@ -46,6 +47,8 @@ namespace MediaBrowser.Api private readonly ISessionManager _sessionManager; private readonly IFileSystem _fileSystem; private readonly IMediaSourceManager _mediaSourceManager; + public readonly ITimerFactory TimerFactory; + public readonly IProcessFactory ProcessFactory; /// /// The active transcoding jobs @@ -63,13 +66,15 @@ namespace MediaBrowser.Api /// The configuration. /// The file system. /// The media source manager. - public ApiEntryPoint(ILogger logger, ISessionManager sessionManager, IServerConfigurationManager config, IFileSystem fileSystem, IMediaSourceManager mediaSourceManager) + public ApiEntryPoint(ILogger logger, ISessionManager sessionManager, IServerConfigurationManager config, IFileSystem fileSystem, IMediaSourceManager mediaSourceManager, ITimerFactory timerFactory, IProcessFactory processFactory) { Logger = logger; _sessionManager = sessionManager; _config = config; _fileSystem = fileSystem; _mediaSourceManager = mediaSourceManager; + TimerFactory = timerFactory; + ProcessFactory = processFactory; Instance = this; _sessionManager.PlaybackProgress += _sessionManager_PlaybackProgress; @@ -116,7 +121,7 @@ namespace MediaBrowser.Api { DeleteEncodedMediaCache(); } - catch (DirectoryNotFoundException) + catch (FileNotFoundException) { // Don't clutter the log } @@ -168,7 +173,8 @@ namespace MediaBrowser.Api // Try to allow for some time to kill the ffmpeg processes and delete the partial stream files if (jobCount > 0) { - Thread.Sleep(1000); + var task = Task.Delay(1000); + Task.WaitAll(task); } } @@ -190,14 +196,14 @@ namespace MediaBrowser.Api string liveStreamId, string transcodingJobId, TranscodingJobType type, - Process process, + IProcess process, string deviceId, StreamState state, CancellationTokenSource cancellationTokenSource) { lock (_activeTranscodingJobs) { - var job = new TranscodingJob(Logger) + var job = new TranscodingJob(Logger, TimerFactory) { Type = type, Path = path, @@ -599,10 +605,6 @@ namespace MediaBrowser.Api { DeleteHlsPartialStreamFiles(path); } - } - catch (DirectoryNotFoundException) - { - } catch (FileNotFoundException) { @@ -650,10 +652,6 @@ namespace MediaBrowser.Api { //Logger.Debug("Deleting HLS file {0}", file); _fileSystem.DeleteFile(file); - } - catch (DirectoryNotFoundException) - { - } catch (FileNotFoundException) { @@ -706,7 +704,7 @@ namespace MediaBrowser.Api /// Gets or sets the process. /// /// The process. - public Process Process { get; set; } + public IProcess Process { get; set; } public ILogger Logger { get; private set; } /// /// Gets or sets the active request count. @@ -717,7 +715,9 @@ namespace MediaBrowser.Api /// Gets or sets the kill timer. /// /// The kill timer. - private Timer KillTimer { get; set; } + private ITimer KillTimer { get; set; } + + private readonly ITimerFactory _timerFactory; public string DeviceId { get; set; } @@ -747,9 +747,10 @@ namespace MediaBrowser.Api public DateTime LastPingDate { get; set; } public int PingTimeout { get; set; } - public TranscodingJob(ILogger logger) + public TranscodingJob(ILogger logger, ITimerFactory timerFactory) { Logger = logger; + _timerFactory = timerFactory; } public void StopKillTimer() @@ -775,12 +776,12 @@ namespace MediaBrowser.Api } } - public void StartKillTimer(TimerCallback callback) + public void StartKillTimer(Action callback) { StartKillTimer(callback, PingTimeout); } - public void StartKillTimer(TimerCallback callback, int intervalMs) + public void StartKillTimer(Action callback, int intervalMs) { if (HasExited) { @@ -792,7 +793,7 @@ namespace MediaBrowser.Api if (KillTimer == null) { //Logger.Debug("Starting kill timer at {0}ms. JobId {1} PlaySessionId {2}", intervalMs, Id, PlaySessionId); - KillTimer = new Timer(callback, this, intervalMs, Timeout.Infinite); + KillTimer = _timerFactory.Create(callback, this, intervalMs, Timeout.Infinite); } else { diff --git a/MediaBrowser.Api/BasePeriodicWebSocketListener.cs b/MediaBrowser.Api/BasePeriodicWebSocketListener.cs index b650cd4c2..fe7de387f 100644 --- a/MediaBrowser.Api/BasePeriodicWebSocketListener.cs +++ b/MediaBrowser.Api/BasePeriodicWebSocketListener.cs @@ -7,6 +7,7 @@ using System.Threading.Tasks; using MediaBrowser.Controller.Net; using MediaBrowser.Model.Logging; using MediaBrowser.Model.Net; +using MediaBrowser.Model.Threading; namespace MediaBrowser.Api { @@ -22,8 +23,8 @@ namespace MediaBrowser.Api /// /// The _active connections /// - protected readonly List> ActiveConnections = - new List>(); + protected readonly List> ActiveConnections = + new List>(); /// /// Gets the name. @@ -43,12 +44,9 @@ namespace MediaBrowser.Api /// protected ILogger Logger; - /// - /// Initializes a new instance of the class. - /// - /// The logger. - /// logger - protected BasePeriodicWebSocketListener(ILogger logger) + protected ITimerFactory TimerFactory { get; private set; } + + protected BasePeriodicWebSocketListener(ILogger logger, ITimerFactory timerFactory) { if (logger == null) { @@ -56,6 +54,7 @@ namespace MediaBrowser.Api } Logger = logger; + TimerFactory = timerFactory; } /// @@ -124,7 +123,7 @@ namespace MediaBrowser.Api Logger.Debug("{1} Begin transmitting over websocket to {0}", message.Connection.RemoteEndPoint, GetType().Name); var timer = SendOnTimer ? - new Timer(TimerCallback, message.Connection, Timeout.Infinite, Timeout.Infinite) : + TimerFactory.Create(TimerCallback, message.Connection, Timeout.Infinite, Timeout.Infinite) : null; var state = new TStateType @@ -137,7 +136,7 @@ namespace MediaBrowser.Api lock (ActiveConnections) { - ActiveConnections.Add(new Tuple(message.Connection, cancellationTokenSource, timer, state, semaphore)); + ActiveConnections.Add(new Tuple(message.Connection, cancellationTokenSource, timer, state, semaphore)); } if (timer != null) @@ -154,7 +153,7 @@ namespace MediaBrowser.Api { var connection = (IWebSocketConnection)state; - Tuple tuple; + Tuple tuple; lock (ActiveConnections) { @@ -177,7 +176,7 @@ namespace MediaBrowser.Api protected void SendData(bool force) { - List> tuples; + List> tuples; lock (ActiveConnections) { @@ -205,7 +204,7 @@ namespace MediaBrowser.Api } } - private async void SendData(Tuple tuple) + private async void SendData(Tuple tuple) { var connection = tuple.Item1; @@ -266,7 +265,7 @@ namespace MediaBrowser.Api /// Disposes the connection. /// /// The connection. - private void DisposeConnection(Tuple connection) + private void DisposeConnection(Tuple connection) { Logger.Debug("{1} stop transmitting over websocket to {0}", connection.Item1.RemoteEndPoint, GetType().Name); diff --git a/MediaBrowser.Api/EnvironmentService.cs b/MediaBrowser.Api/EnvironmentService.cs index c05446fbb..bab538c91 100644 --- a/MediaBrowser.Api/EnvironmentService.cs +++ b/MediaBrowser.Api/EnvironmentService.cs @@ -4,12 +4,8 @@ using MediaBrowser.Model.IO; using MediaBrowser.Model.Net; using System; using System.Collections.Generic; -using System.Globalization; using System.IO; using System.Linq; -using MediaBrowser.Common.IO; -using MediaBrowser.Controller.IO; -using MediaBrowser.Model.IO; using MediaBrowser.Model.Services; namespace MediaBrowser.Api @@ -110,6 +106,7 @@ namespace MediaBrowser.Api public class EnvironmentService : BaseApiService { const char UncSeparator = '\\'; + const string UncSeparatorString = "\\"; /// /// The _network manager @@ -139,7 +136,7 @@ namespace MediaBrowser.Api try { var qnap = "/share/CACHEDEV1_DATA"; - if (Directory.Exists(qnap)) + if (_fileSystem.DirectoryExists(qnap)) { result.Path = qnap; } @@ -166,7 +163,7 @@ namespace MediaBrowser.Api throw new ArgumentNullException("Path"); } - var networkPrefix = UncSeparator.ToString(CultureInfo.InvariantCulture) + UncSeparator.ToString(CultureInfo.InvariantCulture); + var networkPrefix = UncSeparatorString + UncSeparatorString; if (path.StartsWith(networkPrefix, StringComparison.OrdinalIgnoreCase) && path.LastIndexOf(UncSeparator) == 1) { @@ -203,13 +200,11 @@ namespace MediaBrowser.Api /// IEnumerable{FileSystemEntryInfo}. private IEnumerable GetDrives() { - // Only include drives in the ready state or this method could end up being very slow, waiting for drives to timeout - return DriveInfo.GetDrives().Where(d => d.IsReady).Select(d => new FileSystemEntryInfo + return _fileSystem.GetDrives().Select(d => new FileSystemEntryInfo { - Name = GetName(d), - Path = d.RootDirectory.FullName, + Name = d.Name, + Path = d.FullName, Type = FileSystemEntryType.Directory - }); } @@ -227,16 +222,6 @@ namespace MediaBrowser.Api return ToOptimizedSerializedResultUsingCache(result); } - /// - /// Gets the name. - /// - /// The drive. - /// System.String. - private string GetName(DriveInfo drive) - { - return drive.Name; - } - /// /// Gets the network shares. /// diff --git a/MediaBrowser.Api/Images/ImageByNameService.cs b/MediaBrowser.Api/Images/ImageByNameService.cs index 12ac8f68f..e0a9246c1 100644 --- a/MediaBrowser.Api/Images/ImageByNameService.cs +++ b/MediaBrowser.Api/Images/ImageByNameService.cs @@ -150,7 +150,7 @@ namespace MediaBrowser.Api.Images .OrderBy(i => i.Name) .ToList(); } - catch (DirectoryNotFoundException) + catch (IOException) { return new List(); } diff --git a/MediaBrowser.Api/Images/ImageService.cs b/MediaBrowser.Api/Images/ImageService.cs index dba90d273..c41907a87 100644 --- a/MediaBrowser.Api/Images/ImageService.cs +++ b/MediaBrowser.Api/Images/ImageService.cs @@ -320,7 +320,7 @@ namespace MediaBrowser.Api.Images { if (info.IsLocalFile) { - var fileInfo = new FileInfo(info.Path); + var fileInfo = _fileSystem.GetFileInfo(info.Path); length = fileInfo.Length; var size = _imageProcessor.GetImageSize(info); diff --git a/MediaBrowser.Api/Images/RemoteImageService.cs b/MediaBrowser.Api/Images/RemoteImageService.cs index f6c9c9767..eb871746d 100644 --- a/MediaBrowser.Api/Images/RemoteImageService.cs +++ b/MediaBrowser.Api/Images/RemoteImageService.cs @@ -234,21 +234,18 @@ namespace MediaBrowser.Api.Images try { - using (var reader = new StreamReader(pointerCachePath)) - { - contentPath = await reader.ReadToEndAsync().ConfigureAwait(false); - } + contentPath = _fileSystem.ReadAllText(pointerCachePath); - if (_fileSystem.FileExists(contentPath)) + if (_fileSystem.FileExists(contentPath)) { return await ResultFactory.GetStaticFileResult(Request, contentPath).ConfigureAwait(false); } } - catch (DirectoryNotFoundException) + catch (FileNotFoundException) { // Means the file isn't cached yet } - catch (FileNotFoundException) + catch (IOException) { // Means the file isn't cached yet } @@ -256,10 +253,7 @@ namespace MediaBrowser.Api.Images await DownloadImage(request.ImageUrl, urlHash, pointerCachePath).ConfigureAwait(false); // Read the pointer file again - using (var reader = new StreamReader(pointerCachePath)) - { - contentPath = await reader.ReadToEndAsync().ConfigureAwait(false); - } + contentPath = _fileSystem.ReadAllText(pointerCachePath); return await ResultFactory.GetStaticFileResult(Request, contentPath).ConfigureAwait(false); } @@ -294,10 +288,7 @@ namespace MediaBrowser.Api.Images } _fileSystem.CreateDirectory(Path.GetDirectoryName(pointerCachePath)); - using (var writer = new StreamWriter(pointerCachePath)) - { - await writer.WriteAsync(fullCachePath).ConfigureAwait(false); - } + _fileSystem.WriteAllText(pointerCachePath, fullCachePath); } /// diff --git a/MediaBrowser.Api/ItemLookupService.cs b/MediaBrowser.Api/ItemLookupService.cs index bdb9133d3..1700a10cd 100644 --- a/MediaBrowser.Api/ItemLookupService.cs +++ b/MediaBrowser.Api/ItemLookupService.cs @@ -247,21 +247,18 @@ namespace MediaBrowser.Api try { - using (var reader = new StreamReader(pointerCachePath)) - { - contentPath = await reader.ReadToEndAsync().ConfigureAwait(false); - } + contentPath = _fileSystem.ReadAllText(pointerCachePath); if (_fileSystem.FileExists(contentPath)) { return await ResultFactory.GetStaticFileResult(Request, contentPath).ConfigureAwait(false); } } - catch (DirectoryNotFoundException) + catch (FileNotFoundException) { // Means the file isn't cached yet } - catch (FileNotFoundException) + catch (IOException) { // Means the file isn't cached yet } @@ -269,10 +266,7 @@ namespace MediaBrowser.Api await DownloadImage(request.ProviderName, request.ImageUrl, urlHash, pointerCachePath).ConfigureAwait(false); // Read the pointer file again - using (var reader = new StreamReader(pointerCachePath)) - { - contentPath = await reader.ReadToEndAsync().ConfigureAwait(false); - } + contentPath = _fileSystem.ReadAllText(pointerCachePath); return await ResultFactory.GetStaticFileResult(Request, contentPath).ConfigureAwait(false); } @@ -303,10 +297,7 @@ namespace MediaBrowser.Api } _fileSystem.CreateDirectory(Path.GetDirectoryName(pointerCachePath)); - using (var writer = new StreamWriter(pointerCachePath)) - { - await writer.WriteAsync(fullCachePath).ConfigureAwait(false); - } + _fileSystem.WriteAllText(pointerCachePath, fullCachePath); } /// diff --git a/MediaBrowser.Api/Library/FileOrganizationService.cs b/MediaBrowser.Api/Library/FileOrganizationService.cs index 35948b453..ea610ac5c 100644 --- a/MediaBrowser.Api/Library/FileOrganizationService.cs +++ b/MediaBrowser.Api/Library/FileOrganizationService.cs @@ -204,10 +204,10 @@ namespace MediaBrowser.Api.Library public void Post(DeleteSmartMatchEntry request) { - request.Entries.ForEach(entry => + foreach (var entry in request.Entries) { _iFileOrganizationService.DeleteSmartMatchEntry(entry.Name, entry.Value); - }); + } } } } diff --git a/MediaBrowser.Api/Library/LibraryStructureService.cs b/MediaBrowser.Api/Library/LibraryStructureService.cs index 18afcd51e..c3bb80dcb 100644 --- a/MediaBrowser.Api/Library/LibraryStructureService.cs +++ b/MediaBrowser.Api/Library/LibraryStructureService.cs @@ -259,7 +259,7 @@ namespace MediaBrowser.Api.Library if (!_fileSystem.DirectoryExists(currentPath)) { - throw new DirectoryNotFoundException("The media collection does not exist"); + throw new FileNotFoundException("The media collection does not exist"); } if (!string.Equals(currentPath, newPath, StringComparison.OrdinalIgnoreCase) && _fileSystem.DirectoryExists(newPath)) diff --git a/MediaBrowser.Api/LiveTv/LiveTvService.cs b/MediaBrowser.Api/LiveTv/LiveTvService.cs index 83785466c..fffd7ad7e 100644 --- a/MediaBrowser.Api/LiveTv/LiveTvService.cs +++ b/MediaBrowser.Api/LiveTv/LiveTvService.cs @@ -22,7 +22,6 @@ using MediaBrowser.Controller.Configuration; using MediaBrowser.Controller.Entities.TV; using MediaBrowser.Controller.IO; using MediaBrowser.Model.Services; -using MediaBrowser.Server.Implementations.LiveTv.EmbyTV; namespace MediaBrowser.Api.LiveTv { @@ -708,11 +707,11 @@ namespace MediaBrowser.Api.LiveTv _fileSystem = fileSystem; } - public async Task Get(GetLiveRecordingFile request) + public object Get(GetLiveRecordingFile request) { - var path = EmbyTV.Current.GetActiveRecordingPath(request.Id); + var path = _liveTvManager.GetEmbyTvActiveRecordingPath(request.Id); - if (path == null) + if (string.IsNullOrWhiteSpace(path)) { throw new FileNotFoundException(); } @@ -729,7 +728,7 @@ namespace MediaBrowser.Api.LiveTv public async Task Get(GetLiveStreamFile request) { - var directStreamProvider = (await EmbyTV.Current.GetLiveStream(request.Id).ConfigureAwait(false)) as IDirectStreamProvider; + var directStreamProvider = (await _liveTvManager.GetEmbyTvLiveStream(request.Id).ConfigureAwait(false)) as IDirectStreamProvider; var outputHeaders = new Dictionary(StringComparer.OrdinalIgnoreCase); outputHeaders["Content-Type"] = Model.Net.MimeTypes.GetMimeType("file." + request.Container); diff --git a/MediaBrowser.Api/MediaBrowser.Api.csproj b/MediaBrowser.Api/MediaBrowser.Api.csproj index fdfbaae0f..df491ce85 100644 --- a/MediaBrowser.Api/MediaBrowser.Api.csproj +++ b/MediaBrowser.Api/MediaBrowser.Api.csproj @@ -11,10 +11,9 @@ MediaBrowser.Api 512 ..\ - v4.6 - - - + {786C830F-07A1-408B-BD7F-6EE04809D6DB};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC} + Profile7 + v4.5 true @@ -45,13 +44,6 @@ Always - - - - - - - Properties\SharedVersion.cs @@ -183,12 +175,8 @@ {7EEEB4BB-F3E8-48FC-B4C5-70F0FFF8329B} MediaBrowser.Model - - {2e781478-814d-4a48-9d80-bff206441a65} - MediaBrowser.Server.Implementations - - + diff --git a/MediaBrowser.Api/MediaBrowser.Api.nuget.targets b/MediaBrowser.Api/MediaBrowser.Api.nuget.targets new file mode 100644 index 000000000..e69ce0e64 --- /dev/null +++ b/MediaBrowser.Api/MediaBrowser.Api.nuget.targets @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/MediaBrowser.Api/Playback/BaseStreamingService.cs b/MediaBrowser.Api/Playback/BaseStreamingService.cs index ba3b3e348..c62889214 100644 --- a/MediaBrowser.Api/Playback/BaseStreamingService.cs +++ b/MediaBrowser.Api/Playback/BaseStreamingService.cs @@ -2,7 +2,6 @@ using MediaBrowser.Controller.Configuration; using MediaBrowser.Controller.Devices; using MediaBrowser.Controller.Dlna; -using MediaBrowser.Controller.Entities; using MediaBrowser.Controller.Library; using MediaBrowser.Controller.MediaEncoding; using MediaBrowser.Model.Dlna; @@ -14,18 +13,15 @@ using MediaBrowser.Model.MediaInfo; using MediaBrowser.Model.Serialization; using System; using System.Collections.Generic; -using System.Diagnostics; using System.Globalization; using System.IO; using System.Linq; using System.Text; using System.Threading; using System.Threading.Tasks; -using MediaBrowser.Common.IO; -using MediaBrowser.Model.IO; using MediaBrowser.Common.Net; using MediaBrowser.Controller; -using MediaBrowser.Controller.IO; +using MediaBrowser.Model.Diagnostics; namespace MediaBrowser.Api.Playback { @@ -1158,32 +1154,24 @@ namespace MediaBrowser.Api.Playback var transcodingId = Guid.NewGuid().ToString("N"); var commandLineArgs = GetCommandLineArguments(outputPath, state, true); - var process = new Process + var process = ApiEntryPoint.Instance.ProcessFactory.Create(new ProcessOptions { - StartInfo = new ProcessStartInfo - { - CreateNoWindow = true, - UseShellExecute = false, + CreateNoWindow = true, + UseShellExecute = false, - // Must consume both stdout and stderr or deadlocks may occur - //RedirectStandardOutput = true, - RedirectStandardError = true, - RedirectStandardInput = true, + // Must consume both stdout and stderr or deadlocks may occur + //RedirectStandardOutput = true, + RedirectStandardError = true, + RedirectStandardInput = true, - FileName = MediaEncoder.EncoderPath, - Arguments = commandLineArgs, + FileName = MediaEncoder.EncoderPath, + Arguments = commandLineArgs, - WindowStyle = ProcessWindowStyle.Hidden, - ErrorDialog = false - }, - - EnableRaisingEvents = true - }; - - if (!string.IsNullOrWhiteSpace(workingDirectory)) - { - process.StartInfo.WorkingDirectory = workingDirectory; - } + IsHidden = true, + ErrorDialog = false, + EnableRaisingEvents = true, + WorkingDirectory = !string.IsNullOrWhiteSpace(workingDirectory) ? workingDirectory : null + }); var transcodingJob = ApiEntryPoint.Instance.OnTranscodeBeginning(outputPath, state.Request.PlaySessionId, @@ -1268,7 +1256,7 @@ namespace MediaBrowser.Api.Playback { if (EnableThrottling(state)) { - transcodingJob.TranscodingThrottler = state.TranscodingThrottler = new TranscodingThrottler(transcodingJob, Logger, ServerConfigurationManager); + transcodingJob.TranscodingThrottler = state.TranscodingThrottler = new TranscodingThrottler(transcodingJob, Logger, ServerConfigurationManager, ApiEntryPoint.Instance.TimerFactory, FileSystem); state.TranscodingThrottler.Start(); } } @@ -1520,7 +1508,7 @@ namespace MediaBrowser.Api.Playback /// The process. /// The job. /// The state. - private void OnFfMpegProcessExited(Process process, TranscodingJob job, StreamState state) + private void OnFfMpegProcessExited(IProcess process, TranscodingJob job, StreamState state) { if (job != null) { @@ -2408,97 +2396,98 @@ namespace MediaBrowser.Api.Playback { return Task.FromResult(true); } + return Task.FromResult(true); - var dict = new Dictionary(); + //var dict = new Dictionary(); - var outputAudio = GetAudioEncoder(state); - if (!string.IsNullOrWhiteSpace(outputAudio)) - { - dict["outputAudio"] = outputAudio; - } - - var outputVideo = GetVideoEncoder(state); - if (!string.IsNullOrWhiteSpace(outputVideo)) - { - dict["outputVideo"] = outputVideo; - } + //var outputAudio = GetAudioEncoder(state); + //if (!string.IsNullOrWhiteSpace(outputAudio)) + //{ + // dict["outputAudio"] = outputAudio; + //} - if (ServerConfigurationManager.Configuration.CodecsUsed.Contains(outputAudio ?? string.Empty, StringComparer.OrdinalIgnoreCase) && - ServerConfigurationManager.Configuration.CodecsUsed.Contains(outputVideo ?? string.Empty, StringComparer.OrdinalIgnoreCase)) - { - return Task.FromResult(true); - } + //var outputVideo = GetVideoEncoder(state); + //if (!string.IsNullOrWhiteSpace(outputVideo)) + //{ + // dict["outputVideo"] = outputVideo; + //} - dict["id"] = AppHost.SystemId; - dict["type"] = state.VideoRequest == null ? "Audio" : "Video"; + //if (ServerConfigurationManager.Configuration.CodecsUsed.Contains(outputAudio ?? string.Empty, StringComparer.OrdinalIgnoreCase) && + // ServerConfigurationManager.Configuration.CodecsUsed.Contains(outputVideo ?? string.Empty, StringComparer.OrdinalIgnoreCase)) + //{ + // return Task.FromResult(true); + //} - var audioStream = state.AudioStream; - if (audioStream != null && !string.IsNullOrWhiteSpace(audioStream.Codec)) - { - dict["inputAudio"] = audioStream.Codec; - } + //dict["id"] = AppHost.SystemId; + //dict["type"] = state.VideoRequest == null ? "Audio" : "Video"; - var videoStream = state.VideoStream; - if (videoStream != null && !string.IsNullOrWhiteSpace(videoStream.Codec)) - { - dict["inputVideo"] = videoStream.Codec; - } + //var audioStream = state.AudioStream; + //if (audioStream != null && !string.IsNullOrWhiteSpace(audioStream.Codec)) + //{ + // dict["inputAudio"] = audioStream.Codec; + //} - var cert = GetType().Assembly.GetModules().First().GetSignerCertificate(); - if (cert != null) - { - dict["assemblySig"] = cert.GetCertHashString(); - dict["certSubject"] = cert.Subject ?? string.Empty; - dict["certIssuer"] = cert.Issuer ?? string.Empty; - } - else - { - return Task.FromResult(true); - } + //var videoStream = state.VideoStream; + //if (videoStream != null && !string.IsNullOrWhiteSpace(videoStream.Codec)) + //{ + // dict["inputVideo"] = videoStream.Codec; + //} - if (state.SupportedAudioCodecs.Count > 0) - { - dict["supportedAudioCodecs"] = string.Join(",", state.SupportedAudioCodecs.ToArray()); - } + //var cert = GetType().Assembly.GetModules().First().GetSignerCertificate(); + //if (cert != null) + //{ + // dict["assemblySig"] = cert.GetCertHashString(); + // dict["certSubject"] = cert.Subject ?? string.Empty; + // dict["certIssuer"] = cert.Issuer ?? string.Empty; + //} + //else + //{ + // return Task.FromResult(true); + //} - var auth = AuthorizationContext.GetAuthorizationInfo(Request); + //if (state.SupportedAudioCodecs.Count > 0) + //{ + // dict["supportedAudioCodecs"] = string.Join(",", state.SupportedAudioCodecs.ToArray()); + //} - dict["appName"] = auth.Client ?? string.Empty; - dict["appVersion"] = auth.Version ?? string.Empty; - dict["device"] = auth.Device ?? string.Empty; - dict["deviceId"] = auth.DeviceId ?? string.Empty; - dict["context"] = "streaming"; + //var auth = AuthorizationContext.GetAuthorizationInfo(Request); - //Logger.Info(JsonSerializer.SerializeToString(dict)); - if (!ServerConfigurationManager.Configuration.CodecsUsed.Contains(outputAudio ?? string.Empty, StringComparer.OrdinalIgnoreCase)) - { - var list = ServerConfigurationManager.Configuration.CodecsUsed.ToList(); - list.Add(outputAudio); - ServerConfigurationManager.Configuration.CodecsUsed = list.ToArray(); - } + //dict["appName"] = auth.Client ?? string.Empty; + //dict["appVersion"] = auth.Version ?? string.Empty; + //dict["device"] = auth.Device ?? string.Empty; + //dict["deviceId"] = auth.DeviceId ?? string.Empty; + //dict["context"] = "streaming"; - if (!ServerConfigurationManager.Configuration.CodecsUsed.Contains(outputVideo ?? string.Empty, StringComparer.OrdinalIgnoreCase)) - { - var list = ServerConfigurationManager.Configuration.CodecsUsed.ToList(); - list.Add(outputVideo); - ServerConfigurationManager.Configuration.CodecsUsed = list.ToArray(); - } + ////Logger.Info(JsonSerializer.SerializeToString(dict)); + //if (!ServerConfigurationManager.Configuration.CodecsUsed.Contains(outputAudio ?? string.Empty, StringComparer.OrdinalIgnoreCase)) + //{ + // var list = ServerConfigurationManager.Configuration.CodecsUsed.ToList(); + // list.Add(outputAudio); + // ServerConfigurationManager.Configuration.CodecsUsed = list.ToArray(); + //} - ServerConfigurationManager.SaveConfiguration(); + //if (!ServerConfigurationManager.Configuration.CodecsUsed.Contains(outputVideo ?? string.Empty, StringComparer.OrdinalIgnoreCase)) + //{ + // var list = ServerConfigurationManager.Configuration.CodecsUsed.ToList(); + // list.Add(outputVideo); + // ServerConfigurationManager.Configuration.CodecsUsed = list.ToArray(); + //} - //Logger.Info(JsonSerializer.SerializeToString(dict)); - var options = new HttpRequestOptions() - { - Url = "https://mb3admin.com/admin/service/transcoding/report", - CancellationToken = CancellationToken.None, - LogRequest = false, - LogErrors = false, - BufferContent = false - }; - options.RequestContent = JsonSerializer.SerializeToString(dict); - options.RequestContentType = "application/json"; + //ServerConfigurationManager.SaveConfiguration(); - return HttpClient.Post(options); + ////Logger.Info(JsonSerializer.SerializeToString(dict)); + //var options = new HttpRequestOptions() + //{ + // Url = "https://mb3admin.com/admin/service/transcoding/report", + // CancellationToken = CancellationToken.None, + // LogRequest = false, + // LogErrors = false, + // BufferContent = false + //}; + //options.RequestContent = JsonSerializer.SerializeToString(dict); + //options.RequestContentType = "application/json"; + + //return HttpClient.Post(options); } /// diff --git a/MediaBrowser.Api/Playback/Hls/DynamicHlsService.cs b/MediaBrowser.Api/Playback/Hls/DynamicHlsService.cs index 07ace5c2c..353e83205 100644 --- a/MediaBrowser.Api/Playback/Hls/DynamicHlsService.cs +++ b/MediaBrowser.Api/Playback/Hls/DynamicHlsService.cs @@ -356,7 +356,8 @@ namespace MediaBrowser.Api.Playback.Hls { Logger.ErrorException("Error deleting partial stream file(s) {0}", ex, file.FullName); - Thread.Sleep(100); + var task = Task.Delay(100); + Task.WaitAll(task); DeleteFile(file, retryCount + 1); } catch (Exception ex) @@ -378,7 +379,7 @@ namespace MediaBrowser.Api.Playback.Hls .OrderByDescending(fileSystem.GetLastWriteTimeUtc) .FirstOrDefault(); } - catch (DirectoryNotFoundException) + catch (IOException) { return null; } @@ -881,7 +882,7 @@ namespace MediaBrowser.Api.Playback.Hls if (state.IsOutputVideo && !EnableCopyTs(state) && !string.Equals(state.OutputVideoCodec, "copy", StringComparison.OrdinalIgnoreCase) && (state.Request.StartTimeTicks ?? 0) > 0) { - timestampOffsetParam = " -output_ts_offset " + MediaEncoder.GetTimeParameter(state.Request.StartTimeTicks ?? 0).ToString(CultureInfo.InvariantCulture); + timestampOffsetParam = " -output_ts_offset " + MediaEncoder.GetTimeParameter(state.Request.StartTimeTicks ?? 0); } var mapArgs = state.IsOutputVideo ? GetMapArgs(state) : string.Empty; diff --git a/MediaBrowser.Api/Playback/Hls/HlsSegmentService.cs b/MediaBrowser.Api/Playback/Hls/HlsSegmentService.cs index 4519268fc..65c1af79e 100644 --- a/MediaBrowser.Api/Playback/Hls/HlsSegmentService.cs +++ b/MediaBrowser.Api/Playback/Hls/HlsSegmentService.cs @@ -79,11 +79,13 @@ namespace MediaBrowser.Api.Playback.Hls { private readonly IServerApplicationPaths _appPaths; private readonly IServerConfigurationManager _config; + private readonly IFileSystem _fileSystem; - public HlsSegmentService(IServerApplicationPaths appPaths, IServerConfigurationManager config) + public HlsSegmentService(IServerApplicationPaths appPaths, IServerConfigurationManager config, IFileSystem fileSystem) { _appPaths = appPaths; _config = config; + _fileSystem = fileSystem; } public Task Get(GetHlsPlaylistLegacy request) @@ -111,7 +113,7 @@ namespace MediaBrowser.Api.Playback.Hls var normalizedPlaylistId = request.PlaylistId; - var playlistPath = Directory.EnumerateFiles(_config.ApplicationPaths.TranscodingTempPath, "*") + var playlistPath = _fileSystem.GetFilePaths(_config.ApplicationPaths.TranscodingTempPath) .FirstOrDefault(i => string.Equals(Path.GetExtension(i), ".m3u8", StringComparison.OrdinalIgnoreCase) && i.IndexOf(normalizedPlaylistId, StringComparison.OrdinalIgnoreCase) != -1); return GetFileResult(file, playlistPath); diff --git a/MediaBrowser.Api/Playback/TranscodingThrottler.cs b/MediaBrowser.Api/Playback/TranscodingThrottler.cs index a7d53cd44..c42d0c3e4 100644 --- a/MediaBrowser.Api/Playback/TranscodingThrottler.cs +++ b/MediaBrowser.Api/Playback/TranscodingThrottler.cs @@ -2,8 +2,8 @@ using MediaBrowser.Model.Configuration; using MediaBrowser.Model.Logging; using System; -using System.IO; -using System.Threading; +using MediaBrowser.Model.IO; +using MediaBrowser.Model.Threading; namespace MediaBrowser.Api.Playback { @@ -11,15 +11,19 @@ namespace MediaBrowser.Api.Playback { private readonly TranscodingJob _job; private readonly ILogger _logger; - private Timer _timer; + private ITimer _timer; private bool _isPaused; private readonly IConfigurationManager _config; + private readonly ITimerFactory _timerFactory; + private readonly IFileSystem _fileSystem; - public TranscodingThrottler(TranscodingJob job, ILogger logger, IConfigurationManager config) + public TranscodingThrottler(TranscodingJob job, ILogger logger, IConfigurationManager config, ITimerFactory timerFactory, IFileSystem fileSystem) { _job = job; _logger = logger; _config = config; + _timerFactory = timerFactory; + _fileSystem = fileSystem; } private EncodingOptions GetOptions() @@ -29,7 +33,7 @@ namespace MediaBrowser.Api.Playback public void Start() { - _timer = new Timer(TimerCallback, null, 5000, 5000); + _timer = _timerFactory.Create(TimerCallback, null, 5000, 5000); } private void TimerCallback(object state) @@ -120,7 +124,7 @@ namespace MediaBrowser.Api.Playback try { - var bytesTranscoded = job.BytesTranscoded ?? new FileInfo(path).Length; + var bytesTranscoded = job.BytesTranscoded ?? _fileSystem.GetFileInfo(path).Length; // Estimate the bytes the transcoder should be ahead double gapFactor = gapLengthInTicks; diff --git a/MediaBrowser.Api/ScheduledTasks/ScheduledTasksWebSocketListener.cs b/MediaBrowser.Api/ScheduledTasks/ScheduledTasksWebSocketListener.cs index 6e64345b9..ee74ec450 100644 --- a/MediaBrowser.Api/ScheduledTasks/ScheduledTasksWebSocketListener.cs +++ b/MediaBrowser.Api/ScheduledTasks/ScheduledTasksWebSocketListener.cs @@ -1,10 +1,10 @@ -using MediaBrowser.Controller.Net; -using MediaBrowser.Model.Events; +using MediaBrowser.Model.Events; using MediaBrowser.Model.Logging; using MediaBrowser.Model.Tasks; using System.Collections.Generic; using System.Linq; using System.Threading.Tasks; +using MediaBrowser.Model.Threading; namespace MediaBrowser.Api.ScheduledTasks { @@ -31,10 +31,8 @@ namespace MediaBrowser.Api.ScheduledTasks /// /// Initializes a new instance of the class. /// - /// The logger. - /// The task manager. - public ScheduledTasksWebSocketListener(ILogger logger, ITaskManager taskManager) - : base(logger) + public ScheduledTasksWebSocketListener(ILogger logger, ITaskManager taskManager, ITimerFactory timerFactory) + : base(logger, timerFactory) { TaskManager = taskManager; @@ -84,7 +82,7 @@ namespace MediaBrowser.Api.ScheduledTasks { TaskManager.TaskExecuting -= TaskManager_TaskExecuting; TaskManager.TaskCompleted -= TaskManager_TaskCompleted; - + base.Dispose(dispose); } } diff --git a/MediaBrowser.Api/Session/SessionInfoWebSocketListener.cs b/MediaBrowser.Api/Session/SessionInfoWebSocketListener.cs index 8f68569b7..b90a71852 100644 --- a/MediaBrowser.Api/Session/SessionInfoWebSocketListener.cs +++ b/MediaBrowser.Api/Session/SessionInfoWebSocketListener.cs @@ -6,6 +6,7 @@ using MediaBrowser.Model.Session; using System.Collections.Generic; using System.Linq; using System.Threading.Tasks; +using MediaBrowser.Model.Threading; namespace MediaBrowser.Api.Session { @@ -31,10 +32,8 @@ namespace MediaBrowser.Api.Session /// /// Initializes a new instance of the class. /// - /// The logger. - /// The session manager. - public SessionInfoWebSocketListener(ILogger logger, ISessionManager sessionManager) - : base(logger) + public SessionInfoWebSocketListener(ILogger logger, ISessionManager sessionManager, ITimerFactory timerFactory) + : base(logger, timerFactory) { _sessionManager = sessionManager; diff --git a/MediaBrowser.Api/Sync/SyncJobWebSocketListener.cs b/MediaBrowser.Api/Sync/SyncJobWebSocketListener.cs index 61a26d160..ac9749a6d 100644 --- a/MediaBrowser.Api/Sync/SyncJobWebSocketListener.cs +++ b/MediaBrowser.Api/Sync/SyncJobWebSocketListener.cs @@ -1,11 +1,11 @@ -using MediaBrowser.Controller.Net; -using MediaBrowser.Controller.Sync; +using MediaBrowser.Controller.Sync; using MediaBrowser.Model.Events; using MediaBrowser.Model.Logging; using MediaBrowser.Model.Sync; using System; using System.Linq; using System.Threading.Tasks; +using MediaBrowser.Model.Threading; namespace MediaBrowser.Api.Sync { @@ -26,8 +26,8 @@ namespace MediaBrowser.Api.Sync private readonly ISyncManager _syncManager; private string _jobId; - public SyncJobWebSocketListener(ILogger logger, ISyncManager syncManager) - : base(logger) + public SyncJobWebSocketListener(ILogger logger, ISyncManager syncManager, ITimerFactory timerFactory) + : base(logger, timerFactory) { _syncManager = syncManager; _syncManager.SyncJobCancelled += _syncManager_SyncJobCancelled; diff --git a/MediaBrowser.Api/Sync/SyncJobsWebSocketListener.cs b/MediaBrowser.Api/Sync/SyncJobsWebSocketListener.cs index 906a52209..5f9d1ff0e 100644 --- a/MediaBrowser.Api/Sync/SyncJobsWebSocketListener.cs +++ b/MediaBrowser.Api/Sync/SyncJobsWebSocketListener.cs @@ -1,9 +1,9 @@ -using MediaBrowser.Controller.Net; -using MediaBrowser.Controller.Sync; +using MediaBrowser.Controller.Sync; using MediaBrowser.Model.Logging; using MediaBrowser.Model.Sync; using System.Collections.Generic; using System.Threading.Tasks; +using MediaBrowser.Model.Threading; namespace MediaBrowser.Api.Sync { @@ -25,8 +25,8 @@ namespace MediaBrowser.Api.Sync private string _userId; private string _targetId; - public SyncJobsWebSocketListener(ILogger logger, ISyncManager syncManager) - : base(logger) + public SyncJobsWebSocketListener(ILogger logger, ISyncManager syncManager, ITimerFactory timerFactory) + : base(logger, timerFactory) { _syncManager = syncManager; _syncManager.SyncJobCancelled += _syncManager_SyncJobCancelled; diff --git a/MediaBrowser.Api/System/ActivityLogWebSocketListener.cs b/MediaBrowser.Api/System/ActivityLogWebSocketListener.cs index aaf9a3347..c641695dd 100644 --- a/MediaBrowser.Api/System/ActivityLogWebSocketListener.cs +++ b/MediaBrowser.Api/System/ActivityLogWebSocketListener.cs @@ -1,9 +1,9 @@ -using MediaBrowser.Controller.Net; -using MediaBrowser.Model.Activity; +using MediaBrowser.Model.Activity; using MediaBrowser.Model.Events; using MediaBrowser.Model.Logging; using System.Collections.Generic; using System.Threading.Tasks; +using MediaBrowser.Model.Threading; namespace MediaBrowser.Api.System { @@ -26,8 +26,7 @@ namespace MediaBrowser.Api.System /// private readonly IActivityManager _activityManager; - public ActivityLogWebSocketListener(ILogger logger, IActivityManager activityManager) - : base(logger) + public ActivityLogWebSocketListener(ILogger logger, ITimerFactory timerFactory, IActivityManager activityManager) : base(logger, timerFactory) { _activityManager = activityManager; _activityManager.EntryCreated += _activityManager_EntryCreated; diff --git a/MediaBrowser.Api/System/SystemInfoWebSocketListener.cs b/MediaBrowser.Api/System/SystemInfoWebSocketListener.cs index a53bfac27..8d74cc66c 100644 --- a/MediaBrowser.Api/System/SystemInfoWebSocketListener.cs +++ b/MediaBrowser.Api/System/SystemInfoWebSocketListener.cs @@ -3,6 +3,7 @@ using MediaBrowser.Controller.Net; using MediaBrowser.Model.Logging; using MediaBrowser.Model.System; using System.Threading.Tasks; +using MediaBrowser.Model.Threading; namespace MediaBrowser.Api.System { @@ -28,10 +29,8 @@ namespace MediaBrowser.Api.System /// /// Initializes a new instance of the class. /// - /// The logger. - /// The app host. - public SystemInfoWebSocketListener(ILogger logger, IServerApplicationHost appHost) - : base(logger) + public SystemInfoWebSocketListener(ILogger logger, IServerApplicationHost appHost, ITimerFactory timerFactory) + : base(logger, timerFactory) { _appHost = appHost; } diff --git a/MediaBrowser.Api/System/SystemService.cs b/MediaBrowser.Api/System/SystemService.cs index d67c1b47f..bdae670e1 100644 --- a/MediaBrowser.Api/System/SystemService.cs +++ b/MediaBrowser.Api/System/SystemService.cs @@ -126,7 +126,7 @@ namespace MediaBrowser.Api.System .Where(i => string.Equals(i.Extension, ".txt", StringComparison.OrdinalIgnoreCase)) .ToList(); } - catch (DirectoryNotFoundException) + catch (IOException) { files = new List(); } diff --git a/MediaBrowser.Api/project.json b/MediaBrowser.Api/project.json new file mode 100644 index 000000000..fbbe9eaf3 --- /dev/null +++ b/MediaBrowser.Api/project.json @@ -0,0 +1,17 @@ +{ + "frameworks":{ + "netstandard1.6":{ + "dependencies":{ + "NETStandard.Library":"1.6.0", + } + }, + ".NETPortable,Version=v4.5,Profile=Profile7":{ + "buildOptions": { + "define": [ ] + }, + "frameworkAssemblies":{ + + } + } + } +} \ No newline at end of file diff --git a/MediaBrowser.Controller/LiveTv/ILiveTvManager.cs b/MediaBrowser.Controller/LiveTv/ILiveTvManager.cs index 8e3c1931b..08e4956ad 100644 --- a/MediaBrowser.Controller/LiveTv/ILiveTvManager.cs +++ b/MediaBrowser.Controller/LiveTv/ILiveTvManager.cs @@ -393,5 +393,8 @@ namespace MediaBrowser.Controller.LiveTv event EventHandler> TimerCancelled; event EventHandler> TimerCreated; event EventHandler> SeriesTimerCreated; + + string GetEmbyTvActiveRecordingPath(string id); + Task GetEmbyTvLiveStream(string id); } } diff --git a/MediaBrowser.Model/Diagnostics/IProcess.cs b/MediaBrowser.Model/Diagnostics/IProcess.cs new file mode 100644 index 000000000..ab0b0cfcf --- /dev/null +++ b/MediaBrowser.Model/Diagnostics/IProcess.cs @@ -0,0 +1,19 @@ +using System; +using System.IO; + +namespace MediaBrowser.Model.Diagnostics +{ + public interface IProcess : IDisposable + { + event EventHandler Exited; + + void Kill(); + bool WaitForExit(int timeMs); + int ExitCode { get; } + void Start(); + StreamWriter StandardInput { get; } + StreamReader StandardError { get; } + StreamReader StandardOutput { get; } + ProcessOptions StartInfo { get; } + } +} diff --git a/MediaBrowser.Model/Diagnostics/IProcessFactory.cs b/MediaBrowser.Model/Diagnostics/IProcessFactory.cs new file mode 100644 index 000000000..998bbcd28 --- /dev/null +++ b/MediaBrowser.Model/Diagnostics/IProcessFactory.cs @@ -0,0 +1,27 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace MediaBrowser.Model.Diagnostics +{ + public interface IProcessFactory + { + IProcess Create(ProcessOptions options); + } + + public class ProcessOptions + { + public String FileName { get; set; } + public String Arguments { get; set; } + public String WorkingDirectory { get; set; } + public bool CreateNoWindow { get; set; } + public bool UseShellExecute { get; set; } + public bool EnableRaisingEvents { get; set; } + public bool ErrorDialog { get; set; } + public bool RedirectStandardError { get; set; } + public bool RedirectStandardInput { get; set; } + public bool IsHidden { get; set; } + } +} diff --git a/MediaBrowser.Model/IO/IFileSystem.cs b/MediaBrowser.Model/IO/IFileSystem.cs index 4f920c3b0..50e32572d 100644 --- a/MediaBrowser.Model/IO/IFileSystem.cs +++ b/MediaBrowser.Model/IO/IFileSystem.cs @@ -305,6 +305,8 @@ namespace MediaBrowser.Model.IO char DirectorySeparatorChar { get; } string GetFullPath(string path); + + List GetDrives(); } public enum FileOpenMode diff --git a/MediaBrowser.Model/MediaBrowser.Model.csproj b/MediaBrowser.Model/MediaBrowser.Model.csproj index a1b478496..5999f02db 100644 --- a/MediaBrowser.Model/MediaBrowser.Model.csproj +++ b/MediaBrowser.Model/MediaBrowser.Model.csproj @@ -106,6 +106,8 @@ + + @@ -422,6 +424,8 @@ + + diff --git a/MediaBrowser.Model/Threading/ITimer.cs b/MediaBrowser.Model/Threading/ITimer.cs new file mode 100644 index 000000000..42090250b --- /dev/null +++ b/MediaBrowser.Model/Threading/ITimer.cs @@ -0,0 +1,10 @@ +using System; + +namespace MediaBrowser.Model.Threading +{ + public interface ITimer : IDisposable + { + void Change(TimeSpan dueTime, TimeSpan period); + void Change(int dueTimeMs, int periodMs); + } +} diff --git a/MediaBrowser.Model/Threading/ITimerFactory.cs b/MediaBrowser.Model/Threading/ITimerFactory.cs new file mode 100644 index 000000000..5f3df1738 --- /dev/null +++ b/MediaBrowser.Model/Threading/ITimerFactory.cs @@ -0,0 +1,10 @@ +using System; + +namespace MediaBrowser.Model.Threading +{ + public interface ITimerFactory + { + ITimer Create(Action callback, object state, TimeSpan dueTime, TimeSpan period); + ITimer Create(Action callback, object state, int dueTimeMs, int periodMs); + } +} diff --git a/MediaBrowser.Providers/Manager/ItemImageProvider.cs b/MediaBrowser.Providers/Manager/ItemImageProvider.cs index fccb298b1..9dff243c1 100644 --- a/MediaBrowser.Providers/Manager/ItemImageProvider.cs +++ b/MediaBrowser.Providers/Manager/ItemImageProvider.cs @@ -556,7 +556,7 @@ namespace MediaBrowser.Providers.Manager switch (type) { case ImageType.Primary: - return !(item is Movie || item is Series || item is Season || item is Game); + return !(item is Movie || item is Series || item is Game); default: return true; } diff --git a/MediaBrowser.Server.Implementations/LiveTv/LiveTvManager.cs b/MediaBrowser.Server.Implementations/LiveTv/LiveTvManager.cs index 894ab5e58..93fc5459a 100644 --- a/MediaBrowser.Server.Implementations/LiveTv/LiveTvManager.cs +++ b/MediaBrowser.Server.Implementations/LiveTv/LiveTvManager.cs @@ -75,6 +75,16 @@ namespace MediaBrowser.Server.Implementations.LiveTv public event EventHandler> TimerCreated; public event EventHandler> SeriesTimerCreated; + public string GetEmbyTvActiveRecordingPath(string id) + { + return EmbyTV.EmbyTV.Current.GetActiveRecordingPath(id); + } + + public Task GetEmbyTvLiveStream(string id) + { + return EmbyTV.EmbyTV.Current.GetLiveStream(id); + } + public LiveTvManager(IApplicationHost appHost, IServerConfigurationManager config, ILogger logger, IItemRepository itemRepo, IImageProcessor imageProcessor, IUserDataManager userDataManager, IDtoService dtoService, IUserManager userManager, ILibraryManager libraryManager, ITaskManager taskManager, ILocalizationManager localization, IJsonSerializer jsonSerializer, IProviderManager providerManager, IFileSystem fileSystem, ISecurityManager security) { _config = config; -- cgit v1.2.3 From 67ffbed93e1e4c5d33ed5e12d5d5aaa587261493 Mon Sep 17 00:00:00 2001 From: Luke Pulverenti Date: Fri, 4 Nov 2016 04:43:59 -0400 Subject: move classes --- .../IO/ManagedFileSystem.cs | 10 + .../Emby.Server.Implementations.csproj | 3 + .../Security/MBLicenseFile.cs | 160 ++++++++++ .../Security/PluginSecurityManager.cs | 344 +++++++++++++++++++++ Emby.Server.Implementations/Security/RegRecord.cs | 12 + MediaBrowser.Model/IO/IFileSystem.cs | 4 + .../MediaBrowser.Server.Implementations.csproj | 3 - .../Security/MBLicenseFile.cs | 157 ---------- .../Security/PluginSecurityManager.cs | 342 -------------------- .../Security/RegRecord.cs | 12 - .../ApplicationHost.cs | 3 +- 11 files changed, 535 insertions(+), 515 deletions(-) create mode 100644 Emby.Server.Implementations/Security/MBLicenseFile.cs create mode 100644 Emby.Server.Implementations/Security/PluginSecurityManager.cs create mode 100644 Emby.Server.Implementations/Security/RegRecord.cs delete mode 100644 MediaBrowser.Server.Implementations/Security/MBLicenseFile.cs delete mode 100644 MediaBrowser.Server.Implementations/Security/PluginSecurityManager.cs delete mode 100644 MediaBrowser.Server.Implementations/Security/RegRecord.cs (limited to 'MediaBrowser.Model/IO/IFileSystem.cs') diff --git a/Emby.Common.Implementations/IO/ManagedFileSystem.cs b/Emby.Common.Implementations/IO/ManagedFileSystem.cs index a8aa1a3cd..5b965efdc 100644 --- a/Emby.Common.Implementations/IO/ManagedFileSystem.cs +++ b/Emby.Common.Implementations/IO/ManagedFileSystem.cs @@ -641,6 +641,16 @@ namespace Emby.Common.Implementations.IO }).Where(i => i != null); } + public string[] ReadAllLines(string path) + { + return File.ReadAllLines(path); + } + + public void WriteAllLines(string path, IEnumerable lines) + { + File.WriteAllLines(path, lines); + } + public Stream OpenRead(string path) { return File.OpenRead(path); diff --git a/Emby.Server.Implementations/Emby.Server.Implementations.csproj b/Emby.Server.Implementations/Emby.Server.Implementations.csproj index 5d27e84dd..4a27ddb74 100644 --- a/Emby.Server.Implementations/Emby.Server.Implementations.csproj +++ b/Emby.Server.Implementations/Emby.Server.Implementations.csproj @@ -159,6 +159,9 @@ + + + diff --git a/Emby.Server.Implementations/Security/MBLicenseFile.cs b/Emby.Server.Implementations/Security/MBLicenseFile.cs new file mode 100644 index 000000000..454ee6026 --- /dev/null +++ b/Emby.Server.Implementations/Security/MBLicenseFile.cs @@ -0,0 +1,160 @@ +using System; +using System.Collections.Concurrent; +using System.Collections.Generic; +using System.Globalization; +using System.IO; +using System.Linq; +using System.Text; +using MediaBrowser.Common.Configuration; +using MediaBrowser.Model.Cryptography; +using MediaBrowser.Model.IO; + +namespace Emby.Server.Implementations.Security +{ + internal class MBLicenseFile + { + private readonly IApplicationPaths _appPaths; + private readonly IFileSystem _fileSystem; + private readonly ICryptographyProvider _cryptographyProvider; + + public string RegKey + { + get { return _regKey; } + set + { + if (value != _regKey) + { + //if key is changed - clear out our saved validations + _updateRecords.Clear(); + _regKey = value; + } + } + } + + private string Filename + { + get + { + return Path.Combine(_appPaths.ConfigurationDirectoryPath, "mb.lic"); + } + } + + private readonly ConcurrentDictionary _updateRecords = new ConcurrentDictionary(); + private readonly object _fileLock = new object(); + private string _regKey; + + public MBLicenseFile(IApplicationPaths appPaths, IFileSystem fileSystem, ICryptographyProvider cryptographyProvider) + { + _appPaths = appPaths; + _fileSystem = fileSystem; + _cryptographyProvider = cryptographyProvider; + + Load(); + } + + private void SetUpdateRecord(Guid key, DateTime value) + { + _updateRecords.AddOrUpdate(key, value, (k, v) => value); + } + + public void AddRegCheck(string featureId) + { + var key = new Guid(_cryptographyProvider.GetMD5Bytes(Encoding.Unicode.GetBytes(featureId))); + var value = DateTime.UtcNow; + + SetUpdateRecord(key, value); + Save(); + } + + public void RemoveRegCheck(string featureId) + { + var key = new Guid(_cryptographyProvider.GetMD5Bytes(Encoding.Unicode.GetBytes(featureId))); + DateTime val; + + _updateRecords.TryRemove(key, out val); + + Save(); + } + + public DateTime LastChecked(string featureId) + { + DateTime last; + _updateRecords.TryGetValue(new Guid(_cryptographyProvider.GetMD5Bytes(Encoding.Unicode.GetBytes(featureId))), out last); + + // guard agains people just putting a large number in the file + return last < DateTime.UtcNow ? last : DateTime.MinValue; + } + + private void Load() + { + string[] contents = null; + var licenseFile = Filename; + lock (_fileLock) + { + try + { + contents = _fileSystem.ReadAllLines(licenseFile); + } + catch (FileNotFoundException) + { + lock (_fileLock) + { + _fileSystem.WriteAllBytes(licenseFile, new byte[] {}); + } + } + catch (IOException) + { + lock (_fileLock) + { + _fileSystem.WriteAllBytes(licenseFile, new byte[] { }); + } + } + } + if (contents != null && contents.Length > 0) + { + //first line is reg key + RegKey = contents[0]; + + //next is legacy key + if (contents.Length > 1) + { + // Don't need this anymore + } + + //the rest of the lines should be pairs of features and timestamps + for (var i = 2; i < contents.Length; i = i + 2) + { + var feat = Guid.Parse(contents[i]); + + SetUpdateRecord(feat, new DateTime(Convert.ToInt64(contents[i + 1]))); + } + } + } + + public void Save() + { + //build our array + var lines = new List + { + RegKey, + + // Legacy key + string.Empty + }; + + foreach (var pair in _updateRecords + .ToList()) + { + lines.Add(pair.Key.ToString()); + lines.Add(pair.Value.Ticks.ToString(CultureInfo.InvariantCulture)); + } + + var licenseFile = Filename; + _fileSystem.CreateDirectory(Path.GetDirectoryName(licenseFile)); + lock (_fileLock) + { + _fileSystem.WriteAllLines(licenseFile, lines); + } + } + } +} diff --git a/Emby.Server.Implementations/Security/PluginSecurityManager.cs b/Emby.Server.Implementations/Security/PluginSecurityManager.cs new file mode 100644 index 000000000..c3a7e9450 --- /dev/null +++ b/Emby.Server.Implementations/Security/PluginSecurityManager.cs @@ -0,0 +1,344 @@ +using System; +using System.Collections.Generic; +using System.IO; +using System.Linq; +using System.Net; +using System.Threading; +using System.Threading.Tasks; +using MediaBrowser.Common.Configuration; +using MediaBrowser.Common.Net; +using MediaBrowser.Common.Security; +using MediaBrowser.Controller; +using MediaBrowser.Model.Cryptography; +using MediaBrowser.Model.Entities; +using MediaBrowser.Model.IO; +using MediaBrowser.Model.Logging; +using MediaBrowser.Model.Net; +using MediaBrowser.Model.Serialization; + +namespace Emby.Server.Implementations.Security +{ + /// + /// Class PluginSecurityManager + /// + public class PluginSecurityManager : ISecurityManager + { + private const string MBValidateUrl = "https://mb3admin.com/admin/service/registration/validate"; + private const string AppstoreRegUrl = /*MbAdmin.HttpsUrl*/ "https://mb3admin.com/admin/service/appstore/register"; + + /// + /// The _is MB supporter + /// + private bool? _isMbSupporter; + /// + /// The _is MB supporter initialized + /// + private bool _isMbSupporterInitialized; + /// + /// The _is MB supporter sync lock + /// + private object _isMbSupporterSyncLock = new object(); + + /// + /// Gets a value indicating whether this instance is MB supporter. + /// + /// true if this instance is MB supporter; otherwise, false. + public bool IsMBSupporter + { + get + { + LazyInitializer.EnsureInitialized(ref _isMbSupporter, ref _isMbSupporterInitialized, ref _isMbSupporterSyncLock, () => GetSupporterRegistrationStatus().Result.IsRegistered); + return _isMbSupporter.Value; + } + } + + private MBLicenseFile _licenseFile; + private MBLicenseFile LicenseFile + { + get { return _licenseFile ?? (_licenseFile = new MBLicenseFile(_appPaths, _fileSystem, _cryptographyProvider)); } + } + + private readonly IHttpClient _httpClient; + private readonly IJsonSerializer _jsonSerializer; + private readonly IServerApplicationHost _appHost; + private readonly ILogger _logger; + private readonly IApplicationPaths _appPaths; + private readonly IFileSystem _fileSystem; + private readonly ICryptographyProvider _cryptographyProvider; + + private IEnumerable _registeredEntities; + protected IEnumerable RegisteredEntities + { + get + { + return _registeredEntities ?? (_registeredEntities = _appHost.GetExports()); + } + } + + /// + /// Initializes a new instance of the class. + /// + public PluginSecurityManager(IServerApplicationHost appHost, IHttpClient httpClient, IJsonSerializer jsonSerializer, + IApplicationPaths appPaths, ILogManager logManager, IFileSystem fileSystem, ICryptographyProvider cryptographyProvider) + { + if (httpClient == null) + { + throw new ArgumentNullException("httpClient"); + } + + _appHost = appHost; + _httpClient = httpClient; + _jsonSerializer = jsonSerializer; + _appPaths = appPaths; + _fileSystem = fileSystem; + _cryptographyProvider = cryptographyProvider; + _logger = logManager.GetLogger("SecurityManager"); + } + + /// + /// Load all registration info for all entities that require registration + /// + /// + public async Task LoadAllRegistrationInfo() + { + var tasks = new List(); + + ResetSupporterInfo(); + tasks.AddRange(RegisteredEntities.Select(i => i.LoadRegistrationInfoAsync())); + await Task.WhenAll(tasks); + } + + /// + /// Gets the registration status. + /// This overload supports existing plug-ins. + /// + /// The feature. + /// The MB2 equivalent. + /// Task{MBRegistrationRecord}. + public Task GetRegistrationStatus(string feature, string mb2Equivalent = null) + { + return GetRegistrationStatusInternal(feature, mb2Equivalent); + } + + /// + /// Gets the registration status. + /// + /// The feature. + /// The MB2 equivalent. + /// The version of this feature + /// Task{MBRegistrationRecord}. + public Task GetRegistrationStatus(string feature, string mb2Equivalent, string version) + { + return GetRegistrationStatusInternal(feature, mb2Equivalent, version); + } + + private Task GetSupporterRegistrationStatus() + { + return GetRegistrationStatusInternal("MBSupporter", null, _appHost.ApplicationVersion.ToString()); + } + + /// + /// Gets or sets the supporter key. + /// + /// The supporter key. + public string SupporterKey + { + get + { + return LicenseFile.RegKey; + } + set + { + var newValue = value; + if (newValue != null) + { + newValue = newValue.Trim(); + } + + if (newValue != LicenseFile.RegKey) + { + LicenseFile.RegKey = newValue; + LicenseFile.Save(); + + // re-load registration info + Task.Run(() => LoadAllRegistrationInfo()); + } + } + } + + /// + /// Register an app store sale with our back-end. It will validate the transaction with the store + /// and then register the proper feature and then fill in the supporter key on success. + /// + /// Json parameters to send to admin server + public async Task RegisterAppStoreSale(string parameters) + { + var options = new HttpRequestOptions() + { + Url = AppstoreRegUrl, + CancellationToken = CancellationToken.None, + BufferContent = false + }; + options.RequestHeaders.Add("X-Emby-Token", _appHost.SystemId); + options.RequestContent = parameters; + options.RequestContentType = "application/json"; + + try + { + using (var response = await _httpClient.Post(options).ConfigureAwait(false)) + { + var reg = _jsonSerializer.DeserializeFromStream(response.Content); + + if (reg == null) + { + var msg = "Result from appstore registration was null."; + _logger.Error(msg); + throw new ArgumentException(msg); + } + if (!String.IsNullOrEmpty(reg.key)) + { + SupporterKey = reg.key; + } + } + + } + catch (ArgumentException) + { + SaveAppStoreInfo(parameters); + throw; + } + catch (HttpException e) + { + _logger.ErrorException("Error registering appstore purchase {0}", e, parameters ?? "NO PARMS SENT"); + + if (e.StatusCode.HasValue && e.StatusCode.Value == HttpStatusCode.PaymentRequired) + { + throw new PaymentRequiredException(); + } + throw new Exception("Error registering store sale"); + } + catch (Exception e) + { + _logger.ErrorException("Error registering appstore purchase {0}", e, parameters ?? "NO PARMS SENT"); + SaveAppStoreInfo(parameters); + //TODO - could create a re-try routine on start-up if this file is there. For now we can handle manually. + throw new Exception("Error registering store sale"); + } + + } + + private void SaveAppStoreInfo(string info) + { + // Save all transaction information to a file + + try + { + _fileSystem.WriteAllText(Path.Combine(_appPaths.ProgramDataPath, "apptrans-error.txt"), info); + } + catch (IOException) + { + + } + } + + private async Task GetRegistrationStatusInternal(string feature, + string mb2Equivalent = null, + string version = null) + { + var lastChecked = LicenseFile.LastChecked(feature); + + //check the reg file first to alleviate strain on the MB admin server - must actually check in every 30 days tho + var reg = new RegRecord + { + // Cache the result for up to a week + registered = lastChecked > DateTime.UtcNow.AddDays(-7) + }; + + var success = reg.registered; + + if (!(lastChecked > DateTime.UtcNow.AddDays(-1))) + { + var data = new Dictionary + { + { "feature", feature }, + { "key", SupporterKey }, + { "mac", _appHost.SystemId }, + { "systemid", _appHost.SystemId }, + { "mb2equiv", mb2Equivalent }, + { "ver", version }, + { "platform", _appHost.OperatingSystemDisplayName }, + { "isservice", _appHost.IsRunningAsService.ToString().ToLower() } + }; + + try + { + var options = new HttpRequestOptions + { + Url = MBValidateUrl, + + // Seeing block length errors + EnableHttpCompression = false, + BufferContent = false + }; + + options.SetPostData(data); + + using (var json = (await _httpClient.Post(options).ConfigureAwait(false)).Content) + { + reg = _jsonSerializer.DeserializeFromStream(json); + success = true; + } + + if (reg.registered) + { + LicenseFile.AddRegCheck(feature); + } + else + { + LicenseFile.RemoveRegCheck(feature); + } + + } + catch (Exception e) + { + _logger.ErrorException("Error checking registration status of {0}", e, feature); + } + } + + var record = new MBRegistrationRecord + { + IsRegistered = reg.registered, + ExpirationDate = reg.expDate, + RegChecked = true, + RegError = !success + }; + + record.TrialVersion = IsInTrial(reg.expDate, record.RegChecked, record.IsRegistered); + record.IsValid = !record.RegChecked || record.IsRegistered || record.TrialVersion; + + return record; + } + + private bool IsInTrial(DateTime expirationDate, bool regChecked, bool isRegistered) + { + //don't set this until we've successfully obtained exp date + if (!regChecked) + { + return false; + } + + var isInTrial = expirationDate > DateTime.UtcNow; + + return isInTrial && !isRegistered; + } + + /// + /// Resets the supporter info. + /// + private void ResetSupporterInfo() + { + _isMbSupporter = null; + _isMbSupporterInitialized = false; + } + } +} \ No newline at end of file diff --git a/Emby.Server.Implementations/Security/RegRecord.cs b/Emby.Server.Implementations/Security/RegRecord.cs new file mode 100644 index 000000000..d484085d3 --- /dev/null +++ b/Emby.Server.Implementations/Security/RegRecord.cs @@ -0,0 +1,12 @@ +using System; + +namespace Emby.Server.Implementations.Security +{ + class RegRecord + { + public string featId { get; set; } + public bool registered { get; set; } + public DateTime expDate { get; set; } + public string key { get; set; } + } +} \ No newline at end of file diff --git a/MediaBrowser.Model/IO/IFileSystem.cs b/MediaBrowser.Model/IO/IFileSystem.cs index 50e32572d..ca537752a 100644 --- a/MediaBrowser.Model/IO/IFileSystem.cs +++ b/MediaBrowser.Model/IO/IFileSystem.cs @@ -276,6 +276,10 @@ namespace MediaBrowser.Model.IO /// System.String. string ReadAllText(string path, Encoding encoding); + string[] ReadAllLines(string path); + + void WriteAllLines(string path, IEnumerable lines); + /// /// Gets the directory paths. /// diff --git a/MediaBrowser.Server.Implementations/MediaBrowser.Server.Implementations.csproj b/MediaBrowser.Server.Implementations/MediaBrowser.Server.Implementations.csproj index 9af765c23..d6223c465 100644 --- a/MediaBrowser.Server.Implementations/MediaBrowser.Server.Implementations.csproj +++ b/MediaBrowser.Server.Implementations/MediaBrowser.Server.Implementations.csproj @@ -171,9 +171,6 @@ - - - diff --git a/MediaBrowser.Server.Implementations/Security/MBLicenseFile.cs b/MediaBrowser.Server.Implementations/Security/MBLicenseFile.cs deleted file mode 100644 index 7b37925ba..000000000 --- a/MediaBrowser.Server.Implementations/Security/MBLicenseFile.cs +++ /dev/null @@ -1,157 +0,0 @@ -using System; -using System.Collections.Concurrent; -using System.Collections.Generic; -using System.Globalization; -using System.IO; -using System.Linq; -using System.Security.Cryptography; -using System.Text; -using MediaBrowser.Common.Configuration; - -namespace MediaBrowser.Server.Implementations.Security -{ - internal class MBLicenseFile - { - private readonly IApplicationPaths _appPaths; - - public string RegKey - { - get { return _regKey; } - set - { - if (value != _regKey) - { - //if key is changed - clear out our saved validations - _updateRecords.Clear(); - _regKey = value; - } - } - } - - private string Filename - { - get - { - return Path.Combine(_appPaths.ConfigurationDirectoryPath, "mb.lic"); - } - } - - private readonly ConcurrentDictionary _updateRecords = new ConcurrentDictionary(); - private readonly object _fileLock = new object(); - private string _regKey; - - public MBLicenseFile(IApplicationPaths appPaths) - { - _appPaths = appPaths; - - Load(); - } - - private void SetUpdateRecord(Guid key, DateTime value) - { - _updateRecords.AddOrUpdate(key, value, (k, v) => value); - } - - public void AddRegCheck(string featureId) - { - using (var provider = new MD5CryptoServiceProvider()) - { - var key = new Guid(provider.ComputeHash(Encoding.Unicode.GetBytes(featureId))); - var value = DateTime.UtcNow; - - SetUpdateRecord(key, value); - Save(); - } - - } - - public void RemoveRegCheck(string featureId) - { - using (var provider = new MD5CryptoServiceProvider()) - { - var key = new Guid(provider.ComputeHash(Encoding.Unicode.GetBytes(featureId))); - DateTime val; - - _updateRecords.TryRemove(key, out val); - - Save(); - } - - } - - public DateTime LastChecked(string featureId) - { - using (var provider = new MD5CryptoServiceProvider()) - { - DateTime last; - _updateRecords.TryGetValue(new Guid(provider.ComputeHash(Encoding.Unicode.GetBytes(featureId))), out last); - - // guard agains people just putting a large number in the file - return last < DateTime.UtcNow ? last : DateTime.MinValue; - } - } - - private void Load() - { - string[] contents = null; - var licenseFile = Filename; - lock (_fileLock) - { - try - { - contents = File.ReadAllLines(licenseFile); - } - catch (DirectoryNotFoundException) - { - File.Create(licenseFile).Close(); - } - catch (FileNotFoundException) - { - File.Create(licenseFile).Close(); - } - } - if (contents != null && contents.Length > 0) - { - //first line is reg key - RegKey = contents[0]; - - //next is legacy key - if (contents.Length > 1) - { - // Don't need this anymore - } - - //the rest of the lines should be pairs of features and timestamps - for (var i = 2; i < contents.Length; i = i + 2) - { - var feat = Guid.Parse(contents[i]); - - SetUpdateRecord(feat, new DateTime(Convert.ToInt64(contents[i + 1]))); - } - } - } - - public void Save() - { - //build our array - var lines = new List - { - RegKey, - - // Legacy key - string.Empty - }; - - foreach (var pair in _updateRecords - .ToList()) - { - lines.Add(pair.Key.ToString()); - lines.Add(pair.Value.Ticks.ToString(CultureInfo.InvariantCulture)); - } - - var licenseFile = Filename; - Directory.CreateDirectory(Path.GetDirectoryName(licenseFile)); - lock (_fileLock) File.WriteAllLines(licenseFile, lines); - } - } -} diff --git a/MediaBrowser.Server.Implementations/Security/PluginSecurityManager.cs b/MediaBrowser.Server.Implementations/Security/PluginSecurityManager.cs deleted file mode 100644 index 7dc78a3af..000000000 --- a/MediaBrowser.Server.Implementations/Security/PluginSecurityManager.cs +++ /dev/null @@ -1,342 +0,0 @@ -using System; -using System.Collections.Generic; -using System.IO; -using System.Linq; -using System.Net; -using System.Threading; -using System.Threading.Tasks; -using MediaBrowser.Common; -using MediaBrowser.Common.Configuration; -using MediaBrowser.Common.Net; -using MediaBrowser.Common.Security; -using MediaBrowser.Controller; -using MediaBrowser.Model.Entities; -using MediaBrowser.Model.IO; -using MediaBrowser.Model.Logging; -using MediaBrowser.Model.Net; -using MediaBrowser.Model.Serialization; - -namespace MediaBrowser.Server.Implementations.Security -{ - /// - /// Class PluginSecurityManager - /// - public class PluginSecurityManager : ISecurityManager - { - private const string MBValidateUrl = "https://mb3admin.com/admin/service/registration/validate"; - private const string AppstoreRegUrl = /*MbAdmin.HttpsUrl*/ "https://mb3admin.com/admin/service/appstore/register"; - - /// - /// The _is MB supporter - /// - private bool? _isMbSupporter; - /// - /// The _is MB supporter initialized - /// - private bool _isMbSupporterInitialized; - /// - /// The _is MB supporter sync lock - /// - private object _isMbSupporterSyncLock = new object(); - - /// - /// Gets a value indicating whether this instance is MB supporter. - /// - /// true if this instance is MB supporter; otherwise, false. - public bool IsMBSupporter - { - get - { - LazyInitializer.EnsureInitialized(ref _isMbSupporter, ref _isMbSupporterInitialized, ref _isMbSupporterSyncLock, () => GetSupporterRegistrationStatus().Result.IsRegistered); - return _isMbSupporter.Value; - } - } - - private MBLicenseFile _licenseFile; - private MBLicenseFile LicenseFile - { - get { return _licenseFile ?? (_licenseFile = new MBLicenseFile(_appPaths)); } - } - - private readonly IHttpClient _httpClient; - private readonly IJsonSerializer _jsonSerializer; - private readonly IServerApplicationHost _appHost; - private readonly ILogger _logger; - private readonly IApplicationPaths _appPaths; - private readonly IFileSystem _fileSystem; - - private IEnumerable _registeredEntities; - protected IEnumerable RegisteredEntities - { - get - { - return _registeredEntities ?? (_registeredEntities = _appHost.GetExports()); - } - } - - /// - /// Initializes a new instance of the class. - /// - public PluginSecurityManager(IServerApplicationHost appHost, IHttpClient httpClient, IJsonSerializer jsonSerializer, - IApplicationPaths appPaths, ILogManager logManager, IFileSystem fileSystem) - { - if (httpClient == null) - { - throw new ArgumentNullException("httpClient"); - } - - _appHost = appHost; - _httpClient = httpClient; - _jsonSerializer = jsonSerializer; - _appPaths = appPaths; - _fileSystem = fileSystem; - _logger = logManager.GetLogger("SecurityManager"); - } - - /// - /// Load all registration info for all entities that require registration - /// - /// - public async Task LoadAllRegistrationInfo() - { - var tasks = new List(); - - ResetSupporterInfo(); - tasks.AddRange(RegisteredEntities.Select(i => i.LoadRegistrationInfoAsync())); - await Task.WhenAll(tasks); - } - - /// - /// Gets the registration status. - /// This overload supports existing plug-ins. - /// - /// The feature. - /// The MB2 equivalent. - /// Task{MBRegistrationRecord}. - public Task GetRegistrationStatus(string feature, string mb2Equivalent = null) - { - return GetRegistrationStatusInternal(feature, mb2Equivalent); - } - - /// - /// Gets the registration status. - /// - /// The feature. - /// The MB2 equivalent. - /// The version of this feature - /// Task{MBRegistrationRecord}. - public Task GetRegistrationStatus(string feature, string mb2Equivalent, string version) - { - return GetRegistrationStatusInternal(feature, mb2Equivalent, version); - } - - private Task GetSupporterRegistrationStatus() - { - return GetRegistrationStatusInternal("MBSupporter", null, _appHost.ApplicationVersion.ToString()); - } - - /// - /// Gets or sets the supporter key. - /// - /// The supporter key. - public string SupporterKey - { - get - { - return LicenseFile.RegKey; - } - set - { - var newValue = value; - if (newValue != null) - { - newValue = newValue.Trim(); - } - - if (newValue != LicenseFile.RegKey) - { - LicenseFile.RegKey = newValue; - LicenseFile.Save(); - - // re-load registration info - Task.Run(() => LoadAllRegistrationInfo()); - } - } - } - - /// - /// Register an app store sale with our back-end. It will validate the transaction with the store - /// and then register the proper feature and then fill in the supporter key on success. - /// - /// Json parameters to send to admin server - public async Task RegisterAppStoreSale(string parameters) - { - var options = new HttpRequestOptions() - { - Url = AppstoreRegUrl, - CancellationToken = CancellationToken.None, - BufferContent = false - }; - options.RequestHeaders.Add("X-Emby-Token", _appHost.SystemId); - options.RequestContent = parameters; - options.RequestContentType = "application/json"; - - try - { - using (var response = await _httpClient.Post(options).ConfigureAwait(false)) - { - var reg = _jsonSerializer.DeserializeFromStream(response.Content); - - if (reg == null) - { - var msg = "Result from appstore registration was null."; - _logger.Error(msg); - throw new ApplicationException(msg); - } - if (!String.IsNullOrEmpty(reg.key)) - { - SupporterKey = reg.key; - } - } - - } - catch (ApplicationException) - { - SaveAppStoreInfo(parameters); - throw; - } - catch (HttpException e) - { - _logger.ErrorException("Error registering appstore purchase {0}", e, parameters ?? "NO PARMS SENT"); - - if (e.StatusCode.HasValue && e.StatusCode.Value == HttpStatusCode.PaymentRequired) - { - throw new PaymentRequiredException(); - } - throw new ApplicationException("Error registering store sale"); - } - catch (Exception e) - { - _logger.ErrorException("Error registering appstore purchase {0}", e, parameters ?? "NO PARMS SENT"); - SaveAppStoreInfo(parameters); - //TODO - could create a re-try routine on start-up if this file is there. For now we can handle manually. - throw new ApplicationException("Error registering store sale"); - } - - } - - private void SaveAppStoreInfo(string info) - { - // Save all transaction information to a file - - try - { - _fileSystem.WriteAllText(Path.Combine(_appPaths.ProgramDataPath, "apptrans-error.txt"), info); - } - catch (IOException) - { - - } - } - - private async Task GetRegistrationStatusInternal(string feature, - string mb2Equivalent = null, - string version = null) - { - var lastChecked = LicenseFile.LastChecked(feature); - - //check the reg file first to alleviate strain on the MB admin server - must actually check in every 30 days tho - var reg = new RegRecord - { - // Cache the result for up to a week - registered = lastChecked > DateTime.UtcNow.AddDays(-7) - }; - - var success = reg.registered; - - if (!(lastChecked > DateTime.UtcNow.AddDays(-1))) - { - var data = new Dictionary - { - { "feature", feature }, - { "key", SupporterKey }, - { "mac", _appHost.SystemId }, - { "systemid", _appHost.SystemId }, - { "mb2equiv", mb2Equivalent }, - { "ver", version }, - { "platform", _appHost.OperatingSystemDisplayName }, - { "isservice", _appHost.IsRunningAsService.ToString().ToLower() } - }; - - try - { - var options = new HttpRequestOptions - { - Url = MBValidateUrl, - - // Seeing block length errors - EnableHttpCompression = false, - BufferContent = false - }; - - options.SetPostData(data); - - using (var json = (await _httpClient.Post(options).ConfigureAwait(false)).Content) - { - reg = _jsonSerializer.DeserializeFromStream(json); - success = true; - } - - if (reg.registered) - { - LicenseFile.AddRegCheck(feature); - } - else - { - LicenseFile.RemoveRegCheck(feature); - } - - } - catch (Exception e) - { - _logger.ErrorException("Error checking registration status of {0}", e, feature); - } - } - - var record = new MBRegistrationRecord - { - IsRegistered = reg.registered, - ExpirationDate = reg.expDate, - RegChecked = true, - RegError = !success - }; - - record.TrialVersion = IsInTrial(reg.expDate, record.RegChecked, record.IsRegistered); - record.IsValid = !record.RegChecked || record.IsRegistered || record.TrialVersion; - - return record; - } - - private bool IsInTrial(DateTime expirationDate, bool regChecked, bool isRegistered) - { - //don't set this until we've successfully obtained exp date - if (!regChecked) - { - return false; - } - - var isInTrial = expirationDate > DateTime.UtcNow; - - return isInTrial && !isRegistered; - } - - /// - /// Resets the supporter info. - /// - private void ResetSupporterInfo() - { - _isMbSupporter = null; - _isMbSupporterInitialized = false; - } - } -} \ No newline at end of file diff --git a/MediaBrowser.Server.Implementations/Security/RegRecord.cs b/MediaBrowser.Server.Implementations/Security/RegRecord.cs deleted file mode 100644 index 947ec629f..000000000 --- a/MediaBrowser.Server.Implementations/Security/RegRecord.cs +++ /dev/null @@ -1,12 +0,0 @@ -using System; - -namespace MediaBrowser.Server.Implementations.Security -{ - class RegRecord - { - public string featId { get; set; } - public bool registered { get; set; } - public DateTime expDate { get; set; } - public string key { get; set; } - } -} \ No newline at end of file diff --git a/MediaBrowser.Server.Startup.Common/ApplicationHost.cs b/MediaBrowser.Server.Startup.Common/ApplicationHost.cs index 3a5939df1..5f609de27 100644 --- a/MediaBrowser.Server.Startup.Common/ApplicationHost.cs +++ b/MediaBrowser.Server.Startup.Common/ApplicationHost.cs @@ -112,6 +112,7 @@ using Emby.Server.Implementations.MediaEncoder; using Emby.Server.Implementations.Notifications; using Emby.Server.Implementations.Persistence; using Emby.Server.Implementations.Playlists; +using Emby.Server.Implementations.Security; using Emby.Server.Implementations.ServerManager; using Emby.Server.Implementations.Session; using Emby.Server.Implementations.Sync; @@ -532,7 +533,7 @@ namespace MediaBrowser.Server.Startup.Common { await base.RegisterResources(progress).ConfigureAwait(false); - SecurityManager = new PluginSecurityManager(this, HttpClient, JsonSerializer, ApplicationPaths, LogManager, FileSystemManager); + SecurityManager = new PluginSecurityManager(this, HttpClient, JsonSerializer, ApplicationPaths, LogManager, FileSystemManager, CryptographyProvider); RegisterSingleInstance(SecurityManager); InstallationManager = new InstallationManager(LogManager.GetLogger("InstallationManager"), this, ApplicationPaths, HttpClient, JsonSerializer, SecurityManager, ConfigurationManager, FileSystemManager, CryptographyProvider); -- cgit v1.2.3 From 48a5fa17b034947669d7ce0e81cbe599f628acf9 Mon Sep 17 00:00:00 2001 From: Luke Pulverenti Date: Wed, 9 Nov 2016 12:24:57 -0500 Subject: update file saving --- .../IO/ManagedFileSystem.cs | 33 ++++++++++++++++++++++ MediaBrowser.Controller/Entities/BaseItem.cs | 14 +-------- MediaBrowser.LocalMetadata/Savers/BaseXmlSaver.cs | 5 +++- MediaBrowser.Model/IO/IFileSystem.cs | 1 + MediaBrowser.Providers/Manager/ImageSaver.cs | 4 +++ MediaBrowser.XbmcMetadata/Savers/BaseNfoSaver.cs | 4 +++ 6 files changed, 47 insertions(+), 14 deletions(-) (limited to 'MediaBrowser.Model/IO/IFileSystem.cs') diff --git a/Emby.Common.Implementations/IO/ManagedFileSystem.cs b/Emby.Common.Implementations/IO/ManagedFileSystem.cs index 5b965efdc..37b457598 100644 --- a/Emby.Common.Implementations/IO/ManagedFileSystem.cs +++ b/Emby.Common.Implementations/IO/ManagedFileSystem.cs @@ -419,6 +419,25 @@ namespace Emby.Common.Implementations.IO } } + public void SetReadOnly(string path, bool isReadOnly) + { + var info = GetFileInfo(path); + + if (info.Exists && info.IsReadOnly != isReadOnly) + { + if (isReadOnly) + { + File.SetAttributes(path, File.GetAttributes(path) | FileAttributes.ReadOnly); + } + else + { + FileAttributes attributes = File.GetAttributes(path); + attributes = RemoveAttribute(attributes, FileAttributes.ReadOnly); + File.SetAttributes(path, attributes); + } + } + } + private static FileAttributes RemoveAttribute(FileAttributes attributes, FileAttributes attributesToRemove) { return attributes & ~attributesToRemove; @@ -564,6 +583,20 @@ namespace Emby.Common.Implementations.IO public void DeleteFile(string path) { + var fileInfo = GetFileInfo(path); + + if (fileInfo.Exists) + { + if (fileInfo.IsHidden) + { + SetHidden(path, false); + } + if (fileInfo.IsReadOnly) + { + SetReadOnly(path, false); + } + } + File.Delete(path); } diff --git a/MediaBrowser.Controller/Entities/BaseItem.cs b/MediaBrowser.Controller/Entities/BaseItem.cs index 433fdbe16..b079da97c 100644 --- a/MediaBrowser.Controller/Entities/BaseItem.cs +++ b/MediaBrowser.Controller/Entities/BaseItem.cs @@ -1892,19 +1892,7 @@ namespace MediaBrowser.Controller.Entities if (info.IsLocalFile) { - // Delete the source file - var currentFile = FileSystem.GetFileInfo(info.Path); - - // Deletion will fail if the file is hidden so remove the attribute first - if (currentFile.Exists) - { - if (currentFile.IsHidden) - { - FileSystem.SetHidden(currentFile.FullName, false); - } - - FileSystem.DeleteFile(currentFile.FullName); - } + FileSystem.DeleteFile(info.Path); } return UpdateToRepository(ItemUpdateType.ImageUpdate, CancellationToken.None); diff --git a/MediaBrowser.LocalMetadata/Savers/BaseXmlSaver.cs b/MediaBrowser.LocalMetadata/Savers/BaseXmlSaver.cs index c489b5728..02c34320b 100644 --- a/MediaBrowser.LocalMetadata/Savers/BaseXmlSaver.cs +++ b/MediaBrowser.LocalMetadata/Savers/BaseXmlSaver.cs @@ -226,9 +226,12 @@ namespace MediaBrowser.LocalMetadata.Savers if (file.IsHidden) { FileSystem.SetHidden(path, false); - wasHidden = true; } + if (file.IsReadOnly) + { + FileSystem.SetReadOnly(path, false); + } } using (var filestream = FileSystem.GetFileStream(path, FileOpenMode.Create, FileAccessMode.Write, FileShareMode.Read)) diff --git a/MediaBrowser.Model/IO/IFileSystem.cs b/MediaBrowser.Model/IO/IFileSystem.cs index ca537752a..d2bb35520 100644 --- a/MediaBrowser.Model/IO/IFileSystem.cs +++ b/MediaBrowser.Model/IO/IFileSystem.cs @@ -305,6 +305,7 @@ namespace MediaBrowser.Model.IO IEnumerable GetFileSystemEntryPaths(string path, bool recursive = false); void SetHidden(string path, bool isHidden); + void SetReadOnly(string path, bool isHidden); char DirectorySeparatorChar { get; } diff --git a/MediaBrowser.Providers/Manager/ImageSaver.cs b/MediaBrowser.Providers/Manager/ImageSaver.cs index 59d67740d..b59875378 100644 --- a/MediaBrowser.Providers/Manager/ImageSaver.cs +++ b/MediaBrowser.Providers/Manager/ImageSaver.cs @@ -265,6 +265,10 @@ namespace MediaBrowser.Providers.Manager { _fileSystem.SetHidden(file.FullName, false); } + if (file.IsReadOnly) + { + _fileSystem.SetReadOnly(path, false); + } } using (var fs = _fileSystem.GetFileStream(path, FileOpenMode.Create, FileAccessMode.Write, FileShareMode.Read, true)) diff --git a/MediaBrowser.XbmcMetadata/Savers/BaseNfoSaver.cs b/MediaBrowser.XbmcMetadata/Savers/BaseNfoSaver.cs index 168827025..84dd095cd 100644 --- a/MediaBrowser.XbmcMetadata/Savers/BaseNfoSaver.cs +++ b/MediaBrowser.XbmcMetadata/Savers/BaseNfoSaver.cs @@ -221,6 +221,10 @@ namespace MediaBrowser.XbmcMetadata.Savers wasHidden = true; } + if (file.IsReadOnly) + { + FileSystem.SetReadOnly(path, false); + } } using (var filestream = FileSystem.GetFileStream(path, FileOpenMode.Create, FileAccessMode.Write, FileShareMode.Read)) -- cgit v1.2.3 From 00cbadea2c5ea8c717808fb4e8b11004509dc379 Mon Sep 17 00:00:00 2001 From: Luke Pulverenti Date: Fri, 11 Nov 2016 02:24:36 -0500 Subject: update core project --- .../IO/ManagedFileSystem.cs | 5 + Emby.Common.Implementations/Net/NetSocket.cs | 6 +- Emby.Common.Implementations/Net/UdpSocket.cs | 2 +- .../Networking/BaseNetworkManager.cs | 485 -------------------- .../Networking/NetworkManager.cs | 506 +++++++++++++++++++++ Emby.Server.Core/FFMpeg/FFMpegLoader.cs | 240 ++++++++++ Emby.Server.Core/Localization/TextLocalizer.cs | 25 + .../Security/AuthenticationRepository.cs | 317 +++++++++++++ Emby.Server.Core/project.json | 7 + .../Emby.Server.Implementations.csproj | 5 + .../IO/MbLinkShortcutHandler.cs | 55 +++ MediaBrowser.Common/Net/INetworkManager.cs | 7 - .../Devices/CameraUploadsFolder.cs | 67 --- .../MediaBrowser.Controller.csproj | 2 - .../Playlists/ManualPlaylistsFolder.cs | 53 --- MediaBrowser.Model/IO/IFileSystem.cs | 2 + .../Devices/CameraUploadsFolder.cs | 67 +++ .../MediaBrowser.Server.Implementations.csproj | 6 +- .../Playlists/ManualPlaylistsFolder.cs | 53 +++ .../MediaBrowser.Server.Mono.csproj | 8 +- MediaBrowser.Server.Mono/Native/MonoApp.cs | 3 +- MediaBrowser.Server.Mono/Native/MonoFileSystem.cs | 21 + MediaBrowser.Server.Mono/Program.cs | 3 +- .../ApplicationHost.cs | 20 +- .../Cryptography/CertificateGenerator.cs | 2 +- .../FFMpeg/FFMpegLoader.cs | 249 ---------- .../MbLinkShortcutHandler.cs | 55 --- .../MediaBrowser.Server.Startup.Common.csproj | 5 - .../Networking/NetworkManager.cs | 50 -- .../Security/AuthenticationRepository.cs | 317 ------------- .../TextLocalizer.cs | 25 - MediaBrowser.ServerApplication/MainStartup.cs | 1 + .../MediaBrowser.ServerApplication.csproj | 7 +- .../Native/WindowsApp.cs | 1 - .../Networking/NetworkManager.cs | 2 +- 35 files changed, 1334 insertions(+), 1345 deletions(-) delete mode 100644 Emby.Common.Implementations/Networking/BaseNetworkManager.cs create mode 100644 Emby.Common.Implementations/Networking/NetworkManager.cs create mode 100644 Emby.Server.Core/FFMpeg/FFMpegLoader.cs create mode 100644 Emby.Server.Core/Localization/TextLocalizer.cs create mode 100644 Emby.Server.Core/Security/AuthenticationRepository.cs create mode 100644 Emby.Server.Implementations/IO/MbLinkShortcutHandler.cs delete mode 100644 MediaBrowser.Controller/Devices/CameraUploadsFolder.cs delete mode 100644 MediaBrowser.Controller/Playlists/ManualPlaylistsFolder.cs create mode 100644 MediaBrowser.Server.Implementations/Devices/CameraUploadsFolder.cs create mode 100644 MediaBrowser.Server.Implementations/Playlists/ManualPlaylistsFolder.cs create mode 100644 MediaBrowser.Server.Mono/Native/MonoFileSystem.cs delete mode 100644 MediaBrowser.Server.Startup.Common/FFMpeg/FFMpegLoader.cs delete mode 100644 MediaBrowser.Server.Startup.Common/MbLinkShortcutHandler.cs delete mode 100644 MediaBrowser.Server.Startup.Common/Networking/NetworkManager.cs delete mode 100644 MediaBrowser.Server.Startup.Common/Security/AuthenticationRepository.cs delete mode 100644 MediaBrowser.Server.Startup.Common/TextLocalizer.cs (limited to 'MediaBrowser.Model/IO/IFileSystem.cs') diff --git a/Emby.Common.Implementations/IO/ManagedFileSystem.cs b/Emby.Common.Implementations/IO/ManagedFileSystem.cs index 37b457598..81ca8dcff 100644 --- a/Emby.Common.Implementations/IO/ManagedFileSystem.cs +++ b/Emby.Common.Implementations/IO/ManagedFileSystem.cs @@ -761,5 +761,10 @@ namespace Emby.Common.Implementations.IO var searchOption = recursive ? SearchOption.AllDirectories : SearchOption.TopDirectoryOnly; return Directory.EnumerateFileSystemEntries(path, "*", searchOption); } + + public virtual void SetExecutable(string path) + { + + } } } diff --git a/Emby.Common.Implementations/Net/NetSocket.cs b/Emby.Common.Implementations/Net/NetSocket.cs index 72faa41a9..faa1a81e2 100644 --- a/Emby.Common.Implementations/Net/NetSocket.cs +++ b/Emby.Common.Implementations/Net/NetSocket.cs @@ -23,7 +23,7 @@ namespace Emby.Common.Implementations.Net { get { - return BaseNetworkManager.ToIpEndPointInfo((IPEndPoint)Socket.LocalEndPoint); + return NetworkManager.ToIpEndPointInfo((IPEndPoint)Socket.LocalEndPoint); } } @@ -31,7 +31,7 @@ namespace Emby.Common.Implementations.Net { get { - return BaseNetworkManager.ToIpEndPointInfo((IPEndPoint)Socket.RemoteEndPoint); + return NetworkManager.ToIpEndPointInfo((IPEndPoint)Socket.RemoteEndPoint); } } @@ -64,7 +64,7 @@ namespace Emby.Common.Implementations.Net public void Bind(IpEndPointInfo endpoint) { - var nativeEndpoint = BaseNetworkManager.ToIPEndPoint(endpoint); + var nativeEndpoint = NetworkManager.ToIPEndPoint(endpoint); Socket.Bind(nativeEndpoint); } diff --git a/Emby.Common.Implementations/Net/UdpSocket.cs b/Emby.Common.Implementations/Net/UdpSocket.cs index 244b37bb4..eca82034b 100644 --- a/Emby.Common.Implementations/Net/UdpSocket.cs +++ b/Emby.Common.Implementations/Net/UdpSocket.cs @@ -175,7 +175,7 @@ namespace Emby.Common.Implementations.Net return null; } - return BaseNetworkManager.ToIpEndPointInfo(endpoint); + return NetworkManager.ToIpEndPointInfo(endpoint); } private void ProcessResponse(IAsyncResult asyncResult) diff --git a/Emby.Common.Implementations/Networking/BaseNetworkManager.cs b/Emby.Common.Implementations/Networking/BaseNetworkManager.cs deleted file mode 100644 index f1ac8413b..000000000 --- a/Emby.Common.Implementations/Networking/BaseNetworkManager.cs +++ /dev/null @@ -1,485 +0,0 @@ -using MediaBrowser.Model.Logging; -using System; -using System.Collections.Generic; -using System.Globalization; -using System.Linq; -using System.Net; -using System.Net.NetworkInformation; -using System.Net.Sockets; -using System.Threading.Tasks; -using MediaBrowser.Model.Extensions; -using MediaBrowser.Model.Net; - -namespace Emby.Common.Implementations.Networking -{ - public abstract class BaseNetworkManager - { - protected ILogger Logger { get; private set; } - private DateTime _lastRefresh; - - protected BaseNetworkManager(ILogger logger) - { - Logger = logger; - } - - private List _localIpAddresses; - private readonly object _localIpAddressSyncLock = new object(); - - public IEnumerable GetLocalIpAddresses() - { - const int cacheMinutes = 5; - - lock (_localIpAddressSyncLock) - { - var forceRefresh = (DateTime.UtcNow - _lastRefresh).TotalMinutes >= cacheMinutes; - - if (_localIpAddresses == null || forceRefresh) - { - var addresses = GetLocalIpAddressesInternal().Select(ToIpAddressInfo).ToList(); - - _localIpAddresses = addresses; - _lastRefresh = DateTime.UtcNow; - - return addresses; - } - } - - return _localIpAddresses; - } - - private IEnumerable GetLocalIpAddressesInternal() - { - var list = GetIPsDefault() - .ToList(); - - if (list.Count == 0) - { - list.AddRange(GetLocalIpAddressesFallback().Result); - } - - return list.Where(FilterIpAddress).DistinctBy(i => i.ToString()); - } - - private bool FilterIpAddress(IPAddress address) - { - var addressString = address.ToString(); - - if (addressString.StartsWith("169.", StringComparison.OrdinalIgnoreCase)) - { - return false; - } - - return true; - } - - public bool IsInPrivateAddressSpace(string endpoint) - { - if (string.Equals(endpoint, "::1", StringComparison.OrdinalIgnoreCase)) - { - return true; - } - - // Handle ipv4 mapped to ipv6 - endpoint = endpoint.Replace("::ffff:", string.Empty); - - // Private address space: - // http://en.wikipedia.org/wiki/Private_network - - if (endpoint.StartsWith("172.", StringComparison.OrdinalIgnoreCase)) - { - return Is172AddressPrivate(endpoint); - } - - return - - endpoint.StartsWith("localhost", StringComparison.OrdinalIgnoreCase) || - endpoint.StartsWith("127.", StringComparison.OrdinalIgnoreCase) || - endpoint.StartsWith("10.", StringComparison.OrdinalIgnoreCase) || - endpoint.StartsWith("192.168", StringComparison.OrdinalIgnoreCase) || - endpoint.StartsWith("169.", StringComparison.OrdinalIgnoreCase); - } - - private bool Is172AddressPrivate(string endpoint) - { - for (var i = 16; i <= 31; i++) - { - if (endpoint.StartsWith("172." + i.ToString(CultureInfo.InvariantCulture) + ".", StringComparison.OrdinalIgnoreCase)) - { - return true; - } - } - - return false; - } - - public bool IsInLocalNetwork(string endpoint) - { - return IsInLocalNetworkInternal(endpoint, true); - } - - public bool IsInLocalNetworkInternal(string endpoint, bool resolveHost) - { - if (string.IsNullOrWhiteSpace(endpoint)) - { - throw new ArgumentNullException("endpoint"); - } - - IPAddress address; - if (IPAddress.TryParse(endpoint, out address)) - { - var addressString = address.ToString(); - - int lengthMatch = 100; - if (address.AddressFamily == AddressFamily.InterNetwork) - { - lengthMatch = 4; - if (IsInPrivateAddressSpace(addressString)) - { - return true; - } - } - else if (address.AddressFamily == AddressFamily.InterNetworkV6) - { - lengthMatch = 10; - if (IsInPrivateAddressSpace(endpoint)) - { - return true; - } - } - - // Should be even be doing this with ipv6? - if (addressString.Length >= lengthMatch) - { - var prefix = addressString.Substring(0, lengthMatch); - - if (GetLocalIpAddresses().Any(i => i.ToString().StartsWith(prefix, StringComparison.OrdinalIgnoreCase))) - { - return true; - } - } - } - else if (resolveHost) - { - Uri uri; - if (Uri.TryCreate(endpoint, UriKind.RelativeOrAbsolute, out uri)) - { - try - { - var host = uri.DnsSafeHost; - Logger.Debug("Resolving host {0}", host); - - address = GetIpAddresses(host).Result.FirstOrDefault(); - - if (address != null) - { - Logger.Debug("{0} resolved to {1}", host, address); - - return IsInLocalNetworkInternal(address.ToString(), false); - } - } - catch (InvalidOperationException) - { - // Can happen with reverse proxy or IIS url rewriting - } - catch (Exception ex) - { - Logger.ErrorException("Error resovling hostname", ex); - } - } - } - - return false; - } - - private Task GetIpAddresses(string hostName) - { - return Dns.GetHostAddressesAsync(hostName); - } - - private List GetIPsDefault() - { - NetworkInterface[] interfaces; - - try - { - var validStatuses = new[] { OperationalStatus.Up, OperationalStatus.Unknown }; - - interfaces = NetworkInterface.GetAllNetworkInterfaces() - .Where(i => validStatuses.Contains(i.OperationalStatus)) - .ToArray(); - } - catch (Exception ex) - { - Logger.ErrorException("Error in GetAllNetworkInterfaces", ex); - return new List(); - } - - return interfaces.SelectMany(network => - { - - try - { - Logger.Debug("Querying interface: {0}. Type: {1}. Status: {2}", network.Name, network.NetworkInterfaceType, network.OperationalStatus); - - var properties = network.GetIPProperties(); - - return properties.UnicastAddresses - .Where(i => i.IsDnsEligible) - .Select(i => i.Address) - .Where(i => i.AddressFamily == AddressFamily.InterNetwork) - .ToList(); - } - catch (Exception ex) - { - Logger.ErrorException("Error querying network interface", ex); - return new List(); - } - - }).DistinctBy(i => i.ToString()) - .ToList(); - } - - private async Task> GetLocalIpAddressesFallback() - { - var host = await Dns.GetHostEntryAsync(Dns.GetHostName()).ConfigureAwait(false); - - // Reverse them because the last one is usually the correct one - // It's not fool-proof so ultimately the consumer will have to examine them and decide - return host.AddressList - .Where(i => i.AddressFamily == AddressFamily.InterNetwork) - .Reverse(); - } - - /// - /// Gets a random port number that is currently available - /// - /// System.Int32. - public int GetRandomUnusedPort() - { - var listener = new TcpListener(IPAddress.Any, 0); - listener.Start(); - var port = ((IPEndPoint)listener.LocalEndpoint).Port; - listener.Stop(); - return port; - } - - /// - /// Returns MAC Address from first Network Card in Computer - /// - /// [string] MAC Address - public string GetMacAddress() - { - return NetworkInterface.GetAllNetworkInterfaces() - .Where(i => i.NetworkInterfaceType != NetworkInterfaceType.Loopback) - .Select(i => BitConverter.ToString(i.GetPhysicalAddress().GetAddressBytes())) - .FirstOrDefault(); - } - - /// - /// Parses the specified endpointstring. - /// - /// The endpointstring. - /// IPEndPoint. - public IPEndPoint Parse(string endpointstring) - { - return Parse(endpointstring, -1).Result; - } - - /// - /// Parses the specified endpointstring. - /// - /// The endpointstring. - /// The defaultport. - /// IPEndPoint. - /// Endpoint descriptor may not be empty. - /// - private static async Task Parse(string endpointstring, int defaultport) - { - if (String.IsNullOrEmpty(endpointstring) - || endpointstring.Trim().Length == 0) - { - throw new ArgumentException("Endpoint descriptor may not be empty."); - } - - if (defaultport != -1 && - (defaultport < IPEndPoint.MinPort - || defaultport > IPEndPoint.MaxPort)) - { - throw new ArgumentException(String.Format("Invalid default port '{0}'", defaultport)); - } - - string[] values = endpointstring.Split(new char[] { ':' }); - IPAddress ipaddy; - int port = -1; - - //check if we have an IPv6 or ports - if (values.Length <= 2) // ipv4 or hostname - { - port = values.Length == 1 ? defaultport : GetPort(values[1]); - - //try to use the address as IPv4, otherwise get hostname - if (!IPAddress.TryParse(values[0], out ipaddy)) - ipaddy = await GetIPfromHost(values[0]).ConfigureAwait(false); - } - else if (values.Length > 2) //ipv6 - { - //could [a:b:c]:d - if (values[0].StartsWith("[") && values[values.Length - 2].EndsWith("]")) - { - string ipaddressstring = String.Join(":", values.Take(values.Length - 1).ToArray()); - ipaddy = IPAddress.Parse(ipaddressstring); - port = GetPort(values[values.Length - 1]); - } - else //[a:b:c] or a:b:c - { - ipaddy = IPAddress.Parse(endpointstring); - port = defaultport; - } - } - else - { - throw new FormatException(String.Format("Invalid endpoint ipaddress '{0}'", endpointstring)); - } - - if (port == -1) - throw new ArgumentException(String.Format("No port specified: '{0}'", endpointstring)); - - return new IPEndPoint(ipaddy, port); - } - - protected static readonly CultureInfo UsCulture = new CultureInfo("en-US"); - - /// - /// Gets the port. - /// - /// The p. - /// System.Int32. - /// - private static int GetPort(string p) - { - int port; - - if (!Int32.TryParse(p, out port) - || port < IPEndPoint.MinPort - || port > IPEndPoint.MaxPort) - { - throw new FormatException(String.Format("Invalid end point port '{0}'", p)); - } - - return port; - } - - /// - /// Gets the I pfrom host. - /// - /// The p. - /// IPAddress. - /// - private static async Task GetIPfromHost(string p) - { - var hosts = await Dns.GetHostAddressesAsync(p).ConfigureAwait(false); - - if (hosts == null || hosts.Length == 0) - throw new ArgumentException(String.Format("Host not found: {0}", p)); - - return hosts[0]; - } - - public IpAddressInfo ParseIpAddress(string ipAddress) - { - IpAddressInfo info; - if (TryParseIpAddress(ipAddress, out info)) - { - return info; - } - - throw new ArgumentException("Invalid ip address: " + ipAddress); - } - - public bool TryParseIpAddress(string ipAddress, out IpAddressInfo ipAddressInfo) - { - IPAddress address; - if (IPAddress.TryParse(ipAddress, out address)) - { - ipAddressInfo = ToIpAddressInfo(address); - return true; - } - - ipAddressInfo = null; - return false; - } - - public static IpEndPointInfo ToIpEndPointInfo(IPEndPoint endpoint) - { - if (endpoint == null) - { - return null; - } - - return new IpEndPointInfo(ToIpAddressInfo(endpoint.Address), endpoint.Port); - } - - public static IPEndPoint ToIPEndPoint(IpEndPointInfo endpoint) - { - if (endpoint == null) - { - return null; - } - - return new IPEndPoint(ToIPAddress(endpoint.IpAddress), endpoint.Port); - } - - public static IPAddress ToIPAddress(IpAddressInfo address) - { - if (address.Equals(IpAddressInfo.Any)) - { - return IPAddress.Any; - } - if (address.Equals(IpAddressInfo.IPv6Any)) - { - return IPAddress.IPv6Any; - } - if (address.Equals(IpAddressInfo.Loopback)) - { - return IPAddress.Loopback; - } - if (address.Equals(IpAddressInfo.IPv6Loopback)) - { - return IPAddress.IPv6Loopback; - } - - return IPAddress.Parse(address.Address); - } - - public static IpAddressInfo ToIpAddressInfo(IPAddress address) - { - if (address.Equals(IPAddress.Any)) - { - return IpAddressInfo.Any; - } - if (address.Equals(IPAddress.IPv6Any)) - { - return IpAddressInfo.IPv6Any; - } - if (address.Equals(IPAddress.Loopback)) - { - return IpAddressInfo.Loopback; - } - if (address.Equals(IPAddress.IPv6Loopback)) - { - return IpAddressInfo.IPv6Loopback; - } - return new IpAddressInfo - { - Address = address.ToString(), - AddressFamily = address.AddressFamily == AddressFamily.InterNetworkV6 ? IpAddressFamily.InterNetworkV6 : IpAddressFamily.InterNetwork - }; - } - - public async Task GetHostAddressesAsync(string host) - { - var addresses = await Dns.GetHostAddressesAsync(host).ConfigureAwait(false); - return addresses.Select(ToIpAddressInfo).ToArray(); - } - } -} diff --git a/Emby.Common.Implementations/Networking/NetworkManager.cs b/Emby.Common.Implementations/Networking/NetworkManager.cs new file mode 100644 index 000000000..e33697337 --- /dev/null +++ b/Emby.Common.Implementations/Networking/NetworkManager.cs @@ -0,0 +1,506 @@ +using MediaBrowser.Model.Logging; +using System; +using System.Collections.Generic; +using System.Globalization; +using System.Linq; +using System.Net; +using System.Net.NetworkInformation; +using System.Net.Sockets; +using System.Threading.Tasks; +using MediaBrowser.Model.Extensions; +using MediaBrowser.Model.Net; +using MediaBrowser.Model.IO; +using MediaBrowser.Common.Net; + +namespace Emby.Common.Implementations.Networking +{ + public class NetworkManager : INetworkManager + { + protected ILogger Logger { get; private set; } + private DateTime _lastRefresh; + + public NetworkManager(ILogger logger) + { + Logger = logger; + } + + private List _localIpAddresses; + private readonly object _localIpAddressSyncLock = new object(); + + public IEnumerable GetLocalIpAddresses() + { + const int cacheMinutes = 5; + + lock (_localIpAddressSyncLock) + { + var forceRefresh = (DateTime.UtcNow - _lastRefresh).TotalMinutes >= cacheMinutes; + + if (_localIpAddresses == null || forceRefresh) + { + var addresses = GetLocalIpAddressesInternal().Select(ToIpAddressInfo).ToList(); + + _localIpAddresses = addresses; + _lastRefresh = DateTime.UtcNow; + + return addresses; + } + } + + return _localIpAddresses; + } + + private IEnumerable GetLocalIpAddressesInternal() + { + var list = GetIPsDefault() + .ToList(); + + if (list.Count == 0) + { + list.AddRange(GetLocalIpAddressesFallback().Result); + } + + return list.Where(FilterIpAddress).DistinctBy(i => i.ToString()); + } + + private bool FilterIpAddress(IPAddress address) + { + var addressString = address.ToString(); + + if (addressString.StartsWith("169.", StringComparison.OrdinalIgnoreCase)) + { + return false; + } + + return true; + } + + public bool IsInPrivateAddressSpace(string endpoint) + { + if (string.Equals(endpoint, "::1", StringComparison.OrdinalIgnoreCase)) + { + return true; + } + + // Handle ipv4 mapped to ipv6 + endpoint = endpoint.Replace("::ffff:", string.Empty); + + // Private address space: + // http://en.wikipedia.org/wiki/Private_network + + if (endpoint.StartsWith("172.", StringComparison.OrdinalIgnoreCase)) + { + return Is172AddressPrivate(endpoint); + } + + return + + endpoint.StartsWith("localhost", StringComparison.OrdinalIgnoreCase) || + endpoint.StartsWith("127.", StringComparison.OrdinalIgnoreCase) || + endpoint.StartsWith("10.", StringComparison.OrdinalIgnoreCase) || + endpoint.StartsWith("192.168", StringComparison.OrdinalIgnoreCase) || + endpoint.StartsWith("169.", StringComparison.OrdinalIgnoreCase); + } + + private bool Is172AddressPrivate(string endpoint) + { + for (var i = 16; i <= 31; i++) + { + if (endpoint.StartsWith("172." + i.ToString(CultureInfo.InvariantCulture) + ".", StringComparison.OrdinalIgnoreCase)) + { + return true; + } + } + + return false; + } + + public bool IsInLocalNetwork(string endpoint) + { + return IsInLocalNetworkInternal(endpoint, true); + } + + public bool IsInLocalNetworkInternal(string endpoint, bool resolveHost) + { + if (string.IsNullOrWhiteSpace(endpoint)) + { + throw new ArgumentNullException("endpoint"); + } + + IPAddress address; + if (IPAddress.TryParse(endpoint, out address)) + { + var addressString = address.ToString(); + + int lengthMatch = 100; + if (address.AddressFamily == AddressFamily.InterNetwork) + { + lengthMatch = 4; + if (IsInPrivateAddressSpace(addressString)) + { + return true; + } + } + else if (address.AddressFamily == AddressFamily.InterNetworkV6) + { + lengthMatch = 10; + if (IsInPrivateAddressSpace(endpoint)) + { + return true; + } + } + + // Should be even be doing this with ipv6? + if (addressString.Length >= lengthMatch) + { + var prefix = addressString.Substring(0, lengthMatch); + + if (GetLocalIpAddresses().Any(i => i.ToString().StartsWith(prefix, StringComparison.OrdinalIgnoreCase))) + { + return true; + } + } + } + else if (resolveHost) + { + Uri uri; + if (Uri.TryCreate(endpoint, UriKind.RelativeOrAbsolute, out uri)) + { + try + { + var host = uri.DnsSafeHost; + Logger.Debug("Resolving host {0}", host); + + address = GetIpAddresses(host).Result.FirstOrDefault(); + + if (address != null) + { + Logger.Debug("{0} resolved to {1}", host, address); + + return IsInLocalNetworkInternal(address.ToString(), false); + } + } + catch (InvalidOperationException) + { + // Can happen with reverse proxy or IIS url rewriting + } + catch (Exception ex) + { + Logger.ErrorException("Error resovling hostname", ex); + } + } + } + + return false; + } + + private Task GetIpAddresses(string hostName) + { + return Dns.GetHostAddressesAsync(hostName); + } + + private List GetIPsDefault() + { + NetworkInterface[] interfaces; + + try + { + var validStatuses = new[] { OperationalStatus.Up, OperationalStatus.Unknown }; + + interfaces = NetworkInterface.GetAllNetworkInterfaces() + .Where(i => validStatuses.Contains(i.OperationalStatus)) + .ToArray(); + } + catch (Exception ex) + { + Logger.ErrorException("Error in GetAllNetworkInterfaces", ex); + return new List(); + } + + return interfaces.SelectMany(network => + { + + try + { + Logger.Debug("Querying interface: {0}. Type: {1}. Status: {2}", network.Name, network.NetworkInterfaceType, network.OperationalStatus); + + var properties = network.GetIPProperties(); + + return properties.UnicastAddresses + .Where(i => i.IsDnsEligible) + .Select(i => i.Address) + .Where(i => i.AddressFamily == AddressFamily.InterNetwork) + .ToList(); + } + catch (Exception ex) + { + Logger.ErrorException("Error querying network interface", ex); + return new List(); + } + + }).DistinctBy(i => i.ToString()) + .ToList(); + } + + private async Task> GetLocalIpAddressesFallback() + { + var host = await Dns.GetHostEntryAsync(Dns.GetHostName()).ConfigureAwait(false); + + // Reverse them because the last one is usually the correct one + // It's not fool-proof so ultimately the consumer will have to examine them and decide + return host.AddressList + .Where(i => i.AddressFamily == AddressFamily.InterNetwork) + .Reverse(); + } + + /// + /// Gets a random port number that is currently available + /// + /// System.Int32. + public int GetRandomUnusedPort() + { + var listener = new TcpListener(IPAddress.Any, 0); + listener.Start(); + var port = ((IPEndPoint)listener.LocalEndpoint).Port; + listener.Stop(); + return port; + } + + /// + /// Returns MAC Address from first Network Card in Computer + /// + /// [string] MAC Address + public string GetMacAddress() + { + return NetworkInterface.GetAllNetworkInterfaces() + .Where(i => i.NetworkInterfaceType != NetworkInterfaceType.Loopback) + .Select(i => BitConverter.ToString(i.GetPhysicalAddress().GetAddressBytes())) + .FirstOrDefault(); + } + + /// + /// Parses the specified endpointstring. + /// + /// The endpointstring. + /// IPEndPoint. + public IPEndPoint Parse(string endpointstring) + { + return Parse(endpointstring, -1).Result; + } + + /// + /// Parses the specified endpointstring. + /// + /// The endpointstring. + /// The defaultport. + /// IPEndPoint. + /// Endpoint descriptor may not be empty. + /// + private static async Task Parse(string endpointstring, int defaultport) + { + if (String.IsNullOrEmpty(endpointstring) + || endpointstring.Trim().Length == 0) + { + throw new ArgumentException("Endpoint descriptor may not be empty."); + } + + if (defaultport != -1 && + (defaultport < IPEndPoint.MinPort + || defaultport > IPEndPoint.MaxPort)) + { + throw new ArgumentException(String.Format("Invalid default port '{0}'", defaultport)); + } + + string[] values = endpointstring.Split(new char[] { ':' }); + IPAddress ipaddy; + int port = -1; + + //check if we have an IPv6 or ports + if (values.Length <= 2) // ipv4 or hostname + { + port = values.Length == 1 ? defaultport : GetPort(values[1]); + + //try to use the address as IPv4, otherwise get hostname + if (!IPAddress.TryParse(values[0], out ipaddy)) + ipaddy = await GetIPfromHost(values[0]).ConfigureAwait(false); + } + else if (values.Length > 2) //ipv6 + { + //could [a:b:c]:d + if (values[0].StartsWith("[") && values[values.Length - 2].EndsWith("]")) + { + string ipaddressstring = String.Join(":", values.Take(values.Length - 1).ToArray()); + ipaddy = IPAddress.Parse(ipaddressstring); + port = GetPort(values[values.Length - 1]); + } + else //[a:b:c] or a:b:c + { + ipaddy = IPAddress.Parse(endpointstring); + port = defaultport; + } + } + else + { + throw new FormatException(String.Format("Invalid endpoint ipaddress '{0}'", endpointstring)); + } + + if (port == -1) + throw new ArgumentException(String.Format("No port specified: '{0}'", endpointstring)); + + return new IPEndPoint(ipaddy, port); + } + + protected static readonly CultureInfo UsCulture = new CultureInfo("en-US"); + + /// + /// Gets the port. + /// + /// The p. + /// System.Int32. + /// + private static int GetPort(string p) + { + int port; + + if (!Int32.TryParse(p, out port) + || port < IPEndPoint.MinPort + || port > IPEndPoint.MaxPort) + { + throw new FormatException(String.Format("Invalid end point port '{0}'", p)); + } + + return port; + } + + /// + /// Gets the I pfrom host. + /// + /// The p. + /// IPAddress. + /// + private static async Task GetIPfromHost(string p) + { + var hosts = await Dns.GetHostAddressesAsync(p).ConfigureAwait(false); + + if (hosts == null || hosts.Length == 0) + throw new ArgumentException(String.Format("Host not found: {0}", p)); + + return hosts[0]; + } + + public IpAddressInfo ParseIpAddress(string ipAddress) + { + IpAddressInfo info; + if (TryParseIpAddress(ipAddress, out info)) + { + return info; + } + + throw new ArgumentException("Invalid ip address: " + ipAddress); + } + + public bool TryParseIpAddress(string ipAddress, out IpAddressInfo ipAddressInfo) + { + IPAddress address; + if (IPAddress.TryParse(ipAddress, out address)) + { + ipAddressInfo = ToIpAddressInfo(address); + return true; + } + + ipAddressInfo = null; + return false; + } + + public static IpEndPointInfo ToIpEndPointInfo(IPEndPoint endpoint) + { + if (endpoint == null) + { + return null; + } + + return new IpEndPointInfo(ToIpAddressInfo(endpoint.Address), endpoint.Port); + } + + public static IPEndPoint ToIPEndPoint(IpEndPointInfo endpoint) + { + if (endpoint == null) + { + return null; + } + + return new IPEndPoint(ToIPAddress(endpoint.IpAddress), endpoint.Port); + } + + public static IPAddress ToIPAddress(IpAddressInfo address) + { + if (address.Equals(IpAddressInfo.Any)) + { + return IPAddress.Any; + } + if (address.Equals(IpAddressInfo.IPv6Any)) + { + return IPAddress.IPv6Any; + } + if (address.Equals(IpAddressInfo.Loopback)) + { + return IPAddress.Loopback; + } + if (address.Equals(IpAddressInfo.IPv6Loopback)) + { + return IPAddress.IPv6Loopback; + } + + return IPAddress.Parse(address.Address); + } + + public static IpAddressInfo ToIpAddressInfo(IPAddress address) + { + if (address.Equals(IPAddress.Any)) + { + return IpAddressInfo.Any; + } + if (address.Equals(IPAddress.IPv6Any)) + { + return IpAddressInfo.IPv6Any; + } + if (address.Equals(IPAddress.Loopback)) + { + return IpAddressInfo.Loopback; + } + if (address.Equals(IPAddress.IPv6Loopback)) + { + return IpAddressInfo.IPv6Loopback; + } + return new IpAddressInfo + { + Address = address.ToString(), + AddressFamily = address.AddressFamily == AddressFamily.InterNetworkV6 ? IpAddressFamily.InterNetworkV6 : IpAddressFamily.InterNetwork + }; + } + + public async Task GetHostAddressesAsync(string host) + { + var addresses = await Dns.GetHostAddressesAsync(host).ConfigureAwait(false); + return addresses.Select(ToIpAddressInfo).ToArray(); + } + + /// + /// Gets the network shares. + /// + /// The path. + /// IEnumerable{NetworkShare}. + public IEnumerable GetNetworkShares(string path) + { + return new List(); + } + + /// + /// Gets available devices within the domain + /// + /// PC's in the Domain + public IEnumerable GetNetworkDevices() + { + return new List(); + } + } +} diff --git a/Emby.Server.Core/FFMpeg/FFMpegLoader.cs b/Emby.Server.Core/FFMpeg/FFMpegLoader.cs new file mode 100644 index 000000000..6b090102a --- /dev/null +++ b/Emby.Server.Core/FFMpeg/FFMpegLoader.cs @@ -0,0 +1,240 @@ +using MediaBrowser.Common.Configuration; +using MediaBrowser.Common.Net; +using MediaBrowser.Model.IO; +using MediaBrowser.Model.Logging; +using System; +using System.Collections.Generic; +using System.IO; +using System.Linq; +using System.Threading; +using System.Threading.Tasks; +using Emby.Server.Core; +using Emby.Server.Core.FFMpeg; + +namespace Emby.Server.Core.FFMpeg +{ + public class FFMpegLoader + { + private readonly IHttpClient _httpClient; + private readonly IApplicationPaths _appPaths; + private readonly ILogger _logger; + private readonly IZipClient _zipClient; + private readonly IFileSystem _fileSystem; + private readonly FFMpegInstallInfo _ffmpegInstallInfo; + + public FFMpegLoader(ILogger logger, IApplicationPaths appPaths, IHttpClient httpClient, IZipClient zipClient, IFileSystem fileSystem, FFMpegInstallInfo ffmpegInstallInfo) + { + _logger = logger; + _appPaths = appPaths; + _httpClient = httpClient; + _zipClient = zipClient; + _fileSystem = fileSystem; + _ffmpegInstallInfo = ffmpegInstallInfo; + } + + public async Task GetFFMpegInfo(StartupOptions options, IProgress progress) + { + var customffMpegPath = options.GetOption("-ffmpeg"); + var customffProbePath = options.GetOption("-ffprobe"); + + if (!string.IsNullOrWhiteSpace(customffMpegPath) && !string.IsNullOrWhiteSpace(customffProbePath)) + { + return new FFMpegInfo + { + ProbePath = customffProbePath, + EncoderPath = customffMpegPath, + Version = "external" + }; + } + + var downloadInfo = _ffmpegInstallInfo; + + var version = downloadInfo.Version; + + if (string.Equals(version, "path", StringComparison.OrdinalIgnoreCase)) + { + return new FFMpegInfo + { + ProbePath = downloadInfo.FFProbeFilename, + EncoderPath = downloadInfo.FFMpegFilename, + Version = version + }; + } + + if (string.Equals(version, "0", StringComparison.OrdinalIgnoreCase)) + { + return new FFMpegInfo(); + } + + var rootEncoderPath = Path.Combine(_appPaths.ProgramDataPath, "ffmpeg"); + var versionedDirectoryPath = Path.Combine(rootEncoderPath, version); + + var info = new FFMpegInfo + { + ProbePath = Path.Combine(versionedDirectoryPath, downloadInfo.FFProbeFilename), + EncoderPath = Path.Combine(versionedDirectoryPath, downloadInfo.FFMpegFilename), + Version = version + }; + + _fileSystem.CreateDirectory(versionedDirectoryPath); + + var excludeFromDeletions = new List { versionedDirectoryPath }; + + if (!_fileSystem.FileExists(info.ProbePath) || !_fileSystem.FileExists(info.EncoderPath)) + { + // ffmpeg not present. See if there's an older version we can start with + var existingVersion = GetExistingVersion(info, rootEncoderPath); + + // No older version. Need to download and block until complete + if (existingVersion == null) + { + var success = await DownloadFFMpeg(downloadInfo, versionedDirectoryPath, progress).ConfigureAwait(false); + if (!success) + { + return new FFMpegInfo(); + } + } + else + { + info = existingVersion; + versionedDirectoryPath = Path.GetDirectoryName(info.EncoderPath); + excludeFromDeletions.Add(versionedDirectoryPath); + } + } + + // Allow just one of these to be overridden, if desired. + if (!string.IsNullOrWhiteSpace(customffMpegPath)) + { + info.EncoderPath = customffMpegPath; + } + if (!string.IsNullOrWhiteSpace(customffProbePath)) + { + info.EncoderPath = customffProbePath; + } + + return info; + } + + private FFMpegInfo GetExistingVersion(FFMpegInfo info, string rootEncoderPath) + { + var encoderFilename = Path.GetFileName(info.EncoderPath); + var probeFilename = Path.GetFileName(info.ProbePath); + + foreach (var directory in Directory.EnumerateDirectories(rootEncoderPath, "*", SearchOption.TopDirectoryOnly) + .ToList()) + { + var allFiles = Directory.EnumerateFiles(directory, "*", SearchOption.AllDirectories).ToList(); + + var encoder = allFiles.FirstOrDefault(i => string.Equals(Path.GetFileName(i), encoderFilename, StringComparison.OrdinalIgnoreCase)); + var probe = allFiles.FirstOrDefault(i => string.Equals(Path.GetFileName(i), probeFilename, StringComparison.OrdinalIgnoreCase)); + + if (!string.IsNullOrWhiteSpace(encoder) && + !string.IsNullOrWhiteSpace(probe)) + { + return new FFMpegInfo + { + EncoderPath = encoder, + ProbePath = probe, + Version = Path.GetFileName(Path.GetDirectoryName(probe)) + }; + } + } + + return null; + } + + private async Task DownloadFFMpeg(FFMpegInstallInfo downloadinfo, string directory, IProgress progress) + { + foreach (var url in downloadinfo.DownloadUrls) + { + progress.Report(0); + + try + { + var tempFile = await _httpClient.GetTempFile(new HttpRequestOptions + { + Url = url, + CancellationToken = CancellationToken.None, + Progress = progress + + }).ConfigureAwait(false); + + ExtractFFMpeg(downloadinfo, tempFile, directory); + return true; + } + catch (Exception ex) + { + _logger.ErrorException("Error downloading {0}", ex, url); + } + } + return false; + } + + private void ExtractFFMpeg(FFMpegInstallInfo downloadinfo, string tempFile, string targetFolder) + { + _logger.Info("Extracting ffmpeg from {0}", tempFile); + + var tempFolder = Path.Combine(_appPaths.TempDirectory, Guid.NewGuid().ToString()); + + _fileSystem.CreateDirectory(tempFolder); + + try + { + ExtractArchive(downloadinfo, tempFile, tempFolder); + + var files = Directory.EnumerateFiles(tempFolder, "*", SearchOption.AllDirectories) + .ToList(); + + foreach (var file in files.Where(i => + { + var filename = Path.GetFileName(i); + + return + string.Equals(filename, downloadinfo.FFProbeFilename, StringComparison.OrdinalIgnoreCase) || + string.Equals(filename, downloadinfo.FFMpegFilename, StringComparison.OrdinalIgnoreCase); + })) + { + var targetFile = Path.Combine(targetFolder, Path.GetFileName(file)); + _fileSystem.CopyFile(file, targetFile, true); + SetFilePermissions(targetFile); + } + } + finally + { + DeleteFile(tempFile); + } + } + + private void SetFilePermissions(string path) + { + _fileSystem.SetExecutable(path); + } + + private void ExtractArchive(FFMpegInstallInfo downloadinfo, string archivePath, string targetPath) + { + _logger.Info("Extracting {0} to {1}", archivePath, targetPath); + + if (string.Equals(downloadinfo.ArchiveType, "7z", StringComparison.OrdinalIgnoreCase)) + { + _zipClient.ExtractAllFrom7z(archivePath, targetPath, true); + } + else if (string.Equals(downloadinfo.ArchiveType, "gz", StringComparison.OrdinalIgnoreCase)) + { + _zipClient.ExtractAllFromTar(archivePath, targetPath, true); + } + } + + private void DeleteFile(string path) + { + try + { + _fileSystem.DeleteFile(path); + } + catch (IOException ex) + { + _logger.ErrorException("Error deleting temp file {0}", ex, path); + } + } + + } +} diff --git a/Emby.Server.Core/Localization/TextLocalizer.cs b/Emby.Server.Core/Localization/TextLocalizer.cs new file mode 100644 index 000000000..016d59659 --- /dev/null +++ b/Emby.Server.Core/Localization/TextLocalizer.cs @@ -0,0 +1,25 @@ +using System; +using System.Globalization; +using System.Linq; +using System.Text; +using Emby.Server.Implementations.Localization; + +namespace Emby.Server.Core.Localization +{ + public class TextLocalizer : ITextLocalizer + { + public string RemoveDiacritics(string text) + { + return String.Concat( + text.Normalize(NormalizationForm.FormD) + .Where(ch => CharUnicodeInfo.GetUnicodeCategory(ch) != + UnicodeCategory.NonSpacingMark) + ).Normalize(NormalizationForm.FormC); + } + + public string NormalizeFormKD(string text) + { + return text.Normalize(NormalizationForm.FormKD); + } + } +} diff --git a/Emby.Server.Core/Security/AuthenticationRepository.cs b/Emby.Server.Core/Security/AuthenticationRepository.cs new file mode 100644 index 000000000..eaf91c710 --- /dev/null +++ b/Emby.Server.Core/Security/AuthenticationRepository.cs @@ -0,0 +1,317 @@ +using System; +using System.Collections.Generic; +using System.Data; +using System.Globalization; +using System.IO; +using System.Threading; +using System.Threading.Tasks; +using Emby.Server.Core.Data; +using MediaBrowser.Controller; +using MediaBrowser.Controller.Security; +using MediaBrowser.Model.Logging; +using MediaBrowser.Model.Querying; + +namespace Emby.Server.Core.Security +{ + public class AuthenticationRepository : BaseSqliteRepository, IAuthenticationRepository + { + private readonly IServerApplicationPaths _appPaths; + private readonly CultureInfo _usCulture = new CultureInfo("en-US"); + + public AuthenticationRepository(ILogManager logManager, IServerApplicationPaths appPaths, IDbConnector connector) + : base(logManager, connector) + { + _appPaths = appPaths; + DbFilePath = Path.Combine(appPaths.DataPath, "authentication.db"); + } + + public async Task Initialize() + { + using (var connection = await CreateConnection().ConfigureAwait(false)) + { + string[] queries = { + + "create table if not exists AccessTokens (Id GUID PRIMARY KEY, AccessToken TEXT NOT NULL, DeviceId TEXT, AppName TEXT, AppVersion TEXT, DeviceName TEXT, UserId TEXT, IsActive BIT, DateCreated DATETIME NOT NULL, DateRevoked DATETIME)", + "create index if not exists idx_AccessTokens on AccessTokens(Id)" + }; + + connection.RunQueries(queries, Logger); + + connection.AddColumn(Logger, "AccessTokens", "AppVersion", "TEXT"); + } + } + + public Task Create(AuthenticationInfo info, CancellationToken cancellationToken) + { + info.Id = Guid.NewGuid().ToString("N"); + + return Update(info, cancellationToken); + } + + public async Task Update(AuthenticationInfo info, CancellationToken cancellationToken) + { + if (info == null) + { + throw new ArgumentNullException("info"); + } + + cancellationToken.ThrowIfCancellationRequested(); + + using (var connection = await CreateConnection().ConfigureAwait(false)) + { + using (var saveInfoCommand = connection.CreateCommand()) + { + saveInfoCommand.CommandText = "replace into AccessTokens (Id, AccessToken, DeviceId, AppName, AppVersion, DeviceName, UserId, IsActive, DateCreated, DateRevoked) values (@Id, @AccessToken, @DeviceId, @AppName, @AppVersion, @DeviceName, @UserId, @IsActive, @DateCreated, @DateRevoked)"; + + saveInfoCommand.Parameters.Add(saveInfoCommand, "@Id"); + saveInfoCommand.Parameters.Add(saveInfoCommand, "@AccessToken"); + saveInfoCommand.Parameters.Add(saveInfoCommand, "@DeviceId"); + saveInfoCommand.Parameters.Add(saveInfoCommand, "@AppName"); + saveInfoCommand.Parameters.Add(saveInfoCommand, "@AppVersion"); + saveInfoCommand.Parameters.Add(saveInfoCommand, "@DeviceName"); + saveInfoCommand.Parameters.Add(saveInfoCommand, "@UserId"); + saveInfoCommand.Parameters.Add(saveInfoCommand, "@IsActive"); + saveInfoCommand.Parameters.Add(saveInfoCommand, "@DateCreated"); + saveInfoCommand.Parameters.Add(saveInfoCommand, "@DateRevoked"); + + IDbTransaction transaction = null; + + try + { + transaction = connection.BeginTransaction(); + + var index = 0; + + saveInfoCommand.GetParameter(index++).Value = new Guid(info.Id); + saveInfoCommand.GetParameter(index++).Value = info.AccessToken; + saveInfoCommand.GetParameter(index++).Value = info.DeviceId; + saveInfoCommand.GetParameter(index++).Value = info.AppName; + saveInfoCommand.GetParameter(index++).Value = info.AppVersion; + saveInfoCommand.GetParameter(index++).Value = info.DeviceName; + saveInfoCommand.GetParameter(index++).Value = info.UserId; + saveInfoCommand.GetParameter(index++).Value = info.IsActive; + saveInfoCommand.GetParameter(index++).Value = info.DateCreated; + saveInfoCommand.GetParameter(index++).Value = info.DateRevoked; + + saveInfoCommand.Transaction = transaction; + + saveInfoCommand.ExecuteNonQuery(); + + transaction.Commit(); + } + catch (OperationCanceledException) + { + if (transaction != null) + { + transaction.Rollback(); + } + + throw; + } + catch (Exception e) + { + Logger.ErrorException("Failed to save record:", e); + + if (transaction != null) + { + transaction.Rollback(); + } + + throw; + } + finally + { + if (transaction != null) + { + transaction.Dispose(); + } + } + } + } + } + + private const string BaseSelectText = "select Id, AccessToken, DeviceId, AppName, AppVersion, DeviceName, UserId, IsActive, DateCreated, DateRevoked from AccessTokens"; + + public QueryResult Get(AuthenticationInfoQuery query) + { + if (query == null) + { + throw new ArgumentNullException("query"); + } + + using (var connection = CreateConnection(true).Result) + { + using (var cmd = connection.CreateCommand()) + { + cmd.CommandText = BaseSelectText; + + var whereClauses = new List(); + + var startIndex = query.StartIndex ?? 0; + + if (!string.IsNullOrWhiteSpace(query.AccessToken)) + { + whereClauses.Add("AccessToken=@AccessToken"); + cmd.Parameters.Add(cmd, "@AccessToken", DbType.String).Value = query.AccessToken; + } + + if (!string.IsNullOrWhiteSpace(query.UserId)) + { + whereClauses.Add("UserId=@UserId"); + cmd.Parameters.Add(cmd, "@UserId", DbType.String).Value = query.UserId; + } + + if (!string.IsNullOrWhiteSpace(query.DeviceId)) + { + whereClauses.Add("DeviceId=@DeviceId"); + cmd.Parameters.Add(cmd, "@DeviceId", DbType.String).Value = query.DeviceId; + } + + if (query.IsActive.HasValue) + { + whereClauses.Add("IsActive=@IsActive"); + cmd.Parameters.Add(cmd, "@IsActive", DbType.Boolean).Value = query.IsActive.Value; + } + + if (query.HasUser.HasValue) + { + if (query.HasUser.Value) + { + whereClauses.Add("UserId not null"); + } + else + { + whereClauses.Add("UserId is null"); + } + } + + var whereTextWithoutPaging = whereClauses.Count == 0 ? + string.Empty : + " where " + string.Join(" AND ", whereClauses.ToArray()); + + if (startIndex > 0) + { + var pagingWhereText = whereClauses.Count == 0 ? + string.Empty : + " where " + string.Join(" AND ", whereClauses.ToArray()); + + whereClauses.Add(string.Format("Id NOT IN (SELECT Id FROM AccessTokens {0} ORDER BY DateCreated LIMIT {1})", + pagingWhereText, + startIndex.ToString(_usCulture))); + } + + var whereText = whereClauses.Count == 0 ? + string.Empty : + " where " + string.Join(" AND ", whereClauses.ToArray()); + + cmd.CommandText += whereText; + + cmd.CommandText += " ORDER BY DateCreated"; + + if (query.Limit.HasValue) + { + cmd.CommandText += " LIMIT " + query.Limit.Value.ToString(_usCulture); + } + + cmd.CommandText += "; select count (Id) from AccessTokens" + whereTextWithoutPaging; + + var list = new List(); + var count = 0; + + using (var reader = cmd.ExecuteReader(CommandBehavior.SequentialAccess)) + { + while (reader.Read()) + { + list.Add(Get(reader)); + } + + if (reader.NextResult() && reader.Read()) + { + count = reader.GetInt32(0); + } + } + + return new QueryResult() + { + Items = list.ToArray(), + TotalRecordCount = count + }; + } + } + } + + public AuthenticationInfo Get(string id) + { + if (string.IsNullOrEmpty(id)) + { + throw new ArgumentNullException("id"); + } + + using (var connection = CreateConnection(true).Result) + { + var guid = new Guid(id); + + using (var cmd = connection.CreateCommand()) + { + cmd.CommandText = BaseSelectText + " where Id=@Id"; + + cmd.Parameters.Add(cmd, "@Id", DbType.Guid).Value = guid; + + using (var reader = cmd.ExecuteReader(CommandBehavior.SequentialAccess | CommandBehavior.SingleResult | CommandBehavior.SingleRow)) + { + if (reader.Read()) + { + return Get(reader); + } + } + } + + return null; + } + } + + private AuthenticationInfo Get(IDataReader reader) + { + var info = new AuthenticationInfo + { + Id = reader.GetGuid(0).ToString("N"), + AccessToken = reader.GetString(1) + }; + + if (!reader.IsDBNull(2)) + { + info.DeviceId = reader.GetString(2); + } + + if (!reader.IsDBNull(3)) + { + info.AppName = reader.GetString(3); + } + + if (!reader.IsDBNull(4)) + { + info.AppVersion = reader.GetString(4); + } + + if (!reader.IsDBNull(5)) + { + info.DeviceName = reader.GetString(5); + } + + if (!reader.IsDBNull(6)) + { + info.UserId = reader.GetString(6); + } + + info.IsActive = reader.GetBoolean(7); + info.DateCreated = reader.GetDateTime(8).ToUniversalTime(); + + if (!reader.IsDBNull(9)) + { + info.DateRevoked = reader.GetDateTime(9).ToUniversalTime(); + } + + return info; + } + } +} diff --git a/Emby.Server.Core/project.json b/Emby.Server.Core/project.json index e4e4741b1..8e120c8a1 100644 --- a/Emby.Server.Core/project.json +++ b/Emby.Server.Core/project.json @@ -28,6 +28,9 @@ }, "Emby.Server.Implementations": { "target": "project" + }, + "MediaBrowser.Server.Implementations": { + "target": "project" } } }, @@ -36,6 +39,7 @@ "dependencies": { "NETStandard.Library": "1.6.0", "System.AppDomain": "2.0.11", + "System.Globalization.Extensions": "4.0.1", "MediaBrowser.Model": { "target": "project" }, @@ -53,6 +57,9 @@ }, "Emby.Server.Implementations": { "target": "project" + }, + "MediaBrowser.Server.Implementations": { + "target": "project" } } } diff --git a/Emby.Server.Implementations/Emby.Server.Implementations.csproj b/Emby.Server.Implementations/Emby.Server.Implementations.csproj index 438edf212..f65b8ac4a 100644 --- a/Emby.Server.Implementations/Emby.Server.Implementations.csproj +++ b/Emby.Server.Implementations/Emby.Server.Implementations.csproj @@ -92,6 +92,7 @@ + @@ -270,6 +271,10 @@ {442b5058-dcaf-4263-bb6a-f21e31120a1b} MediaBrowser.Providers + + {2e781478-814d-4a48-9d80-bff206441a65} + MediaBrowser.Server.Implementations + ..\ThirdParty\ServiceStack\ServiceStack.dll diff --git a/Emby.Server.Implementations/IO/MbLinkShortcutHandler.cs b/Emby.Server.Implementations/IO/MbLinkShortcutHandler.cs new file mode 100644 index 000000000..0b1391ae0 --- /dev/null +++ b/Emby.Server.Implementations/IO/MbLinkShortcutHandler.cs @@ -0,0 +1,55 @@ +using System; +using System.IO; +using MediaBrowser.Common.IO; +using MediaBrowser.Controller.IO; +using MediaBrowser.Model.IO; + +namespace Emby.Server.Implementations.IO +{ + public class MbLinkShortcutHandler : IShortcutHandler + { + private readonly IFileSystem _fileSystem; + + public MbLinkShortcutHandler(IFileSystem fileSystem) + { + _fileSystem = fileSystem; + } + + public string Extension + { + get { return ".mblink"; } + } + + public string Resolve(string shortcutPath) + { + if (string.IsNullOrEmpty(shortcutPath)) + { + throw new ArgumentNullException("filenshortcutPathame"); + } + + if (string.Equals(Path.GetExtension(shortcutPath), ".mblink", StringComparison.OrdinalIgnoreCase)) + { + var path = _fileSystem.ReadAllText(shortcutPath); + + return _fileSystem.NormalizePath(path); + } + + return null; + } + + public void Create(string shortcutPath, string targetPath) + { + if (string.IsNullOrEmpty(shortcutPath)) + { + throw new ArgumentNullException("shortcutPath"); + } + + if (string.IsNullOrEmpty(targetPath)) + { + throw new ArgumentNullException("targetPath"); + } + + _fileSystem.WriteAllText(shortcutPath, targetPath); + } + } +} diff --git a/MediaBrowser.Common/Net/INetworkManager.cs b/MediaBrowser.Common/Net/INetworkManager.cs index 779db0a82..5ac701f82 100644 --- a/MediaBrowser.Common/Net/INetworkManager.cs +++ b/MediaBrowser.Common/Net/INetworkManager.cs @@ -54,12 +54,5 @@ namespace MediaBrowser.Common.Net bool TryParseIpAddress(string ipAddress, out IpAddressInfo ipAddressInfo); Task GetHostAddressesAsync(string host); - - /// - /// Generates a self signed certificate at the locatation specified by . - /// - /// The path to generate the certificate. - /// The common name for the certificate. - void GenerateSelfSignedSslCertificate(string certificatePath, string hostname); } } \ No newline at end of file diff --git a/MediaBrowser.Controller/Devices/CameraUploadsFolder.cs b/MediaBrowser.Controller/Devices/CameraUploadsFolder.cs deleted file mode 100644 index 979a929ca..000000000 --- a/MediaBrowser.Controller/Devices/CameraUploadsFolder.cs +++ /dev/null @@ -1,67 +0,0 @@ -using MediaBrowser.Common.Configuration; -using MediaBrowser.Controller.Entities; -using System; -using System.IO; -using System.Linq; -using System.Threading; -using System.Threading.Tasks; -using MediaBrowser.Common.IO; -using MediaBrowser.Controller.IO; -using MediaBrowser.Model.IO; -using MediaBrowser.Controller.Providers; -using MediaBrowser.Model.Serialization; - -namespace MediaBrowser.Server.Implementations.Devices -{ - public class CameraUploadsFolder : BasePluginFolder, ISupportsUserSpecificView - { - public CameraUploadsFolder() - { - Name = "Camera Uploads"; - } - - public override bool IsVisible(User user) - { - if (!user.Policy.EnableAllFolders && !user.Policy.EnabledFolders.Contains(Id.ToString("N"), StringComparer.OrdinalIgnoreCase)) - { - return false; - } - - return base.IsVisible(user) && HasChildren(); - } - - [IgnoreDataMember] - public override string CollectionType - { - get { return Model.Entities.CollectionType.Photos; } - } - - public override string GetClientTypeName() - { - return typeof(CollectionFolder).Name; - } - - private bool? _hasChildren; - private bool HasChildren() - { - if (!_hasChildren.HasValue) - { - _hasChildren = LibraryManager.GetItemIds(new InternalItemsQuery { ParentId = Id }).Count > 0; - } - - return _hasChildren.Value; - } - - protected override Task ValidateChildrenInternal(IProgress progress, CancellationToken cancellationToken, bool recursive, bool refreshChildMetadata, MetadataRefreshOptions refreshOptions, IDirectoryService directoryService) - { - _hasChildren = null; - return base.ValidateChildrenInternal(progress, cancellationToken, recursive, refreshChildMetadata, refreshOptions, directoryService); - } - - [IgnoreDataMember] - public bool EnableUserSpecificView - { - get { return true; } - } - } -} diff --git a/MediaBrowser.Controller/MediaBrowser.Controller.csproj b/MediaBrowser.Controller/MediaBrowser.Controller.csproj index d867b1512..518daa6d7 100644 --- a/MediaBrowser.Controller/MediaBrowser.Controller.csproj +++ b/MediaBrowser.Controller/MediaBrowser.Controller.csproj @@ -77,7 +77,6 @@ - @@ -218,7 +217,6 @@ - diff --git a/MediaBrowser.Controller/Playlists/ManualPlaylistsFolder.cs b/MediaBrowser.Controller/Playlists/ManualPlaylistsFolder.cs deleted file mode 100644 index 07773d846..000000000 --- a/MediaBrowser.Controller/Playlists/ManualPlaylistsFolder.cs +++ /dev/null @@ -1,53 +0,0 @@ -using System.Collections.Generic; -using System.IO; -using System.Linq; -using System.Threading.Tasks; -using MediaBrowser.Common.Configuration; -using MediaBrowser.Controller.Entities; -using MediaBrowser.Controller.Playlists; -using MediaBrowser.Model.IO; -using MediaBrowser.Model.Querying; -using MediaBrowser.Model.Serialization; - -namespace MediaBrowser.Server.Implementations.Playlists -{ - public class PlaylistsFolder : BasePluginFolder - { - public PlaylistsFolder() - { - Name = "Playlists"; - } - - public override bool IsVisible(User user) - { - return base.IsVisible(user) && GetChildren(user, true).Any(); - } - - protected override IEnumerable GetEligibleChildrenForRecursiveChildren(User user) - { - return base.GetEligibleChildrenForRecursiveChildren(user).OfType(); - } - - [IgnoreDataMember] - public override bool IsHidden - { - get - { - return true; - } - } - - [IgnoreDataMember] - public override string CollectionType - { - get { return MediaBrowser.Model.Entities.CollectionType.Playlists; } - } - - protected override Task> GetItemsInternal(InternalItemsQuery query) - { - query.Recursive = false; - return base.GetItemsInternal(query); - } - } -} - diff --git a/MediaBrowser.Model/IO/IFileSystem.cs b/MediaBrowser.Model/IO/IFileSystem.cs index d2bb35520..f219d9295 100644 --- a/MediaBrowser.Model/IO/IFileSystem.cs +++ b/MediaBrowser.Model/IO/IFileSystem.cs @@ -312,6 +312,8 @@ namespace MediaBrowser.Model.IO string GetFullPath(string path); List GetDrives(); + + void SetExecutable(string path); } public enum FileOpenMode diff --git a/MediaBrowser.Server.Implementations/Devices/CameraUploadsFolder.cs b/MediaBrowser.Server.Implementations/Devices/CameraUploadsFolder.cs new file mode 100644 index 000000000..979a929ca --- /dev/null +++ b/MediaBrowser.Server.Implementations/Devices/CameraUploadsFolder.cs @@ -0,0 +1,67 @@ +using MediaBrowser.Common.Configuration; +using MediaBrowser.Controller.Entities; +using System; +using System.IO; +using System.Linq; +using System.Threading; +using System.Threading.Tasks; +using MediaBrowser.Common.IO; +using MediaBrowser.Controller.IO; +using MediaBrowser.Model.IO; +using MediaBrowser.Controller.Providers; +using MediaBrowser.Model.Serialization; + +namespace MediaBrowser.Server.Implementations.Devices +{ + public class CameraUploadsFolder : BasePluginFolder, ISupportsUserSpecificView + { + public CameraUploadsFolder() + { + Name = "Camera Uploads"; + } + + public override bool IsVisible(User user) + { + if (!user.Policy.EnableAllFolders && !user.Policy.EnabledFolders.Contains(Id.ToString("N"), StringComparer.OrdinalIgnoreCase)) + { + return false; + } + + return base.IsVisible(user) && HasChildren(); + } + + [IgnoreDataMember] + public override string CollectionType + { + get { return Model.Entities.CollectionType.Photos; } + } + + public override string GetClientTypeName() + { + return typeof(CollectionFolder).Name; + } + + private bool? _hasChildren; + private bool HasChildren() + { + if (!_hasChildren.HasValue) + { + _hasChildren = LibraryManager.GetItemIds(new InternalItemsQuery { ParentId = Id }).Count > 0; + } + + return _hasChildren.Value; + } + + protected override Task ValidateChildrenInternal(IProgress progress, CancellationToken cancellationToken, bool recursive, bool refreshChildMetadata, MetadataRefreshOptions refreshOptions, IDirectoryService directoryService) + { + _hasChildren = null; + return base.ValidateChildrenInternal(progress, cancellationToken, recursive, refreshChildMetadata, refreshOptions, directoryService); + } + + [IgnoreDataMember] + public bool EnableUserSpecificView + { + get { return true; } + } + } +} diff --git a/MediaBrowser.Server.Implementations/MediaBrowser.Server.Implementations.csproj b/MediaBrowser.Server.Implementations/MediaBrowser.Server.Implementations.csproj index 16c45f2e5..3bfbff6e6 100644 --- a/MediaBrowser.Server.Implementations/MediaBrowser.Server.Implementations.csproj +++ b/MediaBrowser.Server.Implementations/MediaBrowser.Server.Implementations.csproj @@ -44,13 +44,11 @@ Properties\SharedVersion.cs + + - - {e383961b-9356-4d5d-8233-9a1079d03055} - Emby.Server.Implementations - {9142EEFA-7570-41E1-BFCC-468BB571AF2F} MediaBrowser.Common diff --git a/MediaBrowser.Server.Implementations/Playlists/ManualPlaylistsFolder.cs b/MediaBrowser.Server.Implementations/Playlists/ManualPlaylistsFolder.cs new file mode 100644 index 000000000..07773d846 --- /dev/null +++ b/MediaBrowser.Server.Implementations/Playlists/ManualPlaylistsFolder.cs @@ -0,0 +1,53 @@ +using System.Collections.Generic; +using System.IO; +using System.Linq; +using System.Threading.Tasks; +using MediaBrowser.Common.Configuration; +using MediaBrowser.Controller.Entities; +using MediaBrowser.Controller.Playlists; +using MediaBrowser.Model.IO; +using MediaBrowser.Model.Querying; +using MediaBrowser.Model.Serialization; + +namespace MediaBrowser.Server.Implementations.Playlists +{ + public class PlaylistsFolder : BasePluginFolder + { + public PlaylistsFolder() + { + Name = "Playlists"; + } + + public override bool IsVisible(User user) + { + return base.IsVisible(user) && GetChildren(user, true).Any(); + } + + protected override IEnumerable GetEligibleChildrenForRecursiveChildren(User user) + { + return base.GetEligibleChildrenForRecursiveChildren(user).OfType(); + } + + [IgnoreDataMember] + public override bool IsHidden + { + get + { + return true; + } + } + + [IgnoreDataMember] + public override string CollectionType + { + get { return MediaBrowser.Model.Entities.CollectionType.Playlists; } + } + + protected override Task> GetItemsInternal(InternalItemsQuery query) + { + query.Recursive = false; + return base.GetItemsInternal(query); + } + } +} + diff --git a/MediaBrowser.Server.Mono/MediaBrowser.Server.Mono.csproj b/MediaBrowser.Server.Mono/MediaBrowser.Server.Mono.csproj index d59725d1d..b62d99a13 100644 --- a/MediaBrowser.Server.Mono/MediaBrowser.Server.Mono.csproj +++ b/MediaBrowser.Server.Mono/MediaBrowser.Server.Mono.csproj @@ -77,9 +77,6 @@ True - - ..\ThirdParty\ServiceStack\ServiceStack.Interfaces.dll - ..\ThirdParty\MediaBrowser.IsoMounting.Linux\MediaBrowser.IsoMounting.Linux.dll @@ -103,12 +100,17 @@ + + + {e383961b-9356-4d5d-8233-9a1079d03055} + Emby.Server.Implementations + {b90ab8f2-1bff-4568-a3fd-2a338a435a75} MediaBrowser.Server.Startup.Common diff --git a/MediaBrowser.Server.Mono/Native/MonoApp.cs b/MediaBrowser.Server.Mono/Native/MonoApp.cs index 59c95316c..6e7a677ae 100644 --- a/MediaBrowser.Server.Mono/Native/MonoApp.cs +++ b/MediaBrowser.Server.Mono/Native/MonoApp.cs @@ -7,12 +7,11 @@ using System; using System.Collections.Generic; using System.Reflection; using System.Text.RegularExpressions; +using Emby.Common.Implementations.Networking; using Emby.Server.Core; using Emby.Server.Core.Data; using Emby.Server.Core.FFMpeg; using MediaBrowser.Model.System; -using MediaBrowser.Server.Startup.Common.FFMpeg; -using MediaBrowser.Server.Startup.Common.Networking; using OperatingSystem = MediaBrowser.Server.Startup.Common.OperatingSystem; namespace MediaBrowser.Server.Mono.Native diff --git a/MediaBrowser.Server.Mono/Native/MonoFileSystem.cs b/MediaBrowser.Server.Mono/Native/MonoFileSystem.cs new file mode 100644 index 000000000..963956694 --- /dev/null +++ b/MediaBrowser.Server.Mono/Native/MonoFileSystem.cs @@ -0,0 +1,21 @@ +using Emby.Common.Implementations.IO; +using MediaBrowser.Model.Logging; +using Mono.Unix.Native; + +namespace MediaBrowser.Server.Mono.Native +{ + public class MonoFileSystem : ManagedFileSystem + { + public MonoFileSystem(ILogger logger, bool supportsAsyncFileStreams, bool enableManagedInvalidFileNameChars) : base(logger, supportsAsyncFileStreams, enableManagedInvalidFileNameChars) + { + } + + public override void SetExecutable(string path) + { + // Linux: File permission to 666, and user's execute bit + Logger.Info("Syscall.chmod {0} FilePermissions.DEFFILEMODE | FilePermissions.S_IRWXU | FilePermissions.S_IXGRP | FilePermissions.S_IXOTH", path); + + Syscall.chmod(path, FilePermissions.DEFFILEMODE | FilePermissions.S_IRWXU | FilePermissions.S_IXGRP | FilePermissions.S_IXOTH); + } + } +} diff --git a/MediaBrowser.Server.Mono/Program.cs b/MediaBrowser.Server.Mono/Program.cs index d45359627..7d687bb54 100644 --- a/MediaBrowser.Server.Mono/Program.cs +++ b/MediaBrowser.Server.Mono/Program.cs @@ -15,6 +15,7 @@ using System.Threading.Tasks; using Emby.Common.Implementations.IO; using Emby.Common.Implementations.Logging; using Emby.Server.Core; +using Emby.Server.Implementations.IO; namespace MediaBrowser.Server.Mono { @@ -76,7 +77,7 @@ namespace MediaBrowser.Server.Mono // Allow all https requests ServicePointManager.ServerCertificateValidationCallback = new RemoteCertificateValidationCallback(delegate { return true; }); - var fileSystem = new ManagedFileSystem(logManager.GetLogger("FileSystem"), false, false); + var fileSystem = new MonoFileSystem(logManager.GetLogger("FileSystem"), false, false); fileSystem.AddShortcutHandler(new MbLinkShortcutHandler(fileSystem)); var nativeApp = new MonoApp(options, logManager.GetLogger("App")); diff --git a/MediaBrowser.Server.Startup.Common/ApplicationHost.cs b/MediaBrowser.Server.Startup.Common/ApplicationHost.cs index 6d7ec699d..0646c71fd 100644 --- a/MediaBrowser.Server.Startup.Common/ApplicationHost.cs +++ b/MediaBrowser.Server.Startup.Common/ApplicationHost.cs @@ -48,9 +48,6 @@ using MediaBrowser.Model.Updates; using MediaBrowser.Providers.Chapters; using MediaBrowser.Providers.Manager; using MediaBrowser.Providers.Subtitles; -using MediaBrowser.Server.Implementations; -using MediaBrowser.Server.Implementations.Devices; -using MediaBrowser.Server.Startup.Common.FFMpeg; using MediaBrowser.WebDashboard.Api; using MediaBrowser.XbmcMetadata.Providers; using System; @@ -69,6 +66,7 @@ using Emby.Common.Implementations; using Emby.Common.Implementations.Archiving; using Emby.Common.Implementations.Networking; using Emby.Common.Implementations.Reflection; +using Emby.Common.Implementations.Security; using Emby.Common.Implementations.Serialization; using Emby.Common.Implementations.TextEncoding; using Emby.Common.Implementations.Updates; @@ -93,8 +91,11 @@ using Emby.Server.Core.Activity; using Emby.Server.Core.Configuration; using Emby.Server.Core.Data; using Emby.Server.Core.Devices; +using Emby.Server.Core.FFMpeg; +using Emby.Server.Core.Localization; using Emby.Server.Core.Migrations; using Emby.Server.Core.Notifications; +using Emby.Server.Core.Security; using Emby.Server.Core.Social; using Emby.Server.Core.Sync; using Emby.Server.Implementations.Activity; @@ -134,7 +135,6 @@ using MediaBrowser.Model.Social; using MediaBrowser.Model.Text; using MediaBrowser.Model.Xml; using MediaBrowser.Server.Startup.Common.IO; -using MediaBrowser.Server.Startup.Common.Security; using OpenSubtitlesHandler; using ServiceStack; using SocketHttpListener.Primitives; @@ -817,8 +817,8 @@ namespace MediaBrowser.Server.Startup.Common string encoderPath = null; string probePath = null; - var info = await new FFMpegLoader(Logger, ApplicationPaths, HttpClient, ZipClient, FileSystemManager, NativeApp.Environment, NativeApp.GetFfmpegInstallInfo()) - .GetFFMpegInfo(NativeApp.Environment, _startupOptions, progress).ConfigureAwait(false); + var info = await new FFMpegLoader(Logger, ApplicationPaths, HttpClient, ZipClient, FileSystemManager, NativeApp.GetFfmpegInstallInfo()) + .GetFFMpegInfo(_startupOptions, progress).ConfigureAwait(false); encoderPath = info.EncoderPath; probePath = info.ProbePath; @@ -1079,7 +1079,7 @@ namespace MediaBrowser.Server.Startup.Common try { - NetworkManager.GenerateSelfSignedSslCertificate(certPath, certHost); + CertificateGenerator.CreateSelfSignCertificatePfx(certPath, certHost, Logger); } catch (Exception ex) { @@ -1213,12 +1213,12 @@ namespace MediaBrowser.Server.Startup.Common // Common implementations list.Add(typeof(TaskManager).Assembly); - // MediaBrowser.Server implementations - list.Add(typeof(ServerApplicationPaths).Assembly); - // Emby.Server implementations list.Add(typeof(InstallationManager).Assembly); + // Emby.Server.Core + list.Add(typeof(ServerApplicationPaths).Assembly); + // MediaEncoding list.Add(typeof(MediaEncoder).Assembly); diff --git a/MediaBrowser.Server.Startup.Common/Cryptography/CertificateGenerator.cs b/MediaBrowser.Server.Startup.Common/Cryptography/CertificateGenerator.cs index f36b14cae..f5a337505 100644 --- a/MediaBrowser.Server.Startup.Common/Cryptography/CertificateGenerator.cs +++ b/MediaBrowser.Server.Startup.Common/Cryptography/CertificateGenerator.cs @@ -5,7 +5,7 @@ using System.Security.Cryptography; namespace Emby.Common.Implementations.Security { - internal class CertificateGenerator + public class CertificateGenerator { private const string MonoTestRootAgency = "v/4nALBxCE+9JgEC0LnDUvKh6e96PwTpN4Rj+vWnqKT7IAp1iK/JjuqvAg6DQ2vTfv0dTlqffmHH51OyioprcT5nzxcSTsZb/9jcHScG0s3/FRIWnXeLk/fgm7mSYhjUaHNI0m1/NTTktipicjKxo71hGIg9qucCWnDum+Krh/k=AQAB

9jbKxMXEruW2CfZrzhxtull4O8P47+mNsEL+9gf9QsRO1jJ77C+jmzfU6zbzjf8+ViK+q62tCMdC1ZzulwdpXQ==

x5+p198l1PkK0Ga2mRh0SIYSykENpY2aLXoyZD/iUpKYAvATm0/wvKNrE4dKJyPCA+y3hfTdgVag+SP9avvDTQ==ISSjCvXsUfbOGG05eddN1gXxL2pj+jegQRfjpk7RAsnWKvNExzhqd5x+ZuNQyc6QH5wxun54inP4RTUI0P/IaQ==R815VQmR3RIbPqzDXzv5j6CSH6fYlcTiQRtkBsUnzhWmkd/y3XmamO+a8zJFjOCCx9CcjpVuGziivBqi65lVPQ==iYiu0KwMWI/dyqN3RJYUzuuLj02/oTD1pYpwo2rvNCXU1Q5VscOeu2DpNg1gWqI+1RrRCsEoaTNzXB1xtKNlSw==nIfh1LYF8fjRBgMdAH/zt9UKHWiaCnc+jXzq5tkR8HVSKTVdzitD8bl1JgAfFQD8VjSXiCJqluexy/B5SGrCXQ49c78NIQj0hD+J13Y8/E0fUbW1QYbhj6Ff7oHyhaYe1WOQfkp2t/h+llHOdt1HRf7bt7dUknYp7m8bQKGxoYE=
"; diff --git a/MediaBrowser.Server.Startup.Common/FFMpeg/FFMpegLoader.cs b/MediaBrowser.Server.Startup.Common/FFMpeg/FFMpegLoader.cs deleted file mode 100644 index 08e6b435b..000000000 --- a/MediaBrowser.Server.Startup.Common/FFMpeg/FFMpegLoader.cs +++ /dev/null @@ -1,249 +0,0 @@ -using MediaBrowser.Common.Configuration; -using MediaBrowser.Common.Net; -using MediaBrowser.Model.IO; -using MediaBrowser.Model.Logging; -using Mono.Unix.Native; -using System; -using System.Collections.Generic; -using System.IO; -using System.Linq; -using System.Threading; -using System.Threading.Tasks; -using Emby.Server.Core; -using Emby.Server.Core.FFMpeg; - -namespace MediaBrowser.Server.Startup.Common.FFMpeg -{ - public class FFMpegLoader - { - private readonly IHttpClient _httpClient; - private readonly IApplicationPaths _appPaths; - private readonly ILogger _logger; - private readonly IZipClient _zipClient; - private readonly IFileSystem _fileSystem; - private readonly NativeEnvironment _environment; - private readonly FFMpegInstallInfo _ffmpegInstallInfo; - - public FFMpegLoader(ILogger logger, IApplicationPaths appPaths, IHttpClient httpClient, IZipClient zipClient, IFileSystem fileSystem, NativeEnvironment environment, FFMpegInstallInfo ffmpegInstallInfo) - { - _logger = logger; - _appPaths = appPaths; - _httpClient = httpClient; - _zipClient = zipClient; - _fileSystem = fileSystem; - _environment = environment; - _ffmpegInstallInfo = ffmpegInstallInfo; - } - - public async Task GetFFMpegInfo(NativeEnvironment environment, StartupOptions options, IProgress progress) - { - var customffMpegPath = options.GetOption("-ffmpeg"); - var customffProbePath = options.GetOption("-ffprobe"); - - if (!string.IsNullOrWhiteSpace(customffMpegPath) && !string.IsNullOrWhiteSpace(customffProbePath)) - { - return new FFMpegInfo - { - ProbePath = customffProbePath, - EncoderPath = customffMpegPath, - Version = "external" - }; - } - - var downloadInfo = _ffmpegInstallInfo; - - var version = downloadInfo.Version; - - if (string.Equals(version, "path", StringComparison.OrdinalIgnoreCase)) - { - return new FFMpegInfo - { - ProbePath = downloadInfo.FFProbeFilename, - EncoderPath = downloadInfo.FFMpegFilename, - Version = version - }; - } - - if (string.Equals(version, "0", StringComparison.OrdinalIgnoreCase)) - { - return new FFMpegInfo(); - } - - var rootEncoderPath = Path.Combine(_appPaths.ProgramDataPath, "ffmpeg"); - var versionedDirectoryPath = Path.Combine(rootEncoderPath, version); - - var info = new FFMpegInfo - { - ProbePath = Path.Combine(versionedDirectoryPath, downloadInfo.FFProbeFilename), - EncoderPath = Path.Combine(versionedDirectoryPath, downloadInfo.FFMpegFilename), - Version = version - }; - - _fileSystem.CreateDirectory(versionedDirectoryPath); - - var excludeFromDeletions = new List { versionedDirectoryPath }; - - if (!_fileSystem.FileExists(info.ProbePath) || !_fileSystem.FileExists(info.EncoderPath)) - { - // ffmpeg not present. See if there's an older version we can start with - var existingVersion = GetExistingVersion(info, rootEncoderPath); - - // No older version. Need to download and block until complete - if (existingVersion == null) - { - var success = await DownloadFFMpeg(downloadInfo, versionedDirectoryPath, progress).ConfigureAwait(false); - if (!success) - { - return new FFMpegInfo(); - } - } - else - { - info = existingVersion; - versionedDirectoryPath = Path.GetDirectoryName(info.EncoderPath); - excludeFromDeletions.Add(versionedDirectoryPath); - } - } - - // Allow just one of these to be overridden, if desired. - if (!string.IsNullOrWhiteSpace(customffMpegPath)) - { - info.EncoderPath = customffMpegPath; - } - if (!string.IsNullOrWhiteSpace(customffProbePath)) - { - info.EncoderPath = customffProbePath; - } - - return info; - } - - private FFMpegInfo GetExistingVersion(FFMpegInfo info, string rootEncoderPath) - { - var encoderFilename = Path.GetFileName(info.EncoderPath); - var probeFilename = Path.GetFileName(info.ProbePath); - - foreach (var directory in Directory.EnumerateDirectories(rootEncoderPath, "*", SearchOption.TopDirectoryOnly) - .ToList()) - { - var allFiles = Directory.EnumerateFiles(directory, "*", SearchOption.AllDirectories).ToList(); - - var encoder = allFiles.FirstOrDefault(i => string.Equals(Path.GetFileName(i), encoderFilename, StringComparison.OrdinalIgnoreCase)); - var probe = allFiles.FirstOrDefault(i => string.Equals(Path.GetFileName(i), probeFilename, StringComparison.OrdinalIgnoreCase)); - - if (!string.IsNullOrWhiteSpace(encoder) && - !string.IsNullOrWhiteSpace(probe)) - { - return new FFMpegInfo - { - EncoderPath = encoder, - ProbePath = probe, - Version = Path.GetFileName(Path.GetDirectoryName(probe)) - }; - } - } - - return null; - } - - private async Task DownloadFFMpeg(FFMpegInstallInfo downloadinfo, string directory, IProgress progress) - { - foreach (var url in downloadinfo.DownloadUrls) - { - progress.Report(0); - - try - { - var tempFile = await _httpClient.GetTempFile(new HttpRequestOptions - { - Url = url, - CancellationToken = CancellationToken.None, - Progress = progress - - }).ConfigureAwait(false); - - ExtractFFMpeg(downloadinfo, tempFile, directory); - return true; - } - catch (Exception ex) - { - _logger.ErrorException("Error downloading {0}", ex, url); - } - } - return false; - } - - private void ExtractFFMpeg(FFMpegInstallInfo downloadinfo, string tempFile, string targetFolder) - { - _logger.Info("Extracting ffmpeg from {0}", tempFile); - - var tempFolder = Path.Combine(_appPaths.TempDirectory, Guid.NewGuid().ToString()); - - _fileSystem.CreateDirectory(tempFolder); - - try - { - ExtractArchive(downloadinfo, tempFile, tempFolder); - - var files = Directory.EnumerateFiles(tempFolder, "*", SearchOption.AllDirectories) - .ToList(); - - foreach (var file in files.Where(i => - { - var filename = Path.GetFileName(i); - - return - string.Equals(filename, downloadinfo.FFProbeFilename, StringComparison.OrdinalIgnoreCase) || - string.Equals(filename, downloadinfo.FFMpegFilename, StringComparison.OrdinalIgnoreCase); - })) - { - var targetFile = Path.Combine(targetFolder, Path.GetFileName(file)); - _fileSystem.CopyFile(file, targetFile, true); - SetFilePermissions(targetFile); - } - } - finally - { - DeleteFile(tempFile); - } - } - - private void SetFilePermissions(string path) - { - // Linux: File permission to 666, and user's execute bit - if (_environment.OperatingSystem == OperatingSystem.Bsd || _environment.OperatingSystem == OperatingSystem.Linux || _environment.OperatingSystem == OperatingSystem.Osx) - { - _logger.Info("Syscall.chmod {0} FilePermissions.DEFFILEMODE | FilePermissions.S_IRWXU | FilePermissions.S_IXGRP | FilePermissions.S_IXOTH", path); - - Syscall.chmod(path, FilePermissions.DEFFILEMODE | FilePermissions.S_IRWXU | FilePermissions.S_IXGRP | FilePermissions.S_IXOTH); - } - } - - private void ExtractArchive(FFMpegInstallInfo downloadinfo, string archivePath, string targetPath) - { - _logger.Info("Extracting {0} to {1}", archivePath, targetPath); - - if (string.Equals(downloadinfo.ArchiveType, "7z", StringComparison.OrdinalIgnoreCase)) - { - _zipClient.ExtractAllFrom7z(archivePath, targetPath, true); - } - else if (string.Equals(downloadinfo.ArchiveType, "gz", StringComparison.OrdinalIgnoreCase)) - { - _zipClient.ExtractAllFromTar(archivePath, targetPath, true); - } - } - - private void DeleteFile(string path) - { - try - { - _fileSystem.DeleteFile(path); - } - catch (IOException ex) - { - _logger.ErrorException("Error deleting temp file {0}", ex, path); - } - } - - } -} diff --git a/MediaBrowser.Server.Startup.Common/MbLinkShortcutHandler.cs b/MediaBrowser.Server.Startup.Common/MbLinkShortcutHandler.cs deleted file mode 100644 index 26318365b..000000000 --- a/MediaBrowser.Server.Startup.Common/MbLinkShortcutHandler.cs +++ /dev/null @@ -1,55 +0,0 @@ -using System; -using System.IO; -using MediaBrowser.Common.IO; -using MediaBrowser.Controller.IO; -using MediaBrowser.Model.IO; - -namespace MediaBrowser.Server.Startup.Common -{ - public class MbLinkShortcutHandler : IShortcutHandler - { - private readonly IFileSystem _fileSystem; - - public MbLinkShortcutHandler(IFileSystem fileSystem) - { - _fileSystem = fileSystem; - } - - public string Extension - { - get { return ".mblink"; } - } - - public string Resolve(string shortcutPath) - { - if (string.IsNullOrEmpty(shortcutPath)) - { - throw new ArgumentNullException("filenshortcutPathame"); - } - - if (string.Equals(Path.GetExtension(shortcutPath), ".mblink", StringComparison.OrdinalIgnoreCase)) - { - var path = _fileSystem.ReadAllText(shortcutPath); - - return _fileSystem.NormalizePath(path); - } - - return null; - } - - public void Create(string shortcutPath, string targetPath) - { - if (string.IsNullOrEmpty(shortcutPath)) - { - throw new ArgumentNullException("shortcutPath"); - } - - if (string.IsNullOrEmpty(targetPath)) - { - throw new ArgumentNullException("targetPath"); - } - - File.WriteAllText(shortcutPath, targetPath); - } - } -} diff --git a/MediaBrowser.Server.Startup.Common/MediaBrowser.Server.Startup.Common.csproj b/MediaBrowser.Server.Startup.Common/MediaBrowser.Server.Startup.Common.csproj index 79c1356de..4bbd86060 100644 --- a/MediaBrowser.Server.Startup.Common/MediaBrowser.Server.Startup.Common.csproj +++ b/MediaBrowser.Server.Startup.Common/MediaBrowser.Server.Startup.Common.csproj @@ -113,7 +113,6 @@ - @@ -140,13 +139,9 @@ - - - -
diff --git a/MediaBrowser.Server.Startup.Common/Networking/NetworkManager.cs b/MediaBrowser.Server.Startup.Common/Networking/NetworkManager.cs deleted file mode 100644 index bd260bf87..000000000 --- a/MediaBrowser.Server.Startup.Common/Networking/NetworkManager.cs +++ /dev/null @@ -1,50 +0,0 @@ -using System.Collections.Generic; -using Emby.Common.Implementations.Networking; -using Emby.Common.Implementations.Security; -using MediaBrowser.Common.Net; -using MediaBrowser.Model.IO; -using MediaBrowser.Model.Logging; -using MediaBrowser.Model.Net; - -namespace MediaBrowser.Server.Startup.Common.Networking -{ - /// - /// Class NetUtils - /// - public class NetworkManager : BaseNetworkManager, INetworkManager - { - public NetworkManager(ILogger logger) - : base(logger) - { - } - - /// - /// Gets the network shares. - /// - /// The path. - /// IEnumerable{NetworkShare}. - public IEnumerable GetNetworkShares(string path) - { - return new List(); - } - - /// - /// Gets available devices within the domain - /// - /// PC's in the Domain - public IEnumerable GetNetworkDevices() - { - return new List(); - } - - /// - /// Generates a self signed certificate at the locatation specified by . - /// - /// The path to generate the certificate. - /// The common name for the certificate. - public void GenerateSelfSignedSslCertificate(string certificatePath, string hostname) - { - CertificateGenerator.CreateSelfSignCertificatePfx(certificatePath, hostname, Logger); - } - } -} diff --git a/MediaBrowser.Server.Startup.Common/Security/AuthenticationRepository.cs b/MediaBrowser.Server.Startup.Common/Security/AuthenticationRepository.cs deleted file mode 100644 index 0cf9f0879..000000000 --- a/MediaBrowser.Server.Startup.Common/Security/AuthenticationRepository.cs +++ /dev/null @@ -1,317 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Data; -using System.Globalization; -using System.IO; -using System.Threading; -using System.Threading.Tasks; -using Emby.Server.Core.Data; -using MediaBrowser.Controller; -using MediaBrowser.Controller.Security; -using MediaBrowser.Model.Logging; -using MediaBrowser.Model.Querying; - -namespace MediaBrowser.Server.Startup.Common.Security -{ - public class AuthenticationRepository : BaseSqliteRepository, IAuthenticationRepository - { - private readonly IServerApplicationPaths _appPaths; - private readonly CultureInfo _usCulture = new CultureInfo("en-US"); - - public AuthenticationRepository(ILogManager logManager, IServerApplicationPaths appPaths, IDbConnector connector) - : base(logManager, connector) - { - _appPaths = appPaths; - DbFilePath = Path.Combine(appPaths.DataPath, "authentication.db"); - } - - public async Task Initialize() - { - using (var connection = await CreateConnection().ConfigureAwait(false)) - { - string[] queries = { - - "create table if not exists AccessTokens (Id GUID PRIMARY KEY, AccessToken TEXT NOT NULL, DeviceId TEXT, AppName TEXT, AppVersion TEXT, DeviceName TEXT, UserId TEXT, IsActive BIT, DateCreated DATETIME NOT NULL, DateRevoked DATETIME)", - "create index if not exists idx_AccessTokens on AccessTokens(Id)" - }; - - connection.RunQueries(queries, Logger); - - connection.AddColumn(Logger, "AccessTokens", "AppVersion", "TEXT"); - } - } - - public Task Create(AuthenticationInfo info, CancellationToken cancellationToken) - { - info.Id = Guid.NewGuid().ToString("N"); - - return Update(info, cancellationToken); - } - - public async Task Update(AuthenticationInfo info, CancellationToken cancellationToken) - { - if (info == null) - { - throw new ArgumentNullException("info"); - } - - cancellationToken.ThrowIfCancellationRequested(); - - using (var connection = await CreateConnection().ConfigureAwait(false)) - { - using (var saveInfoCommand = connection.CreateCommand()) - { - saveInfoCommand.CommandText = "replace into AccessTokens (Id, AccessToken, DeviceId, AppName, AppVersion, DeviceName, UserId, IsActive, DateCreated, DateRevoked) values (@Id, @AccessToken, @DeviceId, @AppName, @AppVersion, @DeviceName, @UserId, @IsActive, @DateCreated, @DateRevoked)"; - - saveInfoCommand.Parameters.Add(saveInfoCommand, "@Id"); - saveInfoCommand.Parameters.Add(saveInfoCommand, "@AccessToken"); - saveInfoCommand.Parameters.Add(saveInfoCommand, "@DeviceId"); - saveInfoCommand.Parameters.Add(saveInfoCommand, "@AppName"); - saveInfoCommand.Parameters.Add(saveInfoCommand, "@AppVersion"); - saveInfoCommand.Parameters.Add(saveInfoCommand, "@DeviceName"); - saveInfoCommand.Parameters.Add(saveInfoCommand, "@UserId"); - saveInfoCommand.Parameters.Add(saveInfoCommand, "@IsActive"); - saveInfoCommand.Parameters.Add(saveInfoCommand, "@DateCreated"); - saveInfoCommand.Parameters.Add(saveInfoCommand, "@DateRevoked"); - - IDbTransaction transaction = null; - - try - { - transaction = connection.BeginTransaction(); - - var index = 0; - - saveInfoCommand.GetParameter(index++).Value = new Guid(info.Id); - saveInfoCommand.GetParameter(index++).Value = info.AccessToken; - saveInfoCommand.GetParameter(index++).Value = info.DeviceId; - saveInfoCommand.GetParameter(index++).Value = info.AppName; - saveInfoCommand.GetParameter(index++).Value = info.AppVersion; - saveInfoCommand.GetParameter(index++).Value = info.DeviceName; - saveInfoCommand.GetParameter(index++).Value = info.UserId; - saveInfoCommand.GetParameter(index++).Value = info.IsActive; - saveInfoCommand.GetParameter(index++).Value = info.DateCreated; - saveInfoCommand.GetParameter(index++).Value = info.DateRevoked; - - saveInfoCommand.Transaction = transaction; - - saveInfoCommand.ExecuteNonQuery(); - - transaction.Commit(); - } - catch (OperationCanceledException) - { - if (transaction != null) - { - transaction.Rollback(); - } - - throw; - } - catch (Exception e) - { - Logger.ErrorException("Failed to save record:", e); - - if (transaction != null) - { - transaction.Rollback(); - } - - throw; - } - finally - { - if (transaction != null) - { - transaction.Dispose(); - } - } - } - } - } - - private const string BaseSelectText = "select Id, AccessToken, DeviceId, AppName, AppVersion, DeviceName, UserId, IsActive, DateCreated, DateRevoked from AccessTokens"; - - public QueryResult Get(AuthenticationInfoQuery query) - { - if (query == null) - { - throw new ArgumentNullException("query"); - } - - using (var connection = CreateConnection(true).Result) - { - using (var cmd = connection.CreateCommand()) - { - cmd.CommandText = BaseSelectText; - - var whereClauses = new List(); - - var startIndex = query.StartIndex ?? 0; - - if (!string.IsNullOrWhiteSpace(query.AccessToken)) - { - whereClauses.Add("AccessToken=@AccessToken"); - cmd.Parameters.Add(cmd, "@AccessToken", DbType.String).Value = query.AccessToken; - } - - if (!string.IsNullOrWhiteSpace(query.UserId)) - { - whereClauses.Add("UserId=@UserId"); - cmd.Parameters.Add(cmd, "@UserId", DbType.String).Value = query.UserId; - } - - if (!string.IsNullOrWhiteSpace(query.DeviceId)) - { - whereClauses.Add("DeviceId=@DeviceId"); - cmd.Parameters.Add(cmd, "@DeviceId", DbType.String).Value = query.DeviceId; - } - - if (query.IsActive.HasValue) - { - whereClauses.Add("IsActive=@IsActive"); - cmd.Parameters.Add(cmd, "@IsActive", DbType.Boolean).Value = query.IsActive.Value; - } - - if (query.HasUser.HasValue) - { - if (query.HasUser.Value) - { - whereClauses.Add("UserId not null"); - } - else - { - whereClauses.Add("UserId is null"); - } - } - - var whereTextWithoutPaging = whereClauses.Count == 0 ? - string.Empty : - " where " + string.Join(" AND ", whereClauses.ToArray()); - - if (startIndex > 0) - { - var pagingWhereText = whereClauses.Count == 0 ? - string.Empty : - " where " + string.Join(" AND ", whereClauses.ToArray()); - - whereClauses.Add(string.Format("Id NOT IN (SELECT Id FROM AccessTokens {0} ORDER BY DateCreated LIMIT {1})", - pagingWhereText, - startIndex.ToString(_usCulture))); - } - - var whereText = whereClauses.Count == 0 ? - string.Empty : - " where " + string.Join(" AND ", whereClauses.ToArray()); - - cmd.CommandText += whereText; - - cmd.CommandText += " ORDER BY DateCreated"; - - if (query.Limit.HasValue) - { - cmd.CommandText += " LIMIT " + query.Limit.Value.ToString(_usCulture); - } - - cmd.CommandText += "; select count (Id) from AccessTokens" + whereTextWithoutPaging; - - var list = new List(); - var count = 0; - - using (var reader = cmd.ExecuteReader(CommandBehavior.SequentialAccess)) - { - while (reader.Read()) - { - list.Add(Get(reader)); - } - - if (reader.NextResult() && reader.Read()) - { - count = reader.GetInt32(0); - } - } - - return new QueryResult() - { - Items = list.ToArray(), - TotalRecordCount = count - }; - } - } - } - - public AuthenticationInfo Get(string id) - { - if (string.IsNullOrEmpty(id)) - { - throw new ArgumentNullException("id"); - } - - using (var connection = CreateConnection(true).Result) - { - var guid = new Guid(id); - - using (var cmd = connection.CreateCommand()) - { - cmd.CommandText = BaseSelectText + " where Id=@Id"; - - cmd.Parameters.Add(cmd, "@Id", DbType.Guid).Value = guid; - - using (var reader = cmd.ExecuteReader(CommandBehavior.SequentialAccess | CommandBehavior.SingleResult | CommandBehavior.SingleRow)) - { - if (reader.Read()) - { - return Get(reader); - } - } - } - - return null; - } - } - - private AuthenticationInfo Get(IDataReader reader) - { - var info = new AuthenticationInfo - { - Id = reader.GetGuid(0).ToString("N"), - AccessToken = reader.GetString(1) - }; - - if (!reader.IsDBNull(2)) - { - info.DeviceId = reader.GetString(2); - } - - if (!reader.IsDBNull(3)) - { - info.AppName = reader.GetString(3); - } - - if (!reader.IsDBNull(4)) - { - info.AppVersion = reader.GetString(4); - } - - if (!reader.IsDBNull(5)) - { - info.DeviceName = reader.GetString(5); - } - - if (!reader.IsDBNull(6)) - { - info.UserId = reader.GetString(6); - } - - info.IsActive = reader.GetBoolean(7); - info.DateCreated = reader.GetDateTime(8).ToUniversalTime(); - - if (!reader.IsDBNull(9)) - { - info.DateRevoked = reader.GetDateTime(9).ToUniversalTime(); - } - - return info; - } - } -} diff --git a/MediaBrowser.Server.Startup.Common/TextLocalizer.cs b/MediaBrowser.Server.Startup.Common/TextLocalizer.cs deleted file mode 100644 index c578199a0..000000000 --- a/MediaBrowser.Server.Startup.Common/TextLocalizer.cs +++ /dev/null @@ -1,25 +0,0 @@ -using System; -using System.Globalization; -using System.Linq; -using System.Text; -using Emby.Server.Implementations.Localization; - -namespace MediaBrowser.Server.Startup.Common -{ - public class TextLocalizer : ITextLocalizer - { - public string RemoveDiacritics(string text) - { - return String.Concat( - text.Normalize(NormalizationForm.FormD) - .Where(ch => CharUnicodeInfo.GetUnicodeCategory(ch) != - UnicodeCategory.NonSpacingMark) - ).Normalize(NormalizationForm.FormC); - } - - public string NormalizeFormKD(string text) - { - return text.Normalize(NormalizationForm.FormKD); - } - } -} diff --git a/MediaBrowser.ServerApplication/MainStartup.cs b/MediaBrowser.ServerApplication/MainStartup.cs index 2d97cbdf7..f2967e14a 100644 --- a/MediaBrowser.ServerApplication/MainStartup.cs +++ b/MediaBrowser.ServerApplication/MainStartup.cs @@ -21,6 +21,7 @@ using Emby.Common.Implementations.IO; using Emby.Common.Implementations.Logging; using Emby.Server.Core; using Emby.Server.Core.Browser; +using Emby.Server.Implementations.IO; using ImageMagickSharp; using MediaBrowser.Common.Net; diff --git a/MediaBrowser.ServerApplication/MediaBrowser.ServerApplication.csproj b/MediaBrowser.ServerApplication/MediaBrowser.ServerApplication.csproj index 2c78c22c9..b082b14d8 100644 --- a/MediaBrowser.ServerApplication/MediaBrowser.ServerApplication.csproj +++ b/MediaBrowser.ServerApplication/MediaBrowser.ServerApplication.csproj @@ -82,9 +82,6 @@ ..\packages\Patterns.Logging.1.0.0.6\lib\portable-net45+win8\Patterns.Logging.dll True - - ..\ThirdParty\ServiceStack\ServiceStack.Interfaces.dll - @@ -1064,6 +1061,10 @@ {08fff49b-f175-4807-a2b5-73b0ebd9f716} Emby.Drawing + + {e383961b-9356-4d5d-8233-9a1079d03055} + Emby.Server.Implementations + {4fd51ac5-2c16-4308-a993-c3a84f3b4582} MediaBrowser.Api diff --git a/MediaBrowser.ServerApplication/Native/WindowsApp.cs b/MediaBrowser.ServerApplication/Native/WindowsApp.cs index 8424bf574..d0f8239fe 100644 --- a/MediaBrowser.ServerApplication/Native/WindowsApp.cs +++ b/MediaBrowser.ServerApplication/Native/WindowsApp.cs @@ -15,7 +15,6 @@ using MediaBrowser.Common.IO; using MediaBrowser.Controller.IO; using MediaBrowser.Model.IO; using MediaBrowser.Model.System; -using MediaBrowser.Server.Startup.Common.FFMpeg; using OperatingSystem = MediaBrowser.Server.Startup.Common.OperatingSystem; namespace MediaBrowser.ServerApplication.Native diff --git a/MediaBrowser.ServerApplication/Networking/NetworkManager.cs b/MediaBrowser.ServerApplication/Networking/NetworkManager.cs index 7b4379abf..ed99dcc06 100644 --- a/MediaBrowser.ServerApplication/Networking/NetworkManager.cs +++ b/MediaBrowser.ServerApplication/Networking/NetworkManager.cs @@ -13,7 +13,7 @@ namespace MediaBrowser.ServerApplication.Networking /// /// Class NetUtils /// - public class NetworkManager : Server.Startup.Common.Networking.NetworkManager + public class NetworkManager : Emby.Common.Implementations.Networking.NetworkManager { public NetworkManager(ILogger logger) : base(logger) -- cgit v1.2.3 From 0e9cd51f9c64d4cfad5cb5c7b0ddae6af8d18ac6 Mon Sep 17 00:00:00 2001 From: Luke Pulverenti Date: Sun, 13 Nov 2016 16:04:21 -0500 Subject: update .net core startup --- Emby.Common.Implementations/BaseApplicationHost.cs | 4 +- .../BaseApplicationPaths.cs | 10 +- .../EnvironmentInfo/EnvironmentInfo.cs | 10 + .../IO/ManagedFileSystem.cs | 8 + Emby.Common.Implementations/Net/NetSocket.cs | 9 + Emby.Common.Implementations/Net/SocketAcceptor.cs | 24 ++- Emby.Common.Implementations/Net/SocketFactory.cs | 7 +- Emby.Server.Core/ApplicationHost.cs | 14 +- Emby.Server.Core/Data/DataExtensions.cs | 4 +- Emby.Server.Core/Data/SqliteItemRepository.cs | 19 +- .../Notifications/SqliteNotificationsRepository.cs | 2 +- Emby.Server.Core/ServerApplicationPaths.cs | 4 +- .../Channels/ChannelManager.cs | 16 +- .../HttpServer/HttpListenerHost.cs | 2 + .../LiveTv/EmbyTV/EmbyTV.cs | 90 +++++++-- .../LiveTv/EmbyTV/ItemDataProvider.cs | 3 +- .../LiveTv/LiveTvDtoService.cs | 20 +- .../LiveTv/LiveTvManager.cs | 67 +++++-- .../LiveTv/ProgramImageProvider.cs | 14 +- MediaBrowser.Api/ApiEntryPoint.cs | 6 +- .../Configuration/IApplicationPaths.cs | 6 - MediaBrowser.Controller/Entities/BaseItem.cs | 19 +- .../Encoder/EncoderValidator.cs | 16 +- MediaBrowser.Model/IO/IFileSystem.cs | 1 + MediaBrowser.Model/System/IEnvironmentInfo.cs | 2 + MediaBrowser.Server.Mono/MonoAppHost.cs | 2 +- MediaBrowser.Server.Mono/Program.cs | 10 +- .../Persistence/SqliteExtensions.cs | 6 +- MediaBrowser.ServerApplication/MainStartup.cs | 28 +-- .../Updates/ApplicationUpdater.cs | 2 +- MediaBrowser.ServerApplication/WindowsAppHost.cs | 9 +- MediaBrowser.XbmcMetadata/Savers/SeriesNfoSaver.cs | 2 - Nuget/MediaBrowser.Common.nuspec | 2 +- Nuget/MediaBrowser.Server.Core.nuspec | 4 +- src/Emby.Server/ApplicationPathHelper.cs | 11 +- src/Emby.Server/CoreAppHost.cs | 2 +- src/Emby.Server/Program.cs | 213 ++++----------------- src/Emby.Server/project.json | 8 +- 38 files changed, 353 insertions(+), 323 deletions(-) (limited to 'MediaBrowser.Model/IO/IFileSystem.cs') diff --git a/Emby.Common.Implementations/BaseApplicationHost.cs b/Emby.Common.Implementations/BaseApplicationHost.cs index f0309511e..1f194968c 100644 --- a/Emby.Common.Implementations/BaseApplicationHost.cs +++ b/Emby.Common.Implementations/BaseApplicationHost.cs @@ -326,7 +326,7 @@ namespace Emby.Common.Implementations builder.AppendLine(string.Format("Processor count: {0}", Environment.ProcessorCount)); builder.AppendLine(string.Format("Program data path: {0}", appPaths.ProgramDataPath)); - builder.AppendLine(string.Format("Application Path: {0}", appPaths.ApplicationPath)); + builder.AppendLine(string.Format("Application directory: {0}", appPaths.ProgramSystemPath)); return builder; } @@ -548,7 +548,7 @@ return null; TimerFactory = new TimerFactory(); RegisterSingleInstance(TimerFactory); - SocketFactory = new SocketFactory(null); + SocketFactory = new SocketFactory(LogManager.GetLogger("SocketFactory")); RegisterSingleInstance(SocketFactory); RegisterSingleInstance(CryptographyProvider); diff --git a/Emby.Common.Implementations/BaseApplicationPaths.cs b/Emby.Common.Implementations/BaseApplicationPaths.cs index 628d62bd4..8792778ba 100644 --- a/Emby.Common.Implementations/BaseApplicationPaths.cs +++ b/Emby.Common.Implementations/BaseApplicationPaths.cs @@ -12,22 +12,18 @@ namespace Emby.Common.Implementations /// /// Initializes a new instance of the class. /// - protected BaseApplicationPaths(string programDataPath, string applicationPath) + protected BaseApplicationPaths(string programDataPath, string appFolderPath) { ProgramDataPath = programDataPath; - ApplicationPath = applicationPath; + ProgramSystemPath = appFolderPath; } - public string ApplicationPath { get; private set; } public string ProgramDataPath { get; private set; } /// /// Gets the path to the system folder /// - public string ProgramSystemPath - { - get { return Path.GetDirectoryName(ApplicationPath); } - } + public string ProgramSystemPath { get; private set; } /// /// The _data directory diff --git a/Emby.Common.Implementations/EnvironmentInfo/EnvironmentInfo.cs b/Emby.Common.Implementations/EnvironmentInfo/EnvironmentInfo.cs index 6a1b3ef74..c040e3931 100644 --- a/Emby.Common.Implementations/EnvironmentInfo/EnvironmentInfo.cs +++ b/Emby.Common.Implementations/EnvironmentInfo/EnvironmentInfo.cs @@ -95,5 +95,15 @@ namespace Emby.Common.Implementations.EnvironmentInfo return MediaBrowser.Model.System.Architecture.X64; } } + + public string GetEnvironmentVariable(string name) + { + return Environment.GetEnvironmentVariable(name); + } + + public virtual string GetUserId() + { + return null; + } } } diff --git a/Emby.Common.Implementations/IO/ManagedFileSystem.cs b/Emby.Common.Implementations/IO/ManagedFileSystem.cs index 1f0aa55fa..83bb50f94 100644 --- a/Emby.Common.Implementations/IO/ManagedFileSystem.cs +++ b/Emby.Common.Implementations/IO/ManagedFileSystem.cs @@ -57,6 +57,14 @@ namespace Emby.Common.Implementations.IO } } + public char PathSeparator + { + get + { + return Path.DirectorySeparatorChar; + } + } + public string GetFullPath(string path) { return Path.GetFullPath(path); diff --git a/Emby.Common.Implementations/Net/NetSocket.cs b/Emby.Common.Implementations/Net/NetSocket.cs index faa1a81e2..62ca3d6ac 100644 --- a/Emby.Common.Implementations/Net/NetSocket.cs +++ b/Emby.Common.Implementations/Net/NetSocket.cs @@ -15,6 +15,15 @@ namespace Emby.Common.Implementations.Net public NetSocket(Socket socket, ILogger logger) { + if (socket == null) + { + throw new ArgumentNullException("socket"); + } + if (logger == null) + { + throw new ArgumentNullException("logger"); + } + Socket = socket; _logger = logger; } diff --git a/Emby.Common.Implementations/Net/SocketAcceptor.cs b/Emby.Common.Implementations/Net/SocketAcceptor.cs index fd65e9fbc..bddb7a079 100644 --- a/Emby.Common.Implementations/Net/SocketAcceptor.cs +++ b/Emby.Common.Implementations/Net/SocketAcceptor.cs @@ -14,6 +14,23 @@ namespace Emby.Common.Implementations.Net public SocketAcceptor(ILogger logger, Socket originalSocket, Action onAccept, Func isClosed) { + if (logger == null) + { + throw new ArgumentNullException("logger"); + } + if (originalSocket == null) + { + throw new ArgumentNullException("originalSocket"); + } + if (onAccept == null) + { + throw new ArgumentNullException("onAccept"); + } + if (isClosed == null) + { + throw new ArgumentNullException("isClosed"); + } + _logger = logger; _originalSocket = originalSocket; _isClosed = isClosed; @@ -101,11 +118,8 @@ namespace Emby.Common.Implementations.Net _onAccept(new NetSocket(acceptSocket, _logger)); } - if (_originalSocket != null) - { - // Accept the next connection request - StartAccept(e, ref acceptSocket); - } + // Accept the next connection request + StartAccept(e, ref acceptSocket); } } } diff --git a/Emby.Common.Implementations/Net/SocketFactory.cs b/Emby.Common.Implementations/Net/SocketFactory.cs index 922b0f3cc..f26137683 100644 --- a/Emby.Common.Implementations/Net/SocketFactory.cs +++ b/Emby.Common.Implementations/Net/SocketFactory.cs @@ -23,10 +23,15 @@ namespace Emby.Common.Implementations.Net /// private IPAddress _LocalIP; - private ILogger _logger; + private readonly ILogger _logger; public SocketFactory(ILogger logger) { + if (logger == null) + { + throw new ArgumentNullException("logger"); + } + _logger = logger; _LocalIP = IPAddress.Any; } diff --git a/Emby.Server.Core/ApplicationHost.cs b/Emby.Server.Core/ApplicationHost.cs index 7f795a68d..d3d292ca5 100644 --- a/Emby.Server.Core/ApplicationHost.cs +++ b/Emby.Server.Core/ApplicationHost.cs @@ -725,6 +725,11 @@ namespace Emby.Server.Core try { + if (!FileSystemManager.FileExists(certificateLocation)) + { + return null; + } + X509Certificate2 localCert = new X509Certificate2(certificateLocation); //localCert.PrivateKey = PrivateKey.CreateFromFile(pvk_file).RSA; if (!localCert.HasPrivateKey) @@ -1438,12 +1443,7 @@ namespace Emby.Server.Core try { - AuthorizeServer( - UdpServerEntryPoint.PortNumber, - ServerConfigurationManager.Configuration.HttpServerPortNumber, - ServerConfigurationManager.Configuration.HttpsPortNumber, - ConfigurationManager.CommonApplicationPaths.ApplicationPath, - ConfigurationManager.CommonApplicationPaths.TempDirectory); + AuthorizeServer(); } catch (Exception ex) { @@ -1451,7 +1451,7 @@ namespace Emby.Server.Core } } - protected abstract void AuthorizeServer(int udpPort, int httpServerPort, int httpsServerPort, string applicationPath, string tempDirectory); + protected abstract void AuthorizeServer(); protected abstract IDbConnector GetDbConnector(); public event EventHandler HasUpdateAvailableChanged; diff --git a/Emby.Server.Core/Data/DataExtensions.cs b/Emby.Server.Core/Data/DataExtensions.cs index b633d9217..631c1c500 100644 --- a/Emby.Server.Core/Data/DataExtensions.cs +++ b/Emby.Server.Core/Data/DataExtensions.cs @@ -40,7 +40,7 @@ namespace Emby.Server.Core.Data public static IDataParameter Add(this IDataParameterCollection paramCollection, IDbCommand cmd, string name) { var param = cmd.CreateParameter(); - + param.ParameterName = name; paramCollection.Add(param); @@ -173,7 +173,7 @@ namespace Emby.Server.Core.Data var builder = new StringBuilder(); builder.AppendLine("alter table " + table); - builder.AppendLine("add column " + columnName + " " + type); + builder.AppendLine("add column " + columnName + " " + type + " NULL"); connection.RunQueries(new[] { builder.ToString() }, logger); } diff --git a/Emby.Server.Core/Data/SqliteItemRepository.cs b/Emby.Server.Core/Data/SqliteItemRepository.cs index 2ca86c831..6ed409aa1 100644 --- a/Emby.Server.Core/Data/SqliteItemRepository.cs +++ b/Emby.Server.Core/Data/SqliteItemRepository.cs @@ -157,7 +157,7 @@ namespace Emby.Server.Core.Data string[] queries = { - "create table if not exists TypedBaseItems (guid GUID primary key, type TEXT, data BLOB, ParentId GUID, Path TEXT)", + "create table if not exists TypedBaseItems (guid GUID primary key NOT NULL, type TEXT NOT NULL, data BLOB NULL, ParentId GUID NULL, Path TEXT NULL)", "create table if not exists AncestorIds (ItemId GUID, AncestorId GUID, AncestorIdText TEXT, PRIMARY KEY (ItemId, AncestorId))", "create index if not exists idx_AncestorIds1 on AncestorIds(AncestorId)", @@ -286,6 +286,7 @@ namespace Emby.Server.Core.Data _connection.AddColumn(Logger, "TypedBaseItems", "ExtraType", "Text"); _connection.AddColumn(Logger, "TypedBaseItems", "Artists", "Text"); _connection.AddColumn(Logger, "TypedBaseItems", "AlbumArtists", "Text"); + _connection.AddColumn(Logger, "TypedBaseItems", "ExternalId", "Text"); _connection.AddColumn(Logger, "ItemValues", "CleanValue", "Text"); @@ -440,7 +441,8 @@ namespace Emby.Server.Core.Data "TotalBitrate", "ExtraType", "Artists", - "AlbumArtists" + "AlbumArtists", + "ExternalId" }; private readonly string[] _mediaStreamSaveColumns = @@ -575,7 +577,8 @@ namespace Emby.Server.Core.Data "TotalBitrate", "ExtraType", "Artists", - "AlbumArtists" + "AlbumArtists", + "ExternalId" }; _saveItemCommand = _connection.CreateCommand(); _saveItemCommand.CommandText = "replace into TypedBaseItems (" + string.Join(",", saveColumns.ToArray()) + ") values ("; @@ -1084,6 +1087,10 @@ namespace Emby.Server.Core.Data } } + _saveItemCommand.GetParameter(index++).Value = item.ExternalId; + + //Logger.Debug(_saveItemCommand.CommandText); + _saveItemCommand.Transaction = transaction; _saveItemCommand.ExecuteNonQuery(); @@ -1967,6 +1974,12 @@ namespace Emby.Server.Core.Data } index++; + if (!reader.IsDBNull(index)) + { + item.ExternalId = reader.GetString(index); + } + index++; + if (string.IsNullOrWhiteSpace(item.Tagline)) { var movie = item as Movie; diff --git a/Emby.Server.Core/Notifications/SqliteNotificationsRepository.cs b/Emby.Server.Core/Notifications/SqliteNotificationsRepository.cs index 8a7fc9270..dee0d4cfd 100644 --- a/Emby.Server.Core/Notifications/SqliteNotificationsRepository.cs +++ b/Emby.Server.Core/Notifications/SqliteNotificationsRepository.cs @@ -30,7 +30,7 @@ namespace Emby.Server.Core.Notifications { string[] queries = { - "create table if not exists Notifications (Id GUID NOT NULL, UserId GUID NOT NULL, Date DATETIME NOT NULL, Name TEXT NOT NULL, Description TEXT, Url TEXT, Level TEXT NOT NULL, IsRead BOOLEAN NOT NULL, Category TEXT NOT NULL, RelatedId TEXT, PRIMARY KEY (Id, UserId))", + "create table if not exists Notifications (Id GUID NOT NULL, UserId GUID NOT NULL, Date DATETIME NOT NULL, Name TEXT NOT NULL, Description TEXT NULL, Url TEXT NULL, Level TEXT NOT NULL, IsRead BOOLEAN NOT NULL, Category TEXT NOT NULL, RelatedId TEXT NULL, PRIMARY KEY (Id, UserId))", "create index if not exists idx_Notifications1 on Notifications(Id)", "create index if not exists idx_Notifications2 on Notifications(UserId)" }; diff --git a/Emby.Server.Core/ServerApplicationPaths.cs b/Emby.Server.Core/ServerApplicationPaths.cs index d59dd89d9..dc80b773c 100644 --- a/Emby.Server.Core/ServerApplicationPaths.cs +++ b/Emby.Server.Core/ServerApplicationPaths.cs @@ -12,8 +12,8 @@ namespace Emby.Server.Core /// /// Initializes a new instance of the class. /// - public ServerApplicationPaths(string programDataPath, string applicationPath, string applicationResourcesPath) - : base(programDataPath, applicationPath) + public ServerApplicationPaths(string programDataPath, string appFolderPath, string applicationResourcesPath) + : base(programDataPath, appFolderPath) { ApplicationResourcesPath = applicationResourcesPath; } diff --git a/Emby.Server.Implementations/Channels/ChannelManager.cs b/Emby.Server.Implementations/Channels/ChannelManager.cs index 2ce880c93..94ff7c342 100644 --- a/Emby.Server.Implementations/Channels/ChannelManager.cs +++ b/Emby.Server.Implementations/Channels/ChannelManager.cs @@ -326,7 +326,7 @@ namespace Emby.Server.Implementations.Channels if (requiresCallback != null) { - results = await GetChannelItemMediaSourcesInternal(requiresCallback, item.ExternalId, cancellationToken) + results = await GetChannelItemMediaSourcesInternal(requiresCallback, GetItemExternalId(item), cancellationToken) .ConfigureAwait(false); } else @@ -1075,6 +1075,18 @@ namespace Emby.Server.Implementations.Channels return result; } + private string GetItemExternalId(BaseItem item) + { + var externalId = item.ExternalId; + + if (string.IsNullOrWhiteSpace(externalId)) + { + externalId = item.GetProviderId("ProviderExternalId"); + } + + return externalId; + } + private readonly SemaphoreSlim _resourcePool = new SemaphoreSlim(1, 1); private async Task GetChannelItems(IChannel channel, User user, @@ -1145,7 +1157,7 @@ namespace Emby.Server.Implementations.Channels { var categoryItem = _libraryManager.GetItemById(new Guid(folderId)); - query.FolderId = categoryItem.ExternalId; + query.FolderId = GetItemExternalId(categoryItem); } var result = await channel.GetChannelItems(query, cancellationToken).ConfigureAwait(false); diff --git a/Emby.Server.Implementations/HttpServer/HttpListenerHost.cs b/Emby.Server.Implementations/HttpServer/HttpListenerHost.cs index 41b7a4622..876d140ec 100644 --- a/Emby.Server.Implementations/HttpServer/HttpListenerHost.cs +++ b/Emby.Server.Implementations/HttpServer/HttpListenerHost.cs @@ -396,6 +396,8 @@ namespace Emby.Server.Implementations.HttpServer if (_disposed) { httpRes.StatusCode = 503; + httpRes.ContentType = "text/plain"; + Write(httpRes, "Server shutting down"); return; } diff --git a/Emby.Server.Implementations/LiveTv/EmbyTV/EmbyTV.cs b/Emby.Server.Implementations/LiveTv/EmbyTV/EmbyTV.cs index 63356a845..aaf74b5c6 100644 --- a/Emby.Server.Implementations/LiveTv/EmbyTV/EmbyTV.cs +++ b/Emby.Server.Implementations/LiveTv/EmbyTV/EmbyTV.cs @@ -1551,13 +1551,28 @@ namespace Emby.Server.Implementations.LiveTv.EmbyTV { try { + if (timer.IsSports) + { + AddGenre(timer.Genres, "Sports"); + } + if (timer.IsKids) + { + AddGenre(timer.Genres, "Kids"); + AddGenre(timer.Genres, "Children"); + } + if (timer.IsNews) + { + AddGenre(timer.Genres, "News"); + } + if (timer.IsProgramSeries) { SaveSeriesNfo(timer, recordingPath, seriesPath); + SaveVideoNfo(timer, recordingPath, false); } else if (!timer.IsMovie || timer.IsSports || timer.IsNews) { - SaveVideoNfo(timer, recordingPath); + SaveVideoNfo(timer, recordingPath, true); } } catch (Exception ex) @@ -1594,6 +1609,16 @@ namespace Emby.Server.Implementations.LiveTv.EmbyTV writer.WriteElementString("title", timer.Name); } + if (!string.IsNullOrEmpty(timer.OfficialRating)) + { + writer.WriteElementString("mpaa", timer.OfficialRating); + } + + foreach (var genre in timer.Genres) + { + writer.WriteElementString("genre", genre); + } + writer.WriteEndElement(); writer.WriteEndDocument(); } @@ -1601,7 +1626,7 @@ namespace Emby.Server.Implementations.LiveTv.EmbyTV } public const string DateAddedFormat = "yyyy-MM-dd HH:mm:ss"; - private void SaveVideoNfo(TimerInfo timer, string recordingPath) + private void SaveVideoNfo(TimerInfo timer, string recordingPath, bool lockData) { var nfoPath = Path.ChangeExtension(recordingPath, ".nfo"); @@ -1622,11 +1647,41 @@ namespace Emby.Server.Implementations.LiveTv.EmbyTV using (XmlWriter writer = XmlWriter.Create(stream, settings)) { writer.WriteStartDocument(true); - writer.WriteStartElement("movie"); - if (!string.IsNullOrWhiteSpace(timer.Name)) + if (timer.IsProgramSeries) { - writer.WriteElementString("title", timer.Name); + writer.WriteStartElement("episodedetails"); + + if (!string.IsNullOrWhiteSpace(timer.EpisodeTitle)) + { + writer.WriteElementString("title", timer.EpisodeTitle); + } + + if (timer.OriginalAirDate.HasValue) + { + var formatString = _config.GetNfoConfiguration().ReleaseDateFormat; + + writer.WriteElementString("aired", timer.OriginalAirDate.Value.ToLocalTime().ToString(formatString)); + } + + if (timer.EpisodeNumber.HasValue) + { + writer.WriteElementString("episode", timer.EpisodeNumber.Value.ToString(CultureInfo.InvariantCulture)); + } + + if (timer.SeasonNumber.HasValue) + { + writer.WriteElementString("season", timer.SeasonNumber.Value.ToString(CultureInfo.InvariantCulture)); + } + } + else + { + writer.WriteStartElement("movie"); + + if (!string.IsNullOrWhiteSpace(timer.Name)) + { + writer.WriteElementString("title", timer.Name); + } } writer.WriteElementString("dateadded", DateTime.UtcNow.ToLocalTime().ToString(DateAddedFormat)); @@ -1645,25 +1700,15 @@ namespace Emby.Server.Implementations.LiveTv.EmbyTV .Replace(""", "'"); writer.WriteElementString("plot", overview); - writer.WriteElementString("lockdata", true.ToString().ToLower()); - if (timer.CommunityRating.HasValue) + if (lockData) { - writer.WriteElementString("rating", timer.CommunityRating.Value.ToString(CultureInfo.InvariantCulture)); + writer.WriteElementString("lockdata", true.ToString().ToLower()); } - if (timer.IsSports) - { - AddGenre(timer.Genres, "Sports"); - } - if (timer.IsKids) - { - AddGenre(timer.Genres, "Kids"); - AddGenre(timer.Genres, "Children"); - } - if (timer.IsNews) + if (timer.CommunityRating.HasValue) { - AddGenre(timer.Genres, "News"); + writer.WriteElementString("rating", timer.CommunityRating.Value.ToString(CultureInfo.InvariantCulture)); } foreach (var genre in timer.Genres) @@ -1968,4 +2013,11 @@ namespace Emby.Server.Implementations.LiveTv.EmbyTV public CancellationTokenSource CancellationTokenSource { get; set; } } } + public static class ConfigurationExtension + { + public static XbmcMetadataOptions GetNfoConfiguration(this IConfigurationManager manager) + { + return manager.GetConfiguration("xbmcmetadata"); + } + } } \ No newline at end of file diff --git a/Emby.Server.Implementations/LiveTv/EmbyTV/ItemDataProvider.cs b/Emby.Server.Implementations/LiveTv/EmbyTV/ItemDataProvider.cs index ded4f04c4..16ae26d45 100644 --- a/Emby.Server.Implementations/LiveTv/EmbyTV/ItemDataProvider.cs +++ b/Emby.Server.Implementations/LiveTv/EmbyTV/ItemDataProvider.cs @@ -54,9 +54,8 @@ namespace Emby.Server.Implementations.LiveTv.EmbyTV catch (FileNotFoundException) { } - catch (IOException ex) + catch (IOException) { - Logger.ErrorException("Error deserializing {0}", ex, jsonFile); } catch (Exception ex) { diff --git a/Emby.Server.Implementations/LiveTv/LiveTvDtoService.cs b/Emby.Server.Implementations/LiveTv/LiveTvDtoService.cs index 4e7161521..d3e30a46b 100644 --- a/Emby.Server.Implementations/LiveTv/LiveTvDtoService.cs +++ b/Emby.Server.Implementations/LiveTv/LiveTvDtoService.cs @@ -269,6 +269,18 @@ namespace Emby.Server.Implementations.LiveTv return _libraryManager.GetNewItemId(name.ToLower(), typeof(ILiveTvRecording)); } + private string GetItemExternalId(BaseItem item) + { + var externalId = item.ExternalId; + + if (string.IsNullOrWhiteSpace(externalId)) + { + externalId = item.GetProviderId("ProviderExternalId"); + } + + return externalId; + } + public async Task GetTimerInfo(TimerInfoDto dto, bool isNew, LiveTvManager liveTv, CancellationToken cancellationToken) { var info = new TimerInfo @@ -304,7 +316,7 @@ namespace Emby.Server.Implementations.LiveTv if (channel != null) { - info.ChannelId = channel.ExternalId; + info.ChannelId = GetItemExternalId(channel); } } @@ -314,7 +326,7 @@ namespace Emby.Server.Implementations.LiveTv if (program != null) { - info.ProgramId = program.ExternalId; + info.ProgramId = GetItemExternalId(program); } } @@ -370,7 +382,7 @@ namespace Emby.Server.Implementations.LiveTv if (channel != null) { - info.ChannelId = channel.ExternalId; + info.ChannelId = GetItemExternalId(channel); } } @@ -380,7 +392,7 @@ namespace Emby.Server.Implementations.LiveTv if (program != null) { - info.ProgramId = program.ExternalId; + info.ProgramId = GetItemExternalId(program); } } diff --git a/Emby.Server.Implementations/LiveTv/LiveTvManager.cs b/Emby.Server.Implementations/LiveTv/LiveTvManager.cs index adec66858..3a6f23fe9 100644 --- a/Emby.Server.Implementations/LiveTv/LiveTvManager.cs +++ b/Emby.Server.Implementations/LiveTv/LiveTvManager.cs @@ -251,12 +251,24 @@ namespace Emby.Server.Implementations.LiveTv return await GetLiveStream(id, mediaSourceId, true, cancellationToken).ConfigureAwait(false); } + private string GetItemExternalId(BaseItem item) + { + var externalId = item.ExternalId; + + if (string.IsNullOrWhiteSpace(externalId)) + { + externalId = item.GetProviderId("ProviderExternalId"); + } + + return externalId; + } + public async Task> GetRecordingMediaSources(IHasMediaSources item, CancellationToken cancellationToken) { var baseItem = (BaseItem)item; var service = GetService(baseItem); - return await service.GetRecordingStreamMediaSources(baseItem.ExternalId, cancellationToken).ConfigureAwait(false); + return await service.GetRecordingStreamMediaSources(GetItemExternalId(baseItem), cancellationToken).ConfigureAwait(false); } public async Task> GetChannelMediaSources(IHasMediaSources item, CancellationToken cancellationToken) @@ -313,18 +325,18 @@ namespace Emby.Server.Implementations.LiveTv var channel = GetInternalChannel(id); isVideo = channel.ChannelType == ChannelType.TV; service = GetService(channel); - _logger.Info("Opening channel stream from {0}, external channel Id: {1}", service.Name, channel.ExternalId); + _logger.Info("Opening channel stream from {0}, external channel Id: {1}", service.Name, GetItemExternalId(channel)); var supportsManagedStream = service as ISupportsDirectStreamProvider; if (supportsManagedStream != null) { - var streamInfo = await supportsManagedStream.GetChannelStreamWithDirectStreamProvider(channel.ExternalId, mediaSourceId, cancellationToken).ConfigureAwait(false); + var streamInfo = await supportsManagedStream.GetChannelStreamWithDirectStreamProvider(GetItemExternalId(channel), mediaSourceId, cancellationToken).ConfigureAwait(false); info = streamInfo.Item1; directStreamProvider = streamInfo.Item2; } else { - info = await service.GetChannelStream(channel.ExternalId, mediaSourceId, cancellationToken).ConfigureAwait(false); + info = await service.GetChannelStream(GetItemExternalId(channel), mediaSourceId, cancellationToken).ConfigureAwait(false); } info.RequiresClosing = true; @@ -341,8 +353,8 @@ namespace Emby.Server.Implementations.LiveTv isVideo = !string.Equals(recording.MediaType, MediaType.Audio, StringComparison.OrdinalIgnoreCase); service = GetService(recording); - _logger.Info("Opening recording stream from {0}, external recording Id: {1}", service.Name, recording.ExternalId); - info = await service.GetRecordingStream(recording.ExternalId, null, cancellationToken).ConfigureAwait(false); + _logger.Info("Opening recording stream from {0}, external recording Id: {1}", service.Name, GetItemExternalId(recording)); + info = await service.GetRecordingStream(GetItemExternalId(recording), null, cancellationToken).ConfigureAwait(false); info.RequiresClosing = true; if (info.RequiresClosing) @@ -493,7 +505,7 @@ namespace Emby.Server.Implementations.LiveTv isNew = true; } - if (!string.Equals(channelInfo.Id, item.ExternalId)) + if (!string.Equals(channelInfo.Id, item.ExternalId, StringComparison.Ordinal)) { isNew = true; } @@ -601,7 +613,6 @@ namespace Emby.Server.Implementations.LiveTv item.EpisodeTitle = info.EpisodeTitle; item.ExternalId = info.Id; - item.ExternalSeriesIdLegacy = seriesId; if (!string.IsNullOrWhiteSpace(seriesId) && !string.Equals(item.ExternalSeriesId, seriesId, StringComparison.Ordinal)) { @@ -841,6 +852,13 @@ namespace Emby.Server.Implementations.LiveTv return item.Id; } + + + private string GetExternalSeriesIdLegacy(BaseItem item) + { + return item.GetProviderId("ProviderExternalSeriesId"); + } + public async Task GetProgram(string id, CancellationToken cancellationToken, User user = null) { var program = GetInternalProgram(id); @@ -848,7 +866,15 @@ namespace Emby.Server.Implementations.LiveTv var dto = _dtoService.GetBaseItemDto(program, new DtoOptions(), user); var list = new List>(); - list.Add(new Tuple(dto, program.ServiceName, program.ExternalId, program.ExternalSeriesIdLegacy)); + + var externalSeriesId = program.ExternalSeriesId; + + if (string.IsNullOrWhiteSpace(externalSeriesId)) + { + externalSeriesId = GetExternalSeriesIdLegacy(program); + } + + list.Add(new Tuple(dto, program.ServiceName, GetItemExternalId(program), externalSeriesId)); await AddRecordingInfo(list, cancellationToken).ConfigureAwait(false); @@ -1283,7 +1309,7 @@ namespace Emby.Server.Implementations.LiveTv var isKids = false; var iSSeries = false; - var channelPrograms = await service.GetProgramsAsync(currentChannel.ExternalId, start, end, cancellationToken).ConfigureAwait(false); + var channelPrograms = await service.GetProgramsAsync(GetItemExternalId(currentChannel), start, end, cancellationToken).ConfigureAwait(false); var existingPrograms = _libraryManager.GetItemList(new InternalItemsQuery { @@ -1830,7 +1856,14 @@ namespace Emby.Server.Implementations.LiveTv dto.ServiceName = serviceName; } - programTuples.Add(new Tuple(dto, serviceName, program.ExternalId, program.ExternalSeriesIdLegacy)); + var externalSeriesId = program.ExternalSeriesId; + + if (string.IsNullOrWhiteSpace(externalSeriesId)) + { + externalSeriesId = GetExternalSeriesIdLegacy(program); + } + + programTuples.Add(new Tuple(dto, serviceName, GetItemExternalId(program), externalSeriesId)); } await AddRecordingInfo(programTuples, CancellationToken.None).ConfigureAwait(false); @@ -2006,7 +2039,7 @@ namespace Emby.Server.Implementations.LiveTv if (service is EmbyTV.EmbyTV) { // We can't trust that we'll be able to direct stream it through emby server, no matter what the provider says - return service.DeleteRecordingAsync(recording.ExternalId, CancellationToken.None); + return service.DeleteRecordingAsync(GetItemExternalId(recording), CancellationToken.None); } return Task.FromResult(true); @@ -2030,7 +2063,7 @@ namespace Emby.Server.Implementations.LiveTv try { - await service.DeleteRecordingAsync(recording.ExternalId, CancellationToken.None).ConfigureAwait(false); + await service.DeleteRecordingAsync(GetItemExternalId(recording), CancellationToken.None).ConfigureAwait(false); } catch (ResourceNotFoundException) { @@ -2289,12 +2322,12 @@ namespace Emby.Server.Implementations.LiveTv programInfo = new ProgramInfo { Audio = program.Audio, - ChannelId = channel.ExternalId, + ChannelId = GetItemExternalId(channel), CommunityRating = program.CommunityRating, EndDate = program.EndDate ?? DateTime.MinValue, EpisodeTitle = program.EpisodeTitle, Genres = program.Genres, - Id = program.ExternalId, + Id = GetItemExternalId(program), IsHD = program.IsHD, IsKids = program.IsKids, IsLive = program.IsLive, @@ -2360,7 +2393,7 @@ namespace Emby.Server.Implementations.LiveTv info.Name = program.Name; info.Overview = program.Overview; info.ProgramId = programDto.Id; - info.ExternalProgramId = program.ExternalId; + info.ExternalProgramId = GetItemExternalId(program); if (program.EndDate.HasValue) { @@ -2804,7 +2837,7 @@ namespace Emby.Server.Implementations.LiveTv public async Task SaveListingProvider(ListingsProviderInfo info, bool validateLogin, bool validateListings) { - info = _jsonSerializer.DeserializeFromString< ListingsProviderInfo>(_jsonSerializer.SerializeToString(info)); + info = _jsonSerializer.DeserializeFromString(_jsonSerializer.SerializeToString(info)); var provider = _listingProviders.FirstOrDefault(i => string.Equals(info.Type, i.Type, StringComparison.OrdinalIgnoreCase)); diff --git a/Emby.Server.Implementations/LiveTv/ProgramImageProvider.cs b/Emby.Server.Implementations/LiveTv/ProgramImageProvider.cs index f5d298af4..5a0389b16 100644 --- a/Emby.Server.Implementations/LiveTv/ProgramImageProvider.cs +++ b/Emby.Server.Implementations/LiveTv/ProgramImageProvider.cs @@ -24,6 +24,18 @@ namespace Emby.Server.Implementations.LiveTv return new[] { ImageType.Primary }; } + private string GetItemExternalId(BaseItem item) + { + var externalId = item.ExternalId; + + if (string.IsNullOrWhiteSpace(externalId)) + { + externalId = item.GetProviderId("ProviderExternalId"); + } + + return externalId; + } + public async Task GetImage(IHasImages item, ImageType type, CancellationToken cancellationToken) { var liveTvItem = (LiveTvProgram)item; @@ -38,7 +50,7 @@ namespace Emby.Server.Implementations.LiveTv { var channel = _liveTvManager.GetInternalChannel(liveTvItem.ChannelId); - var response = await service.GetProgramImageAsync(liveTvItem.ExternalId, channel.ExternalId, cancellationToken).ConfigureAwait(false); + var response = await service.GetProgramImageAsync(GetItemExternalId(liveTvItem), GetItemExternalId(channel), cancellationToken).ConfigureAwait(false); if (response != null) { diff --git a/MediaBrowser.Api/ApiEntryPoint.cs b/MediaBrowser.Api/ApiEntryPoint.cs index bc0241766..37ab12366 100644 --- a/MediaBrowser.Api/ApiEntryPoint.cs +++ b/MediaBrowser.Api/ApiEntryPoint.cs @@ -128,7 +128,11 @@ namespace MediaBrowser.Api { // Don't clutter the log } - catch (IOException ex) + catch (IOException) + { + // Don't clutter the log + } + catch (Exception ex) { Logger.ErrorException("Error deleting encoded media cache", ex); } diff --git a/MediaBrowser.Common/Configuration/IApplicationPaths.cs b/MediaBrowser.Common/Configuration/IApplicationPaths.cs index d3bf03302..d2446ce46 100644 --- a/MediaBrowser.Common/Configuration/IApplicationPaths.cs +++ b/MediaBrowser.Common/Configuration/IApplicationPaths.cs @@ -6,12 +6,6 @@ namespace MediaBrowser.Common.Configuration /// public interface IApplicationPaths { - /// - /// Gets the application path. - /// - /// The application path. - string ApplicationPath { get; } - /// /// Gets the path to the program data folder /// diff --git a/MediaBrowser.Controller/Entities/BaseItem.cs b/MediaBrowser.Controller/Entities/BaseItem.cs index b079da97c..10cac7992 100644 --- a/MediaBrowser.Controller/Entities/BaseItem.cs +++ b/MediaBrowser.Controller/Entities/BaseItem.cs @@ -296,28 +296,11 @@ namespace MediaBrowser.Controller.Entities /// If this content came from an external service, the id of the content on that service /// [IgnoreDataMember] - public string ExternalId - { - get { return this.GetProviderId("ProviderExternalId"); } - set - { - this.SetProviderId("ProviderExternalId", value); - } - } + public string ExternalId { get; set; } [IgnoreDataMember] public string ExternalSeriesId { get; set; } - [IgnoreDataMember] - public string ExternalSeriesIdLegacy - { - get { return this.GetProviderId("ProviderExternalSeriesId"); } - set - { - this.SetProviderId("ProviderExternalSeriesId", value); - } - } - /// /// Gets or sets the etag. /// diff --git a/MediaBrowser.MediaEncoding/Encoder/EncoderValidator.cs b/MediaBrowser.MediaEncoding/Encoder/EncoderValidator.cs index 6acdccf3d..1b8b3feec 100644 --- a/MediaBrowser.MediaEncoding/Encoder/EncoderValidator.cs +++ b/MediaBrowser.MediaEncoding/Encoder/EncoderValidator.cs @@ -37,20 +37,22 @@ namespace MediaBrowser.MediaEncoding.Encoder { output = GetProcessOutput(encoderAppPath, "-version"); } - catch + catch (Exception ex) { + if (logOutput) + { + _logger.ErrorException("Error validating encoder", ex); + } } - output = output ?? string.Empty; - - if (logOutput) + if (string.IsNullOrWhiteSpace(output)) { - _logger.Info("ffmpeg info: {0}", output); + return false; } - if (string.IsNullOrWhiteSpace(output)) + if (logOutput) { - return false; + _logger.Info("ffmpeg info: {0}", output); } if (output.IndexOf("Libav developers", StringComparison.OrdinalIgnoreCase) != -1) diff --git a/MediaBrowser.Model/IO/IFileSystem.cs b/MediaBrowser.Model/IO/IFileSystem.cs index f219d9295..22e1e7758 100644 --- a/MediaBrowser.Model/IO/IFileSystem.cs +++ b/MediaBrowser.Model/IO/IFileSystem.cs @@ -308,6 +308,7 @@ namespace MediaBrowser.Model.IO void SetReadOnly(string path, bool isHidden); char DirectorySeparatorChar { get; } + char PathSeparator { get; } string GetFullPath(string path); diff --git a/MediaBrowser.Model/System/IEnvironmentInfo.cs b/MediaBrowser.Model/System/IEnvironmentInfo.cs index c5f493e7c..7e7d81e30 100644 --- a/MediaBrowser.Model/System/IEnvironmentInfo.cs +++ b/MediaBrowser.Model/System/IEnvironmentInfo.cs @@ -12,6 +12,8 @@ namespace MediaBrowser.Model.System string OperatingSystemName { get; } string OperatingSystemVersion { get; } Architecture SystemArchitecture { get; } + string GetEnvironmentVariable(string name); + string GetUserId(); } public enum OperatingSystem diff --git a/MediaBrowser.Server.Mono/MonoAppHost.cs b/MediaBrowser.Server.Mono/MonoAppHost.cs index 5f0ecde24..fd3c9f506 100644 --- a/MediaBrowser.Server.Mono/MonoAppHost.cs +++ b/MediaBrowser.Server.Mono/MonoAppHost.cs @@ -91,7 +91,7 @@ namespace MediaBrowser.Server.Mono MainClass.Shutdown(); } - protected override void AuthorizeServer(int udpPort, int httpServerPort, int httpsServerPort, string applicationPath, string tempDirectory) + protected override void AuthorizeServer() { throw new NotImplementedException(); } diff --git a/MediaBrowser.Server.Mono/Program.cs b/MediaBrowser.Server.Mono/Program.cs index 48390f078..470525ece 100644 --- a/MediaBrowser.Server.Mono/Program.cs +++ b/MediaBrowser.Server.Mono/Program.cs @@ -5,6 +5,7 @@ using MediaBrowser.Server.Startup.Common; using Microsoft.Win32; using System; using System.Diagnostics; +using System.Globalization; using System.IO; using System.Linq; using System.Net; @@ -74,7 +75,9 @@ namespace MediaBrowser.Server.Mono programDataPath = ApplicationPathHelper.GetProgramDataPath(applicationPath); } - return new ServerApplicationPaths(programDataPath, applicationPath, Path.GetDirectoryName(applicationPath)); + var appFolderPath = Path.GetDirectoryName(applicationPath); + + return new ServerApplicationPaths(programDataPath, appFolderPath, Path.GetDirectoryName(applicationPath)); } private static readonly TaskCompletionSource ApplicationTaskCompletionSource = new TaskCompletionSource(); @@ -305,5 +308,10 @@ namespace MediaBrowser.Server.Mono public class MonoEnvironmentInfo : EnvironmentInfo { public bool IsBsd { get; set; } + + public virtual string GetUserId() + { + return Syscall.getuid().ToString(CultureInfo.InvariantCulture); + } } } diff --git a/MediaBrowser.Server.Startup.Common/Persistence/SqliteExtensions.cs b/MediaBrowser.Server.Startup.Common/Persistence/SqliteExtensions.cs index 72ecfc1bf..22aeb53dd 100644 --- a/MediaBrowser.Server.Startup.Common/Persistence/SqliteExtensions.cs +++ b/MediaBrowser.Server.Startup.Common/Persistence/SqliteExtensions.cs @@ -14,7 +14,11 @@ namespace Emby.Server.Core.Data /// /// Connects to db. /// - public static async Task ConnectToDb(string dbPath, bool isReadOnly, bool enablePooling, int? cacheSize, ILogger logger) + public static async Task ConnectToDb(string dbPath, + bool isReadOnly, + bool enablePooling, + int? cacheSize, + ILogger logger) { if (string.IsNullOrEmpty(dbPath)) { diff --git a/MediaBrowser.ServerApplication/MainStartup.cs b/MediaBrowser.ServerApplication/MainStartup.cs index ab0a36aff..c0ebcde74 100644 --- a/MediaBrowser.ServerApplication/MainStartup.cs +++ b/MediaBrowser.ServerApplication/MainStartup.cs @@ -44,6 +44,8 @@ namespace MediaBrowser.ServerApplication [DllImport("kernel32.dll", SetLastError = true)] static extern bool SetDllDirectory(string lpPathName); + public static string ApplicationPath; + public static bool TryGetLocalFromUncDirectory(string local, out string unc) { if ((local == null) || (local == "")) @@ -81,14 +83,14 @@ namespace MediaBrowser.ServerApplication var currentProcess = Process.GetCurrentProcess(); - var applicationPath = currentProcess.MainModule.FileName; - var architecturePath = Path.Combine(Path.GetDirectoryName(applicationPath), Environment.Is64BitProcess ? "x64" : "x86"); + ApplicationPath = currentProcess.MainModule.FileName; + var architecturePath = Path.Combine(Path.GetDirectoryName(ApplicationPath), Environment.Is64BitProcess ? "x64" : "x86"); Wand.SetMagickCoderModulePath(architecturePath); var success = SetDllDirectory(architecturePath); - var appPaths = CreateApplicationPaths(applicationPath, IsRunningAsService); + var appPaths = CreateApplicationPaths(ApplicationPath, IsRunningAsService); var logManager = new NlogManager(appPaths.LogDirectoryPath, "server"); logManager.ReloadLogger(LogSeverity.Debug); @@ -102,7 +104,7 @@ namespace MediaBrowser.ServerApplication if (options.ContainsOption("-installservice")) { logger.Info("Performing service installation"); - InstallService(applicationPath, logger); + InstallService(ApplicationPath, logger); return; } @@ -110,7 +112,7 @@ namespace MediaBrowser.ServerApplication if (options.ContainsOption("-installserviceasadmin")) { logger.Info("Performing service installation"); - RunServiceInstallation(applicationPath); + RunServiceInstallation(ApplicationPath); return; } @@ -118,7 +120,7 @@ namespace MediaBrowser.ServerApplication if (options.ContainsOption("-uninstallservice")) { logger.Info("Performing service uninstallation"); - UninstallService(applicationPath, logger); + UninstallService(ApplicationPath, logger); return; } @@ -126,15 +128,15 @@ namespace MediaBrowser.ServerApplication if (options.ContainsOption("-uninstallserviceasadmin")) { logger.Info("Performing service uninstallation"); - RunServiceUninstallation(applicationPath); + RunServiceUninstallation(ApplicationPath); return; } AppDomain.CurrentDomain.UnhandledException += CurrentDomain_UnhandledException; - RunServiceInstallationIfNeeded(applicationPath); + RunServiceInstallationIfNeeded(ApplicationPath); - if (IsAlreadyRunning(applicationPath, currentProcess)) + if (IsAlreadyRunning(ApplicationPath, currentProcess)) { logger.Info("Shutting down because another instance of Emby Server is already running."); return; @@ -250,6 +252,8 @@ namespace MediaBrowser.ServerApplication /// ServerApplicationPaths. private static ServerApplicationPaths CreateApplicationPaths(string applicationPath, bool runAsService) { + var appFolderPath = Path.GetDirectoryName(applicationPath); + var resourcesPath = Path.GetDirectoryName(applicationPath); if (runAsService) @@ -258,10 +262,10 @@ namespace MediaBrowser.ServerApplication var programDataPath = Path.GetDirectoryName(systemPath); - return new ServerApplicationPaths(programDataPath, applicationPath, resourcesPath); + return new ServerApplicationPaths(programDataPath, appFolderPath, resourcesPath); } - return new ServerApplicationPaths(ApplicationPathHelper.GetProgramDataPath(applicationPath), applicationPath, resourcesPath); + return new ServerApplicationPaths(ApplicationPathHelper.GetProgramDataPath(applicationPath), appFolderPath, resourcesPath); } /// @@ -663,7 +667,7 @@ namespace MediaBrowser.ServerApplication _logger.Info("Starting new instance"); //Application.Restart(); - Process.Start(_appHost.ServerConfigurationManager.ApplicationPaths.ApplicationPath); + Process.Start(ApplicationPath); ShutdownWindowsApplication(); } diff --git a/MediaBrowser.ServerApplication/Updates/ApplicationUpdater.cs b/MediaBrowser.ServerApplication/Updates/ApplicationUpdater.cs index c426395b7..97537b27d 100644 --- a/MediaBrowser.ServerApplication/Updates/ApplicationUpdater.cs +++ b/MediaBrowser.ServerApplication/Updates/ApplicationUpdater.cs @@ -44,7 +44,7 @@ namespace MediaBrowser.ServerApplication.Updates // startpath = executable to launch // systempath = folder containing installation var args = string.Format("product={0} archive=\"{1}\" caller={2} pismo=false version={3} service={4} installpath=\"{5}\" startpath=\"{6}\" systempath=\"{7}\"", - product, archive, Process.GetCurrentProcess().Id, version, restartServiceName ?? string.Empty, appPaths.ProgramDataPath, appPaths.ApplicationPath, systemPath); + product, archive, Process.GetCurrentProcess().Id, version, restartServiceName ?? string.Empty, appPaths.ProgramDataPath, MainStartup.ApplicationPath, systemPath); logger.Info("Args: {0}", args); Process.Start(tempUpdater, args); diff --git a/MediaBrowser.ServerApplication/WindowsAppHost.cs b/MediaBrowser.ServerApplication/WindowsAppHost.cs index 8fd718432..d9bead6b7 100644 --- a/MediaBrowser.ServerApplication/WindowsAppHost.cs +++ b/MediaBrowser.ServerApplication/WindowsAppHost.cs @@ -6,6 +6,7 @@ using System.Reflection; using Emby.Server.Core; using Emby.Server.Core.Data; using Emby.Server.Core.FFMpeg; +using Emby.Server.Implementations.EntryPoints; using MediaBrowser.Model.IO; using MediaBrowser.Model.Logging; using MediaBrowser.Model.System; @@ -60,9 +61,13 @@ namespace MediaBrowser.ServerApplication MainStartup.Shutdown(); } - protected override void AuthorizeServer(int udpPort, int httpServerPort, int httpsServerPort, string applicationPath, string tempDirectory) + protected override void AuthorizeServer() { - ServerAuthorization.AuthorizeServer(udpPort, httpServerPort, httpsServerPort, applicationPath, tempDirectory); + ServerAuthorization.AuthorizeServer(UdpServerEntryPoint.PortNumber, + ServerConfigurationManager.Configuration.HttpServerPortNumber, + ServerConfigurationManager.Configuration.HttpsPortNumber, + MainStartup.ApplicationPath, + ConfigurationManager.CommonApplicationPaths.TempDirectory); } protected override IDbConnector GetDbConnector() diff --git a/MediaBrowser.XbmcMetadata/Savers/SeriesNfoSaver.cs b/MediaBrowser.XbmcMetadata/Savers/SeriesNfoSaver.cs index 4c22f0246..b512939a7 100644 --- a/MediaBrowser.XbmcMetadata/Savers/SeriesNfoSaver.cs +++ b/MediaBrowser.XbmcMetadata/Savers/SeriesNfoSaver.cs @@ -90,8 +90,6 @@ namespace MediaBrowser.XbmcMetadata.Savers } } - private static readonly CultureInfo UsCulture = new CultureInfo("en-US"); - protected override List GetTagsUsed() { var list = new List diff --git a/Nuget/MediaBrowser.Common.nuspec b/Nuget/MediaBrowser.Common.nuspec index 464a29eb2..daeb754ba 100644 --- a/Nuget/MediaBrowser.Common.nuspec +++ b/Nuget/MediaBrowser.Common.nuspec @@ -2,7 +2,7 @@ MediaBrowser.Common - 3.0.689 + 3.0.691 Emby.Common Emby Team ebr,Luke,scottisafool diff --git a/Nuget/MediaBrowser.Server.Core.nuspec b/Nuget/MediaBrowser.Server.Core.nuspec index 96e9a697a..a34a9bee2 100644 --- a/Nuget/MediaBrowser.Server.Core.nuspec +++ b/Nuget/MediaBrowser.Server.Core.nuspec @@ -2,7 +2,7 @@ MediaBrowser.Server.Core - 3.0.689 + 3.0.691 Emby.Server.Core Emby Team ebr,Luke,scottisafool @@ -12,7 +12,7 @@ Contains core components required to build plugins for Emby Server. Copyright © Emby 2013 - + diff --git a/src/Emby.Server/ApplicationPathHelper.cs b/src/Emby.Server/ApplicationPathHelper.cs index 4da87b6a0..c611ff372 100644 --- a/src/Emby.Server/ApplicationPathHelper.cs +++ b/src/Emby.Server/ApplicationPathHelper.cs @@ -8,7 +8,7 @@ namespace Emby.Server { public class ApplicationPathHelper { - public static string GetProgramDataPath(string applicationPath) + public static string GetProgramDataPath(string appDirectory) { var useDebugPath = false; @@ -27,14 +27,7 @@ namespace Emby.Server // If it's a relative path, e.g. "..\" if (!Path.IsPathRooted(programDataPath)) { - var path = Path.GetDirectoryName(applicationPath); - - if (string.IsNullOrEmpty(path)) - { - throw new Exception("Unable to determine running assembly location"); - } - - programDataPath = Path.Combine(path, programDataPath); + programDataPath = Path.Combine(appDirectory, programDataPath); programDataPath = Path.GetFullPath(programDataPath); } diff --git a/src/Emby.Server/CoreAppHost.cs b/src/Emby.Server/CoreAppHost.cs index 1a1526513..21f6ae445 100644 --- a/src/Emby.Server/CoreAppHost.cs +++ b/src/Emby.Server/CoreAppHost.cs @@ -51,7 +51,7 @@ namespace Emby.Server return list; } - protected override void AuthorizeServer(int udpPort, int httpServerPort, int httpsServerPort, string applicationPath, string tempDirectory) + protected override void AuthorizeServer() { } diff --git a/src/Emby.Server/Program.cs b/src/Emby.Server/Program.cs index 64fc423a1..6f871990d 100644 --- a/src/Emby.Server/Program.cs +++ b/src/Emby.Server/Program.cs @@ -28,8 +28,6 @@ namespace Emby.Server private static ILogger _logger; - private static bool _isRunningAsService = false; - private static bool _canRestartService = false; private static bool _appHostDisposed; [DllImport("kernel32.dll", SetLastError = true)] @@ -41,39 +39,33 @@ namespace Emby.Server public static void Main(string[] args) { var options = new StartupOptions(); - _isRunningAsService = options.ContainsOption("-service"); - - if (_isRunningAsService) - { - //_canRestartService = CanRestartWindowsService(); - } var currentProcess = Process.GetCurrentProcess(); - - var applicationPath = currentProcess.MainModule.FileName; + + var baseDirectory = System.AppContext.BaseDirectory; //var architecturePath = Path.Combine(Path.GetDirectoryName(applicationPath), Environment.Is64BitProcess ? "x64" : "x86"); //Wand.SetMagickCoderModulePath(architecturePath); //var success = SetDllDirectory(architecturePath); - var appPaths = CreateApplicationPaths(applicationPath, _isRunningAsService); + var appPaths = CreateApplicationPaths(baseDirectory); var logManager = new NlogManager(appPaths.LogDirectoryPath, "server"); logManager.ReloadLogger(LogSeverity.Debug); logManager.AddConsoleOutput(); var logger = _logger = logManager.GetLogger("Main"); - + ApplicationHost.LogEnvironmentInfo(logger, appPaths, true); AppDomain.CurrentDomain.UnhandledException += CurrentDomain_UnhandledException; - if (IsAlreadyRunning(applicationPath, currentProcess)) - { - logger.Info("Shutting down because another instance of Emby Server is already running."); - return; - } + //if (IsAlreadyRunning(applicationPath, currentProcess)) + //{ + // logger.Info("Shutting down because another instance of Emby Server is already running."); + // return; + //} if (PerformUpdateIfNeeded(appPaths, logger)) { @@ -81,14 +73,7 @@ namespace Emby.Server return; } - try - { - RunApplication(appPaths, logManager, _isRunningAsService, options); - } - finally - { - OnServiceShutdown(); - } + RunApplication(appPaths, logManager, options); } /// @@ -139,34 +124,17 @@ namespace Emby.Server } } - if (!_isRunningAsService) - { - return false; - } - return false; } /// /// Creates the application paths. /// - /// The application path. - /// if set to true [run as service]. - /// ServerApplicationPaths. - private static ServerApplicationPaths CreateApplicationPaths(string applicationPath, bool runAsService) + private static ServerApplicationPaths CreateApplicationPaths(string appDirectory) { - var resourcesPath = Path.GetDirectoryName(applicationPath); - - if (runAsService) - { - var systemPath = Path.GetDirectoryName(applicationPath); - - var programDataPath = Path.GetDirectoryName(systemPath); - - return new ServerApplicationPaths(programDataPath, applicationPath, resourcesPath); - } + var resourcesPath = appDirectory; - return new ServerApplicationPaths(ApplicationPathHelper.GetProgramDataPath(applicationPath), applicationPath, resourcesPath); + return new ServerApplicationPaths(ApplicationPathHelper.GetProgramDataPath(appDirectory), appDirectory, resourcesPath); } /// @@ -177,14 +145,7 @@ namespace Emby.Server { get { - if (_isRunningAsService) - { - return _canRestartService; - } - else - { - return true; - } + return true; } } @@ -196,14 +157,7 @@ namespace Emby.Server { get { - if (_isRunningAsService) - { - return _canRestartService; - } - else - { - return true; - } + return false; } } @@ -214,9 +168,8 @@ namespace Emby.Server /// /// The app paths. /// The log manager. - /// if set to true [run service]. /// The options. - private static void RunApplication(ServerApplicationPaths appPaths, ILogManager logManager, bool runService, StartupOptions options) + private static void RunApplication(ServerApplicationPaths appPaths, ILogManager logManager, StartupOptions options) { var fileSystem = new ManagedFileSystem(logManager.GetLogger("FileSystem"), true, true, true); @@ -240,29 +193,19 @@ namespace Emby.Server var initProgress = new Progress(); - if (!runService) - { - // Not crazy about this but it's the only way to suppress ffmpeg crash dialog boxes - SetErrorMode(ErrorModes.SEM_FAILCRITICALERRORS | ErrorModes.SEM_NOALIGNMENTFAULTEXCEPT | - ErrorModes.SEM_NOGPFAULTERRORBOX | ErrorModes.SEM_NOOPENFILEERRORBOX); - } + // Not crazy about this but it's the only way to suppress ffmpeg crash dialog boxes + SetErrorMode(ErrorModes.SEM_FAILCRITICALERRORS | ErrorModes.SEM_NOALIGNMENTFAULTEXCEPT | + ErrorModes.SEM_NOGPFAULTERRORBOX | ErrorModes.SEM_NOOPENFILEERRORBOX); var task = _appHost.Init(initProgress); Task.WaitAll(task); task = task.ContinueWith(new Action(a => _appHost.RunStartupTasks()), TaskContinuationOptions.OnlyOnRanToCompletion | TaskContinuationOptions.AttachedToParent); - if (runService) - { - StartService(logManager); - } - else - { - Task.WaitAll(task); + Task.WaitAll(task); - task = ApplicationTaskCompletionSource.Task; - Task.WaitAll(task); - } + task = ApplicationTaskCompletionSource.Task; + Task.WaitAll(task); } private static void GenerateCertificate(string certPath, string certHost) @@ -270,31 +213,6 @@ namespace Emby.Server //CertificateGenerator.CreateSelfSignCertificatePfx(certPath, certHost, _logger); } - /// - /// Starts the service. - /// - private static void StartService(ILogManager logManager) - { - } - - /// - /// Handles the Disposed event of the service control. - /// - /// The source of the event. - /// The instance containing the event data. - static void service_Disposed(object sender, EventArgs e) - { - ApplicationTaskCompletionSource.SetResult(true); - OnServiceShutdown(); - } - - private static void OnServiceShutdown() - { - _logger.Info("Shutting down"); - - DisposeAppHost(); - } - /// /// Handles the UnhandledException event of the CurrentDomain control. /// @@ -306,10 +224,7 @@ namespace Emby.Server new UnhandledExceptionWriter(_appHost.ServerConfigurationManager.ApplicationPaths, _logger, _appHost.LogManager).Log(exception); - if (!_isRunningAsService) - { - ShowMessageBox("Unhandled exception: " + exception.Message); - } + ShowMessageBox("Unhandled exception: " + exception.Message); if (!Debugger.IsAttached) { @@ -325,29 +240,6 @@ namespace Emby.Server /// true if XXXX, false otherwise private static bool PerformUpdateIfNeeded(ServerApplicationPaths appPaths, ILogger logger) { - // Look for the existence of an update archive - var updateArchive = Path.Combine(appPaths.TempUpdatePath, "MBServer" + ".zip"); - if (File.Exists(updateArchive)) - { - logger.Info("An update is available from {0}", updateArchive); - - // Update is there - execute update - try - { - //var serviceName = _isRunningAsService ? BackgroundService.GetExistingServiceName() : string.Empty; - //new ApplicationUpdater().UpdateApplication(appPaths, updateArchive, logger, serviceName); - - // And just let the app exit so it can update - return true; - } - catch (Exception e) - { - logger.ErrorException("Error starting updater.", e); - - ShowMessageBox(string.Format("Error attempting to update application.\n\n{0}\n\n{1}", e.GetType().Name, e.Message)); - } - } - return false; } @@ -358,37 +250,25 @@ namespace Emby.Server public static void Shutdown() { - if (_isRunningAsService) - { - ShutdownWindowsService(); - } - else - { - DisposeAppHost(); + DisposeAppHost(); - ShutdownWindowsApplication(); - } + //_logger.Info("Calling Application.Exit"); + //Application.Exit(); + + _logger.Info("Calling Environment.Exit"); + Environment.Exit(0); + + _logger.Info("Calling ApplicationTaskCompletionSource.SetResult"); + ApplicationTaskCompletionSource.SetResult(true); } public static void Restart() { DisposeAppHost(); - if (_isRunningAsService) - { - RestartWindowsService(); - } - else - { - //_logger.Info("Hiding server notify icon"); - //_serverNotifyIcon.Visible = false; + // todo: start new instance - _logger.Info("Starting new instance"); - //Application.Restart(); - Process.Start(_appHost.ServerConfigurationManager.ApplicationPaths.ApplicationPath); - - ShutdownWindowsApplication(); - } + Shutdown(); } private static void DisposeAppHost() @@ -402,31 +282,6 @@ namespace Emby.Server } } - private static void ShutdownWindowsApplication() - { - //_logger.Info("Calling Application.Exit"); - //Application.Exit(); - - _logger.Info("Calling Environment.Exit"); - Environment.Exit(0); - - _logger.Info("Calling ApplicationTaskCompletionSource.SetResult"); - ApplicationTaskCompletionSource.SetResult(true); - } - - private static void ShutdownWindowsService() - { - } - - private static void RestartWindowsService() - { - } - - private static bool CanRestartWindowsService() - { - return false; - } - /// /// Sets the error mode. /// diff --git a/src/Emby.Server/project.json b/src/Emby.Server/project.json index c64db844f..55acee514 100644 --- a/src/Emby.Server/project.json +++ b/src/Emby.Server/project.json @@ -12,10 +12,10 @@ "version": "1.0.1" }, "Mono.Nat": "1.0.0-*", - "Microsoft.Win32.Registry": "4.0.0", - "System.Runtime.Extensions": "4.1.0", - "System.Diagnostics.Process": "4.1.0", - "Microsoft.Data.SQLite": "1.0.0" + "Microsoft.Win32.Registry": "4.0.0", + "System.Runtime.Extensions": "4.1.0", + "System.Diagnostics.Process": "4.1.0", + "Microsoft.Data.SQLite": "1.1.0-preview1-final" }, "frameworks": { -- cgit v1.2.3 From 26ef23d628c6f84baca5491203e1fe2a9a82d6b9 Mon Sep 17 00:00:00 2001 From: Luke Pulverenti Date: Sun, 27 Nov 2016 14:36:56 -0500 Subject: update caching headers --- .../IO/ManagedFileSystem.cs | 30 +++++++++++--- Emby.Server.Core/ApplicationHost.cs | 2 +- .../Data/BaseSqliteRepository.cs | 17 ++++++-- .../Data/SqliteDisplayPreferencesRepository.cs | 10 ++--- .../Data/SqliteItemRepository.cs | 46 ++++++++++++++++++++-- .../Data/SqliteUserDataRepository.cs | 8 ++++ .../HttpServer/HttpResultFactory.cs | 13 ++++-- Emby.Server.Implementations/Sync/SyncRepository.cs | 8 ++++ MediaBrowser.Model/IO/IFileSystem.cs | 13 +----- MediaBrowser.Model/LiveTv/LiveTvOptions.cs | 1 - MediaBrowser.Providers/Manager/MetadataService.cs | 36 +++++++---------- MediaBrowser.XbmcMetadata/Savers/BaseNfoSaver.cs | 22 ++++++----- 12 files changed, 139 insertions(+), 67 deletions(-) (limited to 'MediaBrowser.Model/IO/IFileSystem.cs') diff --git a/Emby.Common.Implementations/IO/ManagedFileSystem.cs b/Emby.Common.Implementations/IO/ManagedFileSystem.cs index 4fb70d4e2..b5943e17b 100644 --- a/Emby.Common.Implementations/IO/ManagedFileSystem.cs +++ b/Emby.Common.Implementations/IO/ManagedFileSystem.cs @@ -397,16 +397,34 @@ namespace Emby.Common.Implementations.IO private FileAccess GetFileAccess(FileAccessMode mode) { - var val = (int)mode; - - return (FileAccess)val; + switch (mode) + { + case FileAccessMode.ReadWrite: + return FileAccess.ReadWrite; + case FileAccessMode.Write: + return FileAccess.Write; + case FileAccessMode.Read: + return FileAccess.Read; + default: + throw new Exception("Unrecognized FileAccessMode"); + } } private FileShare GetFileShare(FileShareMode mode) { - var val = (int)mode; - - return (FileShare)val; + switch (mode) + { + case FileShareMode.ReadWrite: + return FileShare.ReadWrite; + case FileShareMode.Write: + return FileShare.Write; + case FileShareMode.Read: + return FileShare.Read; + case FileShareMode.None: + return FileShare.None; + default: + throw new Exception("Unrecognized FileShareMode"); + } } public void SetHidden(string path, bool isHidden) diff --git a/Emby.Server.Core/ApplicationHost.cs b/Emby.Server.Core/ApplicationHost.cs index 7e5d6e31c..90848d930 100644 --- a/Emby.Server.Core/ApplicationHost.cs +++ b/Emby.Server.Core/ApplicationHost.cs @@ -551,7 +551,7 @@ namespace Emby.Server.Core DisplayPreferencesRepository = displayPreferencesRepo; RegisterSingleInstance(DisplayPreferencesRepository); - var itemRepo = new SqliteItemRepository(ServerConfigurationManager, JsonSerializer, LogManager.GetLogger("SqliteItemRepository"), MemoryStreamFactory, assemblyInfo, FileSystemManager, EnvironmentInfo); + var itemRepo = new SqliteItemRepository(ServerConfigurationManager, JsonSerializer, LogManager.GetLogger("SqliteItemRepository"), MemoryStreamFactory, assemblyInfo, FileSystemManager, EnvironmentInfo, TimerFactory); ItemRepository = itemRepo; RegisterSingleInstance(ItemRepository); diff --git a/Emby.Server.Implementations/Data/BaseSqliteRepository.cs b/Emby.Server.Implementations/Data/BaseSqliteRepository.cs index 5c60a6f86..308b8356f 100644 --- a/Emby.Server.Implementations/Data/BaseSqliteRepository.cs +++ b/Emby.Server.Implementations/Data/BaseSqliteRepository.cs @@ -88,11 +88,14 @@ namespace Emby.Server.Implementations.Data var queries = new List { - "PRAGMA temp_store = memory", - //"PRAGMA journal_mode=WAL" //"PRAGMA cache size=-10000" }; + if (EnableTempStoreMemory) + { + queries.Add("PRAGMA temp_store = memory"); + } + //var cacheSize = CacheSize; //if (cacheSize.HasValue) //{ @@ -116,7 +119,7 @@ namespace Emby.Server.Implementations.Data db.ExecuteAll(string.Join(";", queries.ToArray())); } } - else + else if (queries.Count > 0) { db.ExecuteAll(string.Join(";", queries.ToArray())); } @@ -124,6 +127,14 @@ namespace Emby.Server.Implementations.Data return db; } + protected virtual bool EnableTempStoreMemory + { + get + { + return false; + } + } + protected virtual int? CacheSize { get diff --git a/Emby.Server.Implementations/Data/SqliteDisplayPreferencesRepository.cs b/Emby.Server.Implementations/Data/SqliteDisplayPreferencesRepository.cs index 17afbcfa9..1bd64b21d 100644 --- a/Emby.Server.Implementations/Data/SqliteDisplayPreferencesRepository.cs +++ b/Emby.Server.Implementations/Data/SqliteDisplayPreferencesRepository.cs @@ -63,8 +63,8 @@ namespace Emby.Server.Implementations.Data string[] queries = { - "create table if not exists userdisplaypreferences (id GUID, userId GUID, client text, data BLOB)", - "create unique index if not exists userdisplaypreferencesindex on userdisplaypreferences (id, userId, client)" + "create table if not exists userdisplaypreferences (id GUID, userId GUID, client text, data BLOB)", + "create unique index if not exists userdisplaypreferencesindex on userdisplaypreferences (id, userId, client)" }; connection.RunQueries(queries); @@ -107,10 +107,10 @@ namespace Emby.Server.Implementations.Data private void SaveDisplayPreferences(DisplayPreferences displayPreferences, Guid userId, string client, IDatabaseConnection connection) { - using (var statement = connection.PrepareStatement("replace into userdisplaypreferences (id, userid, client, data) values (@id, @userid, @client, @data)")) - { - var serialized = _jsonSerializer.SerializeToBytes(displayPreferences, _memoryStreamProvider); + var serialized = _jsonSerializer.SerializeToBytes(displayPreferences, _memoryStreamProvider); + using (var statement = connection.PrepareStatement("replace into userdisplaypreferences (id, userid, client, data) values (@id, @userId, @client, @data)")) + { statement.TryBind("@id", displayPreferences.Id.ToGuidParamValue()); statement.TryBind("@userId", userId.ToGuidParamValue()); statement.TryBind("@client", client); diff --git a/Emby.Server.Implementations/Data/SqliteItemRepository.cs b/Emby.Server.Implementations/Data/SqliteItemRepository.cs index c6e5a6dcf..29aacc059 100644 --- a/Emby.Server.Implementations/Data/SqliteItemRepository.cs +++ b/Emby.Server.Implementations/Data/SqliteItemRepository.cs @@ -30,6 +30,7 @@ using MediaBrowser.Server.Implementations.Playlists; using MediaBrowser.Model.Reflection; using SQLitePCL.pretty; using MediaBrowser.Model.System; +using MediaBrowser.Model.Threading; namespace Emby.Server.Implementations.Data { @@ -68,11 +69,13 @@ namespace Emby.Server.Implementations.Data private readonly IMemoryStreamFactory _memoryStreamProvider; private readonly IFileSystem _fileSystem; private readonly IEnvironmentInfo _environmentInfo; + private readonly ITimerFactory _timerFactory; + private ITimer _shrinkMemoryTimer; /// /// Initializes a new instance of the class. /// - public SqliteItemRepository(IServerConfigurationManager config, IJsonSerializer jsonSerializer, ILogger logger, IMemoryStreamFactory memoryStreamProvider, IAssemblyInfo assemblyInfo, IFileSystem fileSystem, IEnvironmentInfo environmentInfo) + public SqliteItemRepository(IServerConfigurationManager config, IJsonSerializer jsonSerializer, ILogger logger, IMemoryStreamFactory memoryStreamProvider, IAssemblyInfo assemblyInfo, IFileSystem fileSystem, IEnvironmentInfo environmentInfo, ITimerFactory timerFactory) : base(logger) { if (config == null) @@ -89,6 +92,7 @@ namespace Emby.Server.Implementations.Data _memoryStreamProvider = memoryStreamProvider; _fileSystem = fileSystem; _environmentInfo = environmentInfo; + _timerFactory = timerFactory; _typeMapper = new TypeMapper(assemblyInfo); _criticReviewsPath = Path.Combine(_config.ApplicationPaths.DataPath, "critic-reviews"); @@ -119,6 +123,14 @@ namespace Emby.Server.Implementations.Data } } + protected override bool EnableTempStoreMemory + { + get + { + return true; + } + } + private SQLiteDatabaseConnection _backgroundConnection; protected override void CloseConnection() { @@ -129,6 +141,12 @@ namespace Emby.Server.Implementations.Data _backgroundConnection.Dispose(); _backgroundConnection = null; } + + if (_shrinkMemoryTimer != null) + { + _shrinkMemoryTimer.Dispose(); + _shrinkMemoryTimer = null; + } } /// @@ -364,13 +382,35 @@ namespace Emby.Server.Implementations.Data connection.RunQueries(postQueries); - //SqliteExtensions.Attach(_connection, Path.Combine(_config.ApplicationPaths.DataPath, "userdata_v2.db"), "UserDataDb"); //await Vacuum(_connection).ConfigureAwait(false); } userDataRepo.Initialize(WriteLock); _backgroundConnection = CreateConnection(true); + + _shrinkMemoryTimer = _timerFactory.Create(OnShrinkMemoryTimerCallback, null, TimeSpan.FromMinutes(1), TimeSpan.FromMinutes(30)); + } + + private void OnShrinkMemoryTimerCallback(object state) + { + try + { + using (WriteLock.Write()) + { + using (var connection = CreateConnection()) + { + connection.RunQueries(new string[] + { + "pragma shrink_memory" + }); + } + } + } + catch (Exception ex) + { + Logger.ErrorException("Error running shrink memory", ex); + } } private readonly string[] _retriveItemColumns = @@ -666,7 +706,7 @@ namespace Emby.Server.Implementations.Data { var requiresReset = false; - var statements = db.PrepareAll(string.Join(";", new string[] + var statements = db.PrepareAll(string.Join(";", new string[] { GetSaveItemCommandText(), "delete from AncestorIds where ItemId=@ItemId", diff --git a/Emby.Server.Implementations/Data/SqliteUserDataRepository.cs b/Emby.Server.Implementations/Data/SqliteUserDataRepository.cs index 4c1b8fcd9..b01f215e0 100644 --- a/Emby.Server.Implementations/Data/SqliteUserDataRepository.cs +++ b/Emby.Server.Implementations/Data/SqliteUserDataRepository.cs @@ -84,6 +84,14 @@ namespace Emby.Server.Implementations.Data } } + protected override bool EnableTempStoreMemory + { + get + { + return true; + } + } + private void ImportUserDataIfNeeded(IDatabaseConnection connection) { if (!_fileSystem.FileExists(_importFile)) diff --git a/Emby.Server.Implementations/HttpServer/HttpResultFactory.cs b/Emby.Server.Implementations/HttpServer/HttpResultFactory.cs index 313db6a75..995dc7b7b 100644 --- a/Emby.Server.Implementations/HttpServer/HttpResultFactory.cs +++ b/Emby.Server.Implementations/HttpServer/HttpResultFactory.cs @@ -735,7 +735,7 @@ namespace Emby.Server.Implementations.HttpServer /// true if [is not modified] [the specified cache key]; otherwise, false. private bool IsNotModified(IRequest requestContext, Guid? cacheKey, DateTime? lastDateModified, TimeSpan? cacheDuration) { - var isNotModified = true; + //var isNotModified = true; var ifModifiedSinceHeader = requestContext.Headers.Get("If-Modified-Since"); @@ -745,18 +745,23 @@ namespace Emby.Server.Implementations.HttpServer if (DateTime.TryParse(ifModifiedSinceHeader, out ifModifiedSince)) { - isNotModified = IsNotModified(ifModifiedSince.ToUniversalTime(), cacheDuration, lastDateModified); + if (IsNotModified(ifModifiedSince.ToUniversalTime(), cacheDuration, lastDateModified)) + { + return true; + } } } var ifNoneMatchHeader = requestContext.Headers.Get("If-None-Match"); // Validate If-None-Match - if (isNotModified && (cacheKey.HasValue || !string.IsNullOrEmpty(ifNoneMatchHeader))) + if ((cacheKey.HasValue || !string.IsNullOrEmpty(ifNoneMatchHeader))) { Guid ifNoneMatch; - if (Guid.TryParse(ifNoneMatchHeader ?? string.Empty, out ifNoneMatch)) + ifNoneMatchHeader = (ifNoneMatchHeader ?? string.Empty).Trim('\"'); + + if (Guid.TryParse(ifNoneMatchHeader, out ifNoneMatch)) { if (cacheKey.HasValue && cacheKey.Value == ifNoneMatch) { diff --git a/Emby.Server.Implementations/Sync/SyncRepository.cs b/Emby.Server.Implementations/Sync/SyncRepository.cs index 8cce7a8bf..b2d9fbcc9 100644 --- a/Emby.Server.Implementations/Sync/SyncRepository.cs +++ b/Emby.Server.Implementations/Sync/SyncRepository.cs @@ -83,6 +83,14 @@ namespace Emby.Server.Implementations.Sync } } + protected override bool EnableTempStoreMemory + { + get + { + return true; + } + } + private const string BaseJobSelectText = "select Id, TargetId, Name, Profile, Quality, Bitrate, Status, Progress, UserId, ItemIds, Category, ParentId, UnwatchedOnly, ItemLimit, SyncNewContent, DateCreated, DateLastModified, ItemCount from SyncJobs"; private const string BaseJobItemSelectText = "select Id, ItemId, ItemName, MediaSourceId, JobId, TemporaryPath, OutputPath, Status, TargetId, DateCreated, Progress, AdditionalFiles, MediaSource, IsMarkedForRemoval, JobItemIndex, ItemDateModifiedTicks from SyncJobItems"; diff --git a/MediaBrowser.Model/IO/IFileSystem.cs b/MediaBrowser.Model/IO/IFileSystem.cs index 22e1e7758..62bb66ea8 100644 --- a/MediaBrowser.Model/IO/IFileSystem.cs +++ b/MediaBrowser.Model/IO/IFileSystem.cs @@ -369,7 +369,6 @@ namespace MediaBrowser.Model.IO Append = 6 } - [Flags] public enum FileAccessMode { // @@ -388,7 +387,6 @@ namespace MediaBrowser.Model.IO ReadWrite = 3 } - [Flags] public enum FileShareMode { // @@ -417,16 +415,7 @@ namespace MediaBrowser.Model.IO // or another process) will fail until the file is closed. However, even if this // flag is specified, additional permissions might still be needed to access the // file. - ReadWrite = 3, - // - // Summary: - // Allows subsequent deleting of a file. - Delete = 4, - // - // Summary: - // Makes the file handle inheritable by child processes. This is not directly supported - // by Win32. - Inheritable = 16 + ReadWrite = 3 } } diff --git a/MediaBrowser.Model/LiveTv/LiveTvOptions.cs b/MediaBrowser.Model/LiveTv/LiveTvOptions.cs index 8f7e94cf0..c5e140032 100644 --- a/MediaBrowser.Model/LiveTv/LiveTvOptions.cs +++ b/MediaBrowser.Model/LiveTv/LiveTvOptions.cs @@ -32,7 +32,6 @@ namespace MediaBrowser.Model.LiveTv public LiveTvOptions() { EnableMovieProviders = true; - EnableRecordingSubfolders = true; TunerHosts = new List(); ListingProviders = new List(); MediaLocationsCreated = new string[] { }; diff --git a/MediaBrowser.Providers/Manager/MetadataService.cs b/MediaBrowser.Providers/Manager/MetadataService.cs index 9f8dca434..9c6d6a482 100644 --- a/MediaBrowser.Providers/Manager/MetadataService.cs +++ b/MediaBrowser.Providers/Manager/MetadataService.cs @@ -78,16 +78,15 @@ namespace MediaBrowser.Providers.Manager bool hasRefreshedMetadata = true; bool hasRefreshedImages = true; + var isFirstRefresh = item.DateLastRefreshed == default(DateTime); // Next run metadata providers if (refreshOptions.MetadataRefreshMode != MetadataRefreshMode.None) { - var providers = GetProviders(item, refreshOptions, requiresRefresh) + var providers = GetProviders(item, refreshOptions, isFirstRefresh, requiresRefresh) .ToList(); - var dateLastRefresh = item.DateLastRefreshed; - - if (providers.Count > 0 || dateLastRefresh == default(DateTime)) + if (providers.Count > 0 || isFirstRefresh) { if (item.BeforeMetadataRefresh()) { @@ -110,11 +109,7 @@ namespace MediaBrowser.Providers.Manager var result = await RefreshWithProviders(metadataResult, id, refreshOptions, providers, itemImageProvider, cancellationToken).ConfigureAwait(false); updateType = updateType | result.UpdateType; - if (result.Failures == 0) - { - hasRefreshedMetadata = true; - } - else + if (result.Failures > 0) { hasRefreshedMetadata = false; } @@ -138,19 +133,13 @@ namespace MediaBrowser.Providers.Manager var result = await itemImageProvider.RefreshImages(itemOfType, libraryOptions, providers, refreshOptions, config, cancellationToken).ConfigureAwait(false); updateType = updateType | result.UpdateType; - if (result.Failures == 0) - { - hasRefreshedImages = true; - } - else + if (result.Failures > 0) { hasRefreshedImages = false; } } } - var isFirstRefresh = item.DateLastRefreshed == default(DateTime); - var beforeSaveResult = await BeforeSave(itemOfType, isFirstRefresh || refreshOptions.ReplaceAllMetadata || refreshOptions.MetadataRefreshMode == MetadataRefreshMode.FullRefresh || requiresRefresh, updateType).ConfigureAwait(false); updateType = updateType | beforeSaveResult; @@ -373,15 +362,18 @@ namespace MediaBrowser.Providers.Manager /// Gets the providers. /// /// IEnumerable{`0}. - protected IEnumerable GetProviders(IHasMetadata item, MetadataRefreshOptions options, bool requiresRefresh) + protected IEnumerable GetProviders(IHasMetadata item, MetadataRefreshOptions options, bool isFirstRefresh, bool requiresRefresh) { // Get providers to refresh var providers = ((ProviderManager)ProviderManager).GetMetadataProviders(item).ToList(); - var dateLastRefresh = item.DateLastRefreshed; + var metadataRefreshMode = options.MetadataRefreshMode; // Run all if either of these flags are true - var runAllProviders = options.ReplaceAllMetadata || options.MetadataRefreshMode == MetadataRefreshMode.FullRefresh || dateLastRefresh == default(DateTime) || requiresRefresh; + var runAllProviders = options.ReplaceAllMetadata || + metadataRefreshMode == MetadataRefreshMode.FullRefresh || + (isFirstRefresh && metadataRefreshMode >= MetadataRefreshMode.Default) || + (requiresRefresh && metadataRefreshMode >= MetadataRefreshMode.Default); if (!runAllProviders) { @@ -404,6 +396,9 @@ namespace MediaBrowser.Providers.Manager } else { + var anyRemoteProvidersChanged = providersWithChanges.OfType() + .Any(); + providers = providers.Where(i => { // If any provider reports a change, always run local ones as well @@ -412,9 +407,6 @@ namespace MediaBrowser.Providers.Manager return true; } - var anyRemoteProvidersChanged = providersWithChanges.OfType() - .Any(); - // If any remote providers changed, run them all so that priorities can be honored if (i is IRemoteMetadataProvider) { diff --git a/MediaBrowser.XbmcMetadata/Savers/BaseNfoSaver.cs b/MediaBrowser.XbmcMetadata/Savers/BaseNfoSaver.cs index 84dd095cd..125ac5291 100644 --- a/MediaBrowser.XbmcMetadata/Savers/BaseNfoSaver.cs +++ b/MediaBrowser.XbmcMetadata/Savers/BaseNfoSaver.cs @@ -911,17 +911,14 @@ namespace MediaBrowser.XbmcMetadata.Savers var image = item.GetImageInfo(ImageType.Primary, 0); - if (image != null && image.IsLocalFile) + if (image != null) { - writer.WriteElementString("poster", GetPathToSave(image.Path, libraryManager, config)); + writer.WriteElementString("poster", GetImagePathToSave(image, libraryManager, config)); } foreach (var backdrop in item.GetImages(ImageType.Backdrop)) { - if (backdrop.IsLocalFile) - { - writer.WriteElementString("fanart", GetPathToSave(backdrop.Path, libraryManager, config)); - } + writer.WriteElementString("fanart", GetImagePathToSave(backdrop, libraryManager, config)); } writer.WriteEndElement(); @@ -1012,9 +1009,9 @@ namespace MediaBrowser.XbmcMetadata.Savers var personEntity = libraryManager.GetPerson(person.Name); var image = personEntity.GetImageInfo(ImageType.Primary, 0); - if (image != null && image.IsLocalFile) + if (image != null) { - writer.WriteElementString("thumb", GetPathToSave(image.Path, libraryManager, config)); + writer.WriteElementString("thumb", GetImagePathToSave(image, libraryManager, config)); } } catch (Exception) @@ -1026,9 +1023,14 @@ namespace MediaBrowser.XbmcMetadata.Savers } } - private static string GetPathToSave(string path, ILibraryManager libraryManager, IServerConfigurationManager config) + private static string GetImagePathToSave(ItemImageInfo image, ILibraryManager libraryManager, IServerConfigurationManager config) { - return libraryManager.GetPathAfterNetworkSubstitution(path); + if (!image.IsLocalFile) + { + return image.Path; + } + + return libraryManager.GetPathAfterNetworkSubstitution(image.Path); } private static bool IsPersonType(PersonInfo person, string type) -- cgit v1.2.3