diff --git a/Emby.Photos/Emby.Photos.csproj b/Emby.Photos/Emby.Photos.csproj index ed126a41c4..21631aeb54 100644 --- a/Emby.Photos/Emby.Photos.csproj +++ b/Emby.Photos/Emby.Photos.csproj @@ -37,6 +37,9 @@ + + Properties\SharedVersion.cs + diff --git a/Emby.Photos/Properties/AssemblyInfo.cs b/Emby.Photos/Properties/AssemblyInfo.cs index abef142ef1..49ac833457 100644 --- a/Emby.Photos/Properties/AssemblyInfo.cs +++ b/Emby.Photos/Properties/AssemblyInfo.cs @@ -31,6 +31,4 @@ using System.Runtime.InteropServices; // // You can specify all the values or you can default the Build and Revision Numbers // by using the '*' as shown below: -// [assembly: AssemblyVersion("1.0.*")] -[assembly: AssemblyVersion("1.0.0.0")] -[assembly: AssemblyFileVersion("1.0.0.0")] +// [assembly: AssemblyVersion("1.0.*")] \ No newline at end of file diff --git a/MediaBrowser.Server.Implementations/Channels/ChannelConfigurations.cs b/Emby.Server.Implementations/Channels/ChannelConfigurations.cs similarity index 93% rename from MediaBrowser.Server.Implementations/Channels/ChannelConfigurations.cs rename to Emby.Server.Implementations/Channels/ChannelConfigurations.cs index 9dfb0404e0..ef0973e7f4 100644 --- a/MediaBrowser.Server.Implementations/Channels/ChannelConfigurations.cs +++ b/Emby.Server.Implementations/Channels/ChannelConfigurations.cs @@ -2,7 +2,7 @@ using MediaBrowser.Model.Configuration; using System.Collections.Generic; -namespace MediaBrowser.Server.Implementations.Channels +namespace Emby.Server.Implementations.Channels { public static class ChannelConfigurationExtension { diff --git a/MediaBrowser.Server.Implementations/Channels/ChannelDynamicMediaSourceProvider.cs b/Emby.Server.Implementations/Channels/ChannelDynamicMediaSourceProvider.cs similarity index 96% rename from MediaBrowser.Server.Implementations/Channels/ChannelDynamicMediaSourceProvider.cs rename to Emby.Server.Implementations/Channels/ChannelDynamicMediaSourceProvider.cs index fae78b9bc0..98011ddd48 100644 --- a/MediaBrowser.Server.Implementations/Channels/ChannelDynamicMediaSourceProvider.cs +++ b/Emby.Server.Implementations/Channels/ChannelDynamicMediaSourceProvider.cs @@ -7,7 +7,7 @@ using System.Collections.Generic; using System.Threading; using System.Threading.Tasks; -namespace MediaBrowser.Server.Implementations.Channels +namespace Emby.Server.Implementations.Channels { public class ChannelDynamicMediaSourceProvider : IMediaSourceProvider { diff --git a/MediaBrowser.Server.Implementations/Channels/ChannelImageProvider.cs b/Emby.Server.Implementations/Channels/ChannelImageProvider.cs similarity index 96% rename from MediaBrowser.Server.Implementations/Channels/ChannelImageProvider.cs rename to Emby.Server.Implementations/Channels/ChannelImageProvider.cs index c98f71ce2a..f892b1e620 100644 --- a/MediaBrowser.Server.Implementations/Channels/ChannelImageProvider.cs +++ b/Emby.Server.Implementations/Channels/ChannelImageProvider.cs @@ -7,7 +7,7 @@ using System.Linq; using System.Threading; using System.Threading.Tasks; -namespace MediaBrowser.Server.Implementations.Channels +namespace Emby.Server.Implementations.Channels { public class ChannelImageProvider : IDynamicImageProvider, IHasItemChangeMonitor { diff --git a/MediaBrowser.Server.Implementations/Channels/ChannelManager.cs b/Emby.Server.Implementations/Channels/ChannelManager.cs similarity index 99% rename from MediaBrowser.Server.Implementations/Channels/ChannelManager.cs rename to Emby.Server.Implementations/Channels/ChannelManager.cs index 300973ce10..2ce880c93a 100644 --- a/MediaBrowser.Server.Implementations/Channels/ChannelManager.cs +++ b/Emby.Server.Implementations/Channels/ChannelManager.cs @@ -31,7 +31,7 @@ using MediaBrowser.Controller.Entities.TV; using MediaBrowser.Controller.IO; using MediaBrowser.Model.Globalization; -namespace MediaBrowser.Server.Implementations.Channels +namespace Emby.Server.Implementations.Channels { public class ChannelManager : IChannelManager { @@ -410,7 +410,7 @@ namespace MediaBrowser.Server.Implementations.Channels } } } - catch (DirectoryNotFoundException) + catch (IOException) { } @@ -781,7 +781,7 @@ namespace MediaBrowser.Server.Implementations.Channels { } - catch (DirectoryNotFoundException) + catch (IOException) { } @@ -801,7 +801,7 @@ namespace MediaBrowser.Server.Implementations.Channels { } - catch (DirectoryNotFoundException) + catch (IOException) { } @@ -943,7 +943,7 @@ namespace MediaBrowser.Server.Implementations.Channels { } - catch (DirectoryNotFoundException) + catch (IOException) { } @@ -963,7 +963,7 @@ namespace MediaBrowser.Server.Implementations.Channels { } - catch (DirectoryNotFoundException) + catch (IOException) { } @@ -1104,7 +1104,7 @@ namespace MediaBrowser.Server.Implementations.Channels { } - catch (DirectoryNotFoundException) + catch (IOException) { } @@ -1127,7 +1127,7 @@ namespace MediaBrowser.Server.Implementations.Channels { } - catch (DirectoryNotFoundException) + catch (IOException) { } diff --git a/MediaBrowser.Server.Implementations/Channels/ChannelPostScanTask.cs b/Emby.Server.Implementations/Channels/ChannelPostScanTask.cs similarity index 99% rename from MediaBrowser.Server.Implementations/Channels/ChannelPostScanTask.cs rename to Emby.Server.Implementations/Channels/ChannelPostScanTask.cs index afb842c1c9..aef06bd1d6 100644 --- a/MediaBrowser.Server.Implementations/Channels/ChannelPostScanTask.cs +++ b/Emby.Server.Implementations/Channels/ChannelPostScanTask.cs @@ -11,7 +11,7 @@ using System.Threading; using System.Threading.Tasks; using MediaBrowser.Model.Extensions; -namespace MediaBrowser.Server.Implementations.Channels +namespace Emby.Server.Implementations.Channels { public class ChannelPostScanTask { diff --git a/MediaBrowser.Server.Implementations/Channels/RefreshChannelsScheduledTask.cs b/Emby.Server.Implementations/Channels/RefreshChannelsScheduledTask.cs similarity index 97% rename from MediaBrowser.Server.Implementations/Channels/RefreshChannelsScheduledTask.cs rename to Emby.Server.Implementations/Channels/RefreshChannelsScheduledTask.cs index 8bcb3cda99..d5ec86445d 100644 --- a/MediaBrowser.Server.Implementations/Channels/RefreshChannelsScheduledTask.cs +++ b/Emby.Server.Implementations/Channels/RefreshChannelsScheduledTask.cs @@ -6,7 +6,7 @@ using System.Collections.Generic; using System.Threading.Tasks; using MediaBrowser.Model.Tasks; -namespace MediaBrowser.Server.Implementations.Channels +namespace Emby.Server.Implementations.Channels { class RefreshChannelsScheduledTask : IScheduledTask { diff --git a/Emby.Server.Implementations/Emby.Server.Implementations.csproj b/Emby.Server.Implementations/Emby.Server.Implementations.csproj new file mode 100644 index 0000000000..317b1b9b8b --- /dev/null +++ b/Emby.Server.Implementations/Emby.Server.Implementations.csproj @@ -0,0 +1,74 @@ + + + + + 11.0 + Debug + AnyCPU + {D08B8079-08B3-48F2-83C4-E9CCCE48AFF1} + Library + Properties + Emby.Server.Implementations + Emby.Server.Implementations + en-US + 512 + {786C830F-07A1-408B-BD7F-6EE04809D6DB};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC} + Profile75 + v4.5 + + + true + full + false + bin\Debug\ + DEBUG;TRACE + prompt + 4 + + + pdbonly + true + bin\Release\ + TRACE + prompt + 4 + + + + + {9142eefa-7570-41e1-bfcc-468bb571af2f} + MediaBrowser.Common + + + {17e1f4e6-8abd-4fe5-9ecf-43d4b6087ba2} + MediaBrowser.Controller + + + {7eeeb4bb-f3e8-48fc-b4c5-70f0fff8329b} + MediaBrowser.Model + + + + + Properties\SharedVersion.cs + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/MediaBrowser.Server.Implementations/Intros/DefaultIntroProvider.cs b/Emby.Server.Implementations/Intros/DefaultIntroProvider.cs similarity index 99% rename from MediaBrowser.Server.Implementations/Intros/DefaultIntroProvider.cs rename to Emby.Server.Implementations/Intros/DefaultIntroProvider.cs index 72a63c5472..180f6aba7f 100644 --- a/MediaBrowser.Server.Implementations/Intros/DefaultIntroProvider.cs +++ b/Emby.Server.Implementations/Intros/DefaultIntroProvider.cs @@ -11,13 +11,11 @@ using System.Collections.Generic; using System.IO; using System.Linq; using System.Threading.Tasks; -using MediaBrowser.Common.IO; -using MediaBrowser.Controller.IO; using MediaBrowser.Model.IO; using MediaBrowser.Model.Extensions; using MediaBrowser.Model.Globalization; -namespace MediaBrowser.Server.Implementations.Intros +namespace Emby.Server.Implementations.Intros { public class DefaultIntroProvider : IIntroProvider { diff --git a/MediaBrowser.Server.Implementations/News/NewsService.cs b/Emby.Server.Implementations/News/NewsService.cs similarity index 95% rename from MediaBrowser.Server.Implementations/News/NewsService.cs rename to Emby.Server.Implementations/News/NewsService.cs index 0059ba4214..80e7996342 100644 --- a/MediaBrowser.Server.Implementations/News/NewsService.cs +++ b/Emby.Server.Implementations/News/NewsService.cs @@ -6,7 +6,7 @@ using System.Collections.Generic; using System.IO; using System.Linq; -namespace MediaBrowser.Server.Implementations.News +namespace Emby.Server.Implementations.News { public class NewsService : INewsService { @@ -25,7 +25,7 @@ namespace MediaBrowser.Server.Implementations.News { return GetProductNewsInternal(query); } - catch (DirectoryNotFoundException) + catch (FileNotFoundException) { // No biggie return new QueryResult @@ -33,7 +33,7 @@ namespace MediaBrowser.Server.Implementations.News Items = new NewsItem[] { } }; } - catch (FileNotFoundException) + catch (IOException) { // No biggie return new QueryResult diff --git a/Emby.Server.Implementations/Properties/AssemblyInfo.cs b/Emby.Server.Implementations/Properties/AssemblyInfo.cs new file mode 100644 index 0000000000..28ffcbac64 --- /dev/null +++ b/Emby.Server.Implementations/Properties/AssemblyInfo.cs @@ -0,0 +1,28 @@ +using System.Resources; +using System.Reflection; +using System.Runtime.CompilerServices; +using System.Runtime.InteropServices; + +// General Information about an assembly is controlled through the following +// set of attributes. Change these attribute values to modify the information +// associated with an assembly. +[assembly: AssemblyTitle("Emby.Server.Implementations")] +[assembly: AssemblyDescription("")] +[assembly: AssemblyConfiguration("")] +[assembly: AssemblyCompany("")] +[assembly: AssemblyProduct("Emby.Server.Implementations")] +[assembly: AssemblyCopyright("Copyright © 2016")] +[assembly: AssemblyTrademark("")] +[assembly: AssemblyCulture("")] +[assembly: NeutralResourcesLanguage("en")] + +// Version information for an assembly consists of the following four values: +// +// Major Version +// Minor Version +// Build Number +// Revision +// +// You can specify all the values or you can default the Build and Revision Numbers +// by using the '*' as shown below: +// [assembly: AssemblyVersion("1.0.*")] \ No newline at end of file diff --git a/MediaBrowser.Server.Implementations/Updates/InstallationManager.cs b/Emby.Server.Implementations/Updates/InstallationManager.cs similarity index 97% rename from MediaBrowser.Server.Implementations/Updates/InstallationManager.cs rename to Emby.Server.Implementations/Updates/InstallationManager.cs index c6930e4872..943977a288 100644 --- a/MediaBrowser.Server.Implementations/Updates/InstallationManager.cs +++ b/Emby.Server.Implementations/Updates/InstallationManager.cs @@ -3,7 +3,6 @@ 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; @@ -14,13 +13,14 @@ using MediaBrowser.Common.Plugins; using MediaBrowser.Common.Progress; using MediaBrowser.Common.Security; using MediaBrowser.Common.Updates; +using MediaBrowser.Model.Cryptography; 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 +namespace Emby.Server.Implementations.Updates { /// /// Manages all install, uninstall and update operations (both plugins and system) @@ -115,7 +115,9 @@ namespace MediaBrowser.Server.Implementations.Updates /// 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) + private readonly ICryptographyProvider _cryptographyProvider; + + public InstallationManager(ILogger logger, IApplicationHost appHost, IApplicationPaths appPaths, IHttpClient httpClient, IJsonSerializer jsonSerializer, ISecurityManager securityManager, IConfigurationManager config, IFileSystem fileSystem, ICryptographyProvider cryptographyProvider) { if (logger == null) { @@ -132,6 +134,7 @@ namespace MediaBrowser.Server.Implementations.Updates _securityManager = securityManager; _config = config; _fileSystem = fileSystem; + _cryptographyProvider = cryptographyProvider; _logger = logger; } @@ -597,13 +600,12 @@ namespace MediaBrowser.Server.Implementations.Updates 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)) + using (var stream = _fileSystem.OpenRead(tempFile)) { - var check = Guid.Parse(BitConverter.ToString(crypto.ComputeHash(stream)).Replace("-", String.Empty)); + var check = Guid.Parse(BitConverter.ToString(_cryptographyProvider.GetMD5Bytes(stream)).Replace("-", String.Empty)); if (check != packageChecksum) { - throw new ApplicationException(string.Format("Download validation failed for {0}. Probably corrupted during transfer.", package.name)); + throw new Exception(string.Format("Download validation failed for {0}. Probably corrupted during transfer.", package.name)); } } } diff --git a/MediaBrowser.Server.Implementations/MediaBrowser.Server.Implementations.csproj b/MediaBrowser.Server.Implementations/MediaBrowser.Server.Implementations.csproj index 15c2368e12..a2975c8600 100644 --- a/MediaBrowser.Server.Implementations/MediaBrowser.Server.Implementations.csproj +++ b/MediaBrowser.Server.Implementations/MediaBrowser.Server.Implementations.csproj @@ -112,12 +112,6 @@ - - - - - - @@ -175,7 +169,6 @@ - @@ -273,6 +266,7 @@ + @@ -293,11 +287,8 @@ - - - diff --git a/MediaBrowser.Server.Startup.Common/ApplicationHost.cs b/MediaBrowser.Server.Startup.Common/ApplicationHost.cs index 2e86b6c3e6..9484bca7d1 100644 --- a/MediaBrowser.Server.Startup.Common/ApplicationHost.cs +++ b/MediaBrowser.Server.Startup.Common/ApplicationHost.cs @@ -50,7 +50,6 @@ using MediaBrowser.Providers.Manager; using MediaBrowser.Providers.Subtitles; using MediaBrowser.Server.Implementations; using MediaBrowser.Server.Implementations.Activity; -using MediaBrowser.Server.Implementations.Channels; using MediaBrowser.Server.Implementations.Collections; using MediaBrowser.Server.Implementations.Configuration; using MediaBrowser.Server.Implementations.Connect; @@ -108,6 +107,8 @@ using Emby.Dlna.ContentDirectory; using Emby.Dlna.Main; using Emby.Dlna.MediaReceiverRegistrar; using Emby.Dlna.Ssdp; +using Emby.Server.Implementations.Channels; +using Emby.Server.Implementations.Updates; using MediaBrowser.Model.Activity; using MediaBrowser.Model.Dlna; using MediaBrowser.Model.Globalization; @@ -123,7 +124,6 @@ using MediaBrowser.Server.Implementations.Archiving; using MediaBrowser.Server.Implementations.Reflection; using MediaBrowser.Server.Implementations.Serialization; using MediaBrowser.Server.Implementations.TextEncoding; -using MediaBrowser.Server.Implementations.Updates; using MediaBrowser.Server.Implementations.Xml; using OpenSubtitlesHandler; using ServiceStack; @@ -530,7 +530,7 @@ namespace MediaBrowser.Server.Startup.Common SecurityManager = new PluginSecurityManager(this, HttpClient, JsonSerializer, ApplicationPaths, LogManager, FileSystemManager); RegisterSingleInstance(SecurityManager); - InstallationManager = new InstallationManager(LogManager.GetLogger("InstallationManager"), this, ApplicationPaths, HttpClient, JsonSerializer, SecurityManager, ConfigurationManager, FileSystemManager); + InstallationManager = new InstallationManager(LogManager.GetLogger("InstallationManager"), this, ApplicationPaths, HttpClient, JsonSerializer, SecurityManager, ConfigurationManager, FileSystemManager, CryptographyProvider); RegisterSingleInstance(InstallationManager); ZipClient = new ZipClient(FileSystemManager); @@ -626,7 +626,7 @@ namespace MediaBrowser.Server.Startup.Common DeviceManager = new DeviceManager(new DeviceRepository(ApplicationPaths, JsonSerializer, LogManager.GetLogger("DeviceManager"), FileSystemManager), UserManager, FileSystemManager, LibraryMonitor, ServerConfigurationManager, LogManager.GetLogger("DeviceManager"), NetworkManager); RegisterSingleInstance(DeviceManager); - var newsService = new Implementations.News.NewsService(ApplicationPaths, JsonSerializer); + var newsService = new Emby.Server.Implementations.News.NewsService(ApplicationPaths, JsonSerializer); RegisterSingleInstance(newsService); var fileOrganizationService = new FileOrganizationService(TaskManager, FileOrganizationRepository, LogManager.GetLogger("FileOrganizationService"), LibraryMonitor, LibraryManager, ServerConfigurationManager, FileSystemManager, ProviderManager); @@ -1160,9 +1160,12 @@ namespace MediaBrowser.Server.Startup.Common // Common implementations list.Add(typeof(TaskManager).Assembly); - // Server implementations + // MediaBrowser.Server implementations list.Add(typeof(ServerApplicationPaths).Assembly); + // Emby.Server implementations + list.Add(typeof(InstallationManager).Assembly); + // MediaEncoding list.Add(typeof(MediaEncoder).Assembly); diff --git a/MediaBrowser.Server.Startup.Common/MediaBrowser.Server.Startup.Common.csproj b/MediaBrowser.Server.Startup.Common/MediaBrowser.Server.Startup.Common.csproj index 32d5d5f8e4..2a5653725a 100644 --- a/MediaBrowser.Server.Startup.Common/MediaBrowser.Server.Startup.Common.csproj +++ b/MediaBrowser.Server.Startup.Common/MediaBrowser.Server.Startup.Common.csproj @@ -102,6 +102,10 @@ {89ab4548-770d-41fd-a891-8daff44f452c} Emby.Photos + + {d08b8079-08b3-48f2-83c4-e9ccce48aff1} + Emby.Server.Implementations + {4fd51ac5-2c16-4308-a993-c3a84f3b4582} MediaBrowser.Api diff --git a/MediaBrowser.sln b/MediaBrowser.sln index bf226a6999..cec9d68c86 100644 --- a/MediaBrowser.sln +++ b/MediaBrowser.sln @@ -75,6 +75,8 @@ Project("{8BB2217D-0F2D-49D1-97BC-3654ED321F3B}") = "Emby.Dlna", "Emby.Dlna\Emby EndProject Project("{8BB2217D-0F2D-49D1-97BC-3654ED321F3B}") = "RSSDP", "RSSDP\RSSDP.xproj", "{C227ADB7-E256-4E70-A8B9-22B9E0CF4F55}" EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Emby.Server.Implementations", "Emby.Server.Implementations\Emby.Server.Implementations.csproj", "{D08B8079-08B3-48F2-83C4-E9CCCE48AFF1}" +EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Any CPU = Debug|Any CPU @@ -659,6 +661,36 @@ Global {C227ADB7-E256-4E70-A8B9-22B9E0CF4F55}.Release|x64.Build.0 = Release|Any CPU {C227ADB7-E256-4E70-A8B9-22B9E0CF4F55}.Release|x86.ActiveCfg = Release|Any CPU {C227ADB7-E256-4E70-A8B9-22B9E0CF4F55}.Release|x86.Build.0 = Release|Any CPU + {D08B8079-08B3-48F2-83C4-E9CCCE48AFF1}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {D08B8079-08B3-48F2-83C4-E9CCCE48AFF1}.Debug|Any CPU.Build.0 = Debug|Any CPU + {D08B8079-08B3-48F2-83C4-E9CCCE48AFF1}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU + {D08B8079-08B3-48F2-83C4-E9CCCE48AFF1}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU + {D08B8079-08B3-48F2-83C4-E9CCCE48AFF1}.Debug|Win32.ActiveCfg = Debug|Any CPU + {D08B8079-08B3-48F2-83C4-E9CCCE48AFF1}.Debug|Win32.Build.0 = Debug|Any CPU + {D08B8079-08B3-48F2-83C4-E9CCCE48AFF1}.Debug|x64.ActiveCfg = Debug|Any CPU + {D08B8079-08B3-48F2-83C4-E9CCCE48AFF1}.Debug|x64.Build.0 = Debug|Any CPU + {D08B8079-08B3-48F2-83C4-E9CCCE48AFF1}.Debug|x86.ActiveCfg = Debug|Any CPU + {D08B8079-08B3-48F2-83C4-E9CCCE48AFF1}.Debug|x86.Build.0 = Debug|Any CPU + {D08B8079-08B3-48F2-83C4-E9CCCE48AFF1}.Release Mono|Any CPU.ActiveCfg = Release|Any CPU + {D08B8079-08B3-48F2-83C4-E9CCCE48AFF1}.Release Mono|Any CPU.Build.0 = Release|Any CPU + {D08B8079-08B3-48F2-83C4-E9CCCE48AFF1}.Release Mono|Mixed Platforms.ActiveCfg = Release|Any CPU + {D08B8079-08B3-48F2-83C4-E9CCCE48AFF1}.Release Mono|Mixed Platforms.Build.0 = Release|Any CPU + {D08B8079-08B3-48F2-83C4-E9CCCE48AFF1}.Release Mono|Win32.ActiveCfg = Release|Any CPU + {D08B8079-08B3-48F2-83C4-E9CCCE48AFF1}.Release Mono|Win32.Build.0 = Release|Any CPU + {D08B8079-08B3-48F2-83C4-E9CCCE48AFF1}.Release Mono|x64.ActiveCfg = Release|Any CPU + {D08B8079-08B3-48F2-83C4-E9CCCE48AFF1}.Release Mono|x64.Build.0 = Release|Any CPU + {D08B8079-08B3-48F2-83C4-E9CCCE48AFF1}.Release Mono|x86.ActiveCfg = Release|Any CPU + {D08B8079-08B3-48F2-83C4-E9CCCE48AFF1}.Release Mono|x86.Build.0 = Release|Any CPU + {D08B8079-08B3-48F2-83C4-E9CCCE48AFF1}.Release|Any CPU.ActiveCfg = Release|Any CPU + {D08B8079-08B3-48F2-83C4-E9CCCE48AFF1}.Release|Any CPU.Build.0 = Release|Any CPU + {D08B8079-08B3-48F2-83C4-E9CCCE48AFF1}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU + {D08B8079-08B3-48F2-83C4-E9CCCE48AFF1}.Release|Mixed Platforms.Build.0 = Release|Any CPU + {D08B8079-08B3-48F2-83C4-E9CCCE48AFF1}.Release|Win32.ActiveCfg = Release|Any CPU + {D08B8079-08B3-48F2-83C4-E9CCCE48AFF1}.Release|Win32.Build.0 = Release|Any CPU + {D08B8079-08B3-48F2-83C4-E9CCCE48AFF1}.Release|x64.ActiveCfg = Release|Any CPU + {D08B8079-08B3-48F2-83C4-E9CCCE48AFF1}.Release|x64.Build.0 = Release|Any CPU + {D08B8079-08B3-48F2-83C4-E9CCCE48AFF1}.Release|x86.ActiveCfg = Release|Any CPU + {D08B8079-08B3-48F2-83C4-E9CCCE48AFF1}.Release|x86.Build.0 = Release|Any CPU EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE