diff --git a/.gitignore b/.gitignore index c7d4bfd32..4ed66c56c 100644 --- a/.gitignore +++ b/.gitignore @@ -134,6 +134,12 @@ bin obj output/* +# .NET Core +project.lock.json +project.fragment.lock.json +artifacts/ +**/Properties/launchSettings.json + # Packages Radarr_*/ Radarr_*.zip diff --git a/azure-pipelines.yml b/azure-pipelines.yml index 44b7a099a..5c20c2aef 100644 --- a/azure-pipelines.yml +++ b/azure-pipelines.yml @@ -69,17 +69,21 @@ stages: artifact: '$(osName)Backend' displayName: Publish Backend condition: and(succeeded(), eq(variables['osName'], 'Windows')) - - publish: '$(testsFolder)/net462/win-x64/publish' - artifact: WindowsTests - displayName: Publish Test Package + - publish: '$(testsFolder)/netcoreapp3.0/win-x64/publish' + artifact: WindowsCoreTests + displayName: Publish Windows Test Package condition: and(succeeded(), eq(variables['osName'], 'Windows')) - publish: '$(testsFolder)/net462/linux-x64/publish' artifact: LinuxTests - displayName: Publish Test Package + displayName: Publish Linux Mono Test Package condition: and(succeeded(), eq(variables['osName'], 'Windows')) - - publish: '$(testsFolder)/net462/osx-x64/publish' - artifact: MacTests - displayName: Publish Test Package + - publish: '$(testsFolder)/netcoreapp3.0/linux-x64/publish' + artifact: LinuxCoreTests + displayName: Publish Linux Test Package + condition: and(succeeded(), eq(variables['osName'], 'Windows')) + - publish: '$(testsFolder)/netcoreapp3.0/osx-x64/publish' + artifact: MacCoreTests + displayName: Publish MacOS Test Package condition: and(succeeded(), eq(variables['osName'], 'Windows')) - stage: Build_Frontend @@ -145,9 +149,9 @@ stages: - bash: ./build.sh --packages displayName: Create Packages - bash: | - setup/inno/ISCC.exe setup/radarr.iss //DFramework=net462 - cp setup/output/Radarr.*windows.net462.exe ${BUILD_ARTIFACTSTAGINGDIRECTORY}/Radarr.${BUILDNAME}.windows-installer.exe - displayName: Create .NET 462 Windows installer + setup/inno/ISCC.exe setup/radarr.iss //DFramework=netcoreapp3.0 + cp setup/output/Radarr.*windows.netcoreapp3.0.exe ${BUILD_ARTIFACTSTAGINGDIRECTORY}/Radarr.${BUILDNAME}.windows-core-x64-installer.exe + displayName: Create .NET Core Windows installer - publish: $(Build.ArtifactStagingDirectory) artifact: 'WindowsInstaller' displayName: Publish Installer @@ -183,35 +187,59 @@ stages: find . -name "Radarr.Update" -exec chmod a+x {} \; displayName: Set executable bits - task: ArchiveFiles@2 - displayName: Create Windows zip + displayName: Create Windows Core zip inputs: - archiveFile: '$(Build.ArtifactStagingDirectory)/Radarr.$(buildName).windows.zip' + archiveFile: '$(Build.ArtifactStagingDirectory)/Radarr.$(buildName).windows-core-x64.zip' archiveType: 'zip' includeRootFolder: false - rootFolderOrFile: $(artifactsFolder)/windows/net462 + rootFolderOrFile: $(artifactsFolder)/windows/netcoreapp3.0 - task: ArchiveFiles@2 - displayName: Create MacOS app + displayName: Create MacOS Core app inputs: - archiveFile: '$(Build.ArtifactStagingDirectory)/Radarr.$(buildName).osx-app.zip' + archiveFile: '$(Build.ArtifactStagingDirectory)/Radarr.$(buildName).osx-app-core-x64.zip' archiveType: 'zip' includeRootFolder: false - rootFolderOrFile: $(artifactsFolder)/macos-app/net462 + rootFolderOrFile: $(artifactsFolder)/macos-app/netcoreapp3.0 - task: ArchiveFiles@2 - displayName: Create MacOS tar + displayName: Create MacOS Core tar inputs: - archiveFile: '$(Build.ArtifactStagingDirectory)/Radarr.$(buildName).osx.tar.gz' + archiveFile: '$(Build.ArtifactStagingDirectory)/Radarr.$(buildName).osx-core-x64.tar.gz' archiveType: 'tar' tarCompression: 'gz' includeRootFolder: false - rootFolderOrFile: $(artifactsFolder)/macos/net462 + rootFolderOrFile: $(artifactsFolder)/macos/netcoreapp3.0 - task: ArchiveFiles@2 - displayName: Create Linux tar + displayName: Create Linux Mono tar inputs: archiveFile: '$(Build.ArtifactStagingDirectory)/Radarr.$(buildName).linux.tar.gz' archiveType: 'tar' tarCompression: 'gz' includeRootFolder: false rootFolderOrFile: $(artifactsFolder)/linux-x64/net462 + - task: ArchiveFiles@2 + displayName: Create Linux Core tar + inputs: + archiveFile: '$(Build.ArtifactStagingDirectory)/Radarr.$(buildName).linux-core-x64.tar.gz' + archiveType: 'tar' + tarCompression: 'gz' + includeRootFolder: false + rootFolderOrFile: $(artifactsFolder)/linux-x64/netcoreapp3.0 + - task: ArchiveFiles@2 + displayName: Create ARM32 Linux Core tar + inputs: + archiveFile: '$(Build.ArtifactStagingDirectory)/Radarr.$(buildName).linux-core-arm.tar.gz' + archiveType: 'tar' + tarCompression: 'gz' + includeRootFolder: false + rootFolderOrFile: $(artifactsFolder)/linux-arm/netcoreapp3.0 + - task: ArchiveFiles@2 + displayName: Create ARM64 Linux Core tar + inputs: + archiveFile: '$(Build.ArtifactStagingDirectory)/Radarr.$(buildName).linux-core-arm64.tar.gz' + archiveType: 'tar' + tarCompression: 'gz' + includeRootFolder: false + rootFolderOrFile: $(artifactsFolder)/linux-arm64/netcoreapp3.0 - publish: $(Build.ArtifactStagingDirectory) artifact: 'Packages' displayName: Publish Packages @@ -238,23 +266,35 @@ stages: displayName: Unit Native strategy: matrix: - Mac: + MacCore: osName: 'Mac' + testName: 'MacCore' imageName: 'macos-10.13' - Windows: + WindowsCore: osName: 'Windows' + testName: 'WindowsCore' imageName: 'windows-2019' + LinuxCore: + osName: 'Linux' + testName: 'LinuxCore' + imageName: 'ubuntu-16.04' + pattern: 'Radarr.**.linux-core-x64.tar.gz' pool: vmImage: $(imageName) steps: - checkout: none + - task: UseDotNet@2 + displayName: 'Install .net core 3.0' + inputs: + version: $(dotnetVersion) + condition: ne(variables['osName'], 'Windows') - task: DownloadPipelineArtifact@2 displayName: Download Test Artifact inputs: buildType: 'current' - artifactName: '$(osName)Tests' + artifactName: '$(testName)Tests' targetPath: $(testsFolder) - bash: | wget https://mediaarea.net/repo/deb/repo-mediaarea_1.0-9_all.deb @@ -266,6 +306,11 @@ stages: - powershell: Set-Service SCardSvr -StartupType Manual displayName: Enable Windows Test Service condition: and(succeeded(), eq(variables['osName'], 'Windows')) + - bash: | + wget https://github.com/acoustid/chromaprint/releases/download/v1.4.3/chromaprint-fpcalc-1.4.3-linux-x86_64.tar.gz + sudo tar xf chromaprint-fpcalc-1.4.3-linux-x86_64.tar.gz --strip-components=1 --directory /usr/bin + displayName: Install fpcalc + condition: and(succeeded(), eq(variables['osName'], 'Linux')) - bash: | SYMLINK=5_18_1 MONOPREFIX=/Library/Frameworks/Mono.framework/Versions/$SYMLINK @@ -289,7 +334,7 @@ stages: inputs: testResultsFormat: 'NUnit' testResultsFiles: '**/TestResult.xml' - testRunTitle: '$(osName) Unit Tests' + testRunTitle: '$(testName) Unit Tests' failTaskOnFailedTests: true - job: Unit_Docker @@ -334,6 +379,11 @@ stages: steps: - bash: mono --version displayName: Check Mono version + - task: UseDotNet@2 + displayName: 'Install .net core 3.0' + inputs: + version: $(dotnetVersion) + condition: ne(variables['osName'], 'Windows') - checkout: none - task: DownloadPipelineArtifact@2 displayName: Download Test Artifact @@ -364,14 +414,21 @@ stages: displayName: Integration Native strategy: matrix: - Mac: + MacCore: osName: 'Mac' + testName: 'MacCore' imageName: 'macos-10.13' - pattern: 'Radarr.**.osx.tar.gz' - Windows: + pattern: 'Radarr.**.osx-core-x64.tar.gz' + WindowsCore: osName: 'Windows' + testName: 'WindowsCore' imageName: 'windows-2019' - pattern: 'Radarr.**.windows.zip' + pattern: 'Radarr.**.windows-core-x64.zip' + LinuxCore: + osName: 'Linux' + testName: 'LinuxCore' + imageName: 'ubuntu-16.04' + pattern: 'Radarr.**.linux-core-x64.tar.gz' pool: vmImage: $(imageName) @@ -385,12 +442,17 @@ stages: echo "##vso[task.setvariable variable=PATH;]$MONOPREFIX/bin:$PATH" displayName: Set Mono Version condition: and(succeeded(), eq(variables['osName'], 'Mac')) + - task: UseDotNet@2 + displayName: 'Install .net core 3.0' + inputs: + version: $(dotnetVersion) + condition: ne(variables['osName'], 'Windows') - checkout: none - task: DownloadPipelineArtifact@2 displayName: Download Test Artifact inputs: buildType: 'current' - artifactName: '$(osName)Tests' + artifactName: '$(testName)Tests' targetPath: $(testsFolder) - task: DownloadPipelineArtifact@2 displayName: Download Build Artifact @@ -418,7 +480,7 @@ stages: inputs: testResultsFormat: 'NUnit' testResultsFiles: '**/TestResult.xml' - testRunTitle: '$(osName) Integration Tests' + testRunTitle: '$(testName) Integration Tests' failTaskOnFailedTests: true displayName: Publish Test Results @@ -467,12 +529,17 @@ stages: steps: - bash: mono --version displayName: Check Mono version + - task: UseDotNet@2 + displayName: 'Install .net core 3.0' + inputs: + version: $(dotnetVersion) + condition: ne(variables['osName'], 'Windows') - checkout: none - task: DownloadPipelineArtifact@2 displayName: Download Test Artifact inputs: buildType: 'current' - artifactName: 'LinuxTests' + artifactName: LinuxTests targetPath: $(testsFolder) - task: DownloadPipelineArtifact@2 displayName: Download Build Artifact @@ -516,29 +583,34 @@ stages: Linux: osName: 'Linux' imageName: 'ubuntu-16.04' - pattern: 'Radarr.**.linux.tar.gz' + pattern: 'Radarr.**.linux-core-x64.tar.gz' failBuild: true Mac: osName: 'Mac' imageName: 'macos-10.13' # Fails due to firefox not being installed on image - pattern: 'Radarr.**.osx.tar.gz' + pattern: 'Radarr.**.osx-core-x64.tar.gz' failBuild: false Windows: osName: 'Windows' imageName: 'windows-2019' - pattern: 'Radarr.**.windows.zip' + pattern: 'Radarr.**.windows-core-x64.zip' failBuild: true pool: vmImage: $(imageName) steps: + - task: UseDotNet@2 + displayName: 'Install .net core 3.0' + inputs: + version: $(dotnetVersion) + condition: ne(variables['osName'], 'Windows') - checkout: none - task: DownloadPipelineArtifact@2 displayName: Download Test Artifact inputs: buildType: 'current' - artifactName: '$(osName)Tests' + artifactName: '$(osName)CoreTests' targetPath: $(testsFolder) - task: DownloadPipelineArtifact@2 displayName: Download Build Artifact diff --git a/build.sh b/build.sh index c6d6b3496..beab028b9 100755 --- a/build.sh +++ b/build.sh @@ -5,8 +5,6 @@ outputFolder='_output' testPackageFolder='_tests' artifactsFolder="_artifacts"; -nuget='tools/nuget/nuget.exe'; - ProgressStart() { echo "Start '$1'" @@ -131,6 +129,10 @@ PackageLinux() echo "Adding Radarr.Mono to UpdatePackage" cp $folder/Radarr.Mono.* $folder/Radarr.Update + if [ "$framework" = "netcoreapp3.0" ]; then + cp $folder/Mono.Posix.NETStandard.* $folder/Radarr.Update + cp $folder/libMonoPosixHelper.* $folder/Radarr.Update + fi ProgressEnd "Creating $runtime Package for $framework" } @@ -159,6 +161,10 @@ PackageMacOS() echo "Adding Radarr.Mono to UpdatePackage" cp $folder/Radarr.Mono.* $folder/Radarr.Update + if [ "$framework" = "netcoreapp3.0" ]; then + cp $folder/Mono.Posix.NETStandard.* $folder/Radarr.Update + cp $folder/libMonoPosixHelper.* $folder/Radarr.Update + fi ProgressEnd 'Creating MacOS Package' } @@ -189,26 +195,17 @@ PackageTests() { ProgressStart 'Creating Test Package' - cp test.sh $testPackageFolder/net462/win-x64/publish cp test.sh $testPackageFolder/net462/linux-x64/publish - cp test.sh $testPackageFolder/net462/osx-x64/publish + cp test.sh $testPackageFolder/netcoreapp3.0/win-x64/publish + cp test.sh $testPackageFolder/netcoreapp3.0/linux-x64/publish + cp test.sh $testPackageFolder/netcoreapp3.0/osx-x64/publish - if [ $os = "windows" ] ; then - $nuget install NUnit.ConsoleRunner -Version 3.10.0 -Output $testPackageFolder/net462/win-x64/publish - $nuget install NUnit.ConsoleRunner -Version 3.10.0 -Output $testPackageFolder/net462/linux-x64/publish - $nuget install NUnit.ConsoleRunner -Version 3.10.0 -Output $testPackageFolder/net462/osx-x64/publish - else - mono $nuget install NUnit.ConsoleRunner -Version 3.10.0 -Output $testPackageFolder/net462/win-x64/publish - mono $nuget install NUnit.ConsoleRunner -Version 3.10.0 -Output $testPackageFolder/net462/linux-x64/publish - mono $nuget install NUnit.ConsoleRunner -Version 3.10.0 -Output $testPackageFolder/net462/osx-x64/publish - fi - rm -f $testPackageFolder/*.log.config # geckodriver.exe isn't copied by dotnet publish curl -Lo gecko.zip "https://github.com/mozilla/geckodriver/releases/download/v0.24.0/geckodriver-v0.24.0-win64.zip" unzip -o gecko.zip - cp geckodriver.exe $testPackageFolder/net462/win-x64/publish + cp geckodriver.exe $testPackageFolder/netcoreapp3.0/win-x64/publish CleanFolder $testPackageFolder @@ -227,6 +224,8 @@ PackageWindows() echo "Removing Radarr.Mono" rm -f $folder/Radarr.Mono.* + rm -f $folder/Mono.Posix.NETStandard.* + rm -f $folder/libMonoPosixHelper.* echo "Adding Radarr.Windows to UpdatePackage" cp $folder/Radarr.Windows.* $folder/Radarr.Update @@ -318,8 +317,11 @@ fi if [ "$PACKAGES" = "YES" ]; then UpdateVersionNumber - PackageWindows "net462" + PackageWindows "netcoreapp3.0" PackageLinux "net462" "linux-x64" - PackageMacOS "net462" - PackageMacOSApp "net462" + PackageLinux "netcoreapp3.0" "linux-x64" + PackageLinux "netcoreapp3.0" "linux-arm64" + PackageLinux "netcoreapp3.0" "linux-arm" + PackageMacOS "netcoreapp3.0" + PackageMacOSApp "netcoreapp3.0" fi diff --git a/frontend/src/Components/SignalRConnector.js b/frontend/src/Components/SignalRConnector.js index 2b05253e1..ee862f5c0 100644 --- a/frontend/src/Components/SignalRConnector.js +++ b/frontend/src/Components/SignalRConnector.js @@ -54,6 +54,37 @@ const mapDispatchToProps = { dispatchFetchTagDetails: fetchTagDetails }; +function Logger(minimumLogLevel) { + this.minimumLogLevel = minimumLogLevel; +} + +Logger.prototype.cleanse = function(message) { + const apikey = new RegExp(`access_token=${window.Radarr.apiKey}`, 'g'); + return message.replace(apikey, 'access_token=(removed)'); +}; + +Logger.prototype.log = function(logLevel, message) { + // see https://github.com/aspnet/AspNetCore/blob/21c9e2cc954c10719878839cd3f766aca5f57b34/src/SignalR/clients/ts/signalr/src/Utils.ts#L147 + if (logLevel >= this.minimumLogLevel) { + switch (logLevel) { + case signalR.LogLevel.Critical: + case signalR.LogLevel.Error: + console.error(`[signalR] ${signalR.LogLevel[logLevel]}: ${this.cleanse(message)}`); + break; + case signalR.LogLevel.Warning: + console.warn(`[signalR] ${signalR.LogLevel[logLevel]}: ${this.cleanse(message)}`); + break; + case signalR.LogLevel.Information: + console.info(`[signalR] ${signalR.LogLevel[logLevel]}: ${this.cleanse(message)}`); + break; + default: + // console.debug only goes to attached debuggers in Node, so we use console.log for Trace and Debug + console.log(`[signalR] ${signalR.LogLevel[logLevel]}: ${this.cleanse(message)}`); + break; + } + } +}; + class SignalRConnector extends Component { // @@ -71,6 +102,7 @@ class SignalRConnector extends Component { const url = `${window.Radarr.urlBase}/signalr/messages`; this.connection = new signalR.HubConnectionBuilder() + .configureLogging(new Logger(signalR.LogLevel.Information)) .withUrl(`${url}?access_token=${window.Radarr.apiKey}`) .withAutomaticReconnect({ nextRetryDelayInMilliseconds: (retryContext) => { diff --git a/frontend/src/Settings/General/GeneralSettings.js b/frontend/src/Settings/General/GeneralSettings.js index c6fc895e1..e286c2806 100644 --- a/frontend/src/Settings/General/GeneralSettings.js +++ b/frontend/src/Settings/General/GeneralSettings.js @@ -97,7 +97,6 @@ class GeneralSettings extends Component { settings, hasSettings, isResettingApiKey, - isMono, isWindows, isWindowsService, mode, @@ -162,7 +161,7 @@ class GeneralSettings extends Component { @@ -203,7 +202,6 @@ GeneralSettings.propTypes = { settings: PropTypes.object.isRequired, isResettingApiKey: PropTypes.bool.isRequired, hasSettings: PropTypes.bool.isRequired, - isMono: PropTypes.bool.isRequired, isWindows: PropTypes.bool.isRequired, isWindowsService: PropTypes.bool.isRequired, mode: PropTypes.string.isRequired, diff --git a/frontend/src/Settings/General/GeneralSettingsConnector.js b/frontend/src/Settings/General/GeneralSettingsConnector.js index bd27c26e3..66d80439f 100644 --- a/frontend/src/Settings/General/GeneralSettingsConnector.js +++ b/frontend/src/Settings/General/GeneralSettingsConnector.js @@ -24,7 +24,6 @@ function createMapStateToProps() { return { advancedSettings, isResettingApiKey, - isMono: systemStatus.isMono, isWindows: systemStatus.isWindows, isWindowsService: systemStatus.isWindows && systemStatus.mode === 'service', mode: systemStatus.mode, diff --git a/frontend/src/Settings/General/HostSettings.js b/frontend/src/Settings/General/HostSettings.js index ac435cd1a..8f2e95e81 100644 --- a/frontend/src/Settings/General/HostSettings.js +++ b/frontend/src/Settings/General/HostSettings.js @@ -88,7 +88,7 @@ function HostSettings(props) { { - enableSsl.value && + enableSsl.value ? - + : + null } { - enableSsl.value && + enableSsl.value ? - + : + null } { - enableSsl.value && + enableSsl.value ? - + : + null } { diff --git a/frontend/src/Settings/General/UpdateSettings.js b/frontend/src/Settings/General/UpdateSettings.js index 4a7b02d85..ea5af62f2 100644 --- a/frontend/src/Settings/General/UpdateSettings.js +++ b/frontend/src/Settings/General/UpdateSettings.js @@ -10,7 +10,7 @@ function UpdateSettings(props) { const { advancedSettings, settings, - isMono, + isWindows, onInputChange } = props; @@ -49,7 +49,7 @@ function UpdateSettings(props) { { - isMono && + !isWindows &&
{ - isMono && + !isWindows && { - advancedSettings && isMono && + advancedSettings && !isWindows &&
@@ -424,7 +424,7 @@ MediaManagement.propTypes = { error: PropTypes.object, settings: PropTypes.object.isRequired, hasSettings: PropTypes.bool.isRequired, - isMono: PropTypes.bool.isRequired, + isWindows: PropTypes.bool.isRequired, onSavePress: PropTypes.func.isRequired, onInputChange: PropTypes.func.isRequired }; diff --git a/frontend/src/Settings/MediaManagement/MediaManagementConnector.js b/frontend/src/Settings/MediaManagement/MediaManagementConnector.js index 6412b6cd2..797cfef10 100644 --- a/frontend/src/Settings/MediaManagement/MediaManagementConnector.js +++ b/frontend/src/Settings/MediaManagement/MediaManagementConnector.js @@ -22,7 +22,7 @@ function createMapStateToProps() { advancedSettings, ...sectionSettings, hasPendingChanges: !_.isEmpty(namingSettings.pendingChanges) || sectionSettings.hasPendingChanges, - isMono: systemStatus.isMono + isWindows: systemStatus.isWindows }; } ); diff --git a/frontend/src/System/Status/About/About.js b/frontend/src/System/Status/About/About.js index 12ec88157..7751068a9 100644 --- a/frontend/src/System/Status/About/About.js +++ b/frontend/src/System/Status/About/About.js @@ -15,7 +15,8 @@ class About extends Component { render() { const { version, - isMonoRuntime, + isNetCore, + isMono, isDocker, runtimeVersion, migrationVersion, @@ -36,18 +37,26 @@ class About extends Component { /> { - isMonoRuntime && + isMono && } + { + isNetCore && + + } + { isDocker && } @@ -90,7 +99,8 @@ class About extends Component { About.propTypes = { version: PropTypes.string.isRequired, - isMonoRuntime: PropTypes.bool.isRequired, + isNetCore: PropTypes.bool.isRequired, + isMono: PropTypes.bool.isRequired, runtimeVersion: PropTypes.string.isRequired, isDocker: PropTypes.bool.isRequired, migrationVersion: PropTypes.number.isRequired, diff --git a/src/Directory.Build.props b/src/Directory.Build.props index b87c98531..77cb20426 100644 --- a/src/Directory.Build.props +++ b/src/Directory.Build.props @@ -5,7 +5,8 @@ AnyCPU true - win-x64;osx-x64;linux-x64 + win-x64;osx-x64;linux-x64;linux-arm;linux-arm64 + win-x64:net462;osx-x64:net462;linux-arm:net462;linux-arm64:net462 $(MSBuildThisFileDirectory)..\ diff --git a/src/Libraries/Mono.Posix.dll b/src/Libraries/Mono.Posix.dll deleted file mode 100644 index 8e219445f..000000000 Binary files a/src/Libraries/Mono.Posix.dll and /dev/null differ diff --git a/src/Marr.Data/DataMapper.cs b/src/Marr.Data/DataMapper.cs index c632471cf..a68d050e3 100644 --- a/src/Marr.Data/DataMapper.cs +++ b/src/Marr.Data/DataMapper.cs @@ -38,15 +38,6 @@ namespace Marr.Data private DbCommand _command; - /// - /// Initializes a DataMapper for the given provider type and connection string. - /// - /// Ex: - /// The database connection string. - public DataMapper(string providerName, string connectionString) - : this(DbProviderFactories.GetFactory(providerName), connectionString) - { } - /// /// A database provider agnostic initialization. /// diff --git a/src/Marr.Data/Marr.Data.csproj b/src/Marr.Data/Marr.Data.csproj index e53a074e3..0a009748b 100644 --- a/src/Marr.Data/Marr.Data.csproj +++ b/src/Marr.Data/Marr.Data.csproj @@ -1,6 +1,6 @@  - net462 + netstandard2.0 3.17.0.0 false diff --git a/src/Marr.Data/Parameters/OleDbTypeBuilder.cs b/src/Marr.Data/Parameters/OleDbTypeBuilder.cs deleted file mode 100644 index d8af140a4..000000000 --- a/src/Marr.Data/Parameters/OleDbTypeBuilder.cs +++ /dev/null @@ -1,68 +0,0 @@ -/* Copyright (C) 2008 - 2011 Jordan Marr - -This library is free software; you can redistribute it and/or -modify it under the terms of the GNU Lesser General Public -License as published by the Free Software Foundation; either -version 3 of the License, or (at your option) any later version. - -This library is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -Lesser General Public License for more details. - -You should have received a copy of the GNU Lesser General Public -License along with this library. If not, see . */ - -using System; -using System.Data; -using System.Data.OleDb; - -namespace Marr.Data.Parameters -{ - public class OleDbTypeBuilder : IDbTypeBuilder - { - public Enum GetDbType(Type type) - { - if (type == typeof(String)) - return OleDbType.VarChar; - - if (type == typeof(Int32)) - return OleDbType.Integer; - - if (type == typeof(Decimal)) - return OleDbType.Decimal; - - if (type == typeof(DateTime)) - return OleDbType.DBTimeStamp; - - if (type == typeof(Boolean)) - return OleDbType.Boolean; - - if (type == typeof(Int16)) - return OleDbType.SmallInt; - - if (type == typeof(Int64)) - return OleDbType.BigInt; - - if (type == typeof(Double)) - return OleDbType.Double; - - if (type == typeof(Byte)) - return OleDbType.Binary; - - if (type == typeof(Byte[])) - return OleDbType.VarBinary; - - if (type == typeof(Guid)) - return OleDbType.Guid; - - return OleDbType.Variant; - } - - public void SetDbType(IDbDataParameter param, Enum dbType) - { - var oleDbParam = (OleDbParameter)param; - oleDbParam.OleDbType = (OleDbType)dbType; - } - } -} diff --git a/src/Marr.Data/Parameters/SqlDbTypeBuilder.cs b/src/Marr.Data/Parameters/SqlDbTypeBuilder.cs deleted file mode 100644 index 39d2fdaae..000000000 --- a/src/Marr.Data/Parameters/SqlDbTypeBuilder.cs +++ /dev/null @@ -1,71 +0,0 @@ -/* Copyright (C) 2008 - 2011 Jordan Marr - -This library is free software; you can redistribute it and/or -modify it under the terms of the GNU Lesser General Public -License as published by the Free Software Foundation; either -version 3 of the License, or (at your option) any later version. - -This library is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -Lesser General Public License for more details. - -You should have received a copy of the GNU Lesser General Public -License along with this library. If not, see . */ - -using System; -using System.Data; -using System.Data.SqlClient; - -namespace Marr.Data.Parameters -{ - public class SqlDbTypeBuilder : IDbTypeBuilder - { - public Enum GetDbType(Type type) - { - if (type == typeof(String)) - return SqlDbType.VarChar; - - if (type == typeof(Int32)) - return SqlDbType.Int; - - if (type == typeof(Decimal)) - return SqlDbType.Decimal; - - if (type == typeof(DateTime)) - return SqlDbType.DateTime; - - if (type == typeof(Boolean)) - return SqlDbType.Bit; - - if (type == typeof(Int16)) - return SqlDbType.SmallInt; - - if (type == typeof(Int64)) - return SqlDbType.BigInt; - - if (type == typeof(Double)) - return SqlDbType.Float; - - if (type == typeof(Char)) - return SqlDbType.Char; - - if (type == typeof(Byte)) - return SqlDbType.Binary; - - if (type == typeof(Byte[])) - return SqlDbType.VarBinary; - - if (type == typeof(Guid)) - return SqlDbType.UniqueIdentifier; - - return SqlDbType.Variant; - } - - public void SetDbType(IDbDataParameter param, Enum dbType) - { - var sqlDbParam = (SqlParameter)param; - sqlDbParam.SqlDbType = (SqlDbType)dbType; - } - } -} diff --git a/src/MonoTorrent/MonoTorrent.csproj b/src/MonoTorrent/MonoTorrent.csproj index 9c94af15f..02cd23b81 100644 --- a/src/MonoTorrent/MonoTorrent.csproj +++ b/src/MonoTorrent/MonoTorrent.csproj @@ -1,6 +1,6 @@  - net462 + netstandard2.0 9.0.21022 diff --git a/src/NzbDrone.Api.Test/Radarr.Api.Test.csproj b/src/NzbDrone.Api.Test/Radarr.Api.Test.csproj index 1b80ddd61..fffc08a0e 100644 --- a/src/NzbDrone.Api.Test/Radarr.Api.Test.csproj +++ b/src/NzbDrone.Api.Test/Radarr.Api.Test.csproj @@ -1,8 +1,12 @@  - net462 + net462;netcoreapp3.0 + + + + @@ -10,4 +14,4 @@ - \ No newline at end of file + diff --git a/src/NzbDrone.Api/Radarr.Api.csproj b/src/NzbDrone.Api/Radarr.Api.csproj index 09fa5acad..edd2f7140 100644 --- a/src/NzbDrone.Api/Radarr.Api.csproj +++ b/src/NzbDrone.Api/Radarr.Api.csproj @@ -1,6 +1,6 @@  - net462 + net462;netcoreapp3.0 diff --git a/src/NzbDrone.Api/System/SystemModule.cs b/src/NzbDrone.Api/System/SystemModule.cs index 452f20171..37d3bfe25 100644 --- a/src/NzbDrone.Api/System/SystemModule.cs +++ b/src/NzbDrone.Api/System/SystemModule.cs @@ -57,7 +57,7 @@ namespace NzbDrone.Api.System AppData = _appFolderInfo.GetAppDataPath(), OsName = _osInfo.Name, OsVersion = _osInfo.Version, - IsMonoRuntime = PlatformInfo.IsMono, + IsNetCore = PlatformInfo.IsNetCore, IsMono = PlatformInfo.IsMono, IsLinux = OsInfo.IsLinux, IsOsx = OsInfo.IsOsx, diff --git a/src/NzbDrone.Automation.Test/Radarr.Automation.Test.csproj b/src/NzbDrone.Automation.Test/Radarr.Automation.Test.csproj index fb6924b6f..110f60fd1 100644 --- a/src/NzbDrone.Automation.Test/Radarr.Automation.Test.csproj +++ b/src/NzbDrone.Automation.Test/Radarr.Automation.Test.csproj @@ -1,8 +1,12 @@  - net462 + net462;netcoreapp3.0 + + + + diff --git a/src/NzbDrone.Common.Test/Http/HttpClientFixture.cs b/src/NzbDrone.Common.Test/Http/HttpClientFixture.cs index fef4ec4b6..16c15a6f6 100644 --- a/src/NzbDrone.Common.Test/Http/HttpClientFixture.cs +++ b/src/NzbDrone.Common.Test/Http/HttpClientFixture.cs @@ -158,7 +158,7 @@ namespace NzbDrone.Common.Test.Http var response = Subject.Get(request); response.Resource.Headers["Accept-Encoding"].ToString().Should().Be(compression); - response.Headers.ContentLength.Should().BeLessOrEqualTo(response.Content.Length); + response.Resource.Gzipped.Should().BeTrue(); } [TestCase(HttpStatusCode.Unauthorized)] @@ -711,6 +711,7 @@ namespace NzbDrone.Common.Test.Http public string Origin { get; set; } public string Url { get; set; } public string Data { get; set; } + public bool Gzipped { get; set; } } public class HttpCookieResource diff --git a/src/NzbDrone.Common.Test/PathExtensionFixture.cs b/src/NzbDrone.Common.Test/PathExtensionFixture.cs index 028d64001..9b3efc264 100644 --- a/src/NzbDrone.Common.Test/PathExtensionFixture.cs +++ b/src/NzbDrone.Common.Test/PathExtensionFixture.cs @@ -223,7 +223,7 @@ namespace NzbDrone.Common.Test public void get_actual_casing_should_return_actual_casing_for_local_dir_in_windows() { WindowsOnly(); - var path = Directory.GetCurrentDirectory().Replace("c:\\","C:\\").Replace("system32", "System32"); + var path = Directory.GetCurrentDirectory().Replace("c:\\","C:\\").Replace("d:\\","D:\\").Replace("system32", "System32"); path.ToUpper().GetActualCasing().Should().Be(path); path.ToLower().GetActualCasing().Should().Be(path); @@ -280,7 +280,7 @@ namespace NzbDrone.Common.Test [Test] public void GetUpdateClientExePath() { - GetIAppDirectoryInfo().GetUpdateClientExePath().Should().BeEquivalentTo(@"C:\Temp\radarr_update\Radarr.Update.exe".AsOsAgnostic()); + GetIAppDirectoryInfo().GetUpdateClientExePath(PlatformType.DotNet).Should().BeEquivalentTo(@"C:\Temp\radarr_update\Radarr.Update.exe".AsOsAgnostic()); } [Test] diff --git a/src/NzbDrone.Common.Test/ProcessProviderTests.cs b/src/NzbDrone.Common.Test/ProcessProviderTests.cs index 913271134..40270c198 100644 --- a/src/NzbDrone.Common.Test/ProcessProviderTests.cs +++ b/src/NzbDrone.Common.Test/ProcessProviderTests.cs @@ -6,6 +6,7 @@ using System.Linq; using System.Threading; using FluentAssertions; using NUnit.Framework; +using NzbDrone.Common.EnvironmentInfo; using NzbDrone.Common.Model; using NzbDrone.Common.Processes; using NzbDrone.Test.Common; @@ -162,7 +163,17 @@ namespace NzbDrone.Common.Test { var processStarted = new ManualResetEventSlim(); - var path = Path.Combine(TestContext.CurrentContext.TestDirectory, DummyApp.DUMMY_PROCCESS_NAME + ".exe"); + string suffix; + if (OsInfo.IsWindows || PlatformInfo.IsMono) + { + suffix = ".exe"; + } + else + { + suffix = ""; + } + + var path = Path.Combine(TestContext.CurrentContext.TestDirectory, DummyApp.DUMMY_PROCCESS_NAME + suffix); var process = Subject.Start(path, onOutputDataReceived: (string data) => { if (data.StartsWith("Dummy process. ID:")) { diff --git a/src/NzbDrone.Common.Test/Radarr.Common.Test.csproj b/src/NzbDrone.Common.Test/Radarr.Common.Test.csproj index b0ce217b9..948bc26c5 100644 --- a/src/NzbDrone.Common.Test/Radarr.Common.Test.csproj +++ b/src/NzbDrone.Common.Test/Radarr.Common.Test.csproj @@ -1,13 +1,19 @@ - net462 + net462;netcoreapp3.0 + + + + + + - + - \ No newline at end of file + diff --git a/src/NzbDrone.Common.Test/ServiceProviderTests.cs b/src/NzbDrone.Common.Test/ServiceProviderTests.cs index 893cdf567..9b5bb7d63 100644 --- a/src/NzbDrone.Common.Test/ServiceProviderTests.cs +++ b/src/NzbDrone.Common.Test/ServiceProviderTests.cs @@ -4,13 +4,13 @@ using System.ServiceProcess; using FluentAssertions; using NUnit.Framework; using NzbDrone.Common.EnvironmentInfo; +using NzbDrone.Common.Processes; using NzbDrone.Test.Common; using NzbDrone.Test.Common.Categories; namespace NzbDrone.Common.Test { [TestFixture] - [Timeout(15000)] public class ServiceProviderTests : TestBase { private const string ALWAYS_INSTALLED_SERVICE = "SCardSvr"; //Smart Card @@ -20,6 +20,9 @@ namespace NzbDrone.Common.Test public void Setup() { WindowsOnly(); + + Mocker.SetConstant(Mocker.Resolve()); + CleanupService(); } @@ -143,4 +146,4 @@ namespace NzbDrone.Common.Test return principal.IsInRole(WindowsBuiltInRole.Administrator); } } -} \ No newline at end of file +} diff --git a/src/NzbDrone.Common/Composition/ContainerBuilderBase.cs b/src/NzbDrone.Common/Composition/ContainerBuilderBase.cs index 36cdce55a..c31fb9880 100644 --- a/src/NzbDrone.Common/Composition/ContainerBuilderBase.cs +++ b/src/NzbDrone.Common/Composition/ContainerBuilderBase.cs @@ -6,6 +6,12 @@ using NzbDrone.Common.EnvironmentInfo; using NzbDrone.Common.Messaging; using TinyIoC; +#if NETCOREAPP3_0 +using System.IO; +using System.Runtime.Loader; +using System.Runtime.InteropServices; +#endif + namespace NzbDrone.Common.Composition { public abstract class ContainerBuilderBase @@ -21,15 +27,82 @@ namespace NzbDrone.Common.Composition assemblies.Add(OsInfo.IsWindows ? "Radarr.Windows" : "Radarr.Mono"); assemblies.Add("Radarr.Common"); +#if !NETCOREAPP3_0 foreach (var assembly in assemblies) { _loadedTypes.AddRange(Assembly.Load(assembly).GetTypes()); } +#else + var _startupPath = AppDomain.CurrentDomain.BaseDirectory; + + foreach (var assemblyName in assemblies) + { + _loadedTypes.AddRange(AssemblyLoadContext.Default.LoadFromAssemblyPath(Path.Combine(_startupPath, $"{assemblyName}.dll")).GetTypes()); + } + + AppDomain.CurrentDomain.AssemblyResolve += new ResolveEventHandler(ContainerResolveEventHandler); + RegisterNativeResolver(new [] {"System.Data.SQLite.dll", "Radarr.Core.dll"}); +#endif Container = new Container(new TinyIoCContainer(), _loadedTypes); AutoRegisterInterfaces(); Container.Register(args); - } + } + +#if NETCOREAPP3_0 + private static Assembly ContainerResolveEventHandler(object sender, ResolveEventArgs args) + { + var _resolver = new AssemblyDependencyResolver(args.RequestingAssembly.Location); + var assemblyPath = _resolver.ResolveAssemblyToPath(new AssemblyName(args.Name)); + + if (assemblyPath == null) + { + return null; + } + + return AssemblyLoadContext.Default.LoadFromAssemblyPath(assemblyPath); + } + + public static void RegisterNativeResolver(IEnumerable assemblyNames) + { + // This ensures we look for sqlite3 using libsqlite3.so.0 on Linux and not libsqlite3.so which + // is less likely to exist. + foreach (var name in assemblyNames) + { + var assembly = AssemblyLoadContext.Default.LoadFromAssemblyPath( + Path.Combine(AppDomain.CurrentDomain.BaseDirectory, name) + ); + + try + { + NativeLibrary.SetDllImportResolver(assembly, LoadNativeLib); + } + catch (InvalidOperationException) + { + // This can only be set once per assembly + // Catch required for NzbDrone.Host tests + } + } + } + + private static IntPtr LoadNativeLib(string libraryName, Assembly assembly, DllImportSearchPath? dllImportSearchPath) + { + var mappedName = libraryName; + if (OsInfo.IsLinux) + { + if (libraryName == "sqlite3") + { + mappedName = "libsqlite3.so.0"; + } + else if (libraryName == "mediainfo") + { + mappedName = "libmediainfo.so.0"; + } + } + + return NativeLibrary.Load(mappedName, assembly, dllImportSearchPath); + } +#endif private void AutoRegisterInterfaces() { diff --git a/src/NzbDrone.Common/EnvironmentInfo/AppFolderFactory.cs b/src/NzbDrone.Common/EnvironmentInfo/AppFolderFactory.cs index 326d7caff..e29f3c220 100644 --- a/src/NzbDrone.Common/EnvironmentInfo/AppFolderFactory.cs +++ b/src/NzbDrone.Common/EnvironmentInfo/AppFolderFactory.cs @@ -119,21 +119,26 @@ namespace NzbDrone.Common.EnvironmentInfo try { - var configHome = Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData); - if (configHome == "/.config" || + // It seems that DoNotVerify is the mono behaviour even though .net docs specify a blank string + // should be returned if the data doesn't exist. For compatibility with .net core, explicitly + // set DoNotVerify (which makes sense given we're explicitly checking that the folder exists) + var configHome = Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData, Environment.SpecialFolderOption.DoNotVerify); + if (configHome.IsNullOrWhiteSpace() || + configHome == "/.config" || configHome.EndsWith("/.config") && !_diskProvider.FolderExists(configHome.GetParentPath()) || !_diskProvider.FolderExists(configHome)) { - // Tell mono to use appData/.config as ApplicationData folder. + // Tell mono/netcore to use appData/.config as ApplicationData folder. Environment.SetEnvironmentVariable("XDG_CONFIG_HOME", Path.Combine(_appFolderInfo.AppDataFolder, ".config")); } - var dataHome = Environment.GetFolderPath(Environment.SpecialFolder.LocalApplicationData); - if (dataHome == "/.local/share" || + var dataHome = Environment.GetFolderPath(Environment.SpecialFolder.LocalApplicationData, Environment.SpecialFolderOption.DoNotVerify); + if (dataHome.IsNullOrWhiteSpace() || + dataHome == "/.local/share" || dataHome.EndsWith("/.local/share") && !_diskProvider.FolderExists(dataHome.GetParentPath().GetParentPath()) || !_diskProvider.FolderExists(dataHome)) { - // Tell mono to use appData/.config/share as LocalApplicationData folder. + // Tell mono/netcore to use appData/.config/share as LocalApplicationData folder. Environment.SetEnvironmentVariable("XDG_DATA_HOME", Path.Combine(_appFolderInfo.AppDataFolder, ".config/share")); } } diff --git a/src/NzbDrone.Common/EnvironmentInfo/AppFolderInfo.cs b/src/NzbDrone.Common/EnvironmentInfo/AppFolderInfo.cs index b7575753f..f03aaf59d 100644 --- a/src/NzbDrone.Common/EnvironmentInfo/AppFolderInfo.cs +++ b/src/NzbDrone.Common/EnvironmentInfo/AppFolderInfo.cs @@ -33,7 +33,7 @@ namespace NzbDrone.Common.EnvironmentInfo } else { - AppDataFolder = Path.Combine(Environment.GetFolderPath(DATA_SPECIAL_FOLDER, Environment.SpecialFolderOption.None), "Radarr"); + AppDataFolder = Path.Combine(Environment.GetFolderPath(DATA_SPECIAL_FOLDER, Environment.SpecialFolderOption.DoNotVerify), "Radarr"); } StartUpFolder = new FileInfo(Assembly.GetExecutingAssembly().Location).Directory.FullName; @@ -46,4 +46,4 @@ namespace NzbDrone.Common.EnvironmentInfo public string TempFolder { get; private set; } } -} \ No newline at end of file +} diff --git a/src/NzbDrone.Common/EnvironmentInfo/PlatformInfo.cs b/src/NzbDrone.Common/EnvironmentInfo/PlatformInfo.cs index c8469ef09..85fdb2f8a 100644 --- a/src/NzbDrone.Common/EnvironmentInfo/PlatformInfo.cs +++ b/src/NzbDrone.Common/EnvironmentInfo/PlatformInfo.cs @@ -9,7 +9,8 @@ namespace NzbDrone.Common.EnvironmentInfo public enum PlatformType { DotNet = 0, - Mono = 1 + Mono = 1, + NetCore = 2 } public interface IPlatformInfo @@ -26,6 +27,10 @@ namespace NzbDrone.Common.EnvironmentInfo static PlatformInfo() { +#if NETCOREAPP3_0 + _platform = PlatformType.NetCore; + _version = new Version("3.0"); +#else if (Type.GetType("Mono.Runtime") != null) { _platform = PlatformType.Mono; @@ -36,11 +41,13 @@ namespace NzbDrone.Common.EnvironmentInfo _platform = PlatformType.DotNet; _version = GetDotNetVersion(); } +#endif } public static PlatformType Platform => _platform; public static bool IsMono => Platform == PlatformType.Mono; public static bool IsDotNet => Platform == PlatformType.DotNet; + public static bool IsNetCore => Platform == PlatformType.NetCore; public static string PlatformName { @@ -50,8 +57,14 @@ namespace NzbDrone.Common.EnvironmentInfo { return ".NET"; } - - return "Mono"; + else if (IsMono) + { + return "Mono"; + } + else + { + return ".NET Core"; + } } } diff --git a/src/NzbDrone.Common/EnvironmentInfo/RuntimeInfo.cs b/src/NzbDrone.Common/EnvironmentInfo/RuntimeInfo.cs index 615406a05..a4ecbaa03 100644 --- a/src/NzbDrone.Common/EnvironmentInfo/RuntimeInfo.cs +++ b/src/NzbDrone.Common/EnvironmentInfo/RuntimeInfo.cs @@ -7,6 +7,10 @@ using System.ServiceProcess; using NLog; using NzbDrone.Common.Processes; +#if NETCOREAPP3_0 +using Microsoft.Extensions.Hosting.WindowsServices; +#endif + namespace NzbDrone.Common.EnvironmentInfo { public class RuntimeInfo : IRuntimeInfo @@ -55,7 +59,12 @@ namespace NzbDrone.Common.EnvironmentInfo } } +#if !NETCOREAPP3_0 public static bool IsUserInteractive => Environment.UserInteractive; +#else + // Note that Environment.UserInteractive is always true on net core: https://stackoverflow.com/a/57325783 + public static bool IsUserInteractive => OsInfo.IsWindows && !WindowsServiceHelpers.IsWindowsService(); +#endif bool IRuntimeInfo.IsUserInteractive => IsUserInteractive; @@ -63,6 +72,11 @@ namespace NzbDrone.Common.EnvironmentInfo { get { + if (OsInfo.IsNotWindows) + { + return false; + } + try { var principal = new WindowsPrincipal(WindowsIdentity.GetCurrent()); diff --git a/src/NzbDrone.Common/Extensions/IEnumerableExtensions.cs b/src/NzbDrone.Common/Extensions/IEnumerableExtensions.cs index 38b28542b..b06b6d736 100644 --- a/src/NzbDrone.Common/Extensions/IEnumerableExtensions.cs +++ b/src/NzbDrone.Common/Extensions/IEnumerableExtensions.cs @@ -137,5 +137,15 @@ namespace NzbDrone.Common.Extensions { return list.Contains(source); } + + public static string ConcatToString(this IEnumerable source, string separator = ", ") + { + return string.Join(separator, source.Select(x => x.ToString())); + } + + public static string ConcatToString(this IEnumerable source, Func predicate, string separator = ", ") + { + return string.Join(separator, source.Select(predicate)); + } } } diff --git a/src/NzbDrone.Common/Extensions/PathExtensions.cs b/src/NzbDrone.Common/Extensions/PathExtensions.cs index bc7636cab..9f8c7cf77 100644 --- a/src/NzbDrone.Common/Extensions/PathExtensions.cs +++ b/src/NzbDrone.Common/Extensions/PathExtensions.cs @@ -15,7 +15,7 @@ namespace NzbDrone.Common.Extensions private const string DB_RESTORE = "radarr.restore"; private const string LOG_DB = "logs.db"; private const string NLOG_CONFIG_FILE = "nlog.config"; - private const string UPDATE_CLIENT_EXE = "Radarr.Update.exe"; + private const string UPDATE_CLIENT_EXE_NAME = "Radarr.Update"; private static readonly string UPDATE_SANDBOX_FOLDER_NAME = "radarr_update" + Path.DirectorySeparatorChar; private static readonly string UPDATE_PACKAGE_FOLDER_NAME = "Radarr" + Path.DirectorySeparatorChar; @@ -221,6 +221,21 @@ namespace NzbDrone.Common.Extensions return null; } + public static string ProcessNameToExe(this string processName, PlatformType runtime) + { + if (OsInfo.IsWindows || runtime != PlatformType.NetCore) + { + processName += ".exe"; + } + + return processName; + } + + public static string ProcessNameToExe(this string processName) + { + return processName.ProcessNameToExe(PlatformInfo.Platform); + } + public static string GetAppDataPath(this IAppFolderInfo appFolderInfo) { return appFolderInfo.AppDataFolder; @@ -281,9 +296,9 @@ namespace NzbDrone.Common.Extensions return Path.Combine(GetUpdatePackageFolder(appFolderInfo), UPDATE_CLIENT_FOLDER_NAME); } - public static string GetUpdateClientExePath(this IAppFolderInfo appFolderInfo) + public static string GetUpdateClientExePath(this IAppFolderInfo appFolderInfo, PlatformType runtime) { - return Path.Combine(GetUpdateSandboxFolder(appFolderInfo), UPDATE_CLIENT_EXE); + return Path.Combine(GetUpdateSandboxFolder(appFolderInfo), UPDATE_CLIENT_EXE_NAME).ProcessNameToExe(runtime); } public static string GetDatabase(this IAppFolderInfo appFolderInfo) diff --git a/src/NzbDrone.Common/Http/HttpAccept.cs b/src/NzbDrone.Common/Http/HttpAccept.cs index 40e77b340..686057fcb 100644 --- a/src/NzbDrone.Common/Http/HttpAccept.cs +++ b/src/NzbDrone.Common/Http/HttpAccept.cs @@ -4,7 +4,11 @@ { public static readonly HttpAccept Rss = new HttpAccept("application/rss+xml, text/rss+xml, application/xml, text/xml"); public static readonly HttpAccept Json = new HttpAccept("application/json"); +#if NETCOREAPP3_0 + public static readonly HttpAccept JsonCharset = new HttpAccept("application/json; charset=utf-8"); +#else public static readonly HttpAccept JsonCharset = new HttpAccept("application/json;charset=utf-8"); +#endif public static readonly HttpAccept Html = new HttpAccept("text/html"); public string Value { get; private set; } diff --git a/src/NzbDrone.Common/Radarr.Common.csproj b/src/NzbDrone.Common/Radarr.Common.csproj index ec0d5697f..6582f3827 100644 --- a/src/NzbDrone.Common/Radarr.Common.csproj +++ b/src/NzbDrone.Common/Radarr.Common.csproj @@ -1,6 +1,6 @@  - net462 + net462;netcoreapp3.0 @@ -11,8 +11,15 @@ - - + + + + + + + + + diff --git a/src/NzbDrone.Common/ServiceProvider.cs b/src/NzbDrone.Common/ServiceProvider.cs index 0c0989a73..75d3b415c 100644 --- a/src/NzbDrone.Common/ServiceProvider.cs +++ b/src/NzbDrone.Common/ServiceProvider.cs @@ -1,6 +1,4 @@ -using System; -using System.Collections.Specialized; -using System.Configuration.Install; +using System; using System.Diagnostics; using System.Linq; using System.ServiceProcess; @@ -62,30 +60,36 @@ namespace NzbDrone.Common public virtual void Install(string serviceName) { - _logger.Info("Installing service '{0}'", serviceName); + _logger.Info("Installing service '{0}'", serviceName); - var installer = new ServiceProcessInstaller - { - Account = ServiceAccount.LocalSystem - }; + var args = $"create {serviceName} " + + $"DisplayName= \"{serviceName}\" " + + $"binpath= \"{Process.GetCurrentProcess().MainModule.FileName}\" " + + "start= auto " + + "depend= EventLog/Tcpip/http " + + "obj= \"NT AUTHORITY\\LocalService\""; - var serviceInstaller = new ServiceInstaller(); + _logger.Info(args); + var installOutput = _processProvider.StartAndCapture("sc.exe", args); - string[] cmdline = { @"/assemblypath=" + Process.GetCurrentProcess().MainModule.FileName }; + if (installOutput.ExitCode != 0) + { + _logger.Error($"Failed to install service: {installOutput.Lines.Select(x => x.Content).ConcatToString("\n")}"); + throw new ApplicationException("Failed to install service"); + } - var context = new InstallContext("service_install.log", cmdline); - serviceInstaller.Context = context; - serviceInstaller.DisplayName = serviceName; - serviceInstaller.ServiceName = serviceName; - serviceInstaller.Description = "Radarr Application Server"; - serviceInstaller.StartType = ServiceStartMode.Automatic; - serviceInstaller.ServicesDependedOn = new[] { "EventLog", "Tcpip", "http" }; + _logger.Info(installOutput.Lines.Select(x => x.Content).ConcatToString("\n")); - serviceInstaller.Parent = installer; + var descOutput = _processProvider.StartAndCapture("sc.exe", $"description {serviceName} \"Radarr Application Server\""); + if (descOutput.ExitCode != 0) + { + _logger.Error($"Failed to install service: {descOutput.Lines.Select(x => x.Content).ConcatToString("\n")}"); + throw new ApplicationException("Failed to install service"); + } - serviceInstaller.Install(new ListDictionary()); + _logger.Info(descOutput.Lines.Select(x => x.Content).ConcatToString("\n")); _logger.Info("Service Has installed successfully."); } @@ -96,12 +100,8 @@ namespace NzbDrone.Common Stop(serviceName); - var serviceInstaller = new ServiceInstaller(); - - var context = new InstallContext("service_uninstall.log", null); - serviceInstaller.Context = context; - serviceInstaller.ServiceName = serviceName; - serviceInstaller.Uninstall(null); + var output = _processProvider.StartAndCapture("sc.exe", $"delete {serviceName}"); + _logger.Info(output.Lines.Select(x => x.Content).ConcatToString("\n")); _logger.Info("{0} successfully uninstalled", serviceName); } @@ -228,4 +228,4 @@ namespace NzbDrone.Common _processProvider.Start("sc.exe", $"sdset {serviceName} {dacls}").WaitForExit(); } } -} \ No newline at end of file +} diff --git a/src/NzbDrone.Console/Radarr.Console.csproj b/src/NzbDrone.Console/Radarr.Console.csproj index 9bda8b501..f63ae2cb4 100644 --- a/src/NzbDrone.Console/Radarr.Console.csproj +++ b/src/NzbDrone.Console/Radarr.Console.csproj @@ -1,7 +1,7 @@ Exe - net462 + net462;netcoreapp3.0 ..\NzbDrone.Host\Radarr.ico app.manifest diff --git a/src/NzbDrone.Core.Test/Download/DownloadServiceFixture.cs b/src/NzbDrone.Core.Test/Download/DownloadServiceFixture.cs index 30a4b0f32..89ff93750 100644 --- a/src/NzbDrone.Core.Test/Download/DownloadServiceFixture.cs +++ b/src/NzbDrone.Core.Test/Download/DownloadServiceFixture.cs @@ -156,7 +156,7 @@ namespace NzbDrone.Core.Test.Download Mocker.GetMock() .Verify(v => v.RecordFailure(It.IsAny(), - It.IsInRange(TimeSpan.FromMinutes(4.9), TimeSpan.FromMinutes(5.1), Range.Inclusive)), Times.Once()); + It.IsInRange(TimeSpan.FromMinutes(4.9), TimeSpan.FromMinutes(5.1), Moq.Range.Inclusive)), Times.Once()); } [Test] diff --git a/src/NzbDrone.Core.Test/HealthCheck/Checks/DotnetVersionCheckFixture.cs b/src/NzbDrone.Core.Test/HealthCheck/Checks/DotnetVersionCheckFixture.cs deleted file mode 100644 index fefe82c57..000000000 --- a/src/NzbDrone.Core.Test/HealthCheck/Checks/DotnetVersionCheckFixture.cs +++ /dev/null @@ -1,57 +0,0 @@ -using System; -using NUnit.Framework; -using NzbDrone.Common.EnvironmentInfo; -using NzbDrone.Core.HealthCheck.Checks; -using NzbDrone.Core.Test.Framework; - -namespace NzbDrone.Core.Test.HealthCheck.Checks -{ - [TestFixture] - public class DotnetVersionCheckFixture : CoreTest - { - private void GivenOutput(string version) - { - WindowsOnly(); - - Mocker.GetMock() - .SetupGet(s => s.Version) - .Returns(new Version(version)); - } - - [TestCase("4.7.2")] - [TestCase("4.8")] - public void should_return_ok(string version) - { - GivenOutput(version); - - Subject.Check().ShouldBeOk(); - } - - [TestCase("4.6.2")] - [TestCase("4.7")] - [TestCase("4.7.1")] - public void should_return_notice(string version) - { - GivenOutput(version); - - Subject.Check().ShouldBeNotice(); - } - - public void should_return_warning(string version) - { - GivenOutput(version); - - Subject.Check().ShouldBeWarning(); - } - - [TestCase("4.5")] - [TestCase("4.5.2")] - [TestCase("4.6.1")] - public void should_return_error(string version) - { - GivenOutput(version); - - Subject.Check().ShouldBeError(); - } - } -} \ No newline at end of file diff --git a/src/NzbDrone.Core.Test/Housekeeping/Housekeepers/FixFutureRunScheduledTasksFixture.cs b/src/NzbDrone.Core.Test/Housekeeping/Housekeepers/FixFutureRunScheduledTasksFixture.cs index 06ede19e7..8b12b6d1a 100644 --- a/src/NzbDrone.Core.Test/Housekeeping/Housekeepers/FixFutureRunScheduledTasksFixture.cs +++ b/src/NzbDrone.Core.Test/Housekeeping/Housekeepers/FixFutureRunScheduledTasksFixture.cs @@ -1,7 +1,7 @@ using System; +using System.Linq; using FizzWare.NBuilder; using FluentAssertions; -using Microsoft.Practices.ObjectBuilder2; using NUnit.Framework; using NzbDrone.Core.Housekeeping.Housekeepers; using NzbDrone.Core.Jobs; @@ -24,7 +24,7 @@ namespace NzbDrone.Core.Test.Housekeeping.Housekeepers Subject.Clean(); - AllStoredModels.ForEach(t => t.LastExecution.Should().NotBeAfter(DateTime.UtcNow)); + AllStoredModels.ToList().ForEach(t => t.LastExecution.Should().NotBeAfter(DateTime.UtcNow)); } [Test] @@ -41,7 +41,7 @@ namespace NzbDrone.Core.Test.Housekeeping.Housekeepers Subject.Clean(); - AllStoredModels.ForEach(t => t.LastExecution.Should().Be(expectedTime)); + AllStoredModels.ToList().ForEach(t => t.LastExecution.Should().Be(expectedTime)); } } -} \ No newline at end of file +} diff --git a/src/NzbDrone.Core.Test/MediaFiles/UpdateMovieFileQualityServiceFixture.cs b/src/NzbDrone.Core.Test/MediaFiles/UpdateMovieFileQualityServiceFixture.cs index 10e027fd8..8749d7a5e 100644 --- a/src/NzbDrone.Core.Test/MediaFiles/UpdateMovieFileQualityServiceFixture.cs +++ b/src/NzbDrone.Core.Test/MediaFiles/UpdateMovieFileQualityServiceFixture.cs @@ -81,9 +81,13 @@ namespace NzbDrone.Core.Test.MediaFiles var imported = Builder.CreateNew() .With(h => h.EventType = HistoryEventType.DownloadFolderImported) .With(h => h.SourceTitle = "My Movie 2018.mkv").Build(); + Mocker.GetMock().Setup(s => s.GetByMovieId(It.IsAny(), null)) .Returns(new List {imported}); + Mocker.GetMock().Setup(s => s.ParseMovieInfo("My Movie 2018.mkv", It.IsAny>())) + .Returns(_newInfo); + ExecuteCommand(); Mocker.GetMock().Verify(s => s.ParseMovieInfo("My Movie 2018.mkv", It.IsAny>())); diff --git a/src/NzbDrone.Core.Test/Radarr.Core.Test.csproj b/src/NzbDrone.Core.Test/Radarr.Core.Test.csproj index 05cc41141..48ca1043a 100644 --- a/src/NzbDrone.Core.Test/Radarr.Core.Test.csproj +++ b/src/NzbDrone.Core.Test/Radarr.Core.Test.csproj @@ -1,8 +1,12 @@  - net462 + net462;netcoreapp3.0 + + + + @@ -10,6 +14,9 @@ + + + Files\1024.png @@ -19,24 +26,10 @@ PreserveNewest - - - - - - - - - - - - - - - - + + - - + + diff --git a/src/NzbDrone.Core.Test/UpdateTests/UpdatePackageProviderFixture.cs b/src/NzbDrone.Core.Test/UpdateTests/UpdatePackageProviderFixture.cs index cfe4bf9df..8eed7f51f 100644 --- a/src/NzbDrone.Core.Test/UpdateTests/UpdatePackageProviderFixture.cs +++ b/src/NzbDrone.Core.Test/UpdateTests/UpdatePackageProviderFixture.cs @@ -25,6 +25,7 @@ namespace NzbDrone.Core.Test.UpdateTests } [Test] + [Platform(Exclude="NetCore")] public void finds_update_when_version_lower() { UseRealHttp(); diff --git a/src/NzbDrone.Core/Blacklisting/BlacklistService.cs b/src/NzbDrone.Core/Blacklisting/BlacklistService.cs index a94f94fdb..e92b7f878 100644 --- a/src/NzbDrone.Core/Blacklisting/BlacklistService.cs +++ b/src/NzbDrone.Core/Blacklisting/BlacklistService.cs @@ -8,8 +8,6 @@ using NzbDrone.Core.Messaging.Commands; using NzbDrone.Core.Messaging.Events; using NzbDrone.Core.Parser.Model; using NzbDrone.Core.Movies.Events; -using System.Collections.Generic; -using NzbDrone.Core.Languages; namespace NzbDrone.Core.Blacklisting { diff --git a/src/NzbDrone.Core/CustomFormats/FormatTagMatchResult.cs b/src/NzbDrone.Core/CustomFormats/FormatTagMatchResult.cs index f17a476aa..d31fbd7bd 100644 --- a/src/NzbDrone.Core/CustomFormats/FormatTagMatchResult.cs +++ b/src/NzbDrone.Core/CustomFormats/FormatTagMatchResult.cs @@ -1,6 +1,5 @@ using System.Collections.Generic; using System.Linq; -using System.Runtime.Remoting.Messaging; namespace NzbDrone.Core.CustomFormats { diff --git a/src/NzbDrone.Core/Datastore/BasicRepository.cs b/src/NzbDrone.Core/Datastore/BasicRepository.cs index e698795d2..344ec01da 100644 --- a/src/NzbDrone.Core/Datastore/BasicRepository.cs +++ b/src/NzbDrone.Core/Datastore/BasicRepository.cs @@ -3,10 +3,8 @@ using System.Collections.Generic; using System.Data; using System.Linq; using System.Linq.Expressions; -using System.Web.Hosting; using Marr.Data; using Marr.Data.QGen; -using NLog; using NzbDrone.Common.Extensions; using NzbDrone.Core.Datastore.Events; using NzbDrone.Core.Datastore.Extensions; diff --git a/src/NzbDrone.Core/Datastore/Migration/085_expand_transmission_urlbase.cs b/src/NzbDrone.Core/Datastore/Migration/085_expand_transmission_urlbase.cs index 956f87bcd..92fc9ec2f 100644 --- a/src/NzbDrone.Core/Datastore/Migration/085_expand_transmission_urlbase.cs +++ b/src/NzbDrone.Core/Datastore/Migration/085_expand_transmission_urlbase.cs @@ -1,12 +1,14 @@ using System.Collections.Generic; using System.Data; using FluentMigrator; -using NzbDrone.Common.Extensions; using NzbDrone.Common.Serializer; using NzbDrone.Core.Datastore.Migration.Framework; namespace NzbDrone.Core.Datastore.Migration { + // this is here to resolve ambiguity in GetValueOrDefault extension method in net core 3 + using NzbDrone.Common.Extensions; + [Migration(85)] public class expand_transmission_urlbase : NzbDroneMigrationBase { diff --git a/src/NzbDrone.Core/Datastore/Migration/086_pushbullet_device_ids.cs b/src/NzbDrone.Core/Datastore/Migration/086_pushbullet_device_ids.cs index 432a13ff3..1e7cced76 100644 --- a/src/NzbDrone.Core/Datastore/Migration/086_pushbullet_device_ids.cs +++ b/src/NzbDrone.Core/Datastore/Migration/086_pushbullet_device_ids.cs @@ -2,12 +2,14 @@ using System.Data; using FluentMigrator; using Newtonsoft.Json.Linq; -using NzbDrone.Common.Extensions; using NzbDrone.Common.Serializer; using NzbDrone.Core.Datastore.Migration.Framework; namespace NzbDrone.Core.Datastore.Migration { + // this is here to resolve ambiguity in GetValueOrDefault extension method in net core 3 + using NzbDrone.Common.Extensions; + [Migration(86)] public class pushbullet_device_ids : NzbDroneMigrationBase { diff --git a/src/NzbDrone.Core/Datastore/Migration/088_pushbullet_devices_channels_list.cs b/src/NzbDrone.Core/Datastore/Migration/088_pushbullet_devices_channels_list.cs index b219dfd59..e4760fe79 100644 --- a/src/NzbDrone.Core/Datastore/Migration/088_pushbullet_devices_channels_list.cs +++ b/src/NzbDrone.Core/Datastore/Migration/088_pushbullet_devices_channels_list.cs @@ -2,12 +2,14 @@ using System.Collections.Generic; using System.Data; using FluentMigrator; -using NzbDrone.Common.Extensions; using NzbDrone.Common.Serializer; using NzbDrone.Core.Datastore.Migration.Framework; namespace NzbDrone.Core.Datastore.Migration { + // this is here to resolve ambiguity in GetValueOrDefault extension method in net core 3 + using NzbDrone.Common.Extensions; + [Migration(88)] public class pushbullet_devices_channels_list : NzbDroneMigrationBase { diff --git a/src/NzbDrone.Core/Datastore/Migration/154_add_language_to_file_history_blacklist.cs b/src/NzbDrone.Core/Datastore/Migration/154_add_language_to_file_history_blacklist.cs index 84b96f0b0..4013e3d19 100644 --- a/src/NzbDrone.Core/Datastore/Migration/154_add_language_to_file_history_blacklist.cs +++ b/src/NzbDrone.Core/Datastore/Migration/154_add_language_to_file_history_blacklist.cs @@ -5,11 +5,13 @@ using NzbDrone.Core.Datastore.Converters; using NzbDrone.Core.Languages; using System; using System.Collections.Generic; -using NzbDrone.Common.Extensions; using System.Linq; namespace NzbDrone.Core.Datastore.Migration { + // this is here to resolve ambiguity in GetValueOrDefault extension method in net core 3 + using NzbDrone.Common.Extensions; + [Migration(154)] public class add_language_to_files_history_blacklist : NzbDroneMigrationBase { diff --git a/src/NzbDrone.Core/Download/Clients/Deluge/Deluge.cs b/src/NzbDrone.Core/Download/Clients/Deluge/Deluge.cs index 28715fc12..96b9d2bdb 100644 --- a/src/NzbDrone.Core/Download/Clients/Deluge/Deluge.cs +++ b/src/NzbDrone.Core/Download/Clients/Deluge/Deluge.cs @@ -3,7 +3,6 @@ using System.Linq; using System.Collections.Generic; using NzbDrone.Common.Disk; using NzbDrone.Common.Http; -using NzbDrone.Common.Extensions; using NzbDrone.Core.MediaFiles.TorrentInfo; using NzbDrone.Core.Parser.Model; using NzbDrone.Core.Configuration; @@ -16,6 +15,9 @@ using NzbDrone.Core.Organizer; namespace NzbDrone.Core.Download.Clients.Deluge { + // this is here to resolve ambiguity in GetValueOrDefault extension method in net core 3 + using NzbDrone.Common.Extensions; + public class Deluge : TorrentClientBase { private readonly IDelugeProxy _proxy; diff --git a/src/NzbDrone.Core/Download/Clients/Nzbget/Nzbget.cs b/src/NzbDrone.Core/Download/Clients/Nzbget/Nzbget.cs index ad9a496aa..c7429f814 100644 --- a/src/NzbDrone.Core/Download/Clients/Nzbget/Nzbget.cs +++ b/src/NzbDrone.Core/Download/Clients/Nzbget/Nzbget.cs @@ -6,7 +6,6 @@ using System.Linq; using FluentValidation.Results; using NLog; using NzbDrone.Common.Disk; -using NzbDrone.Common.Extensions; using NzbDrone.Common.Http; using NzbDrone.Core.Configuration; using NzbDrone.Core.Exceptions; @@ -17,6 +16,9 @@ using NzbDrone.Core.Organizer; namespace NzbDrone.Core.Download.Clients.Nzbget { + // this is here to resolve ambiguity in GetValueOrDefault extension method in net core 3 + using NzbDrone.Common.Extensions; + public class Nzbget : UsenetClientBase { private readonly INzbgetProxy _proxy; diff --git a/src/NzbDrone.Core/MetadataSource/PreDB/PreDBService.cs b/src/NzbDrone.Core/MetadataSource/PreDB/PreDBService.cs index cb3e9cd14..1ba3fe5b7 100644 --- a/src/NzbDrone.Core/MetadataSource/PreDB/PreDBService.cs +++ b/src/NzbDrone.Core/MetadataSource/PreDB/PreDBService.cs @@ -1,5 +1,4 @@ -using System.Linq; -using System.Collections.Generic; +using System.Collections.Generic; using NLog; using NzbDrone.Common.Instrumentation.Extensions; using NzbDrone.Common.Extensions; @@ -16,7 +15,6 @@ using NzbDrone.Core.Movies; using System; using System.IO; using NzbDrone.Core.Parser; -using NzbDrone.Core.IndexerSearch; using NzbDrone.Core.IndexerSearch.Definitions; namespace NzbDrone.Core.MetadataSource.PreDB diff --git a/src/NzbDrone.Core/Parser/Parser.cs b/src/NzbDrone.Core/Parser/Parser.cs index 3c3d32c6e..9012831f4 100644 --- a/src/NzbDrone.Core/Parser/Parser.cs +++ b/src/NzbDrone.Core/Parser/Parser.cs @@ -368,8 +368,7 @@ namespace NzbDrone.Core.Parser value = value.ToLowerInvariant(); //Remove all accents - var bytes = Encoding.GetEncoding("ISO-8859-8").GetBytes(value); - value = Encoding.ASCII.GetString(bytes); + value = value.RemoveAccent(); //Replace spaces value = Regex.Replace(value, @"\s", "-", RegexOptions.Compiled); diff --git a/src/NzbDrone.Core/Radarr.Core.csproj b/src/NzbDrone.Core/Radarr.Core.csproj index 0e6bc7a94..96a453bed 100644 --- a/src/NzbDrone.Core/Radarr.Core.csproj +++ b/src/NzbDrone.Core/Radarr.Core.csproj @@ -1,9 +1,10 @@  - net462 + net462;netcoreapp3.0 + @@ -20,33 +21,22 @@ - + + + + Resources\Logo\64.png - - - - - - - - - - - - - - - - + + - - + + - + diff --git a/src/NzbDrone.Core/Update/InstallUpdateService.cs b/src/NzbDrone.Core/Update/InstallUpdateService.cs index 65ea1daeb..356295587 100644 --- a/src/NzbDrone.Core/Update/InstallUpdateService.cs +++ b/src/NzbDrone.Core/Update/InstallUpdateService.cs @@ -137,10 +137,16 @@ namespace NzbDrone.Core.Update _logger.Info("Preparing client"); _diskTransferService.TransferFolder(_appFolderInfo.GetUpdateClientFolder(), updateSandboxFolder, TransferMode.Move, false); - _logger.Info("Starting update client {0}", _appFolderInfo.GetUpdateClientExePath()); + // Set executable flag on update app + if (OsInfo.IsOsx || (OsInfo.IsLinux && PlatformInfo.IsNetCore)) + { + _diskProvider.SetPermissions(_appFolderInfo.GetUpdateClientExePath(updatePackage.Runtime), "0755", null, null); + } + + _logger.Info("Starting update client {0}", _appFolderInfo.GetUpdateClientExePath(updatePackage.Runtime)); _logger.ProgressInfo("Radarr will restart shortly."); - _processProvider.Start(_appFolderInfo.GetUpdateClientExePath(), GetUpdaterArgs(updateSandboxFolder)); + _processProvider.Start(_appFolderInfo.GetUpdateClientExePath(updatePackage.Runtime), GetUpdaterArgs(updateSandboxFolder)); } private void EnsureValidBranch(UpdatePackage package) diff --git a/src/NzbDrone.Core/Update/UpdatePackage.cs b/src/NzbDrone.Core/Update/UpdatePackage.cs index 1583280cb..016398d0f 100644 --- a/src/NzbDrone.Core/Update/UpdatePackage.cs +++ b/src/NzbDrone.Core/Update/UpdatePackage.cs @@ -1,5 +1,5 @@ using System; - +using NzbDrone.Common.EnvironmentInfo; namespace NzbDrone.Core.Update { @@ -12,5 +12,6 @@ namespace NzbDrone.Core.Update public UpdateChanges Changes { get; set; } public string Hash { get; set; } public string Branch { get; set; } + public PlatformType Runtime { get; set; } } } diff --git a/src/NzbDrone.Core/Update/UpdatePackageProvider.cs b/src/NzbDrone.Core/Update/UpdatePackageProvider.cs index 340b2056c..e4d7ff22b 100644 --- a/src/NzbDrone.Core/Update/UpdatePackageProvider.cs +++ b/src/NzbDrone.Core/Update/UpdatePackageProvider.cs @@ -1,5 +1,6 @@ using System; using System.Collections.Generic; +using System.Runtime.InteropServices; using NzbDrone.Common.Cloud; using NzbDrone.Common.EnvironmentInfo; using NzbDrone.Common.Http; @@ -34,6 +35,8 @@ namespace NzbDrone.Core.Update .Resource("/update/{branch}") .AddQueryParam("version", currentVersion) .AddQueryParam("os", OsInfo.Os.ToString().ToLowerInvariant()) + .AddQueryParam("arch", RuntimeInformation.OSArchitecture) + .AddQueryParam("runtime", PlatformInfo.Platform.ToString().ToLowerInvariant()) .AddQueryParam("runtimeVer", _platformInfo.Version) .SetSegment("branch", branch); @@ -70,4 +73,4 @@ namespace NzbDrone.Core.Update return updates.Resource; } } -} \ No newline at end of file +} diff --git a/src/NzbDrone.Host.Test/Radarr.Host.Test.csproj b/src/NzbDrone.Host.Test/Radarr.Host.Test.csproj index cad91ff99..1de7aa10b 100644 --- a/src/NzbDrone.Host.Test/Radarr.Host.Test.csproj +++ b/src/NzbDrone.Host.Test/Radarr.Host.Test.csproj @@ -1,12 +1,18 @@ - net462 + net462;netcoreapp3.0 + + + + + + - + - \ No newline at end of file + diff --git a/src/NzbDrone.Host/Radarr.Host.csproj b/src/NzbDrone.Host/Radarr.Host.csproj index 056732f1c..754446827 100644 --- a/src/NzbDrone.Host/Radarr.Host.csproj +++ b/src/NzbDrone.Host/Radarr.Host.csproj @@ -1,20 +1,26 @@ - + - net462 + net462;netcoreapp3.0 + Library - - + + + + + + + + + - - @@ -23,6 +29,8 @@ ..\Libraries\Interop.NetFwTypeLib.dll True + + diff --git a/src/NzbDrone.Host/WebHost/Middleware/SignalRMiddleware.cs b/src/NzbDrone.Host/WebHost/Middleware/SignalRMiddleware.cs index 82d039a03..df038c204 100644 --- a/src/NzbDrone.Host/WebHost/Middleware/SignalRMiddleware.cs +++ b/src/NzbDrone.Host/WebHost/Middleware/SignalRMiddleware.cs @@ -15,6 +15,7 @@ namespace Radarr.Host.Middleware private readonly IContainer _container; private readonly Logger _logger; private static string API_KEY; + private static string URL_BASE; public int Order => 1; public SignalRMiddleware(IContainer container, @@ -24,6 +25,7 @@ namespace Radarr.Host.Middleware _container = container; _logger = logger; API_KEY = configFileProvider.ApiKey; + URL_BASE = configFileProvider.UrlBase; } public void Attach(IApplicationBuilder appBuilder) @@ -55,11 +57,17 @@ namespace Radarr.Host.Middleware } }); - appBuilder.UseSignalR(routes => +#if NETCOREAPP3_0 + appBuilder.UseEndpoints(x => { - routes.MapHub("/signalr/messages"); + x.MapHub(URL_BASE + "/signalr/messages"); }); - +#else + appBuilder.UseSignalR(x => + { + x.MapHub("/signalr/messages"); + }); +#endif // This is a side effect of haing multiple IoC containers, TinyIoC and whatever // Kestrel/SignalR is using. Ideally we'd have one IoC container, but that's non-trivial with TinyIoC // TODO: Use a single IoC container if supported for TinyIoC or if we switch to another system (ie Autofac). diff --git a/src/NzbDrone.Host/WebHost/WebHostController.cs b/src/NzbDrone.Host/WebHost/WebHostController.cs index 4cdce61ff..d3e64223d 100644 --- a/src/NzbDrone.Host/WebHost/WebHostController.cs +++ b/src/NzbDrone.Host/WebHost/WebHostController.cs @@ -92,15 +92,23 @@ namespace Radarr.Host { services .AddSignalR() - .AddJsonProtocol(options => +#if !NETCOREAPP3_0 + .AddJsonProtocol( +#else + .AddNewtonsoftJsonProtocol( +#endif + options => { options.PayloadSerializerSettings = Json.GetSerializerSettings(); }); }) .Configure(app => { - app.UsePathBase(_configFileProvider.UrlBase); +#if NETCOREAPP3_0 + app.UseRouting(); +#endif app.Properties["host.AppName"] = BuildInfo.AppName; + app.UsePathBase(_configFileProvider.UrlBase); foreach (var middleWare in _middlewares.OrderBy(c => c.Order)) { diff --git a/src/NzbDrone.Integration.Test/ApiTests/FileSystemFixture.cs b/src/NzbDrone.Integration.Test/ApiTests/FileSystemFixture.cs index 4d4c49821..ec572dc79 100644 --- a/src/NzbDrone.Integration.Test/ApiTests/FileSystemFixture.cs +++ b/src/NzbDrone.Integration.Test/ApiTests/FileSystemFixture.cs @@ -8,6 +8,7 @@ using NzbDrone.Common.Disk; using System.Reflection; using System.IO; using System.Collections.Generic; +using NzbDrone.Common; namespace NzbDrone.Integration.Test.ApiTests { @@ -61,7 +62,7 @@ namespace NzbDrone.Integration.Test.ApiTests result.Directories.Should().NotBeNullOrEmpty(); result.Files.Should().NotBeNullOrEmpty(); - result.Files.Should().Contain(v => v.Path == _file && v.Type == FileSystemEntityType.File); + result.Files.Should().Contain(v => PathEqualityComparer.Instance.Equals(v.Path, _file) && v.Type == FileSystemEntityType.File); } [Test] diff --git a/src/NzbDrone.Integration.Test/Client/ClientBase.cs b/src/NzbDrone.Integration.Test/Client/ClientBase.cs index 3811ae1c8..861f36ff8 100644 --- a/src/NzbDrone.Integration.Test/Client/ClientBase.cs +++ b/src/NzbDrone.Integration.Test/Client/ClientBase.cs @@ -69,7 +69,9 @@ namespace NzbDrone.Integration.Test.Client private static void AssertDisableCache(IList headers) { - headers.Single(c => c.Name == "Cache-Control").Value.Should().Be("no-cache, no-store, must-revalidate, max-age=0"); + // cache control header gets reordered on net core + ((string)headers.Single(c => c.Name == "Cache-Control").Value).Split(',').Select(x => x.Trim()) + .Should().BeEquivalentTo("no-store, must-revalidate, no-cache, max-age=0".Split(',').Select(x => x.Trim())); headers.Single(c => c.Name == "Pragma").Value.Should().Be("no-cache"); headers.Single(c => c.Name == "Expires").Value.Should().Be("0"); } diff --git a/src/NzbDrone.Integration.Test/Radarr.Integration.Test.csproj b/src/NzbDrone.Integration.Test/Radarr.Integration.Test.csproj index a3b0889cb..914b2a59a 100644 --- a/src/NzbDrone.Integration.Test/Radarr.Integration.Test.csproj +++ b/src/NzbDrone.Integration.Test/Radarr.Integration.Test.csproj @@ -1,10 +1,20 @@ - + - net462 + net462;netcoreapp3.0 + Library + + + + + + + + + diff --git a/src/NzbDrone.Libraries.Test/Radarr.Libraries.Test.csproj b/src/NzbDrone.Libraries.Test/Radarr.Libraries.Test.csproj index a72d28754..9db9f16b6 100644 --- a/src/NzbDrone.Libraries.Test/Radarr.Libraries.Test.csproj +++ b/src/NzbDrone.Libraries.Test/Radarr.Libraries.Test.csproj @@ -1,8 +1,14 @@ - net462 + net462;netcoreapp3.0 + + + + + + - \ No newline at end of file + diff --git a/src/NzbDrone.Mono.Test/Radarr.Mono.Test.csproj b/src/NzbDrone.Mono.Test/Radarr.Mono.Test.csproj index 286374e3e..908ffdc70 100644 --- a/src/NzbDrone.Mono.Test/Radarr.Mono.Test.csproj +++ b/src/NzbDrone.Mono.Test/Radarr.Mono.Test.csproj @@ -1,20 +1,31 @@ - net462 + net462;netcoreapp3.0 + + + + + + + + + + + + + - - - ..\Libraries\Mono.Posix.dll - - PreserveNewest - \ No newline at end of file + diff --git a/src/NzbDrone.Mono/Disk/DiskProvider.cs b/src/NzbDrone.Mono/Disk/DiskProvider.cs index 2f63b0dfa..d0ebd17b6 100644 --- a/src/NzbDrone.Mono/Disk/DiskProvider.cs +++ b/src/NzbDrone.Mono/Disk/DiskProvider.cs @@ -2,6 +2,7 @@ using System; using System.Collections.Generic; using System.IO; using System.Linq; +using System.Security.AccessControl; using Mono.Unix; using Mono.Unix.Native; using NLog; @@ -57,9 +58,10 @@ namespace NzbDrone.Mono.Disk try { - var fs = File.GetAccessControl(filename); + var file = new FileInfo(filename); + var fs = file.GetAccessControl(); fs.SetAccessRuleProtection(false, false); - File.SetAccessControl(filename, fs); + file.SetAccessControl(fs); } catch (NotImplementedException) { diff --git a/src/NzbDrone.Mono/Disk/ProcMountProvider.cs b/src/NzbDrone.Mono/Disk/ProcMountProvider.cs index 88e834d8a..3f456b499 100644 --- a/src/NzbDrone.Mono/Disk/ProcMountProvider.cs +++ b/src/NzbDrone.Mono/Disk/ProcMountProvider.cs @@ -5,10 +5,12 @@ using System.Linq; using System.Text.RegularExpressions; using NLog; using NzbDrone.Common.Disk; -using NzbDrone.Common.Extensions; namespace NzbDrone.Mono.Disk { + // this is here to resolve ambiguity in GetValueOrDefault extension method in net core 3 + using NzbDrone.Common.Extensions; + public interface IProcMountProvider { List GetMounts(); diff --git a/src/NzbDrone.Mono/Radarr.Mono.csproj b/src/NzbDrone.Mono/Radarr.Mono.csproj index 13bfd6583..25ca39fd6 100644 --- a/src/NzbDrone.Mono/Radarr.Mono.csproj +++ b/src/NzbDrone.Mono/Radarr.Mono.csproj @@ -1,16 +1,19 @@  - net462 + net462;netcoreapp3.0 - - + + - - + + + + - - ..\Libraries\Mono.Posix.dll - + - \ No newline at end of file + diff --git a/src/NzbDrone.SignalR/Radarr.SignalR.csproj b/src/NzbDrone.SignalR/Radarr.SignalR.csproj index 778d16f99..c2a688b0c 100644 --- a/src/NzbDrone.SignalR/Radarr.SignalR.csproj +++ b/src/NzbDrone.SignalR/Radarr.SignalR.csproj @@ -1,14 +1,14 @@ - + - net462 + net462;netcoreapp3.0 + Library - - - - + + + diff --git a/src/NzbDrone.Test.Common/AutoMoq/AutoMoqer.cs b/src/NzbDrone.Test.Common/AutoMoq/AutoMoqer.cs index 7959ce5b7..73ecb2588 100644 --- a/src/NzbDrone.Test.Common/AutoMoq/AutoMoqer.cs +++ b/src/NzbDrone.Test.Common/AutoMoq/AutoMoqer.cs @@ -9,6 +9,7 @@ using System.Runtime.CompilerServices; using Unity; using Moq; using Moq.Language.Flow; +using NzbDrone.Common.Composition; using NzbDrone.Common.EnvironmentInfo; using NzbDrone.Test.Common.AutoMoq.Unity; using Unity.Resolution; @@ -140,6 +141,10 @@ namespace NzbDrone.Test.Common.AutoMoq _registeredMocks = new Dictionary(); AddTheAutoMockingContainerExtensionToTheContainer(container); + +#if NETCOREAPP3_0 + ContainerBuilderBase.RegisterNativeResolver(new [] {"System.Data.SQLite.dll", "Radarr.Core.dll"}); +#endif } private static void AddTheAutoMockingContainerExtensionToTheContainer(IUnityContainer container) diff --git a/src/NzbDrone.Test.Common/NzbDroneRunner.cs b/src/NzbDrone.Test.Common/NzbDroneRunner.cs index c4741c1c0..633682793 100644 --- a/src/NzbDrone.Test.Common/NzbDroneRunner.cs +++ b/src/NzbDrone.Test.Common/NzbDroneRunner.cs @@ -36,15 +36,28 @@ namespace NzbDrone.Test.Common GenerateConfigFile(); - var radarrConsoleExe = OsInfo.IsWindows ? "Radarr.Console.exe" : "Radarr.exe"; + string consoleExe; + if (OsInfo.IsWindows) + { + consoleExe = "Radarr.Console.exe"; + } + else if (PlatformInfo.IsMono) + { + consoleExe = "Radarr.exe"; + } + else + { + consoleExe = "Radarr"; + } if (BuildInfo.IsDebug) { - Start(Path.Combine(TestContext.CurrentContext.TestDirectory, "..", "..", "_output", "net462", "Radarr.Console.exe")); + var frameworkFolder = PlatformInfo.IsNetCore ? "netcoreapp3.0" : "net462"; + Start(Path.Combine(TestContext.CurrentContext.TestDirectory, "..", "..", "_output", frameworkFolder, consoleExe)); } else { - Start(Path.Combine("bin", radarrConsoleExe)); + Start(Path.Combine(TestContext.CurrentContext.TestDirectory, "..", "bin", consoleExe)); } while (true) diff --git a/src/NzbDrone.Test.Common/Radarr.Test.Common.csproj b/src/NzbDrone.Test.Common/Radarr.Test.Common.csproj index c6f995206..f5764f83c 100644 --- a/src/NzbDrone.Test.Common/Radarr.Test.Common.csproj +++ b/src/NzbDrone.Test.Common/Radarr.Test.Common.csproj @@ -1,6 +1,6 @@  - net462 + net462;netcoreapp3.0 @@ -9,10 +9,10 @@ - + - \ No newline at end of file + diff --git a/src/NzbDrone.Test.Dummy/Radarr.Test.Dummy.csproj b/src/NzbDrone.Test.Dummy/Radarr.Test.Dummy.csproj index 0ec318134..dc605c838 100644 --- a/src/NzbDrone.Test.Dummy/Radarr.Test.Dummy.csproj +++ b/src/NzbDrone.Test.Dummy/Radarr.Test.Dummy.csproj @@ -1,6 +1,6 @@ Exe - net462 + net462;netcoreapp3.0 \ No newline at end of file diff --git a/src/NzbDrone.Update.Test/Radarr.Update.Test.csproj b/src/NzbDrone.Update.Test/Radarr.Update.Test.csproj index 9ec1a12b3..566d44f83 100644 --- a/src/NzbDrone.Update.Test/Radarr.Update.Test.csproj +++ b/src/NzbDrone.Update.Test/Radarr.Update.Test.csproj @@ -1,9 +1,15 @@ - net462 + net462;netcoreapp3.0 + + + + + + - \ No newline at end of file + diff --git a/src/NzbDrone.Update.Test/StartNzbDroneService.cs b/src/NzbDrone.Update.Test/StartNzbDroneService.cs index 789cfc864..87b80469d 100644 --- a/src/NzbDrone.Update.Test/StartNzbDroneService.cs +++ b/src/NzbDrone.Update.Test/StartNzbDroneService.cs @@ -3,6 +3,7 @@ using Moq; using NUnit.Framework; using NzbDrone.Common; using NzbDrone.Common.EnvironmentInfo; +using NzbDrone.Common.Extensions; using NzbDrone.Common.Processes; using NzbDrone.Test.Common; using NzbDrone.Update.UpdateEngine; @@ -27,7 +28,7 @@ namespace NzbDrone.Update.Test public void should_start_console_if_app_type_was_service_but_start_failed_because_of_permissions() { string targetFolder = "c:\\Radarr\\".AsOsAgnostic(); - string targetProcess = "c:\\Radarr\\Radarr.Console.exe".AsOsAgnostic(); + string targetProcess = "c:\\Radarr\\Radarr.Console".AsOsAgnostic().ProcessNameToExe(); Mocker.GetMock().Setup(c => c.Start(ServiceProvider.SERVICE_NAME)).Throws(new InvalidOperationException()); diff --git a/src/NzbDrone.Update.Test/UpdateProviderStartFixture.cs b/src/NzbDrone.Update.Test/UpdateProviderStartFixture.cs deleted file mode 100644 index bd604e8dc..000000000 --- a/src/NzbDrone.Update.Test/UpdateProviderStartFixture.cs +++ /dev/null @@ -1,241 +0,0 @@ -/* -using System.Collections.Generic; -using System.IO; -using System.Linq; -using FizzWare.NBuilder; -using Moq; -using NUnit.Framework; -using NzbDrone.Common; -using NzbDrone.Common.Model; -using NzbDrone.Test.Common; -using NzbDrone.Update.UpdateEngine; - -namespace NzbDrone.Update.Test -{ - [TestFixture] - public class UpdateProviderStartFixture : TestBase - { - private const string UPDATE_FOLDER = @"C:\Temp\nzbdrone_update\nzbdrone\"; - private const string BACKUP_FOLDER = @"C:\Temp\nzbdrone_update\nzbdrone_backup\"; - private const string TARGET_FOLDER = @"C:\NzbDrone\"; - - Mock _IAppDirectoryInfo; - - - [SetUp] - public void Setup() - { - - _IAppDirectoryInfo = Mocker.GetMock(); - - _IAppDirectoryInfo.SetupGet(c => c.SystemTemp).Returns(@"C:\Temp\"); - - Mocker.GetMock() - .Setup(c => c.FolderExists(UPDATE_FOLDER)) - .Returns(true); - - Mocker.GetMock() - .Setup(c => c.FolderExists(TARGET_FOLDER)) - .Returns(true); - } - - private void WithInstalledService() - { - Mocker.GetMock() - .Setup(c => c.ServiceExist(ServiceProvider.NZBDRONE_SERVICE_NAME)) - .Returns(true); - } - - private void WithServiceRunning(bool state) - { - Mocker.GetMock() - .Setup(c => c.IsServiceRunning(ServiceProvider.NZBDRONE_SERVICE_NAME)).Returns(state); - } - - [Test] - public void should_stop_nzbdrone_service_if_installed_and_running() - { - WithInstalledService(); - WithServiceRunning(true); - - - Mocker.Resolve().Start(TARGET_FOLDER); - - - Mocker.GetMock().Verify(c => c.Stop(ServiceProvider.NZBDRONE_SERVICE_NAME), Times.Once()); - } - - [Test] - public void should_not_stop_nzbdrone_service_if_installed_but_not_running() - { - WithInstalledService(); - WithServiceRunning(false); - - - Mocker.Resolve().Start(TARGET_FOLDER); - - - Mocker.GetMock().Verify(c => c.Stop(ServiceProvider.NZBDRONE_SERVICE_NAME), Times.Never()); - } - - [Test] - public void should_not_stop_nzbdrone_service_if_service_isnt_installed() - { - - Mocker.Resolve().Start(TARGET_FOLDER); - - - Mocker.GetMock().Verify(c => c.Stop(It.IsAny()), Times.Never()); - } - - [Test] - public void should_kill_nzbdrone_process_if_running() - { - var proccesses = Builder.CreateListOfSize(2).Build().ToList(); - - Mocker.GetMock() - .Setup(c => c.GetProcessByName(ProcessProvider.NzbDroneProcessName)) - .Returns(proccesses); - - - Mocker.Resolve().Start(TARGET_FOLDER); - - - Mocker.GetMock().Verify(c => c.KillAll(ProcessProvider.NzbDroneProcessName), Times.Once()); - } - - [Test] - public void should_not_kill_nzbdrone_process_not_running() - { - Mocker.GetMock() - .Setup(c => c.GetProcessByName(ProcessProvider.NzbDroneProcessName)) - .Returns(new List()); - - - Mocker.Resolve().Start(TARGET_FOLDER); - - - Mocker.GetMock().Verify(c => c.Kill(It.IsAny()), Times.Never()); - } - - [Test] - public void should_create_backup_of_current_installation() - { - Mocker.GetMock() - .Setup(c => c.CopyDirectory(TARGET_FOLDER, BACKUP_FOLDER)); - - Mocker.Resolve().Start(TARGET_FOLDER); - } - - [Test] - public void should_copy_update_package_to_target() - { - Mocker.GetMock() - .Setup(c => c.CopyDirectory(UPDATE_FOLDER, TARGET_FOLDER)); - - Mocker.GetMock() - .Setup(c => c.DeleteFolder(UPDATE_FOLDER, true)); - - Mocker.Resolve().Start(TARGET_FOLDER); - } - - [Test] - public void should_restore_if_update_fails() - { - Mocker.GetMock() - .Setup(c => c.CopyDirectory(UPDATE_FOLDER, TARGET_FOLDER)) - .Throws(new IOException()); - - - Mocker.Resolve().Start(TARGET_FOLDER); - - - Mocker.GetMock() - .Verify(c => c.CopyDirectory(BACKUP_FOLDER, TARGET_FOLDER), Times.Once()); - ExceptionVerification.ExpectedFatals(1); - } - - [Test] - public void should_restart_service_if_service_was_running() - { - WithInstalledService(); - WithServiceRunning(true); - - - Mocker.Resolve().Start(TARGET_FOLDER); - - - VerifyServiceRestart(); - } - - [Test] - public void should_restart_process_if_service_was_not_running() - { - WithInstalledService(); - WithServiceRunning(false); - - - Mocker.Resolve().Start(TARGET_FOLDER); - - - VerifyProcessRestart(); - } - - [Test] - public void should_restart_service_if_service_was_running_and_update_fails() - { - WithInstalledService(); - WithServiceRunning(true); - - Mocker.GetMock() - .Setup(c => c.CopyDirectory(UPDATE_FOLDER, TARGET_FOLDER)) - .Throws(new IOException()); - - - Mocker.Resolve().Start(TARGET_FOLDER); - - - VerifyServiceRestart(); - ExceptionVerification.ExpectedFatals(1); - } - - [Test] - public void should_restart_process_if_service_was_not_running_and_update_fails() - { - WithInstalledService(); - WithServiceRunning(false); - - Mocker.GetMock() - .Setup(c => c.CopyDirectory(UPDATE_FOLDER, TARGET_FOLDER)) - .Throws(new IOException()); - - - Mocker.Resolve().Start(TARGET_FOLDER); - - - VerifyProcessRestart(); - ExceptionVerification.ExpectedFatals(1); - } - - private void VerifyServiceRestart() - { - Mocker.GetMock() - .Verify(c => c.Start(ServiceProvider.NZBDRONE_SERVICE_NAME), Times.Once()); - - Mocker.GetMock() - .Verify(c => c.Start(It.IsAny()), Times.Never()); - } - - private void VerifyProcessRestart() - { - Mocker.GetMock() - .Verify(c => c.Start(It.IsAny()), Times.Never()); - - Mocker.GetMock() - .Verify(c => c.Start(TARGET_FOLDER + "radarr.exe"), Times.Once()); - } - - - } -} -*/ diff --git a/src/NzbDrone.Update/Radarr.Update.csproj b/src/NzbDrone.Update/Radarr.Update.csproj index 982d4dfeb..f9111166d 100644 --- a/src/NzbDrone.Update/Radarr.Update.csproj +++ b/src/NzbDrone.Update/Radarr.Update.csproj @@ -1,7 +1,7 @@  WinExe - net462 + net462;netcoreapp3.0 diff --git a/src/NzbDrone.Update/UpdateEngine/InstallUpdateService.cs b/src/NzbDrone.Update/UpdateEngine/InstallUpdateService.cs index 64848281e..8569d46e0 100644 --- a/src/NzbDrone.Update/UpdateEngine/InstallUpdateService.cs +++ b/src/NzbDrone.Update/UpdateEngine/InstallUpdateService.cs @@ -116,8 +116,8 @@ namespace NzbDrone.Update.UpdateEngine _logger.Info("Copying new files to target folder"); _diskTransferService.MirrorFolder(_appFolderInfo.GetUpdatePackageFolder(), installationFolder); - // Set executable flag on Sonarr app - if (OsInfo.IsOsx) + // Set executable flag on app + if (OsInfo.IsOsx || (OsInfo.IsLinux && PlatformInfo.IsNetCore)) { _diskProvider.SetPermissions(Path.Combine(installationFolder, "Radarr"), "0755", null, null); var plistPath = Path.Combine(installationFolder, "..", "Info.plist"); diff --git a/src/NzbDrone.Update/UpdateEngine/StartNzbDrone.cs b/src/NzbDrone.Update/UpdateEngine/StartNzbDrone.cs index c4be52327..341fd2527 100644 --- a/src/NzbDrone.Update/UpdateEngine/StartNzbDrone.cs +++ b/src/NzbDrone.Update/UpdateEngine/StartNzbDrone.cs @@ -3,6 +3,7 @@ using System.IO; using NLog; using NzbDrone.Common; using NzbDrone.Common.EnvironmentInfo; +using NzbDrone.Common.Extensions; using NzbDrone.Common.Processes; using IServiceProvider = NzbDrone.Common.IServiceProvider; @@ -62,12 +63,12 @@ namespace NzbDrone.Update.UpdateEngine private void StartWinform(string installationFolder) { - Start(installationFolder, "Radarr.exe"); + Start(installationFolder, "Radarr".ProcessNameToExe()); } private void StartConsole(string installationFolder) { - Start(installationFolder, "Radarr.Console.exe"); + Start(installationFolder, "Radarr.Console".ProcessNameToExe()); } private void Start(string installationFolder, string fileName) @@ -83,4 +84,4 @@ namespace NzbDrone.Update.UpdateEngine _processProvider.SpawnNewProcess(path, _startupContext.PreservedArguments); } } -} \ No newline at end of file +} diff --git a/src/NzbDrone.Windows.Test/DiskProviderTests/DiskProviderFixture.cs b/src/NzbDrone.Windows.Test/DiskProviderTests/DiskProviderFixture.cs index 847e03b92..ac1b5bb6f 100644 --- a/src/NzbDrone.Windows.Test/DiskProviderTests/DiskProviderFixture.cs +++ b/src/NzbDrone.Windows.Test/DiskProviderTests/DiskProviderFixture.cs @@ -25,15 +25,17 @@ namespace NzbDrone.Windows.Test.DiskProviderTests if (Directory.Exists(path)) { - var ds = Directory.GetAccessControl(path); + var directory = new DirectoryInfo(path); + var ds = directory.GetAccessControl(); ds.SetAccessRule(new FileSystemAccessRule(owner, FileSystemRights.Write, accessControlType)); - Directory.SetAccessControl(path, ds); + directory.SetAccessControl(ds); } else { - var fs = File.GetAccessControl(path); + var file = new FileInfo(path); + var fs = file.GetAccessControl(); fs.SetAccessRule(new FileSystemAccessRule(owner, FileSystemRights.Write, accessControlType)); - File.SetAccessControl(path, fs); + file.SetAccessControl(fs); } } } diff --git a/src/NzbDrone.Windows.Test/EnvironmentInfo/DotNetPlatformInfoFixture.cs b/src/NzbDrone.Windows.Test/EnvironmentInfo/DotNetPlatformInfoFixture.cs index 1f575a3f8..636adce79 100644 --- a/src/NzbDrone.Windows.Test/EnvironmentInfo/DotNetPlatformInfoFixture.cs +++ b/src/NzbDrone.Windows.Test/EnvironmentInfo/DotNetPlatformInfoFixture.cs @@ -6,7 +6,7 @@ using NzbDrone.Test.Common; namespace NzbDrone.Windows.Test.EnvironmentInfo { [TestFixture] - [Platform("Win")] + [Platform("Net")] public class DotNetPlatformInfoFixture : TestBase { [Test] diff --git a/src/NzbDrone.Windows.Test/Radarr.Windows.Test.csproj b/src/NzbDrone.Windows.Test/Radarr.Windows.Test.csproj index e06493d48..9b337d5a9 100644 --- a/src/NzbDrone.Windows.Test/Radarr.Windows.Test.csproj +++ b/src/NzbDrone.Windows.Test/Radarr.Windows.Test.csproj @@ -1,10 +1,16 @@ - net462 + net462;netcoreapp3.0 + + + + + + - \ No newline at end of file + diff --git a/src/NzbDrone.Windows/Disk/DiskProvider.cs b/src/NzbDrone.Windows/Disk/DiskProvider.cs index 83ee14c50..c1f271ed2 100644 --- a/src/NzbDrone.Windows/Disk/DiskProvider.cs +++ b/src/NzbDrone.Windows/Disk/DiskProvider.cs @@ -1,6 +1,7 @@ using System; using System.IO; using System.Runtime.InteropServices; +using System.Security.AccessControl; using NLog; using NzbDrone.Common.Disk; using NzbDrone.Common.EnsureThat; @@ -39,9 +40,10 @@ namespace NzbDrone.Windows.Disk { Ensure.That(filename, () => filename).IsValidPath(); - var fs = File.GetAccessControl(filename); + var file = new FileInfo(filename); + var fs = file.GetAccessControl(); fs.SetAccessRuleProtection(false, false); - File.SetAccessControl(filename, fs); + file.SetAccessControl(fs); } public override void SetPermissions(string path, string mask, string user, string group) diff --git a/src/NzbDrone.Windows/Radarr.Windows.csproj b/src/NzbDrone.Windows/Radarr.Windows.csproj index aeacb3368..91fc236b5 100644 --- a/src/NzbDrone.Windows/Radarr.Windows.csproj +++ b/src/NzbDrone.Windows/Radarr.Windows.csproj @@ -1,9 +1,10 @@  - net462 + net462;netcoreapp3.0 + diff --git a/src/NzbDrone/Radarr.csproj b/src/NzbDrone/Radarr.csproj index 46d28ba55..6c6b3f333 100644 --- a/src/NzbDrone/Radarr.csproj +++ b/src/NzbDrone/Radarr.csproj @@ -1,9 +1,9 @@ - + WinExe - net462 + net462;netcoreapp3.0 win-x64 - + true ..\NzbDrone.Host\Radarr.ico app.manifest true @@ -14,7 +14,7 @@ - + diff --git a/src/Radarr.Api.V2/Movies/AlternativeYearModule.cs b/src/Radarr.Api.V2/Movies/AlternativeYearModule.cs index 43a28631d..0433d24e6 100644 --- a/src/Radarr.Api.V2/Movies/AlternativeYearModule.cs +++ b/src/Radarr.Api.V2/Movies/AlternativeYearModule.cs @@ -1,20 +1,7 @@ using System; -using System.Collections.Generic; -using System.Linq; -using Marr.Data; -using Nancy; -using NzbDrone.Api; using NzbDrone.Common.Cache; -using NzbDrone.Common.Extensions; -using NzbDrone.Common.Messaging; -using NzbDrone.Core.MediaCover; -using NzbDrone.Core.MediaFiles; -using NzbDrone.Core.MediaFiles.MovieImport; using NzbDrone.Core.Messaging.Events; -using NzbDrone.Core.MetadataSource; using NzbDrone.Core.MetadataSource.RadarrAPI; -using NzbDrone.Core.Movies.AlternativeTitles; -using NzbDrone.Core.RootFolders; using NzbDrone.Core.Movies; using NzbDrone.Core.Movies.Events; using Radarr.Http; diff --git a/src/Radarr.Api.V2/Radarr.Api.V2.csproj b/src/Radarr.Api.V2/Radarr.Api.V2.csproj index 6d587e5ba..d0dd579df 100644 --- a/src/Radarr.Api.V2/Radarr.Api.V2.csproj +++ b/src/Radarr.Api.V2/Radarr.Api.V2.csproj @@ -1,6 +1,6 @@  - net462 + net462;netcoreapp3.0 diff --git a/src/Radarr.Api.V2/System/SystemModule.cs b/src/Radarr.Api.V2/System/SystemModule.cs index bf1c140fd..ae674cbed 100644 --- a/src/Radarr.Api.V2/System/SystemModule.cs +++ b/src/Radarr.Api.V2/System/SystemModule.cs @@ -59,7 +59,7 @@ namespace Radarr.Api.V2.System AppData = _appFolderInfo.GetAppDataPath(), OsName = _osInfo.Name, OsVersion = _osInfo.Version, - IsMonoRuntime = PlatformInfo.IsMono, + IsNetCore = PlatformInfo.IsNetCore, IsMono = PlatformInfo.IsMono, IsLinux = OsInfo.IsLinux, IsOsx = OsInfo.IsOsx, diff --git a/src/Radarr.Http/Radarr.Http.csproj b/src/Radarr.Http/Radarr.Http.csproj index 34cf91c24..1bf06c350 100644 --- a/src/Radarr.Http/Radarr.Http.csproj +++ b/src/Radarr.Http/Radarr.Http.csproj @@ -1,6 +1,6 @@  - net462 + net462;netcoreapp3.0 diff --git a/src/Radarr.Posix.sln b/src/Radarr.Posix.sln index 641ac364b..7750711c4 100644 --- a/src/Radarr.Posix.sln +++ b/src/Radarr.Posix.sln @@ -1,293 +1,216 @@  Microsoft Visual Studio Solution File, Format Version 12.00 -# Visual Studio Version 16 -VisualStudioVersion = 16.0.29025.244 -MinimumVisualStudioVersion = 10.0.40219.1 -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Radarr.Console", "NzbDrone.Console\Radarr.Console.csproj", "{2019313B-86BD-445C-A6F9-1BCEC49FBA9B}" - ProjectSection(ProjectDependencies) = postProject - {EF32E669-774D-4144-A9AB-06E5094F1B5F} = {EF32E669-774D-4144-A9AB-06E5094F1B5F} - {0D62DE9B-33B5-4CC2-B288-E8561C27FF35} = {0D62DE9B-33B5-4CC2-B288-E8561C27FF35} - {D171CDAA-22BE-4598-984B-F9B4A7A6D30C} = {D171CDAA-22BE-4598-984B-F9B4A7A6D30C} - {C5953DAB-89DB-46D9-A401-D620F54B776E} = {C5953DAB-89DB-46D9-A401-D620F54B776E} - {38497DC6-E488-4B9E-A973-A1A7961B33C4} = {38497DC6-E488-4B9E-A973-A1A7961B33C4} - {BB0DC9D7-93EB-4668-82B2-AA7503685A38} = {BB0DC9D7-93EB-4668-82B2-AA7503685A38} - {0B4F09FE-275D-4A94-9FEF-CA1594639AF5} = {0B4F09FE-275D-4A94-9FEF-CA1594639AF5} - EndProjectSection -EndProject +# Visual Studio 15 +VisualStudioVersion = 15.0.26124.0 +MinimumVisualStudioVersion = 15.0.26124.0 Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Tests", "Tests", "{57A04B72-8088-4F75-A582-1158CF8291F7}" EndProject Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Test.Common", "Test.Common", "{47697CDB-27B6-4B05-B4F8-0CBE6F6EDF97}" EndProject Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "WindowsServiceHelpers", "WindowsServiceHelpers", "{F9E67978-5CD6-4A5F-827B-4249711C0B02}" EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "ServiceInstall", "ServiceHelpers\ServiceInstall\ServiceInstall.csproj", "{6BCE712F-846D-4846-9D1B-A66B858DA755}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "ServiceUninstall", "ServiceHelpers\ServiceUninstall\ServiceUninstall.csproj", "{700D0B95-95CD-43F3-B6C9-FAA0FC1358D4}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = ".nuget", ".nuget", "{1E6B3CBE-1578-41C1-9BF9-78D818740BE9}" - ProjectSection(SolutionItems) = preProject - .nuget\NuGet.exe = .nuget\NuGet.exe - EndProjectSection -EndProject Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Host", "Host", "{486ADF86-DD89-4E19-B805-9D94F19800D9}" EndProject Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "External", "External", "{F6E3A728-AE77-4D02-BAC8-82FBC1402DDA}" EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Marr.Data", "Marr.Data\Marr.Data.csproj", "{F6FC6BE7-0847-4817-A1ED-223DC647C3D7}" -EndProject Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Platform", "Platform", "{0F0D4998-8F5D-4467-A909-BB192C4B3B4B}" EndProject Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Platform", "Platform", "{4EACDBBC-BCD7-4765-A57B-3E08331E4749}" EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "MonoTorrent", "MonoTorrent\MonoTorrent.csproj", "{411A9E0E-FDC6-4E25-828A-0C2CD1CD96F8}" +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Radarr.Api", "NzbDrone.Api\Radarr.Api.csproj", "{59D9DA5C-FD93-4599-BE2F-AFC540B180C8}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Radarr.Api.V2", "Radarr.Api.V2\Radarr.Api.V2.csproj", "{D1D48E1D-9EEB-470B-992C-3954F90FB014}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Radarr.Http", "Radarr.Http\Radarr.Http.csproj", "{F8A02FD4-A7A4-40D0-BB81-6319105A3302}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Marr.Data", "Marr.Data\Marr.Data.csproj", "{8D7D5F17-96BB-4EDD-A6E6-3BCA2D6B401A}" EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Radarr.Http", "Radarr.Http\Radarr.Http.csproj", "{C5953DAB-89DB-46D9-A401-D620F54B776E}" +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "MonoTorrent", "MonoTorrent\MonoTorrent.csproj", "{BE8533CC-A1ED-46A6-811F-2FA29CC6AD80}" EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Radarr.Api.V2", "Radarr.Api.V2\Radarr.Api.V2.csproj", "{38497DC6-E488-4B9E-A973-A1A7961B33C4}" +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Radarr.Api.Test", "NzbDrone.Api.Test\Radarr.Api.Test.csproj", "{E2EA47B1-6996-417D-A6EC-28C4F202715C}" EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Radarr.Api", "NzbDrone.Api\Radarr.Api.csproj", "{D171CDAA-22BE-4598-984B-F9B4A7A6D30C}" +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Radarr.Automation.Test", "NzbDrone.Automation.Test\Radarr.Automation.Test.csproj", "{2356C987-F992-4084-9DA2-5DAD1DA35E85}" EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Radarr.Common", "NzbDrone.Common\Radarr.Common.csproj", "{BA949432-D73A-425E-B4B1-4292405DFAF6}" +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Radarr.Common.Test", "NzbDrone.Common.Test\Radarr.Common.Test.csproj", "{A628FEA4-75CC-4039-8823-27258C55D2BF}" EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Radarr.Core", "NzbDrone.Core\Radarr.Core.csproj", "{0D62DE9B-33B5-4CC2-B288-E8561C27FF35}" +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Radarr.Common", "NzbDrone.Common\Radarr.Common.csproj", "{74BF1D46-710C-42C1-82DD-34B42C58F843}" EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Radarr.SignalR", "NzbDrone.SignalR\Radarr.SignalR.csproj", "{0B4F09FE-275D-4A94-9FEF-CA1594639AF5}" +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Radarr.Console", "NzbDrone.Console\Radarr.Console.csproj", "{AEA9EE9A-19BF-45CB-93D9-52CA443FD313}" EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Radarr.Update", "NzbDrone.Update\Radarr.Update.csproj", "{D1C4B2AA-8776-4429-A3E3-71146C230037}" +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Radarr.Core.Test", "NzbDrone.Core.Test\Radarr.Core.Test.csproj", "{04ECC74F-C340-4987-863E-757FB62D27C9}" EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Radarr.Api.Test", "NzbDrone.Api.Test\Radarr.Api.Test.csproj", "{D9468BE6-8242-4E7F-9470-EE6FDA8832D0}" +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Radarr.Core", "NzbDrone.Core\Radarr.Core.csproj", "{82EBE37B-E3A7-4365-9B06-FA647BCC7AF0}" EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Radarr.Automation.Test", "NzbDrone.Automation.Test\Radarr.Automation.Test.csproj", "{779D577B-2287-4FB8-8760-D653DBB87109}" +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Radarr.Host.Test", "NzbDrone.Host.Test\Radarr.Host.Test.csproj", "{6D4DE6D5-9594-4AE4-85E0-41C7FFCCED92}" EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Radarr.Common.Test", "NzbDrone.Common.Test\Radarr.Common.Test.csproj", "{175CE3A0-0D8C-48DB-9D8D-C7BBD9591813}" +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Radarr.Host", "NzbDrone.Host\Radarr.Host.csproj", "{B6913970-FB88-4F6F-83F9-00728218E3FD}" EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Radarr.Core.Test", "NzbDrone.Core.Test\Radarr.Core.Test.csproj", "{4EF23885-C1DD-4AE0-B6AF-DB045A0E83BD}" +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Radarr.Integration.Test", "NzbDrone.Integration.Test\Radarr.Integration.Test.csproj", "{6D5618FB-45B9-44AE-BF99-8EF37519CB30}" EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Radarr.Host.Test", "NzbDrone.Host.Test\Radarr.Host.Test.csproj", "{3FDB2B34-A754-49C5-AEB2-16BC6E92372A}" +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Radarr.Libraries.Test", "NzbDrone.Libraries.Test\Radarr.Libraries.Test.csproj", "{1969394D-3181-404F-8E2C-E3E71A5BAD30}" EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Radarr.Integration.Test", "NzbDrone.Integration.Test\Radarr.Integration.Test.csproj", "{6EEF2080-FAA9-4403-A7B4-0AA91E5A390F}" +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Radarr.Mono.Test", "NzbDrone.Mono.Test\Radarr.Mono.Test.csproj", "{CCE9ABBC-96BA-425B-8140-DC8102290BE3}" EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Radarr.Libraries.Test", "NzbDrone.Libraries.Test\Radarr.Libraries.Test.csproj", "{4E16E633-5AA2-426E-B5C9-D212D4F40B44}" +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Radarr.Mono", "NzbDrone.Mono\Radarr.Mono.csproj", "{504CD0A8-523B-4A0E-99BE-C179DECA9B76}" EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Radarr.Update.Test", "NzbDrone.Update.Test\Radarr.Update.Test.csproj", "{10C356B1-0E60-4385-A3FA-3670159B5660}" +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Radarr.SignalR", "NzbDrone.SignalR\Radarr.SignalR.csproj", "{B30BE76E-4D20-47AA-9E03-E32613D888CC}" EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Radarr.Mono.Test", "NzbDrone.Mono.Test\Radarr.Mono.Test.csproj", "{FD08732A-60BB-4ACB-9AD2-F17C8BE694C8}" +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Radarr.Test.Common", "NzbDrone.Test.Common\Radarr.Test.Common.csproj", "{B8706292-5BE8-4099-94CA-F26DDD3757E0}" EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Radarr.Windows.Test", "NzbDrone.Windows.Test\Radarr.Windows.Test.csproj", "{10B4E062-4985-4897-99DB-745DFBEED055}" +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Radarr.Test.Dummy", "NzbDrone.Test.Dummy\Radarr.Test.Dummy.csproj", "{AFA7F48E-DB81-4E39-843B-78715C6ADF0D}" EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Radarr.Test.Common", "NzbDrone.Test.Common\Radarr.Test.Common.csproj", "{9D841A99-B3EA-4C35-86D0-F27C69E72B3E}" +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Radarr.Update.Test", "NzbDrone.Update.Test\Radarr.Update.Test.csproj", "{A76441EE-AB2E-4E9D-8CD3-58BE5A8514D3}" EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Radarr.Test.Dummy", "NzbDrone.Test.Dummy\Radarr.Test.Dummy.csproj", "{63872633-A00E-45DE-AB4D-61DFF4B02370}" +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Radarr.Update", "NzbDrone.Update\Radarr.Update.csproj", "{4FBA2CBC-B022-41D6-B6DA-3166991B9172}" EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Radarr.Mono", "NzbDrone.Mono\Radarr.Mono.csproj", "{EF32E669-774D-4144-A9AB-06E5094F1B5F}" +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Radarr.Windows.Test", "NzbDrone.Windows.Test\Radarr.Windows.Test.csproj", "{7BEDCC1E-0763-4553-B32B-0430B334ACBB}" EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Radarr.Windows", "NzbDrone.Windows\Radarr.Windows.csproj", "{BB0DC9D7-93EB-4668-82B2-AA7503685A38}" +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Radarr.Windows", "NzbDrone.Windows\Radarr.Windows.csproj", "{3F076242-A6FA-4657-8606-AF1D150367FC}" EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Radarr.Host", "NzbDrone.Host\Radarr.Host.csproj", "{B044A5E8-D914-4671-8724-A92ADAB04C5A}" +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ServiceInstall", "ServiceHelpers\ServiceInstall\ServiceInstall.csproj", "{7DA231E8-A31D-4F53-8760-820861B6CE65}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ServiceUninstall", "ServiceHelpers\ServiceUninstall\ServiceUninstall.csproj", "{0E2B067C-4A97-430C-8767-D19ACB09A63A}" EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution - Debug|x86 = Debug|x86 - Mono|x86 = Mono|x86 - Release|x86 = Release|x86 - EndGlobalSection - GlobalSection(ProjectConfigurationPlatforms) = postSolution - {6BCE712F-846D-4846-9D1B-A66B858DA755}.Debug|x86.ActiveCfg = Debug|x86 - {6BCE712F-846D-4846-9D1B-A66B858DA755}.Debug|x86.Build.0 = Debug|x86 - {6BCE712F-846D-4846-9D1B-A66B858DA755}.Mono|x86.ActiveCfg = Debug|x86 - {6BCE712F-846D-4846-9D1B-A66B858DA755}.Release|x86.ActiveCfg = Release|x86 - {6BCE712F-846D-4846-9D1B-A66B858DA755}.Release|x86.Build.0 = Release|x86 - {700D0B95-95CD-43F3-B6C9-FAA0FC1358D4}.Debug|x86.ActiveCfg = Debug|x86 - {700D0B95-95CD-43F3-B6C9-FAA0FC1358D4}.Debug|x86.Build.0 = Debug|x86 - {700D0B95-95CD-43F3-B6C9-FAA0FC1358D4}.Mono|x86.ActiveCfg = Debug|x86 - {700D0B95-95CD-43F3-B6C9-FAA0FC1358D4}.Release|x86.ActiveCfg = Release|x86 - {700D0B95-95CD-43F3-B6C9-FAA0FC1358D4}.Release|x86.Build.0 = Release|x86 - {F6FC6BE7-0847-4817-A1ED-223DC647C3D7}.Debug|x86.ActiveCfg = Debug|x86 - {F6FC6BE7-0847-4817-A1ED-223DC647C3D7}.Debug|x86.Build.0 = Debug|x86 - {F6FC6BE7-0847-4817-A1ED-223DC647C3D7}.Mono|x86.ActiveCfg = Release|x86 - {F6FC6BE7-0847-4817-A1ED-223DC647C3D7}.Mono|x86.Build.0 = Release|x86 - {F6FC6BE7-0847-4817-A1ED-223DC647C3D7}.Release|x86.ActiveCfg = Release|x86 - {F6FC6BE7-0847-4817-A1ED-223DC647C3D7}.Release|x86.Build.0 = Release|x86 - {411A9E0E-FDC6-4E25-828A-0C2CD1CD96F8}.Debug|x86.ActiveCfg = Debug|x86 - {411A9E0E-FDC6-4E25-828A-0C2CD1CD96F8}.Debug|x86.Build.0 = Debug|x86 - {411A9E0E-FDC6-4E25-828A-0C2CD1CD96F8}.Mono|x86.ActiveCfg = Release|x86 - {411A9E0E-FDC6-4E25-828A-0C2CD1CD96F8}.Mono|x86.Build.0 = Release|x86 - {411A9E0E-FDC6-4E25-828A-0C2CD1CD96F8}.Release|x86.ActiveCfg = Release|x86 - {411A9E0E-FDC6-4E25-828A-0C2CD1CD96F8}.Release|x86.Build.0 = Release|x86 - {C5953DAB-89DB-46D9-A401-D620F54B776E}.Debug|x86.ActiveCfg = Debug|x86 - {C5953DAB-89DB-46D9-A401-D620F54B776E}.Debug|x86.Build.0 = Debug|x86 - {C5953DAB-89DB-46D9-A401-D620F54B776E}.Mono|x86.ActiveCfg = Release|x86 - {C5953DAB-89DB-46D9-A401-D620F54B776E}.Mono|x86.Build.0 = Release|x86 - {C5953DAB-89DB-46D9-A401-D620F54B776E}.Release|x86.ActiveCfg = Release|x86 - {C5953DAB-89DB-46D9-A401-D620F54B776E}.Release|x86.Build.0 = Release|x86 - {38497DC6-E488-4B9E-A973-A1A7961B33C4}.Debug|x86.ActiveCfg = Debug|x86 - {38497DC6-E488-4B9E-A973-A1A7961B33C4}.Debug|x86.Build.0 = Debug|x86 - {38497DC6-E488-4B9E-A973-A1A7961B33C4}.Mono|x86.ActiveCfg = Release|x86 - {38497DC6-E488-4B9E-A973-A1A7961B33C4}.Mono|x86.Build.0 = Release|x86 - {38497DC6-E488-4B9E-A973-A1A7961B33C4}.Release|x86.ActiveCfg = Release|x86 - {38497DC6-E488-4B9E-A973-A1A7961B33C4}.Release|x86.Build.0 = Release|x86 - {D171CDAA-22BE-4598-984B-F9B4A7A6D30C}.Debug|x86.ActiveCfg = Debug|x86 - {D171CDAA-22BE-4598-984B-F9B4A7A6D30C}.Debug|x86.Build.0 = Debug|x86 - {D171CDAA-22BE-4598-984B-F9B4A7A6D30C}.Mono|x86.ActiveCfg = Release|x86 - {D171CDAA-22BE-4598-984B-F9B4A7A6D30C}.Mono|x86.Build.0 = Release|x86 - {D171CDAA-22BE-4598-984B-F9B4A7A6D30C}.Release|x86.ActiveCfg = Release|x86 - {D171CDAA-22BE-4598-984B-F9B4A7A6D30C}.Release|x86.Build.0 = Release|x86 - {BA949432-D73A-425E-B4B1-4292405DFAF6}.Debug|x86.ActiveCfg = Debug|x86 - {BA949432-D73A-425E-B4B1-4292405DFAF6}.Debug|x86.Build.0 = Debug|x86 - {BA949432-D73A-425E-B4B1-4292405DFAF6}.Mono|x86.ActiveCfg = Release|x86 - {BA949432-D73A-425E-B4B1-4292405DFAF6}.Mono|x86.Build.0 = Release|x86 - {BA949432-D73A-425E-B4B1-4292405DFAF6}.Release|x86.ActiveCfg = Release|x86 - {BA949432-D73A-425E-B4B1-4292405DFAF6}.Release|x86.Build.0 = Release|x86 - {0D62DE9B-33B5-4CC2-B288-E8561C27FF35}.Debug|x86.ActiveCfg = Debug|x86 - {0D62DE9B-33B5-4CC2-B288-E8561C27FF35}.Debug|x86.Build.0 = Debug|x86 - {0D62DE9B-33B5-4CC2-B288-E8561C27FF35}.Mono|x86.ActiveCfg = Release|x86 - {0D62DE9B-33B5-4CC2-B288-E8561C27FF35}.Mono|x86.Build.0 = Release|x86 - {0D62DE9B-33B5-4CC2-B288-E8561C27FF35}.Release|x86.ActiveCfg = Release|x86 - {0D62DE9B-33B5-4CC2-B288-E8561C27FF35}.Release|x86.Build.0 = Release|x86 - {0B4F09FE-275D-4A94-9FEF-CA1594639AF5}.Debug|x86.ActiveCfg = Debug|x86 - {0B4F09FE-275D-4A94-9FEF-CA1594639AF5}.Debug|x86.Build.0 = Debug|x86 - {0B4F09FE-275D-4A94-9FEF-CA1594639AF5}.Mono|x86.ActiveCfg = Release|x86 - {0B4F09FE-275D-4A94-9FEF-CA1594639AF5}.Mono|x86.Build.0 = Release|x86 - {0B4F09FE-275D-4A94-9FEF-CA1594639AF5}.Release|x86.ActiveCfg = Release|x86 - {0B4F09FE-275D-4A94-9FEF-CA1594639AF5}.Release|x86.Build.0 = Release|x86 - {D1C4B2AA-8776-4429-A3E3-71146C230037}.Debug|x86.ActiveCfg = Debug|x86 - {D1C4B2AA-8776-4429-A3E3-71146C230037}.Debug|x86.Build.0 = Debug|x86 - {D1C4B2AA-8776-4429-A3E3-71146C230037}.Mono|x86.ActiveCfg = Release|x86 - {D1C4B2AA-8776-4429-A3E3-71146C230037}.Mono|x86.Build.0 = Release|x86 - {D1C4B2AA-8776-4429-A3E3-71146C230037}.Release|x86.ActiveCfg = Release|x86 - {D1C4B2AA-8776-4429-A3E3-71146C230037}.Release|x86.Build.0 = Release|x86 - {D9468BE6-8242-4E7F-9470-EE6FDA8832D0}.Debug|x86.ActiveCfg = Debug|x86 - {D9468BE6-8242-4E7F-9470-EE6FDA8832D0}.Debug|x86.Build.0 = Debug|x86 - {D9468BE6-8242-4E7F-9470-EE6FDA8832D0}.Mono|x86.ActiveCfg = Release|x86 - {D9468BE6-8242-4E7F-9470-EE6FDA8832D0}.Mono|x86.Build.0 = Release|x86 - {D9468BE6-8242-4E7F-9470-EE6FDA8832D0}.Release|x86.ActiveCfg = Release|x86 - {D9468BE6-8242-4E7F-9470-EE6FDA8832D0}.Release|x86.Build.0 = Release|x86 - {779D577B-2287-4FB8-8760-D653DBB87109}.Debug|x86.ActiveCfg = Debug|x86 - {779D577B-2287-4FB8-8760-D653DBB87109}.Debug|x86.Build.0 = Debug|x86 - {779D577B-2287-4FB8-8760-D653DBB87109}.Mono|x86.ActiveCfg = Release|x86 - {779D577B-2287-4FB8-8760-D653DBB87109}.Mono|x86.Build.0 = Release|x86 - {779D577B-2287-4FB8-8760-D653DBB87109}.Release|x86.ActiveCfg = Release|x86 - {779D577B-2287-4FB8-8760-D653DBB87109}.Release|x86.Build.0 = Release|x86 - {175CE3A0-0D8C-48DB-9D8D-C7BBD9591813}.Debug|x86.ActiveCfg = Debug|x86 - {175CE3A0-0D8C-48DB-9D8D-C7BBD9591813}.Debug|x86.Build.0 = Debug|x86 - {175CE3A0-0D8C-48DB-9D8D-C7BBD9591813}.Mono|x86.ActiveCfg = Release|x86 - {175CE3A0-0D8C-48DB-9D8D-C7BBD9591813}.Mono|x86.Build.0 = Release|x86 - {175CE3A0-0D8C-48DB-9D8D-C7BBD9591813}.Release|x86.ActiveCfg = Release|x86 - {175CE3A0-0D8C-48DB-9D8D-C7BBD9591813}.Release|x86.Build.0 = Release|x86 - {4EF23885-C1DD-4AE0-B6AF-DB045A0E83BD}.Debug|x86.ActiveCfg = Debug|x86 - {4EF23885-C1DD-4AE0-B6AF-DB045A0E83BD}.Debug|x86.Build.0 = Debug|x86 - {4EF23885-C1DD-4AE0-B6AF-DB045A0E83BD}.Mono|x86.ActiveCfg = Release|x86 - {4EF23885-C1DD-4AE0-B6AF-DB045A0E83BD}.Mono|x86.Build.0 = Release|x86 - {4EF23885-C1DD-4AE0-B6AF-DB045A0E83BD}.Release|x86.ActiveCfg = Release|x86 - {4EF23885-C1DD-4AE0-B6AF-DB045A0E83BD}.Release|x86.Build.0 = Release|x86 - {3FDB2B34-A754-49C5-AEB2-16BC6E92372A}.Debug|x86.ActiveCfg = Debug|x86 - {3FDB2B34-A754-49C5-AEB2-16BC6E92372A}.Debug|x86.Build.0 = Debug|x86 - {3FDB2B34-A754-49C5-AEB2-16BC6E92372A}.Mono|x86.ActiveCfg = Release|x86 - {3FDB2B34-A754-49C5-AEB2-16BC6E92372A}.Mono|x86.Build.0 = Release|x86 - {3FDB2B34-A754-49C5-AEB2-16BC6E92372A}.Release|x86.ActiveCfg = Release|x86 - {3FDB2B34-A754-49C5-AEB2-16BC6E92372A}.Release|x86.Build.0 = Release|x86 - {6EEF2080-FAA9-4403-A7B4-0AA91E5A390F}.Debug|x86.ActiveCfg = Debug|x86 - {6EEF2080-FAA9-4403-A7B4-0AA91E5A390F}.Debug|x86.Build.0 = Debug|x86 - {6EEF2080-FAA9-4403-A7B4-0AA91E5A390F}.Mono|x86.ActiveCfg = Release|x86 - {6EEF2080-FAA9-4403-A7B4-0AA91E5A390F}.Mono|x86.Build.0 = Release|x86 - {6EEF2080-FAA9-4403-A7B4-0AA91E5A390F}.Release|x86.ActiveCfg = Release|x86 - {6EEF2080-FAA9-4403-A7B4-0AA91E5A390F}.Release|x86.Build.0 = Release|x86 - {4E16E633-5AA2-426E-B5C9-D212D4F40B44}.Debug|x86.ActiveCfg = Debug|x86 - {4E16E633-5AA2-426E-B5C9-D212D4F40B44}.Debug|x86.Build.0 = Debug|x86 - {4E16E633-5AA2-426E-B5C9-D212D4F40B44}.Mono|x86.ActiveCfg = Release|x86 - {4E16E633-5AA2-426E-B5C9-D212D4F40B44}.Mono|x86.Build.0 = Release|x86 - {4E16E633-5AA2-426E-B5C9-D212D4F40B44}.Release|x86.ActiveCfg = Release|x86 - {4E16E633-5AA2-426E-B5C9-D212D4F40B44}.Release|x86.Build.0 = Release|x86 - {10C356B1-0E60-4385-A3FA-3670159B5660}.Debug|x86.ActiveCfg = Debug|x86 - {10C356B1-0E60-4385-A3FA-3670159B5660}.Debug|x86.Build.0 = Debug|x86 - {10C356B1-0E60-4385-A3FA-3670159B5660}.Mono|x86.ActiveCfg = Release|x86 - {10C356B1-0E60-4385-A3FA-3670159B5660}.Mono|x86.Build.0 = Release|x86 - {10C356B1-0E60-4385-A3FA-3670159B5660}.Release|x86.ActiveCfg = Release|x86 - {10C356B1-0E60-4385-A3FA-3670159B5660}.Release|x86.Build.0 = Release|x86 - {FD08732A-60BB-4ACB-9AD2-F17C8BE694C8}.Debug|x86.ActiveCfg = Debug|x86 - {FD08732A-60BB-4ACB-9AD2-F17C8BE694C8}.Debug|x86.Build.0 = Debug|x86 - {FD08732A-60BB-4ACB-9AD2-F17C8BE694C8}.Mono|x86.ActiveCfg = Release|x86 - {FD08732A-60BB-4ACB-9AD2-F17C8BE694C8}.Mono|x86.Build.0 = Release|x86 - {FD08732A-60BB-4ACB-9AD2-F17C8BE694C8}.Release|x86.ActiveCfg = Release|x86 - {FD08732A-60BB-4ACB-9AD2-F17C8BE694C8}.Release|x86.Build.0 = Release|x86 - {10B4E062-4985-4897-99DB-745DFBEED055}.Debug|x86.ActiveCfg = Debug|x86 - {10B4E062-4985-4897-99DB-745DFBEED055}.Debug|x86.Build.0 = Debug|x86 - {10B4E062-4985-4897-99DB-745DFBEED055}.Mono|x86.ActiveCfg = Release|x86 - {10B4E062-4985-4897-99DB-745DFBEED055}.Mono|x86.Build.0 = Release|x86 - {10B4E062-4985-4897-99DB-745DFBEED055}.Release|x86.ActiveCfg = Release|x86 - {10B4E062-4985-4897-99DB-745DFBEED055}.Release|x86.Build.0 = Release|x86 - {9D841A99-B3EA-4C35-86D0-F27C69E72B3E}.Debug|x86.ActiveCfg = Debug|x86 - {9D841A99-B3EA-4C35-86D0-F27C69E72B3E}.Debug|x86.Build.0 = Debug|x86 - {9D841A99-B3EA-4C35-86D0-F27C69E72B3E}.Mono|x86.ActiveCfg = Release|x86 - {9D841A99-B3EA-4C35-86D0-F27C69E72B3E}.Mono|x86.Build.0 = Release|x86 - {9D841A99-B3EA-4C35-86D0-F27C69E72B3E}.Release|x86.ActiveCfg = Release|x86 - {9D841A99-B3EA-4C35-86D0-F27C69E72B3E}.Release|x86.Build.0 = Release|x86 - {63872633-A00E-45DE-AB4D-61DFF4B02370}.Debug|x86.ActiveCfg = Debug|x86 - {63872633-A00E-45DE-AB4D-61DFF4B02370}.Debug|x86.Build.0 = Debug|x86 - {63872633-A00E-45DE-AB4D-61DFF4B02370}.Mono|x86.ActiveCfg = Release|x86 - {63872633-A00E-45DE-AB4D-61DFF4B02370}.Mono|x86.Build.0 = Release|x86 - {63872633-A00E-45DE-AB4D-61DFF4B02370}.Release|x86.ActiveCfg = Release|x86 - {63872633-A00E-45DE-AB4D-61DFF4B02370}.Release|x86.Build.0 = Release|x86 - {EF32E669-774D-4144-A9AB-06E5094F1B5F}.Debug|x86.ActiveCfg = Debug|x86 - {EF32E669-774D-4144-A9AB-06E5094F1B5F}.Debug|x86.Build.0 = Debug|x86 - {EF32E669-774D-4144-A9AB-06E5094F1B5F}.Mono|x86.ActiveCfg = Release|x86 - {EF32E669-774D-4144-A9AB-06E5094F1B5F}.Mono|x86.Build.0 = Release|x86 - {EF32E669-774D-4144-A9AB-06E5094F1B5F}.Release|x86.ActiveCfg = Release|x86 - {EF32E669-774D-4144-A9AB-06E5094F1B5F}.Release|x86.Build.0 = Release|x86 - {BB0DC9D7-93EB-4668-82B2-AA7503685A38}.Debug|x86.ActiveCfg = Debug|x86 - {BB0DC9D7-93EB-4668-82B2-AA7503685A38}.Debug|x86.Build.0 = Debug|x86 - {BB0DC9D7-93EB-4668-82B2-AA7503685A38}.Mono|x86.ActiveCfg = Release|x86 - {BB0DC9D7-93EB-4668-82B2-AA7503685A38}.Mono|x86.Build.0 = Release|x86 - {BB0DC9D7-93EB-4668-82B2-AA7503685A38}.Release|x86.ActiveCfg = Release|x86 - {BB0DC9D7-93EB-4668-82B2-AA7503685A38}.Release|x86.Build.0 = Release|x86 - {2019313B-86BD-445C-A6F9-1BCEC49FBA9B}.Debug|x86.ActiveCfg = Debug|x86 - {2019313B-86BD-445C-A6F9-1BCEC49FBA9B}.Debug|x86.Build.0 = Debug|x86 - {2019313B-86BD-445C-A6F9-1BCEC49FBA9B}.Mono|x86.ActiveCfg = Release|x86 - {2019313B-86BD-445C-A6F9-1BCEC49FBA9B}.Mono|x86.Build.0 = Release|x86 - {2019313B-86BD-445C-A6F9-1BCEC49FBA9B}.Release|x86.ActiveCfg = Release|x86 - {2019313B-86BD-445C-A6F9-1BCEC49FBA9B}.Release|x86.Build.0 = Release|x86 - {B044A5E8-D914-4671-8724-A92ADAB04C5A}.Debug|x86.ActiveCfg = Debug|x86 - {B044A5E8-D914-4671-8724-A92ADAB04C5A}.Debug|x86.Build.0 = Debug|x86 - {B044A5E8-D914-4671-8724-A92ADAB04C5A}.Mono|x86.ActiveCfg = Release|x86 - {B044A5E8-D914-4671-8724-A92ADAB04C5A}.Mono|x86.Build.0 = Release|x86 - {B044A5E8-D914-4671-8724-A92ADAB04C5A}.Release|x86.ActiveCfg = Release|x86 - {B044A5E8-D914-4671-8724-A92ADAB04C5A}.Release|x86.Build.0 = Release|x86 + Debug|Any CPU = Debug|Any CPU + Release|Any CPU = Release|Any CPU EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {D1D48E1D-9EEB-470B-992C-3954F90FB014}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {D1D48E1D-9EEB-470B-992C-3954F90FB014}.Debug|Any CPU.Build.0 = Debug|Any CPU + {D1D48E1D-9EEB-470B-992C-3954F90FB014}.Release|Any CPU.ActiveCfg = Release|Any CPU + {D1D48E1D-9EEB-470B-992C-3954F90FB014}.Release|Any CPU.Build.0 = Release|Any CPU + {F8A02FD4-A7A4-40D0-BB81-6319105A3302}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {F8A02FD4-A7A4-40D0-BB81-6319105A3302}.Debug|Any CPU.Build.0 = Debug|Any CPU + {F8A02FD4-A7A4-40D0-BB81-6319105A3302}.Release|Any CPU.ActiveCfg = Release|Any CPU + {F8A02FD4-A7A4-40D0-BB81-6319105A3302}.Release|Any CPU.Build.0 = Release|Any CPU + {8D7D5F17-96BB-4EDD-A6E6-3BCA2D6B401A}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {8D7D5F17-96BB-4EDD-A6E6-3BCA2D6B401A}.Debug|Any CPU.Build.0 = Debug|Any CPU + {8D7D5F17-96BB-4EDD-A6E6-3BCA2D6B401A}.Release|Any CPU.ActiveCfg = Release|Any CPU + {8D7D5F17-96BB-4EDD-A6E6-3BCA2D6B401A}.Release|Any CPU.Build.0 = Release|Any CPU + {BE8533CC-A1ED-46A6-811F-2FA29CC6AD80}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {BE8533CC-A1ED-46A6-811F-2FA29CC6AD80}.Debug|Any CPU.Build.0 = Debug|Any CPU + {BE8533CC-A1ED-46A6-811F-2FA29CC6AD80}.Release|Any CPU.ActiveCfg = Release|Any CPU + {BE8533CC-A1ED-46A6-811F-2FA29CC6AD80}.Release|Any CPU.Build.0 = Release|Any CPU + {E2EA47B1-6996-417D-A6EC-28C4F202715C}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {E2EA47B1-6996-417D-A6EC-28C4F202715C}.Debug|Any CPU.Build.0 = Debug|Any CPU + {E2EA47B1-6996-417D-A6EC-28C4F202715C}.Release|Any CPU.ActiveCfg = Release|Any CPU + {E2EA47B1-6996-417D-A6EC-28C4F202715C}.Release|Any CPU.Build.0 = Release|Any CPU + {2356C987-F992-4084-9DA2-5DAD1DA35E85}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {2356C987-F992-4084-9DA2-5DAD1DA35E85}.Debug|Any CPU.Build.0 = Debug|Any CPU + {2356C987-F992-4084-9DA2-5DAD1DA35E85}.Release|Any CPU.ActiveCfg = Release|Any CPU + {2356C987-F992-4084-9DA2-5DAD1DA35E85}.Release|Any CPU.Build.0 = Release|Any CPU + {A628FEA4-75CC-4039-8823-27258C55D2BF}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {A628FEA4-75CC-4039-8823-27258C55D2BF}.Debug|Any CPU.Build.0 = Debug|Any CPU + {A628FEA4-75CC-4039-8823-27258C55D2BF}.Release|Any CPU.ActiveCfg = Release|Any CPU + {A628FEA4-75CC-4039-8823-27258C55D2BF}.Release|Any CPU.Build.0 = Release|Any CPU + {74BF1D46-710C-42C1-82DD-34B42C58F843}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {74BF1D46-710C-42C1-82DD-34B42C58F843}.Debug|Any CPU.Build.0 = Debug|Any CPU + {74BF1D46-710C-42C1-82DD-34B42C58F843}.Release|Any CPU.ActiveCfg = Release|Any CPU + {74BF1D46-710C-42C1-82DD-34B42C58F843}.Release|Any CPU.Build.0 = Release|Any CPU + {AEA9EE9A-19BF-45CB-93D9-52CA443FD313}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {AEA9EE9A-19BF-45CB-93D9-52CA443FD313}.Debug|Any CPU.Build.0 = Debug|Any CPU + {AEA9EE9A-19BF-45CB-93D9-52CA443FD313}.Release|Any CPU.ActiveCfg = Release|Any CPU + {AEA9EE9A-19BF-45CB-93D9-52CA443FD313}.Release|Any CPU.Build.0 = Release|Any CPU + {04ECC74F-C340-4987-863E-757FB62D27C9}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {04ECC74F-C340-4987-863E-757FB62D27C9}.Debug|Any CPU.Build.0 = Debug|Any CPU + {04ECC74F-C340-4987-863E-757FB62D27C9}.Release|Any CPU.ActiveCfg = Release|Any CPU + {04ECC74F-C340-4987-863E-757FB62D27C9}.Release|Any CPU.Build.0 = Release|Any CPU + {82EBE37B-E3A7-4365-9B06-FA647BCC7AF0}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {82EBE37B-E3A7-4365-9B06-FA647BCC7AF0}.Debug|Any CPU.Build.0 = Debug|Any CPU + {82EBE37B-E3A7-4365-9B06-FA647BCC7AF0}.Release|Any CPU.ActiveCfg = Release|Any CPU + {82EBE37B-E3A7-4365-9B06-FA647BCC7AF0}.Release|Any CPU.Build.0 = Release|Any CPU + {6D4DE6D5-9594-4AE4-85E0-41C7FFCCED92}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {6D4DE6D5-9594-4AE4-85E0-41C7FFCCED92}.Debug|Any CPU.Build.0 = Debug|Any CPU + {6D4DE6D5-9594-4AE4-85E0-41C7FFCCED92}.Release|Any CPU.ActiveCfg = Release|Any CPU + {6D4DE6D5-9594-4AE4-85E0-41C7FFCCED92}.Release|Any CPU.Build.0 = Release|Any CPU + {B6913970-FB88-4F6F-83F9-00728218E3FD}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {B6913970-FB88-4F6F-83F9-00728218E3FD}.Debug|Any CPU.Build.0 = Debug|Any CPU + {B6913970-FB88-4F6F-83F9-00728218E3FD}.Release|Any CPU.ActiveCfg = Release|Any CPU + {B6913970-FB88-4F6F-83F9-00728218E3FD}.Release|Any CPU.Build.0 = Release|Any CPU + {6D5618FB-45B9-44AE-BF99-8EF37519CB30}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {6D5618FB-45B9-44AE-BF99-8EF37519CB30}.Debug|Any CPU.Build.0 = Debug|Any CPU + {6D5618FB-45B9-44AE-BF99-8EF37519CB30}.Release|Any CPU.ActiveCfg = Release|Any CPU + {6D5618FB-45B9-44AE-BF99-8EF37519CB30}.Release|Any CPU.Build.0 = Release|Any CPU + {1969394D-3181-404F-8E2C-E3E71A5BAD30}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {1969394D-3181-404F-8E2C-E3E71A5BAD30}.Debug|Any CPU.Build.0 = Debug|Any CPU + {1969394D-3181-404F-8E2C-E3E71A5BAD30}.Release|Any CPU.ActiveCfg = Release|Any CPU + {1969394D-3181-404F-8E2C-E3E71A5BAD30}.Release|Any CPU.Build.0 = Release|Any CPU + {CCE9ABBC-96BA-425B-8140-DC8102290BE3}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {CCE9ABBC-96BA-425B-8140-DC8102290BE3}.Debug|Any CPU.Build.0 = Debug|Any CPU + {CCE9ABBC-96BA-425B-8140-DC8102290BE3}.Release|Any CPU.ActiveCfg = Release|Any CPU + {CCE9ABBC-96BA-425B-8140-DC8102290BE3}.Release|Any CPU.Build.0 = Release|Any CPU + {504CD0A8-523B-4A0E-99BE-C179DECA9B76}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {504CD0A8-523B-4A0E-99BE-C179DECA9B76}.Debug|Any CPU.Build.0 = Debug|Any CPU + {504CD0A8-523B-4A0E-99BE-C179DECA9B76}.Release|Any CPU.ActiveCfg = Release|Any CPU + {504CD0A8-523B-4A0E-99BE-C179DECA9B76}.Release|Any CPU.Build.0 = Release|Any CPU + {B30BE76E-4D20-47AA-9E03-E32613D888CC}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {B30BE76E-4D20-47AA-9E03-E32613D888CC}.Debug|Any CPU.Build.0 = Debug|Any CPU + {B30BE76E-4D20-47AA-9E03-E32613D888CC}.Release|Any CPU.ActiveCfg = Release|Any CPU + {B30BE76E-4D20-47AA-9E03-E32613D888CC}.Release|Any CPU.Build.0 = Release|Any CPU + {B8706292-5BE8-4099-94CA-F26DDD3757E0}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {B8706292-5BE8-4099-94CA-F26DDD3757E0}.Debug|Any CPU.Build.0 = Debug|Any CPU + {B8706292-5BE8-4099-94CA-F26DDD3757E0}.Release|Any CPU.ActiveCfg = Release|Any CPU + {B8706292-5BE8-4099-94CA-F26DDD3757E0}.Release|Any CPU.Build.0 = Release|Any CPU + {AFA7F48E-DB81-4E39-843B-78715C6ADF0D}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {AFA7F48E-DB81-4E39-843B-78715C6ADF0D}.Debug|Any CPU.Build.0 = Debug|Any CPU + {AFA7F48E-DB81-4E39-843B-78715C6ADF0D}.Release|Any CPU.ActiveCfg = Release|Any CPU + {AFA7F48E-DB81-4E39-843B-78715C6ADF0D}.Release|Any CPU.Build.0 = Release|Any CPU + {A76441EE-AB2E-4E9D-8CD3-58BE5A8514D3}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {A76441EE-AB2E-4E9D-8CD3-58BE5A8514D3}.Debug|Any CPU.Build.0 = Debug|Any CPU + {A76441EE-AB2E-4E9D-8CD3-58BE5A8514D3}.Release|Any CPU.ActiveCfg = Release|Any CPU + {A76441EE-AB2E-4E9D-8CD3-58BE5A8514D3}.Release|Any CPU.Build.0 = Release|Any CPU + {4FBA2CBC-B022-41D6-B6DA-3166991B9172}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {4FBA2CBC-B022-41D6-B6DA-3166991B9172}.Debug|Any CPU.Build.0 = Debug|Any CPU + {4FBA2CBC-B022-41D6-B6DA-3166991B9172}.Release|Any CPU.ActiveCfg = Release|Any CPU + {4FBA2CBC-B022-41D6-B6DA-3166991B9172}.Release|Any CPU.Build.0 = Release|Any CPU + {7BEDCC1E-0763-4553-B32B-0430B334ACBB}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {7BEDCC1E-0763-4553-B32B-0430B334ACBB}.Debug|Any CPU.Build.0 = Debug|Any CPU + {7BEDCC1E-0763-4553-B32B-0430B334ACBB}.Release|Any CPU.ActiveCfg = Release|Any CPU + {7BEDCC1E-0763-4553-B32B-0430B334ACBB}.Release|Any CPU.Build.0 = Release|Any CPU + {3F076242-A6FA-4657-8606-AF1D150367FC}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {3F076242-A6FA-4657-8606-AF1D150367FC}.Debug|Any CPU.Build.0 = Debug|Any CPU + {3F076242-A6FA-4657-8606-AF1D150367FC}.Release|Any CPU.ActiveCfg = Release|Any CPU + {3F076242-A6FA-4657-8606-AF1D150367FC}.Release|Any CPU.Build.0 = Release|Any CPU + {7DA231E8-A31D-4F53-8760-820861B6CE65}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {7DA231E8-A31D-4F53-8760-820861B6CE65}.Debug|Any CPU.Build.0 = Debug|Any CPU + {7DA231E8-A31D-4F53-8760-820861B6CE65}.Release|Any CPU.ActiveCfg = Release|Any CPU + {7DA231E8-A31D-4F53-8760-820861B6CE65}.Release|Any CPU.Build.0 = Release|Any CPU + {0E2B067C-4A97-430C-8767-D19ACB09A63A}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {0E2B067C-4A97-430C-8767-D19ACB09A63A}.Debug|Any CPU.Build.0 = Debug|Any CPU + {0E2B067C-4A97-430C-8767-D19ACB09A63A}.Release|Any CPU.ActiveCfg = Release|Any CPU + {0E2B067C-4A97-430C-8767-D19ACB09A63A}.Release|Any CPU.Build.0 = Release|Any CPU + {59D9DA5C-FD93-4599-BE2F-AFC540B180C8}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {59D9DA5C-FD93-4599-BE2F-AFC540B180C8}.Debug|Any CPU.Build.0 = Debug|Any CPU + {59D9DA5C-FD93-4599-BE2F-AFC540B180C8}.Release|Any CPU.ActiveCfg = Release|Any CPU + {59D9DA5C-FD93-4599-BE2F-AFC540B180C8}.Release|Any CPU.Build.0 = Release|Any CPU + EndGlobalSection GlobalSection(NestedProjects) = preSolution {47697CDB-27B6-4B05-B4F8-0CBE6F6EDF97} = {57A04B72-8088-4F75-A582-1158CF8291F7} - {6BCE712F-846D-4846-9D1B-A66B858DA755} = {F9E67978-5CD6-4A5F-827B-4249711C0B02} - {700D0B95-95CD-43F3-B6C9-FAA0FC1358D4} = {F9E67978-5CD6-4A5F-827B-4249711C0B02} - {F6FC6BE7-0847-4817-A1ED-223DC647C3D7} = {F6E3A728-AE77-4D02-BAC8-82FBC1402DDA} + {AFA7F48E-DB81-4E39-843B-78715C6ADF0D} = {47697CDB-27B6-4B05-B4F8-0CBE6F6EDF97} + {B8706292-5BE8-4099-94CA-F26DDD3757E0} = {47697CDB-27B6-4B05-B4F8-0CBE6F6EDF97} + {04ECC74F-C340-4987-863E-757FB62D27C9} = {57A04B72-8088-4F75-A582-1158CF8291F7} + {6D4DE6D5-9594-4AE4-85E0-41C7FFCCED92} = {57A04B72-8088-4F75-A582-1158CF8291F7} + {A76441EE-AB2E-4E9D-8CD3-58BE5A8514D3} = {57A04B72-8088-4F75-A582-1158CF8291F7} + {A628FEA4-75CC-4039-8823-27258C55D2BF} = {57A04B72-8088-4F75-A582-1158CF8291F7} + {E2EA47B1-6996-417D-A6EC-28C4F202715C} = {57A04B72-8088-4F75-A582-1158CF8291F7} + {1969394D-3181-404F-8E2C-E3E71A5BAD30} = {57A04B72-8088-4F75-A582-1158CF8291F7} + {6D5618FB-45B9-44AE-BF99-8EF37519CB30} = {57A04B72-8088-4F75-A582-1158CF8291F7} + {2356C987-F992-4084-9DA2-5DAD1DA35E85} = {57A04B72-8088-4F75-A582-1158CF8291F7} + {7DA231E8-A31D-4F53-8760-820861B6CE65} = {F9E67978-5CD6-4A5F-827B-4249711C0B02} + {0E2B067C-4A97-430C-8767-D19ACB09A63A} = {F9E67978-5CD6-4A5F-827B-4249711C0B02} + {AEA9EE9A-19BF-45CB-93D9-52CA443FD313} = {486ADF86-DD89-4E19-B805-9D94F19800D9} + {B6913970-FB88-4F6F-83F9-00728218E3FD} = {486ADF86-DD89-4E19-B805-9D94F19800D9} + {8D7D5F17-96BB-4EDD-A6E6-3BCA2D6B401A} = {F6E3A728-AE77-4D02-BAC8-82FBC1402DDA} + {504CD0A8-523B-4A0E-99BE-C179DECA9B76} = {0F0D4998-8F5D-4467-A909-BB192C4B3B4B} + {3F076242-A6FA-4657-8606-AF1D150367FC} = {0F0D4998-8F5D-4467-A909-BB192C4B3B4B} {4EACDBBC-BCD7-4765-A57B-3E08331E4749} = {57A04B72-8088-4F75-A582-1158CF8291F7} - {411A9E0E-FDC6-4E25-828A-0C2CD1CD96F8} = {F6E3A728-AE77-4D02-BAC8-82FBC1402DDA} - {D9468BE6-8242-4E7F-9470-EE6FDA8832D0} = {57A04B72-8088-4F75-A582-1158CF8291F7} - {779D577B-2287-4FB8-8760-D653DBB87109} = {57A04B72-8088-4F75-A582-1158CF8291F7} - {175CE3A0-0D8C-48DB-9D8D-C7BBD9591813} = {57A04B72-8088-4F75-A582-1158CF8291F7} - {4EF23885-C1DD-4AE0-B6AF-DB045A0E83BD} = {57A04B72-8088-4F75-A582-1158CF8291F7} - {3FDB2B34-A754-49C5-AEB2-16BC6E92372A} = {57A04B72-8088-4F75-A582-1158CF8291F7} - {6EEF2080-FAA9-4403-A7B4-0AA91E5A390F} = {57A04B72-8088-4F75-A582-1158CF8291F7} - {4E16E633-5AA2-426E-B5C9-D212D4F40B44} = {57A04B72-8088-4F75-A582-1158CF8291F7} - {10C356B1-0E60-4385-A3FA-3670159B5660} = {57A04B72-8088-4F75-A582-1158CF8291F7} - {FD08732A-60BB-4ACB-9AD2-F17C8BE694C8} = {4EACDBBC-BCD7-4765-A57B-3E08331E4749} - {10B4E062-4985-4897-99DB-745DFBEED055} = {4EACDBBC-BCD7-4765-A57B-3E08331E4749} - {9D841A99-B3EA-4C35-86D0-F27C69E72B3E} = {47697CDB-27B6-4B05-B4F8-0CBE6F6EDF97} - {63872633-A00E-45DE-AB4D-61DFF4B02370} = {47697CDB-27B6-4B05-B4F8-0CBE6F6EDF97} - {EF32E669-774D-4144-A9AB-06E5094F1B5F} = {0F0D4998-8F5D-4467-A909-BB192C4B3B4B} - {BB0DC9D7-93EB-4668-82B2-AA7503685A38} = {0F0D4998-8F5D-4467-A909-BB192C4B3B4B} - {2019313B-86BD-445C-A6F9-1BCEC49FBA9B} = {486ADF86-DD89-4E19-B805-9D94F19800D9} - {B044A5E8-D914-4671-8724-A92ADAB04C5A} = {486ADF86-DD89-4E19-B805-9D94F19800D9} - EndGlobalSection - GlobalSection(ExtensibilityGlobals) = postSolution - EnterpriseLibraryConfigurationToolBinariesPath = packages\Unity.2.1.505.0\lib\NET35;packages\Unity.2.1.505.2\lib\NET35 - SolutionGuid = {2955716E-0882-41EC-935D-C95694C5C30F} - EndGlobalSection - GlobalSection(MonoDevelopProperties) = preSolution - StartupItem = NzbDrone.Console\NzbDrone.Console.csproj - EndGlobalSection - GlobalSection(JSLint) = preSolution - SolutionConfigurationLocation = JSLintOptions.xml + {7BEDCC1E-0763-4553-B32B-0430B334ACBB} = {4EACDBBC-BCD7-4765-A57B-3E08331E4749} + {CCE9ABBC-96BA-425B-8140-DC8102290BE3} = {4EACDBBC-BCD7-4765-A57B-3E08331E4749} + {BE8533CC-A1ED-46A6-811F-2FA29CC6AD80} = {F6E3A728-AE77-4D02-BAC8-82FBC1402DDA} EndGlobalSection EndGlobal diff --git a/src/Radarr.Windows.sln b/src/Radarr.Windows.sln index 0b5389717..8c1573c07 100644 --- a/src/Radarr.Windows.sln +++ b/src/Radarr.Windows.sln @@ -1,302 +1,225 @@  Microsoft Visual Studio Solution File, Format Version 12.00 -# Visual Studio Version 16 -VisualStudioVersion = 16.0.29025.244 -MinimumVisualStudioVersion = 10.0.40219.1 -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Radarr.Console", "NzbDrone.Console\Radarr.Console.csproj", "{2019313B-86BD-445C-A6F9-1BCEC49FBA9B}" - ProjectSection(ProjectDependencies) = postProject - {EF32E669-774D-4144-A9AB-06E5094F1B5F} = {EF32E669-774D-4144-A9AB-06E5094F1B5F} - {0D62DE9B-33B5-4CC2-B288-E8561C27FF35} = {0D62DE9B-33B5-4CC2-B288-E8561C27FF35} - {D171CDAA-22BE-4598-984B-F9B4A7A6D30C} = {D171CDAA-22BE-4598-984B-F9B4A7A6D30C} - {C5953DAB-89DB-46D9-A401-D620F54B776E} = {C5953DAB-89DB-46D9-A401-D620F54B776E} - {38497DC6-E488-4B9E-A973-A1A7961B33C4} = {38497DC6-E488-4B9E-A973-A1A7961B33C4} - {BB0DC9D7-93EB-4668-82B2-AA7503685A38} = {BB0DC9D7-93EB-4668-82B2-AA7503685A38} - {0B4F09FE-275D-4A94-9FEF-CA1594639AF5} = {0B4F09FE-275D-4A94-9FEF-CA1594639AF5} - EndProjectSection -EndProject +# Visual Studio 15 +VisualStudioVersion = 15.0.26124.0 +MinimumVisualStudioVersion = 15.0.26124.0 Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Tests", "Tests", "{57A04B72-8088-4F75-A582-1158CF8291F7}" EndProject Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Test.Common", "Test.Common", "{47697CDB-27B6-4B05-B4F8-0CBE6F6EDF97}" EndProject Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "WindowsServiceHelpers", "WindowsServiceHelpers", "{F9E67978-5CD6-4A5F-827B-4249711C0B02}" EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "ServiceInstall", "ServiceHelpers\ServiceInstall\ServiceInstall.csproj", "{6BCE712F-846D-4846-9D1B-A66B858DA755}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "ServiceUninstall", "ServiceHelpers\ServiceUninstall\ServiceUninstall.csproj", "{700D0B95-95CD-43F3-B6C9-FAA0FC1358D4}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = ".nuget", ".nuget", "{1E6B3CBE-1578-41C1-9BF9-78D818740BE9}" - ProjectSection(SolutionItems) = preProject - .nuget\NuGet.exe = .nuget\NuGet.exe - EndProjectSection +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "ServiceHelpers", "ServiceHelpers", "{CF5BF374-71E4-485E-A74C-39B581323D9A}" EndProject Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Host", "Host", "{486ADF86-DD89-4E19-B805-9D94F19800D9}" EndProject Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "External", "External", "{F6E3A728-AE77-4D02-BAC8-82FBC1402DDA}" EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Marr.Data", "Marr.Data\Marr.Data.csproj", "{F6FC6BE7-0847-4817-A1ED-223DC647C3D7}" -EndProject Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Platform", "Platform", "{0F0D4998-8F5D-4467-A909-BB192C4B3B4B}" EndProject Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Platform", "Platform", "{4EACDBBC-BCD7-4765-A57B-3E08331E4749}" EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "MonoTorrent", "MonoTorrent\MonoTorrent.csproj", "{411A9E0E-FDC6-4E25-828A-0C2CD1CD96F8}" +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Radarr.Api", "NzbDrone.Api\Radarr.Api.csproj", "{59D9DA5C-FD93-4599-BE2F-AFC540B180C8}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Radarr.Api.V2", "Radarr.Api.V2\Radarr.Api.V2.csproj", "{D1D48E1D-9EEB-470B-992C-3954F90FB014}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Radarr.Http", "Radarr.Http\Radarr.Http.csproj", "{F8A02FD4-A7A4-40D0-BB81-6319105A3302}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Marr.Data", "Marr.Data\Marr.Data.csproj", "{8D7D5F17-96BB-4EDD-A6E6-3BCA2D6B401A}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "MonoTorrent", "MonoTorrent\MonoTorrent.csproj", "{BE8533CC-A1ED-46A6-811F-2FA29CC6AD80}" EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Radarr.Http", "Radarr.Http\Radarr.Http.csproj", "{C5953DAB-89DB-46D9-A401-D620F54B776E}" +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Radarr.Api.Test", "NzbDrone.Api.Test\Radarr.Api.Test.csproj", "{E2EA47B1-6996-417D-A6EC-28C4F202715C}" EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Radarr.Api.V2", "Radarr.Api.V2\Radarr.Api.V2.csproj", "{38497DC6-E488-4B9E-A973-A1A7961B33C4}" +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Radarr.Automation.Test", "NzbDrone.Automation.Test\Radarr.Automation.Test.csproj", "{2356C987-F992-4084-9DA2-5DAD1DA35E85}" EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Radarr.Api", "NzbDrone.Api\Radarr.Api.csproj", "{D171CDAA-22BE-4598-984B-F9B4A7A6D30C}" +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Radarr.Common.Test", "NzbDrone.Common.Test\Radarr.Common.Test.csproj", "{A628FEA4-75CC-4039-8823-27258C55D2BF}" EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Radarr.Common", "NzbDrone.Common\Radarr.Common.csproj", "{BA949432-D73A-425E-B4B1-4292405DFAF6}" +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Radarr.Common", "NzbDrone.Common\Radarr.Common.csproj", "{74BF1D46-710C-42C1-82DD-34B42C58F843}" EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Radarr.Core", "NzbDrone.Core\Radarr.Core.csproj", "{0D62DE9B-33B5-4CC2-B288-E8561C27FF35}" +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Radarr.Console", "NzbDrone.Console\Radarr.Console.csproj", "{AEA9EE9A-19BF-45CB-93D9-52CA443FD313}" EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Radarr.SignalR", "NzbDrone.SignalR\Radarr.SignalR.csproj", "{0B4F09FE-275D-4A94-9FEF-CA1594639AF5}" +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Radarr.Core.Test", "NzbDrone.Core.Test\Radarr.Core.Test.csproj", "{04ECC74F-C340-4987-863E-757FB62D27C9}" EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Radarr.Update", "NzbDrone.Update\Radarr.Update.csproj", "{D1C4B2AA-8776-4429-A3E3-71146C230037}" +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Radarr.Core", "NzbDrone.Core\Radarr.Core.csproj", "{82EBE37B-E3A7-4365-9B06-FA647BCC7AF0}" EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Radarr.Api.Test", "NzbDrone.Api.Test\Radarr.Api.Test.csproj", "{D9468BE6-8242-4E7F-9470-EE6FDA8832D0}" +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Radarr.Host.Test", "NzbDrone.Host.Test\Radarr.Host.Test.csproj", "{6D4DE6D5-9594-4AE4-85E0-41C7FFCCED92}" EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Radarr.Automation.Test", "NzbDrone.Automation.Test\Radarr.Automation.Test.csproj", "{779D577B-2287-4FB8-8760-D653DBB87109}" +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Radarr.Host", "NzbDrone.Host\Radarr.Host.csproj", "{B6913970-FB88-4F6F-83F9-00728218E3FD}" EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Radarr.Common.Test", "NzbDrone.Common.Test\Radarr.Common.Test.csproj", "{175CE3A0-0D8C-48DB-9D8D-C7BBD9591813}" +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Radarr.Integration.Test", "NzbDrone.Integration.Test\Radarr.Integration.Test.csproj", "{6D5618FB-45B9-44AE-BF99-8EF37519CB30}" EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Radarr.Core.Test", "NzbDrone.Core.Test\Radarr.Core.Test.csproj", "{4EF23885-C1DD-4AE0-B6AF-DB045A0E83BD}" +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Radarr.Libraries.Test", "NzbDrone.Libraries.Test\Radarr.Libraries.Test.csproj", "{1969394D-3181-404F-8E2C-E3E71A5BAD30}" EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Radarr.Host.Test", "NzbDrone.Host.Test\Radarr.Host.Test.csproj", "{3FDB2B34-A754-49C5-AEB2-16BC6E92372A}" +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Radarr.Mono.Test", "NzbDrone.Mono.Test\Radarr.Mono.Test.csproj", "{CCE9ABBC-96BA-425B-8140-DC8102290BE3}" EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Radarr.Integration.Test", "NzbDrone.Integration.Test\Radarr.Integration.Test.csproj", "{6EEF2080-FAA9-4403-A7B4-0AA91E5A390F}" +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Radarr.Mono", "NzbDrone.Mono\Radarr.Mono.csproj", "{504CD0A8-523B-4A0E-99BE-C179DECA9B76}" EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Radarr.Libraries.Test", "NzbDrone.Libraries.Test\Radarr.Libraries.Test.csproj", "{4E16E633-5AA2-426E-B5C9-D212D4F40B44}" +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Radarr.SignalR", "NzbDrone.SignalR\Radarr.SignalR.csproj", "{B30BE76E-4D20-47AA-9E03-E32613D888CC}" EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Radarr.Update.Test", "NzbDrone.Update.Test\Radarr.Update.Test.csproj", "{10C356B1-0E60-4385-A3FA-3670159B5660}" +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Radarr.Test.Common", "NzbDrone.Test.Common\Radarr.Test.Common.csproj", "{B8706292-5BE8-4099-94CA-F26DDD3757E0}" EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Radarr.Mono.Test", "NzbDrone.Mono.Test\Radarr.Mono.Test.csproj", "{FD08732A-60BB-4ACB-9AD2-F17C8BE694C8}" +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Radarr.Test.Dummy", "NzbDrone.Test.Dummy\Radarr.Test.Dummy.csproj", "{AFA7F48E-DB81-4E39-843B-78715C6ADF0D}" EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Radarr.Windows.Test", "NzbDrone.Windows.Test\Radarr.Windows.Test.csproj", "{10B4E062-4985-4897-99DB-745DFBEED055}" +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Radarr.Update.Test", "NzbDrone.Update.Test\Radarr.Update.Test.csproj", "{A76441EE-AB2E-4E9D-8CD3-58BE5A8514D3}" EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Radarr.Test.Common", "NzbDrone.Test.Common\Radarr.Test.Common.csproj", "{9D841A99-B3EA-4C35-86D0-F27C69E72B3E}" +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Radarr.Update", "NzbDrone.Update\Radarr.Update.csproj", "{4FBA2CBC-B022-41D6-B6DA-3166991B9172}" EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Radarr.Test.Dummy", "NzbDrone.Test.Dummy\Radarr.Test.Dummy.csproj", "{63872633-A00E-45DE-AB4D-61DFF4B02370}" +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Radarr.Windows.Test", "NzbDrone.Windows.Test\Radarr.Windows.Test.csproj", "{7BEDCC1E-0763-4553-B32B-0430B334ACBB}" EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Radarr.Mono", "NzbDrone.Mono\Radarr.Mono.csproj", "{EF32E669-774D-4144-A9AB-06E5094F1B5F}" +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Radarr.Windows", "NzbDrone.Windows\Radarr.Windows.csproj", "{3F076242-A6FA-4657-8606-AF1D150367FC}" EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Radarr.Windows", "NzbDrone.Windows\Radarr.Windows.csproj", "{BB0DC9D7-93EB-4668-82B2-AA7503685A38}" +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Radarr", "NzbDrone\Radarr.csproj", "{0DC43D36-6680-4237-BE39-D5D094DBCE29}" EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Radarr", "NzbDrone\Radarr.csproj", "{2F5F4802-BF35-476F-8F26-D53863C9B595}" +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ServiceInstall", "ServiceHelpers\ServiceInstall\ServiceInstall.csproj", "{7DA231E8-A31D-4F53-8760-820861B6CE65}" EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Radarr.Host", "NzbDrone.Host\Radarr.Host.csproj", "{B044A5E8-D914-4671-8724-A92ADAB04C5A}" +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ServiceUninstall", "ServiceHelpers\ServiceUninstall\ServiceUninstall.csproj", "{0E2B067C-4A97-430C-8767-D19ACB09A63A}" EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution - Debug|x86 = Debug|x86 - Mono|x86 = Mono|x86 - Release|x86 = Release|x86 - EndGlobalSection - GlobalSection(ProjectConfigurationPlatforms) = postSolution - {6BCE712F-846D-4846-9D1B-A66B858DA755}.Debug|x86.ActiveCfg = Debug|x86 - {6BCE712F-846D-4846-9D1B-A66B858DA755}.Debug|x86.Build.0 = Debug|x86 - {6BCE712F-846D-4846-9D1B-A66B858DA755}.Mono|x86.ActiveCfg = Debug|x86 - {6BCE712F-846D-4846-9D1B-A66B858DA755}.Release|x86.ActiveCfg = Release|x86 - {6BCE712F-846D-4846-9D1B-A66B858DA755}.Release|x86.Build.0 = Release|x86 - {700D0B95-95CD-43F3-B6C9-FAA0FC1358D4}.Debug|x86.ActiveCfg = Debug|x86 - {700D0B95-95CD-43F3-B6C9-FAA0FC1358D4}.Debug|x86.Build.0 = Debug|x86 - {700D0B95-95CD-43F3-B6C9-FAA0FC1358D4}.Mono|x86.ActiveCfg = Debug|x86 - {700D0B95-95CD-43F3-B6C9-FAA0FC1358D4}.Release|x86.ActiveCfg = Release|x86 - {700D0B95-95CD-43F3-B6C9-FAA0FC1358D4}.Release|x86.Build.0 = Release|x86 - {F6FC6BE7-0847-4817-A1ED-223DC647C3D7}.Debug|x86.ActiveCfg = Debug|x86 - {F6FC6BE7-0847-4817-A1ED-223DC647C3D7}.Debug|x86.Build.0 = Debug|x86 - {F6FC6BE7-0847-4817-A1ED-223DC647C3D7}.Mono|x86.ActiveCfg = Release|x86 - {F6FC6BE7-0847-4817-A1ED-223DC647C3D7}.Mono|x86.Build.0 = Release|x86 - {F6FC6BE7-0847-4817-A1ED-223DC647C3D7}.Release|x86.ActiveCfg = Release|x86 - {F6FC6BE7-0847-4817-A1ED-223DC647C3D7}.Release|x86.Build.0 = Release|x86 - {411A9E0E-FDC6-4E25-828A-0C2CD1CD96F8}.Debug|x86.ActiveCfg = Debug|x86 - {411A9E0E-FDC6-4E25-828A-0C2CD1CD96F8}.Debug|x86.Build.0 = Debug|x86 - {411A9E0E-FDC6-4E25-828A-0C2CD1CD96F8}.Mono|x86.ActiveCfg = Release|x86 - {411A9E0E-FDC6-4E25-828A-0C2CD1CD96F8}.Mono|x86.Build.0 = Release|x86 - {411A9E0E-FDC6-4E25-828A-0C2CD1CD96F8}.Release|x86.ActiveCfg = Release|x86 - {411A9E0E-FDC6-4E25-828A-0C2CD1CD96F8}.Release|x86.Build.0 = Release|x86 - {C5953DAB-89DB-46D9-A401-D620F54B776E}.Debug|x86.ActiveCfg = Debug|x86 - {C5953DAB-89DB-46D9-A401-D620F54B776E}.Debug|x86.Build.0 = Debug|x86 - {C5953DAB-89DB-46D9-A401-D620F54B776E}.Mono|x86.ActiveCfg = Release|x86 - {C5953DAB-89DB-46D9-A401-D620F54B776E}.Mono|x86.Build.0 = Release|x86 - {C5953DAB-89DB-46D9-A401-D620F54B776E}.Release|x86.ActiveCfg = Release|x86 - {C5953DAB-89DB-46D9-A401-D620F54B776E}.Release|x86.Build.0 = Release|x86 - {38497DC6-E488-4B9E-A973-A1A7961B33C4}.Debug|x86.ActiveCfg = Debug|x86 - {38497DC6-E488-4B9E-A973-A1A7961B33C4}.Debug|x86.Build.0 = Debug|x86 - {38497DC6-E488-4B9E-A973-A1A7961B33C4}.Mono|x86.ActiveCfg = Release|x86 - {38497DC6-E488-4B9E-A973-A1A7961B33C4}.Mono|x86.Build.0 = Release|x86 - {38497DC6-E488-4B9E-A973-A1A7961B33C4}.Release|x86.ActiveCfg = Release|x86 - {38497DC6-E488-4B9E-A973-A1A7961B33C4}.Release|x86.Build.0 = Release|x86 - {D171CDAA-22BE-4598-984B-F9B4A7A6D30C}.Debug|x86.ActiveCfg = Debug|x86 - {D171CDAA-22BE-4598-984B-F9B4A7A6D30C}.Debug|x86.Build.0 = Debug|x86 - {D171CDAA-22BE-4598-984B-F9B4A7A6D30C}.Mono|x86.ActiveCfg = Release|x86 - {D171CDAA-22BE-4598-984B-F9B4A7A6D30C}.Mono|x86.Build.0 = Release|x86 - {D171CDAA-22BE-4598-984B-F9B4A7A6D30C}.Release|x86.ActiveCfg = Release|x86 - {D171CDAA-22BE-4598-984B-F9B4A7A6D30C}.Release|x86.Build.0 = Release|x86 - {BA949432-D73A-425E-B4B1-4292405DFAF6}.Debug|x86.ActiveCfg = Debug|x86 - {BA949432-D73A-425E-B4B1-4292405DFAF6}.Debug|x86.Build.0 = Debug|x86 - {BA949432-D73A-425E-B4B1-4292405DFAF6}.Mono|x86.ActiveCfg = Release|x86 - {BA949432-D73A-425E-B4B1-4292405DFAF6}.Mono|x86.Build.0 = Release|x86 - {BA949432-D73A-425E-B4B1-4292405DFAF6}.Release|x86.ActiveCfg = Release|x86 - {BA949432-D73A-425E-B4B1-4292405DFAF6}.Release|x86.Build.0 = Release|x86 - {0D62DE9B-33B5-4CC2-B288-E8561C27FF35}.Debug|x86.ActiveCfg = Debug|x86 - {0D62DE9B-33B5-4CC2-B288-E8561C27FF35}.Debug|x86.Build.0 = Debug|x86 - {0D62DE9B-33B5-4CC2-B288-E8561C27FF35}.Mono|x86.ActiveCfg = Release|x86 - {0D62DE9B-33B5-4CC2-B288-E8561C27FF35}.Mono|x86.Build.0 = Release|x86 - {0D62DE9B-33B5-4CC2-B288-E8561C27FF35}.Release|x86.ActiveCfg = Release|x86 - {0D62DE9B-33B5-4CC2-B288-E8561C27FF35}.Release|x86.Build.0 = Release|x86 - {0B4F09FE-275D-4A94-9FEF-CA1594639AF5}.Debug|x86.ActiveCfg = Debug|x86 - {0B4F09FE-275D-4A94-9FEF-CA1594639AF5}.Debug|x86.Build.0 = Debug|x86 - {0B4F09FE-275D-4A94-9FEF-CA1594639AF5}.Mono|x86.ActiveCfg = Release|x86 - {0B4F09FE-275D-4A94-9FEF-CA1594639AF5}.Mono|x86.Build.0 = Release|x86 - {0B4F09FE-275D-4A94-9FEF-CA1594639AF5}.Release|x86.ActiveCfg = Release|x86 - {0B4F09FE-275D-4A94-9FEF-CA1594639AF5}.Release|x86.Build.0 = Release|x86 - {D1C4B2AA-8776-4429-A3E3-71146C230037}.Debug|x86.ActiveCfg = Debug|x86 - {D1C4B2AA-8776-4429-A3E3-71146C230037}.Debug|x86.Build.0 = Debug|x86 - {D1C4B2AA-8776-4429-A3E3-71146C230037}.Mono|x86.ActiveCfg = Release|x86 - {D1C4B2AA-8776-4429-A3E3-71146C230037}.Mono|x86.Build.0 = Release|x86 - {D1C4B2AA-8776-4429-A3E3-71146C230037}.Release|x86.ActiveCfg = Release|x86 - {D1C4B2AA-8776-4429-A3E3-71146C230037}.Release|x86.Build.0 = Release|x86 - {D9468BE6-8242-4E7F-9470-EE6FDA8832D0}.Debug|x86.ActiveCfg = Debug|x86 - {D9468BE6-8242-4E7F-9470-EE6FDA8832D0}.Debug|x86.Build.0 = Debug|x86 - {D9468BE6-8242-4E7F-9470-EE6FDA8832D0}.Mono|x86.ActiveCfg = Release|x86 - {D9468BE6-8242-4E7F-9470-EE6FDA8832D0}.Mono|x86.Build.0 = Release|x86 - {D9468BE6-8242-4E7F-9470-EE6FDA8832D0}.Release|x86.ActiveCfg = Release|x86 - {D9468BE6-8242-4E7F-9470-EE6FDA8832D0}.Release|x86.Build.0 = Release|x86 - {779D577B-2287-4FB8-8760-D653DBB87109}.Debug|x86.ActiveCfg = Debug|x86 - {779D577B-2287-4FB8-8760-D653DBB87109}.Debug|x86.Build.0 = Debug|x86 - {779D577B-2287-4FB8-8760-D653DBB87109}.Mono|x86.ActiveCfg = Release|x86 - {779D577B-2287-4FB8-8760-D653DBB87109}.Mono|x86.Build.0 = Release|x86 - {779D577B-2287-4FB8-8760-D653DBB87109}.Release|x86.ActiveCfg = Release|x86 - {779D577B-2287-4FB8-8760-D653DBB87109}.Release|x86.Build.0 = Release|x86 - {175CE3A0-0D8C-48DB-9D8D-C7BBD9591813}.Debug|x86.ActiveCfg = Debug|x86 - {175CE3A0-0D8C-48DB-9D8D-C7BBD9591813}.Debug|x86.Build.0 = Debug|x86 - {175CE3A0-0D8C-48DB-9D8D-C7BBD9591813}.Mono|x86.ActiveCfg = Release|x86 - {175CE3A0-0D8C-48DB-9D8D-C7BBD9591813}.Mono|x86.Build.0 = Release|x86 - {175CE3A0-0D8C-48DB-9D8D-C7BBD9591813}.Release|x86.ActiveCfg = Release|x86 - {175CE3A0-0D8C-48DB-9D8D-C7BBD9591813}.Release|x86.Build.0 = Release|x86 - {4EF23885-C1DD-4AE0-B6AF-DB045A0E83BD}.Debug|x86.ActiveCfg = Debug|x86 - {4EF23885-C1DD-4AE0-B6AF-DB045A0E83BD}.Debug|x86.Build.0 = Debug|x86 - {4EF23885-C1DD-4AE0-B6AF-DB045A0E83BD}.Mono|x86.ActiveCfg = Release|x86 - {4EF23885-C1DD-4AE0-B6AF-DB045A0E83BD}.Mono|x86.Build.0 = Release|x86 - {4EF23885-C1DD-4AE0-B6AF-DB045A0E83BD}.Release|x86.ActiveCfg = Release|x86 - {4EF23885-C1DD-4AE0-B6AF-DB045A0E83BD}.Release|x86.Build.0 = Release|x86 - {3FDB2B34-A754-49C5-AEB2-16BC6E92372A}.Debug|x86.ActiveCfg = Debug|x86 - {3FDB2B34-A754-49C5-AEB2-16BC6E92372A}.Debug|x86.Build.0 = Debug|x86 - {3FDB2B34-A754-49C5-AEB2-16BC6E92372A}.Mono|x86.ActiveCfg = Release|x86 - {3FDB2B34-A754-49C5-AEB2-16BC6E92372A}.Mono|x86.Build.0 = Release|x86 - {3FDB2B34-A754-49C5-AEB2-16BC6E92372A}.Release|x86.ActiveCfg = Release|x86 - {3FDB2B34-A754-49C5-AEB2-16BC6E92372A}.Release|x86.Build.0 = Release|x86 - {6EEF2080-FAA9-4403-A7B4-0AA91E5A390F}.Debug|x86.ActiveCfg = Debug|x86 - {6EEF2080-FAA9-4403-A7B4-0AA91E5A390F}.Debug|x86.Build.0 = Debug|x86 - {6EEF2080-FAA9-4403-A7B4-0AA91E5A390F}.Mono|x86.ActiveCfg = Release|x86 - {6EEF2080-FAA9-4403-A7B4-0AA91E5A390F}.Mono|x86.Build.0 = Release|x86 - {6EEF2080-FAA9-4403-A7B4-0AA91E5A390F}.Release|x86.ActiveCfg = Release|x86 - {6EEF2080-FAA9-4403-A7B4-0AA91E5A390F}.Release|x86.Build.0 = Release|x86 - {4E16E633-5AA2-426E-B5C9-D212D4F40B44}.Debug|x86.ActiveCfg = Debug|x86 - {4E16E633-5AA2-426E-B5C9-D212D4F40B44}.Debug|x86.Build.0 = Debug|x86 - {4E16E633-5AA2-426E-B5C9-D212D4F40B44}.Mono|x86.ActiveCfg = Release|x86 - {4E16E633-5AA2-426E-B5C9-D212D4F40B44}.Mono|x86.Build.0 = Release|x86 - {4E16E633-5AA2-426E-B5C9-D212D4F40B44}.Release|x86.ActiveCfg = Release|x86 - {4E16E633-5AA2-426E-B5C9-D212D4F40B44}.Release|x86.Build.0 = Release|x86 - {10C356B1-0E60-4385-A3FA-3670159B5660}.Debug|x86.ActiveCfg = Debug|x86 - {10C356B1-0E60-4385-A3FA-3670159B5660}.Debug|x86.Build.0 = Debug|x86 - {10C356B1-0E60-4385-A3FA-3670159B5660}.Mono|x86.ActiveCfg = Release|x86 - {10C356B1-0E60-4385-A3FA-3670159B5660}.Mono|x86.Build.0 = Release|x86 - {10C356B1-0E60-4385-A3FA-3670159B5660}.Release|x86.ActiveCfg = Release|x86 - {10C356B1-0E60-4385-A3FA-3670159B5660}.Release|x86.Build.0 = Release|x86 - {FD08732A-60BB-4ACB-9AD2-F17C8BE694C8}.Debug|x86.ActiveCfg = Debug|x86 - {FD08732A-60BB-4ACB-9AD2-F17C8BE694C8}.Debug|x86.Build.0 = Debug|x86 - {FD08732A-60BB-4ACB-9AD2-F17C8BE694C8}.Mono|x86.ActiveCfg = Release|x86 - {FD08732A-60BB-4ACB-9AD2-F17C8BE694C8}.Mono|x86.Build.0 = Release|x86 - {FD08732A-60BB-4ACB-9AD2-F17C8BE694C8}.Release|x86.ActiveCfg = Release|x86 - {FD08732A-60BB-4ACB-9AD2-F17C8BE694C8}.Release|x86.Build.0 = Release|x86 - {10B4E062-4985-4897-99DB-745DFBEED055}.Debug|x86.ActiveCfg = Debug|x86 - {10B4E062-4985-4897-99DB-745DFBEED055}.Debug|x86.Build.0 = Debug|x86 - {10B4E062-4985-4897-99DB-745DFBEED055}.Mono|x86.ActiveCfg = Release|x86 - {10B4E062-4985-4897-99DB-745DFBEED055}.Mono|x86.Build.0 = Release|x86 - {10B4E062-4985-4897-99DB-745DFBEED055}.Release|x86.ActiveCfg = Release|x86 - {10B4E062-4985-4897-99DB-745DFBEED055}.Release|x86.Build.0 = Release|x86 - {9D841A99-B3EA-4C35-86D0-F27C69E72B3E}.Debug|x86.ActiveCfg = Debug|x86 - {9D841A99-B3EA-4C35-86D0-F27C69E72B3E}.Debug|x86.Build.0 = Debug|x86 - {9D841A99-B3EA-4C35-86D0-F27C69E72B3E}.Mono|x86.ActiveCfg = Release|x86 - {9D841A99-B3EA-4C35-86D0-F27C69E72B3E}.Mono|x86.Build.0 = Release|x86 - {9D841A99-B3EA-4C35-86D0-F27C69E72B3E}.Release|x86.ActiveCfg = Release|x86 - {9D841A99-B3EA-4C35-86D0-F27C69E72B3E}.Release|x86.Build.0 = Release|x86 - {63872633-A00E-45DE-AB4D-61DFF4B02370}.Debug|x86.ActiveCfg = Debug|x86 - {63872633-A00E-45DE-AB4D-61DFF4B02370}.Debug|x86.Build.0 = Debug|x86 - {63872633-A00E-45DE-AB4D-61DFF4B02370}.Mono|x86.ActiveCfg = Release|x86 - {63872633-A00E-45DE-AB4D-61DFF4B02370}.Mono|x86.Build.0 = Release|x86 - {63872633-A00E-45DE-AB4D-61DFF4B02370}.Release|x86.ActiveCfg = Release|x86 - {63872633-A00E-45DE-AB4D-61DFF4B02370}.Release|x86.Build.0 = Release|x86 - {EF32E669-774D-4144-A9AB-06E5094F1B5F}.Debug|x86.ActiveCfg = Debug|x86 - {EF32E669-774D-4144-A9AB-06E5094F1B5F}.Debug|x86.Build.0 = Debug|x86 - {EF32E669-774D-4144-A9AB-06E5094F1B5F}.Mono|x86.ActiveCfg = Release|x86 - {EF32E669-774D-4144-A9AB-06E5094F1B5F}.Mono|x86.Build.0 = Release|x86 - {EF32E669-774D-4144-A9AB-06E5094F1B5F}.Release|x86.ActiveCfg = Release|x86 - {EF32E669-774D-4144-A9AB-06E5094F1B5F}.Release|x86.Build.0 = Release|x86 - {BB0DC9D7-93EB-4668-82B2-AA7503685A38}.Debug|x86.ActiveCfg = Debug|x86 - {BB0DC9D7-93EB-4668-82B2-AA7503685A38}.Debug|x86.Build.0 = Debug|x86 - {BB0DC9D7-93EB-4668-82B2-AA7503685A38}.Mono|x86.ActiveCfg = Release|x86 - {BB0DC9D7-93EB-4668-82B2-AA7503685A38}.Mono|x86.Build.0 = Release|x86 - {BB0DC9D7-93EB-4668-82B2-AA7503685A38}.Release|x86.ActiveCfg = Release|x86 - {BB0DC9D7-93EB-4668-82B2-AA7503685A38}.Release|x86.Build.0 = Release|x86 - {2F5F4802-BF35-476F-8F26-D53863C9B595}.Debug|x86.ActiveCfg = Debug|x86 - {2F5F4802-BF35-476F-8F26-D53863C9B595}.Debug|x86.Build.0 = Debug|x86 - {2F5F4802-BF35-476F-8F26-D53863C9B595}.Mono|x86.ActiveCfg = Release|x86 - {2F5F4802-BF35-476F-8F26-D53863C9B595}.Mono|x86.Build.0 = Release|x86 - {2F5F4802-BF35-476F-8F26-D53863C9B595}.Release|x86.ActiveCfg = Release|x86 - {2F5F4802-BF35-476F-8F26-D53863C9B595}.Release|x86.Build.0 = Release|x86 - {2019313B-86BD-445C-A6F9-1BCEC49FBA9B}.Debug|x86.ActiveCfg = Debug|x86 - {2019313B-86BD-445C-A6F9-1BCEC49FBA9B}.Debug|x86.Build.0 = Debug|x86 - {2019313B-86BD-445C-A6F9-1BCEC49FBA9B}.Mono|x86.ActiveCfg = Release|x86 - {2019313B-86BD-445C-A6F9-1BCEC49FBA9B}.Mono|x86.Build.0 = Release|x86 - {2019313B-86BD-445C-A6F9-1BCEC49FBA9B}.Release|x86.ActiveCfg = Release|x86 - {2019313B-86BD-445C-A6F9-1BCEC49FBA9B}.Release|x86.Build.0 = Release|x86 - {B044A5E8-D914-4671-8724-A92ADAB04C5A}.Debug|x86.ActiveCfg = Debug|x86 - {B044A5E8-D914-4671-8724-A92ADAB04C5A}.Debug|x86.Build.0 = Debug|x86 - {B044A5E8-D914-4671-8724-A92ADAB04C5A}.Mono|x86.ActiveCfg = Release|x86 - {B044A5E8-D914-4671-8724-A92ADAB04C5A}.Mono|x86.Build.0 = Release|x86 - {B044A5E8-D914-4671-8724-A92ADAB04C5A}.Release|x86.ActiveCfg = Release|x86 - {B044A5E8-D914-4671-8724-A92ADAB04C5A}.Release|x86.Build.0 = Release|x86 + Debug|Any CPU = Debug|Any CPU + Release|Any CPU = Release|Any CPU EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {D1D48E1D-9EEB-470B-992C-3954F90FB014}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {D1D48E1D-9EEB-470B-992C-3954F90FB014}.Debug|Any CPU.Build.0 = Debug|Any CPU + {D1D48E1D-9EEB-470B-992C-3954F90FB014}.Release|Any CPU.ActiveCfg = Release|Any CPU + {D1D48E1D-9EEB-470B-992C-3954F90FB014}.Release|Any CPU.Build.0 = Release|Any CPU + {F8A02FD4-A7A4-40D0-BB81-6319105A3302}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {F8A02FD4-A7A4-40D0-BB81-6319105A3302}.Debug|Any CPU.Build.0 = Debug|Any CPU + {F8A02FD4-A7A4-40D0-BB81-6319105A3302}.Release|Any CPU.ActiveCfg = Release|Any CPU + {F8A02FD4-A7A4-40D0-BB81-6319105A3302}.Release|Any CPU.Build.0 = Release|Any CPU + {8D7D5F17-96BB-4EDD-A6E6-3BCA2D6B401A}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {8D7D5F17-96BB-4EDD-A6E6-3BCA2D6B401A}.Debug|Any CPU.Build.0 = Debug|Any CPU + {8D7D5F17-96BB-4EDD-A6E6-3BCA2D6B401A}.Release|Any CPU.ActiveCfg = Release|Any CPU + {8D7D5F17-96BB-4EDD-A6E6-3BCA2D6B401A}.Release|Any CPU.Build.0 = Release|Any CPU + {BE8533CC-A1ED-46A6-811F-2FA29CC6AD80}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {BE8533CC-A1ED-46A6-811F-2FA29CC6AD80}.Debug|Any CPU.Build.0 = Debug|Any CPU + {BE8533CC-A1ED-46A6-811F-2FA29CC6AD80}.Release|Any CPU.ActiveCfg = Release|Any CPU + {BE8533CC-A1ED-46A6-811F-2FA29CC6AD80}.Release|Any CPU.Build.0 = Release|Any CPU + {E2EA47B1-6996-417D-A6EC-28C4F202715C}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {E2EA47B1-6996-417D-A6EC-28C4F202715C}.Debug|Any CPU.Build.0 = Debug|Any CPU + {E2EA47B1-6996-417D-A6EC-28C4F202715C}.Release|Any CPU.ActiveCfg = Release|Any CPU + {E2EA47B1-6996-417D-A6EC-28C4F202715C}.Release|Any CPU.Build.0 = Release|Any CPU + {2356C987-F992-4084-9DA2-5DAD1DA35E85}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {2356C987-F992-4084-9DA2-5DAD1DA35E85}.Debug|Any CPU.Build.0 = Debug|Any CPU + {2356C987-F992-4084-9DA2-5DAD1DA35E85}.Release|Any CPU.ActiveCfg = Release|Any CPU + {2356C987-F992-4084-9DA2-5DAD1DA35E85}.Release|Any CPU.Build.0 = Release|Any CPU + {A628FEA4-75CC-4039-8823-27258C55D2BF}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {A628FEA4-75CC-4039-8823-27258C55D2BF}.Debug|Any CPU.Build.0 = Debug|Any CPU + {A628FEA4-75CC-4039-8823-27258C55D2BF}.Release|Any CPU.ActiveCfg = Release|Any CPU + {A628FEA4-75CC-4039-8823-27258C55D2BF}.Release|Any CPU.Build.0 = Release|Any CPU + {74BF1D46-710C-42C1-82DD-34B42C58F843}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {74BF1D46-710C-42C1-82DD-34B42C58F843}.Debug|Any CPU.Build.0 = Debug|Any CPU + {74BF1D46-710C-42C1-82DD-34B42C58F843}.Release|Any CPU.ActiveCfg = Release|Any CPU + {74BF1D46-710C-42C1-82DD-34B42C58F843}.Release|Any CPU.Build.0 = Release|Any CPU + {AEA9EE9A-19BF-45CB-93D9-52CA443FD313}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {AEA9EE9A-19BF-45CB-93D9-52CA443FD313}.Debug|Any CPU.Build.0 = Debug|Any CPU + {AEA9EE9A-19BF-45CB-93D9-52CA443FD313}.Release|Any CPU.ActiveCfg = Release|Any CPU + {AEA9EE9A-19BF-45CB-93D9-52CA443FD313}.Release|Any CPU.Build.0 = Release|Any CPU + {04ECC74F-C340-4987-863E-757FB62D27C9}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {04ECC74F-C340-4987-863E-757FB62D27C9}.Debug|Any CPU.Build.0 = Debug|Any CPU + {04ECC74F-C340-4987-863E-757FB62D27C9}.Release|Any CPU.ActiveCfg = Release|Any CPU + {04ECC74F-C340-4987-863E-757FB62D27C9}.Release|Any CPU.Build.0 = Release|Any CPU + {82EBE37B-E3A7-4365-9B06-FA647BCC7AF0}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {82EBE37B-E3A7-4365-9B06-FA647BCC7AF0}.Debug|Any CPU.Build.0 = Debug|Any CPU + {82EBE37B-E3A7-4365-9B06-FA647BCC7AF0}.Release|Any CPU.ActiveCfg = Release|Any CPU + {82EBE37B-E3A7-4365-9B06-FA647BCC7AF0}.Release|Any CPU.Build.0 = Release|Any CPU + {6D4DE6D5-9594-4AE4-85E0-41C7FFCCED92}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {6D4DE6D5-9594-4AE4-85E0-41C7FFCCED92}.Debug|Any CPU.Build.0 = Debug|Any CPU + {6D4DE6D5-9594-4AE4-85E0-41C7FFCCED92}.Release|Any CPU.ActiveCfg = Release|Any CPU + {6D4DE6D5-9594-4AE4-85E0-41C7FFCCED92}.Release|Any CPU.Build.0 = Release|Any CPU + {B6913970-FB88-4F6F-83F9-00728218E3FD}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {B6913970-FB88-4F6F-83F9-00728218E3FD}.Debug|Any CPU.Build.0 = Debug|Any CPU + {B6913970-FB88-4F6F-83F9-00728218E3FD}.Release|Any CPU.ActiveCfg = Release|Any CPU + {B6913970-FB88-4F6F-83F9-00728218E3FD}.Release|Any CPU.Build.0 = Release|Any CPU + {6D5618FB-45B9-44AE-BF99-8EF37519CB30}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {6D5618FB-45B9-44AE-BF99-8EF37519CB30}.Debug|Any CPU.Build.0 = Debug|Any CPU + {6D5618FB-45B9-44AE-BF99-8EF37519CB30}.Release|Any CPU.ActiveCfg = Release|Any CPU + {6D5618FB-45B9-44AE-BF99-8EF37519CB30}.Release|Any CPU.Build.0 = Release|Any CPU + {1969394D-3181-404F-8E2C-E3E71A5BAD30}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {1969394D-3181-404F-8E2C-E3E71A5BAD30}.Debug|Any CPU.Build.0 = Debug|Any CPU + {1969394D-3181-404F-8E2C-E3E71A5BAD30}.Release|Any CPU.ActiveCfg = Release|Any CPU + {1969394D-3181-404F-8E2C-E3E71A5BAD30}.Release|Any CPU.Build.0 = Release|Any CPU + {CCE9ABBC-96BA-425B-8140-DC8102290BE3}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {CCE9ABBC-96BA-425B-8140-DC8102290BE3}.Debug|Any CPU.Build.0 = Debug|Any CPU + {CCE9ABBC-96BA-425B-8140-DC8102290BE3}.Release|Any CPU.ActiveCfg = Release|Any CPU + {CCE9ABBC-96BA-425B-8140-DC8102290BE3}.Release|Any CPU.Build.0 = Release|Any CPU + {504CD0A8-523B-4A0E-99BE-C179DECA9B76}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {504CD0A8-523B-4A0E-99BE-C179DECA9B76}.Debug|Any CPU.Build.0 = Debug|Any CPU + {504CD0A8-523B-4A0E-99BE-C179DECA9B76}.Release|Any CPU.ActiveCfg = Release|Any CPU + {504CD0A8-523B-4A0E-99BE-C179DECA9B76}.Release|Any CPU.Build.0 = Release|Any CPU + {B30BE76E-4D20-47AA-9E03-E32613D888CC}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {B30BE76E-4D20-47AA-9E03-E32613D888CC}.Debug|Any CPU.Build.0 = Debug|Any CPU + {B30BE76E-4D20-47AA-9E03-E32613D888CC}.Release|Any CPU.ActiveCfg = Release|Any CPU + {B30BE76E-4D20-47AA-9E03-E32613D888CC}.Release|Any CPU.Build.0 = Release|Any CPU + {B8706292-5BE8-4099-94CA-F26DDD3757E0}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {B8706292-5BE8-4099-94CA-F26DDD3757E0}.Debug|Any CPU.Build.0 = Debug|Any CPU + {B8706292-5BE8-4099-94CA-F26DDD3757E0}.Release|Any CPU.ActiveCfg = Release|Any CPU + {B8706292-5BE8-4099-94CA-F26DDD3757E0}.Release|Any CPU.Build.0 = Release|Any CPU + {AFA7F48E-DB81-4E39-843B-78715C6ADF0D}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {AFA7F48E-DB81-4E39-843B-78715C6ADF0D}.Debug|Any CPU.Build.0 = Debug|Any CPU + {AFA7F48E-DB81-4E39-843B-78715C6ADF0D}.Release|Any CPU.ActiveCfg = Release|Any CPU + {AFA7F48E-DB81-4E39-843B-78715C6ADF0D}.Release|Any CPU.Build.0 = Release|Any CPU + {A76441EE-AB2E-4E9D-8CD3-58BE5A8514D3}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {A76441EE-AB2E-4E9D-8CD3-58BE5A8514D3}.Debug|Any CPU.Build.0 = Debug|Any CPU + {A76441EE-AB2E-4E9D-8CD3-58BE5A8514D3}.Release|Any CPU.ActiveCfg = Release|Any CPU + {A76441EE-AB2E-4E9D-8CD3-58BE5A8514D3}.Release|Any CPU.Build.0 = Release|Any CPU + {4FBA2CBC-B022-41D6-B6DA-3166991B9172}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {4FBA2CBC-B022-41D6-B6DA-3166991B9172}.Debug|Any CPU.Build.0 = Debug|Any CPU + {4FBA2CBC-B022-41D6-B6DA-3166991B9172}.Release|Any CPU.ActiveCfg = Release|Any CPU + {4FBA2CBC-B022-41D6-B6DA-3166991B9172}.Release|Any CPU.Build.0 = Release|Any CPU + {7BEDCC1E-0763-4553-B32B-0430B334ACBB}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {7BEDCC1E-0763-4553-B32B-0430B334ACBB}.Debug|Any CPU.Build.0 = Debug|Any CPU + {7BEDCC1E-0763-4553-B32B-0430B334ACBB}.Release|Any CPU.ActiveCfg = Release|Any CPU + {7BEDCC1E-0763-4553-B32B-0430B334ACBB}.Release|Any CPU.Build.0 = Release|Any CPU + {3F076242-A6FA-4657-8606-AF1D150367FC}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {3F076242-A6FA-4657-8606-AF1D150367FC}.Debug|Any CPU.Build.0 = Debug|Any CPU + {3F076242-A6FA-4657-8606-AF1D150367FC}.Release|Any CPU.ActiveCfg = Release|Any CPU + {3F076242-A6FA-4657-8606-AF1D150367FC}.Release|Any CPU.Build.0 = Release|Any CPU + {0DC43D36-6680-4237-BE39-D5D094DBCE29}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {0DC43D36-6680-4237-BE39-D5D094DBCE29}.Debug|Any CPU.Build.0 = Debug|Any CPU + {0DC43D36-6680-4237-BE39-D5D094DBCE29}.Release|Any CPU.ActiveCfg = Release|Any CPU + {0DC43D36-6680-4237-BE39-D5D094DBCE29}.Release|Any CPU.Build.0 = Release|Any CPU + {7DA231E8-A31D-4F53-8760-820861B6CE65}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {7DA231E8-A31D-4F53-8760-820861B6CE65}.Debug|Any CPU.Build.0 = Debug|Any CPU + {7DA231E8-A31D-4F53-8760-820861B6CE65}.Release|Any CPU.ActiveCfg = Release|Any CPU + {7DA231E8-A31D-4F53-8760-820861B6CE65}.Release|Any CPU.Build.0 = Release|Any CPU + {0E2B067C-4A97-430C-8767-D19ACB09A63A}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {0E2B067C-4A97-430C-8767-D19ACB09A63A}.Debug|Any CPU.Build.0 = Debug|Any CPU + {0E2B067C-4A97-430C-8767-D19ACB09A63A}.Release|Any CPU.ActiveCfg = Release|Any CPU + {0E2B067C-4A97-430C-8767-D19ACB09A63A}.Release|Any CPU.Build.0 = Release|Any CPU + {59D9DA5C-FD93-4599-BE2F-AFC540B180C8}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {59D9DA5C-FD93-4599-BE2F-AFC540B180C8}.Debug|Any CPU.Build.0 = Debug|Any CPU + {59D9DA5C-FD93-4599-BE2F-AFC540B180C8}.Release|Any CPU.ActiveCfg = Release|Any CPU + {59D9DA5C-FD93-4599-BE2F-AFC540B180C8}.Release|Any CPU.Build.0 = Release|Any CPU + EndGlobalSection GlobalSection(NestedProjects) = preSolution {47697CDB-27B6-4B05-B4F8-0CBE6F6EDF97} = {57A04B72-8088-4F75-A582-1158CF8291F7} - {6BCE712F-846D-4846-9D1B-A66B858DA755} = {F9E67978-5CD6-4A5F-827B-4249711C0B02} - {700D0B95-95CD-43F3-B6C9-FAA0FC1358D4} = {F9E67978-5CD6-4A5F-827B-4249711C0B02} - {F6FC6BE7-0847-4817-A1ED-223DC647C3D7} = {F6E3A728-AE77-4D02-BAC8-82FBC1402DDA} + {AFA7F48E-DB81-4E39-843B-78715C6ADF0D} = {47697CDB-27B6-4B05-B4F8-0CBE6F6EDF97} + {B8706292-5BE8-4099-94CA-F26DDD3757E0} = {47697CDB-27B6-4B05-B4F8-0CBE6F6EDF97} + {04ECC74F-C340-4987-863E-757FB62D27C9} = {57A04B72-8088-4F75-A582-1158CF8291F7} + {6D4DE6D5-9594-4AE4-85E0-41C7FFCCED92} = {57A04B72-8088-4F75-A582-1158CF8291F7} + {A76441EE-AB2E-4E9D-8CD3-58BE5A8514D3} = {57A04B72-8088-4F75-A582-1158CF8291F7} + {A628FEA4-75CC-4039-8823-27258C55D2BF} = {57A04B72-8088-4F75-A582-1158CF8291F7} + {E2EA47B1-6996-417D-A6EC-28C4F202715C} = {57A04B72-8088-4F75-A582-1158CF8291F7} + {1969394D-3181-404F-8E2C-E3E71A5BAD30} = {57A04B72-8088-4F75-A582-1158CF8291F7} + {6D5618FB-45B9-44AE-BF99-8EF37519CB30} = {57A04B72-8088-4F75-A582-1158CF8291F7} + {2356C987-F992-4084-9DA2-5DAD1DA35E85} = {57A04B72-8088-4F75-A582-1158CF8291F7} + {7DA231E8-A31D-4F53-8760-820861B6CE65} = {F9E67978-5CD6-4A5F-827B-4249711C0B02} + {0E2B067C-4A97-430C-8767-D19ACB09A63A} = {F9E67978-5CD6-4A5F-827B-4249711C0B02} + {AEA9EE9A-19BF-45CB-93D9-52CA443FD313} = {486ADF86-DD89-4E19-B805-9D94F19800D9} + {B6913970-FB88-4F6F-83F9-00728218E3FD} = {486ADF86-DD89-4E19-B805-9D94F19800D9} + {0DC43D36-6680-4237-BE39-D5D094DBCE29} = {486ADF86-DD89-4E19-B805-9D94F19800D9} + {8D7D5F17-96BB-4EDD-A6E6-3BCA2D6B401A} = {F6E3A728-AE77-4D02-BAC8-82FBC1402DDA} + {504CD0A8-523B-4A0E-99BE-C179DECA9B76} = {0F0D4998-8F5D-4467-A909-BB192C4B3B4B} + {3F076242-A6FA-4657-8606-AF1D150367FC} = {0F0D4998-8F5D-4467-A909-BB192C4B3B4B} {4EACDBBC-BCD7-4765-A57B-3E08331E4749} = {57A04B72-8088-4F75-A582-1158CF8291F7} - {411A9E0E-FDC6-4E25-828A-0C2CD1CD96F8} = {F6E3A728-AE77-4D02-BAC8-82FBC1402DDA} - {D9468BE6-8242-4E7F-9470-EE6FDA8832D0} = {57A04B72-8088-4F75-A582-1158CF8291F7} - {779D577B-2287-4FB8-8760-D653DBB87109} = {57A04B72-8088-4F75-A582-1158CF8291F7} - {175CE3A0-0D8C-48DB-9D8D-C7BBD9591813} = {57A04B72-8088-4F75-A582-1158CF8291F7} - {4EF23885-C1DD-4AE0-B6AF-DB045A0E83BD} = {57A04B72-8088-4F75-A582-1158CF8291F7} - {3FDB2B34-A754-49C5-AEB2-16BC6E92372A} = {57A04B72-8088-4F75-A582-1158CF8291F7} - {6EEF2080-FAA9-4403-A7B4-0AA91E5A390F} = {57A04B72-8088-4F75-A582-1158CF8291F7} - {4E16E633-5AA2-426E-B5C9-D212D4F40B44} = {57A04B72-8088-4F75-A582-1158CF8291F7} - {10C356B1-0E60-4385-A3FA-3670159B5660} = {57A04B72-8088-4F75-A582-1158CF8291F7} - {FD08732A-60BB-4ACB-9AD2-F17C8BE694C8} = {4EACDBBC-BCD7-4765-A57B-3E08331E4749} - {10B4E062-4985-4897-99DB-745DFBEED055} = {4EACDBBC-BCD7-4765-A57B-3E08331E4749} - {9D841A99-B3EA-4C35-86D0-F27C69E72B3E} = {47697CDB-27B6-4B05-B4F8-0CBE6F6EDF97} - {63872633-A00E-45DE-AB4D-61DFF4B02370} = {47697CDB-27B6-4B05-B4F8-0CBE6F6EDF97} - {EF32E669-774D-4144-A9AB-06E5094F1B5F} = {0F0D4998-8F5D-4467-A909-BB192C4B3B4B} - {BB0DC9D7-93EB-4668-82B2-AA7503685A38} = {0F0D4998-8F5D-4467-A909-BB192C4B3B4B} - {2F5F4802-BF35-476F-8F26-D53863C9B595} = {486ADF86-DD89-4E19-B805-9D94F19800D9} - {2019313B-86BD-445C-A6F9-1BCEC49FBA9B} = {486ADF86-DD89-4E19-B805-9D94F19800D9} - {B044A5E8-D914-4671-8724-A92ADAB04C5A} = {486ADF86-DD89-4E19-B805-9D94F19800D9} - EndGlobalSection - GlobalSection(ExtensibilityGlobals) = postSolution - EnterpriseLibraryConfigurationToolBinariesPath = packages\Unity.2.1.505.0\lib\NET35;packages\Unity.2.1.505.2\lib\NET35 - SolutionGuid = {2955716E-0882-41EC-935D-C95694C5C30F} - EndGlobalSection - GlobalSection(MonoDevelopProperties) = preSolution - StartupItem = NzbDrone.Console\NzbDrone.Console.csproj - EndGlobalSection - GlobalSection(JSLint) = preSolution - SolutionConfigurationLocation = JSLintOptions.xml + {7BEDCC1E-0763-4553-B32B-0430B334ACBB} = {4EACDBBC-BCD7-4765-A57B-3E08331E4749} + {CCE9ABBC-96BA-425B-8140-DC8102290BE3} = {4EACDBBC-BCD7-4765-A57B-3E08331E4749} + {BE8533CC-A1ED-46A6-811F-2FA29CC6AD80} = {F6E3A728-AE77-4D02-BAC8-82FBC1402DDA} EndGlobalSection EndGlobal diff --git a/src/NzbDrone.Core/Radarr.Core.dll.config b/src/Runtimes/linux-arm/Radarr.Core.dll.config similarity index 100% rename from src/NzbDrone.Core/Radarr.Core.dll.config rename to src/Runtimes/linux-arm/Radarr.Core.dll.config diff --git a/src/Runtimes/linux-arm64/Radarr.Core.dll.config b/src/Runtimes/linux-arm64/Radarr.Core.dll.config new file mode 100644 index 000000000..f40a271ce --- /dev/null +++ b/src/Runtimes/linux-arm64/Radarr.Core.dll.config @@ -0,0 +1,7 @@ + + + + + + + diff --git a/src/Runtimes/linux-x64/Radarr.Core.dll.config b/src/Runtimes/linux-x64/Radarr.Core.dll.config new file mode 100644 index 000000000..f40a271ce --- /dev/null +++ b/src/Runtimes/linux-x64/Radarr.Core.dll.config @@ -0,0 +1,7 @@ + + + + + + + diff --git a/src/Libraries/MediaInfo/libmediainfo.dylib b/src/Runtimes/osx-x64/libmediainfo.dylib similarity index 100% rename from src/Libraries/MediaInfo/libmediainfo.dylib rename to src/Runtimes/osx-x64/libmediainfo.dylib diff --git a/src/Libraries/MediaInfo/MediaInfo.dll b/src/Runtimes/win-x64/MediaInfo.dll similarity index 100% rename from src/Libraries/MediaInfo/MediaInfo.dll rename to src/Runtimes/win-x64/MediaInfo.dll diff --git a/src/ServiceHelpers/ServiceInstall/ServiceInstall.csproj b/src/ServiceHelpers/ServiceInstall/ServiceInstall.csproj index ea283c501..8a735f3bf 100644 --- a/src/ServiceHelpers/ServiceInstall/ServiceInstall.csproj +++ b/src/ServiceHelpers/ServiceInstall/ServiceInstall.csproj @@ -1,6 +1,9 @@  - Exe - net462 + WinExe + net462;netcoreapp3.0 - \ No newline at end of file + + + + diff --git a/src/ServiceHelpers/ServiceUninstall/ServiceUninstall.csproj b/src/ServiceHelpers/ServiceUninstall/ServiceUninstall.csproj index ea283c501..8a735f3bf 100644 --- a/src/ServiceHelpers/ServiceUninstall/ServiceUninstall.csproj +++ b/src/ServiceHelpers/ServiceUninstall/ServiceUninstall.csproj @@ -1,6 +1,9 @@  - Exe - net462 + WinExe + net462;netcoreapp3.0 - \ No newline at end of file + + + + diff --git a/test.sh b/test.sh index 92e6d9a06..2e25cacd5 100755 --- a/test.sh +++ b/test.sh @@ -2,7 +2,7 @@ PLATFORM=$1 TYPE=$2 COVERAGE=$3 -WHERE="cat != ManualTest" +WHERE="Category!=ManualTest" TEST_PATTERN="*Test.dll" ASSEMBLIES="" TEST_LOG_FILE="TestLog.txt" @@ -23,9 +23,9 @@ rm -f "$TEST_LOG_FILE" # Uncomment to log test output to a file instead of the console export RADARR_TESTS_LOG_OUTPUT="File" -NUNIT="$TEST_DIR/NUnit.ConsoleRunner.3.10.0/tools/nunit3-console.exe" +NUNIT="dotnet vstest" NUNIT_COMMAND="$NUNIT" -NUNIT_PARAMS="--workers=1" +NUNIT_PARAMS="--Platform:x64 --logger:nunit;LogFilePath=TestResult.xml" if [ "$PLATFORM" = "Mac" ]; then @@ -39,22 +39,21 @@ fi if [ "$PLATFORM" = "Windows" ]; then mkdir -p "$ProgramData/Radarr" - WHERE="$WHERE && cat != LINUX" + WHERE="$WHERE&Category!=LINUX" elif [ "$PLATFORM" = "Linux" ] || [ "$PLATFORM" = "Mac" ] ; then mkdir -p ~/.config/Radarr - WHERE="$WHERE && cat != WINDOWS" - NUNIT_COMMAND="mono --debug --runtime=v4.0 $NUNIT" + WHERE="$WHERE&Category!=WINDOWS" else echo "Platform must be provided as first arguement: Windows, Linux or Mac" exit 1 fi if [ "$TYPE" = "Unit" ]; then - WHERE="$WHERE && cat != IntegrationTest && cat != AutomationTest" + WHERE="$WHERE&Category!=IntegrationTest&Category!=AutomationTest" elif [ "$TYPE" = "Integration" ] || [ "$TYPE" = "int" ] ; then - WHERE="$WHERE && cat == IntegrationTest" + WHERE="$WHERE&Category=IntegrationTest" elif [ "$TYPE" = "Automation" ] ; then - WHERE="$WHERE && cat == AutomationTest" + WHERE="$WHERE&Category=AutomationTest" else echo "Type must be provided as second argument: Unit, Integration or Automation" exit 2 @@ -76,7 +75,8 @@ if [ "$COVERAGE" = "Coverage" ]; then exit 3 fi elif [ "$COVERAGE" = "Test" ] ; then - $NUNIT_COMMAND --where "$WHERE" $NUNIT_PARAMS $ASSEMBLIES; + echo "$NUNIT_COMMAND $ASSEMBLIES --TestCaseFilter:$WHERE $NUNIT_PARAMS" + $NUNIT_COMMAND $ASSEMBLIES --TestCaseFilter:"$WHERE" $NUNIT_PARAMS EXIT_CODE=$? else echo "Run Type must be provided as third argument: Coverage or Test" diff --git a/tools/7zip/7za.dll b/tools/7zip/7za.dll deleted file mode 100644 index f2657b610..000000000 Binary files a/tools/7zip/7za.dll and /dev/null differ diff --git a/tools/7zip/7za.exe b/tools/7zip/7za.exe deleted file mode 100644 index dd6cc759b..000000000 Binary files a/tools/7zip/7za.exe and /dev/null differ diff --git a/tools/7zip/7zxa.dll b/tools/7zip/7zxa.dll deleted file mode 100644 index 21ec79dc2..000000000 Binary files a/tools/7zip/7zxa.dll and /dev/null differ diff --git a/tools/nuget/nuget.exe b/tools/nuget/nuget.exe deleted file mode 100644 index e00ef51e1..000000000 Binary files a/tools/nuget/nuget.exe and /dev/null differ diff --git a/tools/packages.config b/tools/packages.config deleted file mode 100644 index a288bc1f0..000000000 --- a/tools/packages.config +++ /dev/null @@ -1,4 +0,0 @@ - - - - \ No newline at end of file diff --git a/tools/pdb2mdb/Mono.Cecil.Mdb.dll b/tools/pdb2mdb/Mono.Cecil.Mdb.dll deleted file mode 100644 index 5b119cb49..000000000 Binary files a/tools/pdb2mdb/Mono.Cecil.Mdb.dll and /dev/null differ diff --git a/tools/pdb2mdb/Mono.Cecil.dll b/tools/pdb2mdb/Mono.Cecil.dll deleted file mode 100644 index 4b5646655..000000000 Binary files a/tools/pdb2mdb/Mono.Cecil.dll and /dev/null differ diff --git a/tools/pdb2mdb/Mono.CompilerServices.SymbolWriter.dll b/tools/pdb2mdb/Mono.CompilerServices.SymbolWriter.dll deleted file mode 100644 index 2d20022ee..000000000 Binary files a/tools/pdb2mdb/Mono.CompilerServices.SymbolWriter.dll and /dev/null differ diff --git a/tools/pdb2mdb/pdb2mdb.exe b/tools/pdb2mdb/pdb2mdb.exe deleted file mode 100644 index 054648355..000000000 Binary files a/tools/pdb2mdb/pdb2mdb.exe and /dev/null differ diff --git a/tools/vswhere/vswhere.exe b/tools/vswhere/vswhere.exe deleted file mode 100644 index e1b511803..000000000 Binary files a/tools/vswhere/vswhere.exe and /dev/null differ