mirror of https://github.com/lidarr/Lidarr
New: Drop mono support
(cherry picked from commit fb130fd0e916262651a8ce97f4263f05117b91cc)
This commit is contained in:
parent
f1ba8a0d27
commit
2cc114c037
|
@ -115,10 +115,6 @@ stages:
|
||||||
artifact: WindowsCoreTests
|
artifact: WindowsCoreTests
|
||||||
displayName: Publish Windows Test Package
|
displayName: Publish Windows Test Package
|
||||||
condition: and(succeeded(), eq(variables['osName'], 'Windows'))
|
condition: and(succeeded(), eq(variables['osName'], 'Windows'))
|
||||||
- publish: '$(testsFolder)/net462/linux-x64/publish'
|
|
||||||
artifact: LinuxTests
|
|
||||||
displayName: Publish Linux Mono Test Package
|
|
||||||
condition: and(succeeded(), eq(variables['osName'], 'Windows'))
|
|
||||||
- publish: '$(testsFolder)/net5.0/linux-x64/publish'
|
- publish: '$(testsFolder)/net5.0/linux-x64/publish'
|
||||||
artifact: LinuxCoreTests
|
artifact: LinuxCoreTests
|
||||||
displayName: Publish Linux Test Package
|
displayName: Publish Linux Test Package
|
||||||
|
@ -278,14 +274,6 @@ stages:
|
||||||
tarCompression: 'gz'
|
tarCompression: 'gz'
|
||||||
includeRootFolder: false
|
includeRootFolder: false
|
||||||
rootFolderOrFile: $(artifactsFolder)/macos/net5.0
|
rootFolderOrFile: $(artifactsFolder)/macos/net5.0
|
||||||
- task: ArchiveFiles@2
|
|
||||||
displayName: Create Linux Mono tar
|
|
||||||
inputs:
|
|
||||||
archiveFile: '$(Build.ArtifactStagingDirectory)/Lidarr.$(buildName).linux.tar.gz'
|
|
||||||
archiveType: 'tar'
|
|
||||||
tarCompression: 'gz'
|
|
||||||
includeRootFolder: false
|
|
||||||
rootFolderOrFile: $(artifactsFolder)/linux-x64/net462
|
|
||||||
- task: ArchiveFiles@2
|
- task: ArchiveFiles@2
|
||||||
displayName: Create Linux Core tar
|
displayName: Create Linux Core tar
|
||||||
inputs:
|
inputs:
|
||||||
|
@ -433,16 +421,10 @@ stages:
|
||||||
- powershell: Set-Service SCardSvr -StartupType Manual
|
- powershell: Set-Service SCardSvr -StartupType Manual
|
||||||
displayName: Enable Windows Test Service
|
displayName: Enable Windows Test Service
|
||||||
condition: and(succeeded(), eq(variables['osName'], 'Windows'))
|
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
|
|
||||||
chmod a+x _tests/fpcalc
|
|
||||||
displayName: Install fpcalc
|
|
||||||
condition: and(succeeded(), eq(variables['testName'], 'LinuxCore'))
|
|
||||||
- bash: |
|
- bash: |
|
||||||
chmod a+x _tests/fpcalc
|
chmod a+x _tests/fpcalc
|
||||||
displayName: Make fpcalc Executable
|
displayName: Make fpcalc Executable
|
||||||
condition: and(succeeded(), eq(variables['osName'], 'Mac'))
|
condition: and(succeeded(), or(eq(variables['osName'], 'Mac'), eq(variables['testName'], 'LinuxCore')))
|
||||||
- bash: find ${TESTSFOLDER} -name "Lidarr.Test.Dummy" -exec chmod a+x {} \;
|
- bash: find ${TESTSFOLDER} -name "Lidarr.Test.Dummy" -exec chmod a+x {} \;
|
||||||
displayName: Make Test Dummy Executable
|
displayName: Make Test Dummy Executable
|
||||||
condition: and(succeeded(), ne(variables['osName'], 'Windows'))
|
condition: and(succeeded(), ne(variables['osName'], 'Windows'))
|
||||||
|
@ -466,18 +448,6 @@ stages:
|
||||||
condition: and(succeeded(), eq(dependencies.Prepare.outputs['setVar.backendNotUpdated'], '0'))
|
condition: and(succeeded(), eq(dependencies.Prepare.outputs['setVar.backendNotUpdated'], '0'))
|
||||||
strategy:
|
strategy:
|
||||||
matrix:
|
matrix:
|
||||||
mono520:
|
|
||||||
testName: 'Mono 5.20'
|
|
||||||
artifactName: LinuxTests
|
|
||||||
containerImage: ghcr.io/servarr/testimages:mono-5.20
|
|
||||||
mono610:
|
|
||||||
testName: 'Mono 6.10'
|
|
||||||
artifactName: LinuxTests
|
|
||||||
containerImage: ghcr.io/servarr/testimages:mono-6.10
|
|
||||||
mono612:
|
|
||||||
testName: 'Mono 6.12'
|
|
||||||
artifactName: LinuxTests
|
|
||||||
containerImage: ghcr.io/servarr/testimages:mono-6.12
|
|
||||||
alpine:
|
alpine:
|
||||||
testName: 'Musl Net Core'
|
testName: 'Musl Net Core'
|
||||||
artifactName: LinuxMuslCoreTests
|
artifactName: LinuxMuslCoreTests
|
||||||
|
@ -652,21 +622,6 @@ stages:
|
||||||
condition: and(succeeded(), eq(dependencies.Prepare.outputs['setVar.backendNotUpdated'], '0'))
|
condition: and(succeeded(), eq(dependencies.Prepare.outputs['setVar.backendNotUpdated'], '0'))
|
||||||
strategy:
|
strategy:
|
||||||
matrix:
|
matrix:
|
||||||
mono520:
|
|
||||||
testName: 'Mono 5.20'
|
|
||||||
artifactName: LinuxTests
|
|
||||||
containerImage: ghcr.io/servarr/testimages:mono-5.20
|
|
||||||
pattern: 'Lidarr.*.linux.tar.gz'
|
|
||||||
mono610:
|
|
||||||
testName: 'Mono 6.10'
|
|
||||||
artifactName: LinuxTests
|
|
||||||
containerImage: ghcr.io/servarr/testimages:mono-6.10
|
|
||||||
pattern: 'Lidarr.*.linux.tar.gz'
|
|
||||||
mono612:
|
|
||||||
testName: 'Mono 6.12'
|
|
||||||
artifactName: LinuxTests
|
|
||||||
containerImage: ghcr.io/servarr/testimages:mono-6.12
|
|
||||||
pattern: 'Lidarr.*.linux.tar.gz'
|
|
||||||
alpine:
|
alpine:
|
||||||
testName: 'Musl Net Core'
|
testName: 'Musl Net Core'
|
||||||
artifactName: LinuxMuslCoreTests
|
artifactName: LinuxMuslCoreTests
|
||||||
|
|
7
build.sh
7
build.sh
|
@ -150,11 +150,6 @@ PackageMacOS()
|
||||||
|
|
||||||
PackageFiles "$folder" "$framework" "osx-x64"
|
PackageFiles "$folder" "$framework" "osx-x64"
|
||||||
|
|
||||||
if [ "$framework" = "net462" ]; then
|
|
||||||
echo "Adding Startup script"
|
|
||||||
cp macOS/Lidarr $folder
|
|
||||||
fi
|
|
||||||
|
|
||||||
echo "Removing Service helpers"
|
echo "Removing Service helpers"
|
||||||
rm -f $folder/ServiceUninstall.*
|
rm -f $folder/ServiceUninstall.*
|
||||||
rm -f $folder/ServiceInstall.*
|
rm -f $folder/ServiceInstall.*
|
||||||
|
@ -339,7 +334,6 @@ then
|
||||||
PackageTests "net5.0" "linux-x64"
|
PackageTests "net5.0" "linux-x64"
|
||||||
PackageTests "net5.0" "linux-musl-x64"
|
PackageTests "net5.0" "linux-musl-x64"
|
||||||
PackageTests "net5.0" "osx-x64"
|
PackageTests "net5.0" "osx-x64"
|
||||||
PackageTests "net462" "linux-x64"
|
|
||||||
if [ "$ENABLE_BSD" = "YES" ];
|
if [ "$ENABLE_BSD" = "YES" ];
|
||||||
then
|
then
|
||||||
PackageTests "net5.0" "freebsd-x64"
|
PackageTests "net5.0" "freebsd-x64"
|
||||||
|
@ -379,7 +373,6 @@ then
|
||||||
Package "net5.0" "linux-musl-arm64"
|
Package "net5.0" "linux-musl-arm64"
|
||||||
Package "net5.0" "linux-arm"
|
Package "net5.0" "linux-arm"
|
||||||
Package "net5.0" "osx-x64"
|
Package "net5.0" "osx-x64"
|
||||||
Package "net462" "linux-x64"
|
|
||||||
if [ "$ENABLE_BSD" = "YES" ];
|
if [ "$ENABLE_BSD" = "YES" ];
|
||||||
then
|
then
|
||||||
Package "net5.0" "freebsd-x64"
|
Package "net5.0" "freebsd-x64"
|
||||||
|
|
|
@ -6,7 +6,6 @@
|
||||||
<PlatformTarget>AnyCPU</PlatformTarget>
|
<PlatformTarget>AnyCPU</PlatformTarget>
|
||||||
<TargetLatestRuntimePatch>true</TargetLatestRuntimePatch>
|
<TargetLatestRuntimePatch>true</TargetLatestRuntimePatch>
|
||||||
<RuntimeIdentifiers>win-x64;win-x86;osx-x64;linux-x64;linux-musl-x64;linux-arm;linux-arm64;linux-musl-arm64</RuntimeIdentifiers>
|
<RuntimeIdentifiers>win-x64;win-x86;osx-x64;linux-x64;linux-musl-x64;linux-arm;linux-arm64;linux-musl-arm64</RuntimeIdentifiers>
|
||||||
<ExcludedRuntimeFrameworkPairs>win-x64:net462;win-x86:net462;osx-x64:net462;linux-arm:net462;linux-arm64:net462;linux-musl-x64:net462;linux-musl-arm64:net462</ExcludedRuntimeFrameworkPairs>
|
|
||||||
|
|
||||||
<LidarrRootDir>$(MSBuildThisFileDirectory)..\</LidarrRootDir>
|
<LidarrRootDir>$(MSBuildThisFileDirectory)..\</LidarrRootDir>
|
||||||
|
|
||||||
|
@ -88,22 +87,12 @@
|
||||||
<RootNamespace Condition="'$(LidarrProject)'=='true'">$(MSBuildProjectName.Replace('Lidarr','NzbDrone'))</RootNamespace>
|
<RootNamespace Condition="'$(LidarrProject)'=='true'">$(MSBuildProjectName.Replace('Lidarr','NzbDrone'))</RootNamespace>
|
||||||
</PropertyGroup>
|
</PropertyGroup>
|
||||||
|
|
||||||
<!-- Allow building net framework using mono -->
|
|
||||||
<ItemGroup>
|
|
||||||
<PackageReference Include="Microsoft.NETFramework.ReferenceAssemblies" Version="1.0.0">
|
|
||||||
<PrivateAssets>all</PrivateAssets>
|
|
||||||
<IncludeAssets>runtime; build; native; contentfiles; analyzers</IncludeAssets>
|
|
||||||
</PackageReference>
|
|
||||||
</ItemGroup>
|
|
||||||
|
|
||||||
<!-- Standard testing packages -->
|
<!-- Standard testing packages -->
|
||||||
<ItemGroup Condition="'$(TestProject)'=='true'">
|
<ItemGroup Condition="'$(TestProject)'=='true'">
|
||||||
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="16.9.4" />
|
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="16.9.4" />
|
||||||
<PackageReference Include="NUnit" Version="3.13.1" />
|
<PackageReference Include="NUnit" Version="3.13.1" />
|
||||||
<PackageReference Include="NUnit3TestAdapter" Version="3.17.0" />
|
<PackageReference Include="NUnit3TestAdapter" Version="3.17.0" />
|
||||||
<PackageReference Include="NunitXml.TestLogger" Version="3.0.97" />
|
<PackageReference Include="NunitXml.TestLogger" Version="3.0.97" />
|
||||||
</ItemGroup>
|
|
||||||
<ItemGroup Condition="'$(TestProject)'=='true' and '$(TargetFramework)' == 'net5.0'">
|
|
||||||
<PackageReference Include="coverlet.collector" Version="3.0.4-preview.27.ge7cb7c3b40" />
|
<PackageReference Include="coverlet.collector" Version="3.0.4-preview.27.ge7cb7c3b40" />
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
|
|
||||||
|
|
|
@ -1,11 +1,4 @@
|
||||||
<Project>
|
<Project>
|
||||||
<!-- below net4.7.1 the new portable pdb format has no line numbers, pdb to mdb probably doesn't like it either -->
|
|
||||||
<PropertyGroup Condition="'$(TargetFramework)' == 'net462'">
|
|
||||||
<DebugType>full</DebugType>
|
|
||||||
</PropertyGroup>
|
|
||||||
|
|
||||||
<Import Project="Targets/PublishAllRids.targets" />
|
<Import Project="Targets/PublishAllRids.targets" />
|
||||||
<Import Project="Targets/FixBindingRedirects.targets" />
|
|
||||||
<Import Project="Targets/MonoFacades.targets" Condition="'$(TargetFrameworkIdentifier)' == '.NETFramework' and !$(RuntimeIdentifier.StartsWith('win'))" />
|
|
||||||
<Import Project="Targets/CopyRuntimes.targets" />
|
<Import Project="Targets/CopyRuntimes.targets" />
|
||||||
</Project>
|
</Project>
|
||||||
|
|
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
|
@ -1,3 +0,0 @@
|
||||||
Copied from mono/4.5/Facades of the mono 5.4 release.
|
|
||||||
These are the mono version of the dotnet Core TypeForwardedTo assemblies.
|
|
||||||
Using these assemblies is no longer necessary once we reach mono 5.18 as minimum version
|
|
|
@ -1,6 +1,6 @@
|
||||||
<Project Sdk="Microsoft.NET.Sdk">
|
<Project Sdk="Microsoft.NET.Sdk">
|
||||||
<PropertyGroup>
|
<PropertyGroup>
|
||||||
<TargetFrameworks>net462;net5.0</TargetFrameworks>
|
<TargetFrameworks>net5.0</TargetFrameworks>
|
||||||
</PropertyGroup>
|
</PropertyGroup>
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<ProjectReference Include="..\Lidarr.Http\Lidarr.Http.csproj" />
|
<ProjectReference Include="..\Lidarr.Http\Lidarr.Http.csproj" />
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
<Project Sdk="Microsoft.NET.Sdk">
|
<Project Sdk="Microsoft.NET.Sdk">
|
||||||
<PropertyGroup>
|
<PropertyGroup>
|
||||||
<TargetFrameworks>net462;net5.0</TargetFrameworks>
|
<TargetFrameworks>net5.0</TargetFrameworks>
|
||||||
</PropertyGroup>
|
</PropertyGroup>
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<PackageReference Include="FluentValidation" Version="8.6.2" />
|
<PackageReference Include="FluentValidation" Version="8.6.2" />
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
<Project Sdk="Microsoft.NET.Sdk">
|
<Project Sdk="Microsoft.NET.Sdk">
|
||||||
<PropertyGroup>
|
<PropertyGroup>
|
||||||
<TargetFrameworks>net462;net5.0</TargetFrameworks>
|
<TargetFrameworks>net5.0</TargetFrameworks>
|
||||||
</PropertyGroup>
|
</PropertyGroup>
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<PackageReference Include="NBuilder" Version="6.1.0" />
|
<PackageReference Include="NBuilder" Version="6.1.0" />
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
<Project Sdk="Microsoft.NET.Sdk">
|
<Project Sdk="Microsoft.NET.Sdk">
|
||||||
<PropertyGroup>
|
<PropertyGroup>
|
||||||
<TargetFrameworks>net462;net5.0</TargetFrameworks>
|
<TargetFrameworks>net5.0</TargetFrameworks>
|
||||||
</PropertyGroup>
|
</PropertyGroup>
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<PackageReference Include="Selenium.Support" Version="3.141.0" />
|
<PackageReference Include="Selenium.Support" Version="3.141.0" />
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
<Project Sdk="Microsoft.NET.Sdk">
|
<Project Sdk="Microsoft.NET.Sdk">
|
||||||
<PropertyGroup>
|
<PropertyGroup>
|
||||||
<TargetFrameworks>net462;net5.0</TargetFrameworks>
|
<TargetFrameworks>net5.0</TargetFrameworks>
|
||||||
</PropertyGroup>
|
</PropertyGroup>
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<ProjectReference Include="..\NzbDrone.Host\Lidarr.Host.csproj" />
|
<ProjectReference Include="..\NzbDrone.Host\Lidarr.Host.csproj" />
|
||||||
|
|
|
@ -1,17 +1,14 @@
|
||||||
using System;
|
using System;
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
|
using System.IO;
|
||||||
using System.Linq;
|
using System.Linq;
|
||||||
using System.Reflection;
|
using System.Reflection;
|
||||||
|
using System.Runtime.InteropServices;
|
||||||
|
using System.Runtime.Loader;
|
||||||
using NzbDrone.Common.EnvironmentInfo;
|
using NzbDrone.Common.EnvironmentInfo;
|
||||||
using NzbDrone.Common.Messaging;
|
using NzbDrone.Common.Messaging;
|
||||||
using TinyIoC;
|
using TinyIoC;
|
||||||
|
|
||||||
#if NETCOREAPP
|
|
||||||
using System.IO;
|
|
||||||
using System.Runtime.InteropServices;
|
|
||||||
using System.Runtime.Loader;
|
|
||||||
#endif
|
|
||||||
|
|
||||||
namespace NzbDrone.Common.Composition
|
namespace NzbDrone.Common.Composition
|
||||||
{
|
{
|
||||||
public abstract class ContainerBuilderBase
|
public abstract class ContainerBuilderBase
|
||||||
|
@ -27,12 +24,6 @@ namespace NzbDrone.Common.Composition
|
||||||
assemblies.Add(OsInfo.IsWindows ? "Lidarr.Windows" : "Lidarr.Mono");
|
assemblies.Add(OsInfo.IsWindows ? "Lidarr.Windows" : "Lidarr.Mono");
|
||||||
assemblies.Add("Lidarr.Common");
|
assemblies.Add("Lidarr.Common");
|
||||||
|
|
||||||
#if !NETCOREAPP
|
|
||||||
foreach (var assembly in assemblies)
|
|
||||||
{
|
|
||||||
_loadedTypes.AddRange(Assembly.Load(assembly).GetTypes());
|
|
||||||
}
|
|
||||||
#else
|
|
||||||
var startupPath = AppDomain.CurrentDomain.BaseDirectory;
|
var startupPath = AppDomain.CurrentDomain.BaseDirectory;
|
||||||
|
|
||||||
foreach (var assemblyName in assemblies)
|
foreach (var assemblyName in assemblies)
|
||||||
|
@ -42,14 +33,12 @@ namespace NzbDrone.Common.Composition
|
||||||
|
|
||||||
AppDomain.CurrentDomain.AssemblyResolve += new ResolveEventHandler(ContainerResolveEventHandler);
|
AppDomain.CurrentDomain.AssemblyResolve += new ResolveEventHandler(ContainerResolveEventHandler);
|
||||||
RegisterSQLiteResolver();
|
RegisterSQLiteResolver();
|
||||||
#endif
|
|
||||||
|
|
||||||
Container = new Container(new TinyIoCContainer(), _loadedTypes);
|
Container = new Container(new TinyIoCContainer(), _loadedTypes);
|
||||||
AutoRegisterInterfaces();
|
AutoRegisterInterfaces();
|
||||||
Container.Register(args);
|
Container.Register(args);
|
||||||
}
|
}
|
||||||
|
|
||||||
#if NETCOREAPP
|
|
||||||
private static Assembly ContainerResolveEventHandler(object sender, ResolveEventArgs args)
|
private static Assembly ContainerResolveEventHandler(object sender, ResolveEventArgs args)
|
||||||
{
|
{
|
||||||
var resolver = new AssemblyDependencyResolver(args.RequestingAssembly.Location);
|
var resolver = new AssemblyDependencyResolver(args.RequestingAssembly.Location);
|
||||||
|
@ -86,7 +75,6 @@ namespace NzbDrone.Common.Composition
|
||||||
var mappedName = OsInfo.IsLinux && libraryName == "sqlite3" ? "libsqlite3.so.0" : libraryName;
|
var mappedName = OsInfo.IsLinux && libraryName == "sqlite3" ? "libsqlite3.so.0" : libraryName;
|
||||||
return NativeLibrary.Load(mappedName, assembly, dllImportSearchPath);
|
return NativeLibrary.Load(mappedName, assembly, dllImportSearchPath);
|
||||||
}
|
}
|
||||||
#endif
|
|
||||||
|
|
||||||
private void AutoRegisterInterfaces()
|
private void AutoRegisterInterfaces()
|
||||||
{
|
{
|
||||||
|
|
|
@ -26,21 +26,8 @@ namespace NzbDrone.Common.EnvironmentInfo
|
||||||
|
|
||||||
static PlatformInfo()
|
static PlatformInfo()
|
||||||
{
|
{
|
||||||
#if NETCOREAPP
|
|
||||||
_platform = PlatformType.NetCore;
|
_platform = PlatformType.NetCore;
|
||||||
_version = Environment.Version;
|
_version = Environment.Version;
|
||||||
#else
|
|
||||||
if (Type.GetType("Mono.Runtime") != null)
|
|
||||||
{
|
|
||||||
_platform = PlatformType.Mono;
|
|
||||||
_version = GetMonoVersion();
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
_platform = PlatformType.DotNet;
|
|
||||||
_version = GetDotNetVersion();
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public static PlatformType Platform => _platform;
|
public static PlatformType Platform => _platform;
|
||||||
|
|
|
@ -23,7 +23,6 @@ namespace NzbDrone.Common.EnvironmentInfo
|
||||||
serviceProvider.ServiceExist(ServiceProvider.SERVICE_NAME) &&
|
serviceProvider.ServiceExist(ServiceProvider.SERVICE_NAME) &&
|
||||||
serviceProvider.GetStatus(ServiceProvider.SERVICE_NAME) == ServiceControllerStatus.StartPending;
|
serviceProvider.GetStatus(ServiceProvider.SERVICE_NAME) == ServiceControllerStatus.StartPending;
|
||||||
|
|
||||||
#if NETCOREAPP
|
|
||||||
// net5.0 will return Lidarr.dll for entry assembly, we need the actual
|
// net5.0 will return Lidarr.dll for entry assembly, we need the actual
|
||||||
// executable name (Lidarr on linux). On mono this will return the location of
|
// executable name (Lidarr on linux). On mono this will return the location of
|
||||||
// the mono executable itself, which is not what we want.
|
// the mono executable itself, which is not what we want.
|
||||||
|
@ -34,11 +33,6 @@ namespace NzbDrone.Common.EnvironmentInfo
|
||||||
ExecutingApplication = entry.FileName;
|
ExecutingApplication = entry.FileName;
|
||||||
IsWindowsTray = OsInfo.IsWindows && entry.ModuleName == $"{ProcessProvider.LIDARR_PROCESS_NAME}.exe";
|
IsWindowsTray = OsInfo.IsWindows && entry.ModuleName == $"{ProcessProvider.LIDARR_PROCESS_NAME}.exe";
|
||||||
}
|
}
|
||||||
#else
|
|
||||||
// On mono we need to get the location of the Lidarr assembly, not Mono.
|
|
||||||
// Can't be running tray app in mono.
|
|
||||||
ExecutingApplication = Assembly.GetEntryAssembly()?.Location;
|
|
||||||
#endif
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static RuntimeInfo()
|
static RuntimeInfo()
|
||||||
|
|
|
@ -6,14 +6,6 @@ namespace NzbDrone.Common.Extensions
|
||||||
{
|
{
|
||||||
public static class DictionaryExtensions
|
public static class DictionaryExtensions
|
||||||
{
|
{
|
||||||
#if !NETCOREAPP
|
|
||||||
public static TValue GetValueOrDefault<TKey, TValue>(this IReadOnlyDictionary<TKey, TValue> dictionary, TKey key, TValue defaultValue = default(TValue))
|
|
||||||
{
|
|
||||||
TValue value;
|
|
||||||
return dictionary.TryGetValue(key, out value) ? value : defaultValue;
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
|
|
||||||
public static Dictionary<T1, T2> Merge<T1, T2>(this Dictionary<T1, T2> first, Dictionary<T1, T2> second)
|
public static Dictionary<T1, T2> Merge<T1, T2>(this Dictionary<T1, T2> first, Dictionary<T1, T2> second)
|
||||||
{
|
{
|
||||||
if (first == null)
|
if (first == null)
|
||||||
|
|
|
@ -34,19 +34,10 @@ namespace NzbDrone.Common.Http.Dispatchers
|
||||||
{
|
{
|
||||||
var webRequest = (HttpWebRequest)WebRequest.Create((Uri)request.Url);
|
var webRequest = (HttpWebRequest)WebRequest.Create((Uri)request.Url);
|
||||||
|
|
||||||
if (PlatformInfo.IsMono)
|
|
||||||
{
|
|
||||||
// On Mono GZipStream/DeflateStream leaks memory if an exception is thrown, use an intermediate buffer in that case.
|
|
||||||
webRequest.AutomaticDecompression = DecompressionMethods.None;
|
|
||||||
webRequest.Headers.Add("Accept-Encoding", "gzip");
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
// Deflate is not a standard and could break depending on implementation.
|
// Deflate is not a standard and could break depending on implementation.
|
||||||
// we should just stick with the more compatible Gzip
|
// we should just stick with the more compatible Gzip
|
||||||
//http://stackoverflow.com/questions/8490718/how-to-decompress-stream-deflated-with-java-util-zip-deflater-in-net
|
//http://stackoverflow.com/questions/8490718/how-to-decompress-stream-deflated-with-java-util-zip-deflater-in-net
|
||||||
webRequest.AutomaticDecompression = DecompressionMethods.GZip;
|
webRequest.AutomaticDecompression = DecompressionMethods.GZip;
|
||||||
}
|
|
||||||
|
|
||||||
webRequest.Method = request.Method.ToString();
|
webRequest.Method = request.Method.ToString();
|
||||||
webRequest.UserAgent = _userAgentBuilder.GetUserAgent(request.UseSimplifiedUserAgent);
|
webRequest.UserAgent = _userAgentBuilder.GetUserAgent(request.UseSimplifiedUserAgent);
|
||||||
|
@ -87,9 +78,6 @@ namespace NzbDrone.Common.Http.Dispatchers
|
||||||
|
|
||||||
if (httpWebResponse == null)
|
if (httpWebResponse == null)
|
||||||
{
|
{
|
||||||
// Workaround for mono not closing connections properly in certain situations.
|
|
||||||
AbortWebRequest(webRequest);
|
|
||||||
|
|
||||||
// The default messages for WebException on mono are pretty horrible.
|
// The default messages for WebException on mono are pretty horrible.
|
||||||
if (e.Status == WebExceptionStatus.NameResolutionFailure)
|
if (e.Status == WebExceptionStatus.NameResolutionFailure)
|
||||||
{
|
{
|
||||||
|
@ -123,12 +111,6 @@ namespace NzbDrone.Common.Http.Dispatchers
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
data = responseStream.ToBytes();
|
data = responseStream.ToBytes();
|
||||||
|
|
||||||
if (PlatformInfo.IsMono && httpWebResponse.ContentEncoding == "gzip")
|
|
||||||
{
|
|
||||||
data = data.Decompress();
|
|
||||||
httpWebResponse.Headers.Remove("Content-Encoding");
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
catch (Exception ex)
|
catch (Exception ex)
|
||||||
{
|
{
|
||||||
|
@ -238,37 +220,5 @@ namespace NzbDrone.Common.Http.Dispatchers
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// Workaround for mono not closing connections properly on timeouts
|
|
||||||
private void AbortWebRequest(HttpWebRequest webRequest)
|
|
||||||
{
|
|
||||||
// First affected version was mono 5.16
|
|
||||||
if (OsInfo.IsNotWindows && _platformInfo.Version >= new Version(5, 16))
|
|
||||||
{
|
|
||||||
try
|
|
||||||
{
|
|
||||||
var currentOperationInfo = webRequest.GetType().GetField("currentOperation", BindingFlags.NonPublic | BindingFlags.Instance);
|
|
||||||
var currentOperation = currentOperationInfo.GetValue(webRequest);
|
|
||||||
|
|
||||||
if (currentOperation != null)
|
|
||||||
{
|
|
||||||
var responseStreamInfo = currentOperation.GetType().GetField("responseStream", BindingFlags.NonPublic | BindingFlags.Instance);
|
|
||||||
var responseStream = responseStreamInfo.GetValue(currentOperation) as Stream;
|
|
||||||
|
|
||||||
// Note that responseStream will likely be null once mono fixes it.
|
|
||||||
responseStream?.Dispose();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
catch (Exception ex)
|
|
||||||
{
|
|
||||||
// This can fail randomly on future mono versions that have been changed/fixed. Log to sentry and ignore.
|
|
||||||
_logger.Trace()
|
|
||||||
.Exception(ex)
|
|
||||||
.Message("Unable to dispose responseStream on mono {0}", _platformInfo.Version)
|
|
||||||
.WriteSentryWarn("MonoCloseWaitPatchFailed", ex.Message)
|
|
||||||
.Write();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,20 +0,0 @@
|
||||||
using System;
|
|
||||||
using System.Net;
|
|
||||||
|
|
||||||
namespace NzbDrone.Common.Http
|
|
||||||
{
|
|
||||||
public class NzbDroneWebClient : WebClient
|
|
||||||
{
|
|
||||||
protected override WebRequest GetWebRequest(Uri address)
|
|
||||||
{
|
|
||||||
var request = base.GetWebRequest(address);
|
|
||||||
if (request is HttpWebRequest)
|
|
||||||
{
|
|
||||||
((HttpWebRequest)request).KeepAlive = false;
|
|
||||||
((HttpWebRequest)request).ServicePoint.Expect100Continue = false;
|
|
||||||
}
|
|
||||||
|
|
||||||
return request;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -1,6 +1,6 @@
|
||||||
<Project Sdk="Microsoft.NET.Sdk">
|
<Project Sdk="Microsoft.NET.Sdk">
|
||||||
<PropertyGroup>
|
<PropertyGroup>
|
||||||
<TargetFrameworks>net462;net5.0</TargetFrameworks>
|
<TargetFrameworks>net5.0</TargetFrameworks>
|
||||||
<NeutralLanguage>en</NeutralLanguage>
|
<NeutralLanguage>en</NeutralLanguage>
|
||||||
<DefineConstants Condition="'$(RuntimeIdentifier)' == 'linux-musl-x64' or '$(RuntimeIdentifier)' == 'linux-musl-arm64'">ISMUSL</DefineConstants>
|
<DefineConstants Condition="'$(RuntimeIdentifier)' == 'linux-musl-x64' or '$(RuntimeIdentifier)' == 'linux-musl-arm64'">ISMUSL</DefineConstants>
|
||||||
</PropertyGroup>
|
</PropertyGroup>
|
||||||
|
@ -14,16 +14,11 @@
|
||||||
<PackageReference Include="System.Text.Json" Version="5.0.2" />
|
<PackageReference Include="System.Text.Json" Version="5.0.2" />
|
||||||
<PackageReference Include="System.ValueTuple" Version="4.5.0" />
|
<PackageReference Include="System.ValueTuple" Version="4.5.0" />
|
||||||
<PackageReference Include="System.Data.SQLite.Core.Servarr" Version="1.0.113.0-0" />
|
<PackageReference Include="System.Data.SQLite.Core.Servarr" Version="1.0.113.0-0" />
|
||||||
</ItemGroup>
|
|
||||||
<ItemGroup Condition="'$(TargetFramework)' == 'net5.0'">
|
|
||||||
<PackageReference Include="System.Runtime.Loader" Version="4.3.0" />
|
<PackageReference Include="System.Runtime.Loader" Version="4.3.0" />
|
||||||
<PackageReference Include="System.Configuration.ConfigurationManager" Version="5.0.0" />
|
<PackageReference Include="System.Configuration.ConfigurationManager" Version="5.0.0" />
|
||||||
<PackageReference Include="System.ServiceProcess.ServiceController" Version="5.0.0" />
|
<PackageReference Include="System.ServiceProcess.ServiceController" Version="5.0.0" />
|
||||||
<PackageReference Include="Microsoft.Win32.Registry" Version="5.0.0" />
|
<PackageReference Include="Microsoft.Win32.Registry" Version="5.0.0" />
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
<ItemGroup Condition="'$(TargetFramework)' == 'net462'">
|
|
||||||
<Reference Include="System.ServiceProcess" />
|
|
||||||
</ItemGroup>
|
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<Compile Update="EnsureThat\Resources\ExceptionMessages.Designer.cs">
|
<Compile Update="EnsureThat\Resources\ExceptionMessages.Designer.cs">
|
||||||
<DesignTime>True</DesignTime>
|
<DesignTime>True</DesignTime>
|
||||||
|
|
|
@ -44,11 +44,7 @@ namespace NzbDrone.Common.Processes
|
||||||
|
|
||||||
public static int GetCurrentProcessId()
|
public static int GetCurrentProcessId()
|
||||||
{
|
{
|
||||||
#if NETCOREAPP
|
|
||||||
return Environment.ProcessId;
|
return Environment.ProcessId;
|
||||||
#else
|
|
||||||
return Process.GetCurrentProcess().Id;
|
|
||||||
#endif
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public ProcessInfo GetCurrentProcess()
|
public ProcessInfo GetCurrentProcess()
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
<Project Sdk="Microsoft.NET.Sdk">
|
<Project Sdk="Microsoft.NET.Sdk">
|
||||||
<PropertyGroup>
|
<PropertyGroup>
|
||||||
<OutputType>Exe</OutputType>
|
<OutputType>Exe</OutputType>
|
||||||
<TargetFrameworks>net462;net5.0</TargetFrameworks>
|
<TargetFrameworks>net5.0</TargetFrameworks>
|
||||||
|
|
||||||
<ApplicationIcon>..\NzbDrone.Host\NzbDrone.ico</ApplicationIcon>
|
<ApplicationIcon>..\NzbDrone.Host\NzbDrone.ico</ApplicationIcon>
|
||||||
<ApplicationManifest>app.manifest</ApplicationManifest>
|
<ApplicationManifest>app.manifest</ApplicationManifest>
|
||||||
|
|
|
@ -1,63 +0,0 @@
|
||||||
using NUnit.Framework;
|
|
||||||
using NzbDrone.Common.EnvironmentInfo;
|
|
||||||
using NzbDrone.Core.HealthCheck.Checks;
|
|
||||||
using NzbDrone.Core.Test.Framework;
|
|
||||||
using NzbDrone.Test.Common;
|
|
||||||
using static NzbDrone.Core.HealthCheck.Checks.MonoDebugCheck;
|
|
||||||
|
|
||||||
namespace NzbDrone.Core.Test.HealthCheck.Checks
|
|
||||||
{
|
|
||||||
[TestFixture]
|
|
||||||
public class MonoDebugCheckFixture : CoreTest<MonoDebugCheck>
|
|
||||||
{
|
|
||||||
private void GivenHasStackFrame(bool hasStackFrame)
|
|
||||||
{
|
|
||||||
Mocker.GetMock<StackFrameHelper>()
|
|
||||||
.Setup(f => f.HasStackFrameInfo())
|
|
||||||
.Returns(hasStackFrame);
|
|
||||||
}
|
|
||||||
|
|
||||||
[Test]
|
|
||||||
public void should_return_ok_if_not_mono()
|
|
||||||
{
|
|
||||||
if (PlatformInfo.IsMono)
|
|
||||||
{
|
|
||||||
throw new IgnoreException("non mono specific test");
|
|
||||||
}
|
|
||||||
|
|
||||||
Subject.Check().ShouldBeOk();
|
|
||||||
}
|
|
||||||
|
|
||||||
[Test]
|
|
||||||
public void should_return_ok_if_not_debug()
|
|
||||||
{
|
|
||||||
MonoOnly();
|
|
||||||
|
|
||||||
GivenHasStackFrame(false);
|
|
||||||
|
|
||||||
Subject.Check().ShouldBeOk();
|
|
||||||
}
|
|
||||||
|
|
||||||
[Test]
|
|
||||||
public void should_log_warning_if_not_debug()
|
|
||||||
{
|
|
||||||
MonoOnly();
|
|
||||||
|
|
||||||
GivenHasStackFrame(false);
|
|
||||||
|
|
||||||
Subject.Check();
|
|
||||||
|
|
||||||
ExceptionVerification.ExpectedWarns(1);
|
|
||||||
}
|
|
||||||
|
|
||||||
[Test]
|
|
||||||
public void should_return_ok_if_debug()
|
|
||||||
{
|
|
||||||
MonoOnly();
|
|
||||||
|
|
||||||
GivenHasStackFrame(true);
|
|
||||||
|
|
||||||
Subject.Check().ShouldBeOk();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -1,42 +0,0 @@
|
||||||
using System.Collections.Generic;
|
|
||||||
using NUnit.Framework;
|
|
||||||
using NzbDrone.Common.Processes;
|
|
||||||
using NzbDrone.Core.HealthCheck.Checks;
|
|
||||||
using NzbDrone.Core.Test.Framework;
|
|
||||||
|
|
||||||
namespace NzbDrone.Core.Test.HealthCheck.Checks
|
|
||||||
{
|
|
||||||
[TestFixture]
|
|
||||||
public class MonoNotNetCoreCheckFixture : CoreTest<MonoNotNetCoreCheck>
|
|
||||||
{
|
|
||||||
[Test]
|
|
||||||
[Platform(Exclude = "Mono")]
|
|
||||||
public void should_return_ok_if_net_core()
|
|
||||||
{
|
|
||||||
Subject.Check().ShouldBeOk();
|
|
||||||
}
|
|
||||||
|
|
||||||
[Test]
|
|
||||||
[Platform("Mono")]
|
|
||||||
public void should_log_warning_if_mono()
|
|
||||||
{
|
|
||||||
Subject.Check().ShouldBeWarning();
|
|
||||||
}
|
|
||||||
|
|
||||||
[Test]
|
|
||||||
[Platform("Mono")]
|
|
||||||
public void should_return_ok_if_bsd()
|
|
||||||
{
|
|
||||||
Mocker.GetMock<IProcessProvider>()
|
|
||||||
.Setup(x => x.StartAndCapture("uname", null, null))
|
|
||||||
.Returns(new ProcessOutput
|
|
||||||
{
|
|
||||||
Lines = new List<ProcessOutputLine>
|
|
||||||
{
|
|
||||||
new ProcessOutputLine(ProcessOutputLevel.Standard, "FreeBSD")
|
|
||||||
}
|
|
||||||
});
|
|
||||||
Subject.Check().ShouldBeOk();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -1,67 +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 MonoVersionCheckFixture : CoreTest<MonoVersionCheck>
|
|
||||||
{
|
|
||||||
private void GivenOutput(string version)
|
|
||||||
{
|
|
||||||
MonoOnly();
|
|
||||||
|
|
||||||
Mocker.GetMock<IPlatformInfo>()
|
|
||||||
.SetupGet(s => s.Version)
|
|
||||||
.Returns(new Version(version));
|
|
||||||
}
|
|
||||||
|
|
||||||
[TestCase("5.18")]
|
|
||||||
[TestCase("5.20")]
|
|
||||||
public void should_return_ok(string version)
|
|
||||||
{
|
|
||||||
GivenOutput(version);
|
|
||||||
|
|
||||||
Subject.Check().ShouldBeOk();
|
|
||||||
}
|
|
||||||
|
|
||||||
[TestCase("5.16")]
|
|
||||||
public void should_return_notice(string version)
|
|
||||||
{
|
|
||||||
GivenOutput(version);
|
|
||||||
|
|
||||||
Subject.Check().ShouldBeNotice();
|
|
||||||
}
|
|
||||||
|
|
||||||
[TestCase("5.4")]
|
|
||||||
[TestCase("5.8")]
|
|
||||||
public void should_return_warning(string version)
|
|
||||||
{
|
|
||||||
GivenOutput(version);
|
|
||||||
|
|
||||||
Subject.Check().ShouldBeWarning();
|
|
||||||
}
|
|
||||||
|
|
||||||
[TestCase("2.10.2")]
|
|
||||||
[TestCase("2.10.8.1")]
|
|
||||||
[TestCase("3.0.0.1")]
|
|
||||||
[TestCase("3.2.0.1")]
|
|
||||||
[TestCase("3.2.1")]
|
|
||||||
[TestCase("3.2.7")]
|
|
||||||
[TestCase("3.6.1")]
|
|
||||||
[TestCase("3.8")]
|
|
||||||
[TestCase("3.10")]
|
|
||||||
[TestCase("4.0.0.0")]
|
|
||||||
[TestCase("4.2")]
|
|
||||||
[TestCase("4.4.0")]
|
|
||||||
[TestCase("4.4.1")]
|
|
||||||
public void should_return_error(string version)
|
|
||||||
{
|
|
||||||
GivenOutput(version);
|
|
||||||
|
|
||||||
Subject.Check().ShouldBeError();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -1,6 +1,6 @@
|
||||||
<Project Sdk="Microsoft.NET.Sdk">
|
<Project Sdk="Microsoft.NET.Sdk">
|
||||||
<PropertyGroup>
|
<PropertyGroup>
|
||||||
<TargetFrameworks>net462;net5.0</TargetFrameworks>
|
<TargetFrameworks>net5.0</TargetFrameworks>
|
||||||
</PropertyGroup>
|
</PropertyGroup>
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<PackageReference Include="NBuilder" Version="6.1.0" />
|
<PackageReference Include="NBuilder" Version="6.1.0" />
|
||||||
|
|
|
@ -1,47 +0,0 @@
|
||||||
using System.Diagnostics;
|
|
||||||
using NLog;
|
|
||||||
using NzbDrone.Common.EnvironmentInfo;
|
|
||||||
using NzbDrone.Common.Extensions;
|
|
||||||
|
|
||||||
namespace NzbDrone.Core.HealthCheck.Checks
|
|
||||||
{
|
|
||||||
public class MonoDebugCheck : HealthCheckBase
|
|
||||||
{
|
|
||||||
private readonly Logger _logger;
|
|
||||||
private readonly StackFrameHelper _stackFrameHelper;
|
|
||||||
|
|
||||||
public override bool CheckOnSchedule => false;
|
|
||||||
|
|
||||||
public MonoDebugCheck(Logger logger, StackFrameHelper stackFrameHelper)
|
|
||||||
{
|
|
||||||
_logger = logger;
|
|
||||||
_stackFrameHelper = stackFrameHelper;
|
|
||||||
}
|
|
||||||
|
|
||||||
public class StackFrameHelper
|
|
||||||
{
|
|
||||||
public virtual bool HasStackFrameInfo()
|
|
||||||
{
|
|
||||||
var stackTrace = new StackTrace(true);
|
|
||||||
|
|
||||||
return stackTrace.FrameCount > 0 && stackTrace.GetFrame(0).GetFileName().IsNotNullOrWhiteSpace();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public override HealthCheck Check()
|
|
||||||
{
|
|
||||||
if (!PlatformInfo.IsMono)
|
|
||||||
{
|
|
||||||
return new HealthCheck(GetType());
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!_stackFrameHelper.HasStackFrameInfo())
|
|
||||||
{
|
|
||||||
_logger.Warn("Mono is not running with --debug switch");
|
|
||||||
return new HealthCheck(GetType());
|
|
||||||
}
|
|
||||||
|
|
||||||
return new HealthCheck(GetType());
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -1,57 +0,0 @@
|
||||||
using System.Linq;
|
|
||||||
using System.Runtime.InteropServices;
|
|
||||||
using NLog;
|
|
||||||
using NzbDrone.Common.EnvironmentInfo;
|
|
||||||
using NzbDrone.Common.Processes;
|
|
||||||
|
|
||||||
namespace NzbDrone.Core.HealthCheck.Checks
|
|
||||||
{
|
|
||||||
public class MonoNotNetCoreCheck : HealthCheckBase
|
|
||||||
{
|
|
||||||
private static string[] MonoUnames = new string[] { "FreeBSD", "OpenBSD", "MidnightBSD", "NetBSD" };
|
|
||||||
private readonly IOsInfo _osInfo;
|
|
||||||
private readonly IProcessProvider _processProvider;
|
|
||||||
|
|
||||||
public MonoNotNetCoreCheck(IOsInfo osInfo,
|
|
||||||
IProcessProvider processProvider,
|
|
||||||
Logger logger)
|
|
||||||
{
|
|
||||||
_osInfo = osInfo;
|
|
||||||
_processProvider = processProvider;
|
|
||||||
}
|
|
||||||
|
|
||||||
public override HealthCheck Check()
|
|
||||||
{
|
|
||||||
if (!PlatformInfo.IsMono)
|
|
||||||
{
|
|
||||||
return new HealthCheck(GetType());
|
|
||||||
}
|
|
||||||
|
|
||||||
// Don't warn on arm based synology - could be arm5 or something else rubbish
|
|
||||||
if (_osInfo.Name == "DSM" && RuntimeInformation.ProcessArchitecture == Architecture.Arm)
|
|
||||||
{
|
|
||||||
return new HealthCheck(GetType());
|
|
||||||
}
|
|
||||||
|
|
||||||
// Don't warn on linux x86 - we don't build x86 net core
|
|
||||||
if (OsInfo.IsLinux && RuntimeInformation.ProcessArchitecture == Architecture.X86)
|
|
||||||
{
|
|
||||||
return new HealthCheck(GetType());
|
|
||||||
}
|
|
||||||
|
|
||||||
// Check for BSD
|
|
||||||
var output = _processProvider.StartAndCapture("uname");
|
|
||||||
if (output?.ExitCode == 0 && MonoUnames.Contains(output?.Lines.First().Content))
|
|
||||||
{
|
|
||||||
return new HealthCheck(GetType());
|
|
||||||
}
|
|
||||||
|
|
||||||
return new HealthCheck(GetType(),
|
|
||||||
HealthCheckResult.Warning,
|
|
||||||
"Please upgrade to the .NET Core version of Lidarr",
|
|
||||||
"#update_to_net_core_version");
|
|
||||||
}
|
|
||||||
|
|
||||||
public override bool CheckOnSchedule => false;
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -1,44 +0,0 @@
|
||||||
using System;
|
|
||||||
using NLog;
|
|
||||||
using NLog.Fluent;
|
|
||||||
using NzbDrone.Common.EnvironmentInfo;
|
|
||||||
using NzbDrone.Common.Instrumentation.Extensions;
|
|
||||||
|
|
||||||
namespace NzbDrone.Core.HealthCheck.Checks
|
|
||||||
{
|
|
||||||
public class MonoTlsCheck : HealthCheckBase
|
|
||||||
{
|
|
||||||
private readonly IPlatformInfo _platformInfo;
|
|
||||||
private readonly Logger _logger;
|
|
||||||
|
|
||||||
public MonoTlsCheck(IPlatformInfo platformInfo, Logger logger)
|
|
||||||
{
|
|
||||||
_platformInfo = platformInfo;
|
|
||||||
_logger = logger;
|
|
||||||
}
|
|
||||||
|
|
||||||
public override HealthCheck Check()
|
|
||||||
{
|
|
||||||
if (!PlatformInfo.IsMono)
|
|
||||||
{
|
|
||||||
return new HealthCheck(GetType());
|
|
||||||
}
|
|
||||||
|
|
||||||
var monoVersion = _platformInfo.Version;
|
|
||||||
|
|
||||||
if (monoVersion >= new Version("5.8.0") && Environment.GetEnvironmentVariable("MONO_TLS_PROVIDER") == "legacy")
|
|
||||||
{
|
|
||||||
_logger.Debug()
|
|
||||||
.Message("Mono version {0} and legacy TLS provider is selected, recommending user to switch to btls.", monoVersion)
|
|
||||||
.WriteSentryDebug("LegacyTlsProvider", monoVersion.ToString())
|
|
||||||
.Write();
|
|
||||||
|
|
||||||
return new HealthCheck(GetType(), HealthCheckResult.Warning, "Lidarr Mono 4.x tls workaround still enabled, consider removing MONO_TLS_PROVIDER=legacy environment option");
|
|
||||||
}
|
|
||||||
|
|
||||||
return new HealthCheck(GetType());
|
|
||||||
}
|
|
||||||
|
|
||||||
public override bool CheckOnSchedule => false;
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -1,76 +0,0 @@
|
||||||
using System;
|
|
||||||
using NLog;
|
|
||||||
using NzbDrone.Common.EnvironmentInfo;
|
|
||||||
|
|
||||||
namespace NzbDrone.Core.HealthCheck.Checks
|
|
||||||
{
|
|
||||||
public class MonoVersionCheck : HealthCheckBase
|
|
||||||
{
|
|
||||||
private readonly IPlatformInfo _platformInfo;
|
|
||||||
private readonly Logger _logger;
|
|
||||||
|
|
||||||
public MonoVersionCheck(IPlatformInfo platformInfo, Logger logger)
|
|
||||||
{
|
|
||||||
_platformInfo = platformInfo;
|
|
||||||
_logger = logger;
|
|
||||||
}
|
|
||||||
|
|
||||||
public override HealthCheck Check()
|
|
||||||
{
|
|
||||||
if (!PlatformInfo.IsMono)
|
|
||||||
{
|
|
||||||
return new HealthCheck(GetType());
|
|
||||||
}
|
|
||||||
|
|
||||||
var monoVersion = _platformInfo.Version;
|
|
||||||
|
|
||||||
// Known buggy Mono versions
|
|
||||||
if (monoVersion == new Version("4.4.0") || monoVersion == new Version("4.4.1"))
|
|
||||||
{
|
|
||||||
_logger.Debug("Mono version {0}", monoVersion);
|
|
||||||
return new HealthCheck(GetType(),
|
|
||||||
HealthCheckResult.Error,
|
|
||||||
$"Currently installed Mono version {monoVersion} has a bug that causes issues connecting to indexers/download clients. You should upgrade to a higher version",
|
|
||||||
"#currently_installed_mono_version_is_old_and_unsupported");
|
|
||||||
}
|
|
||||||
|
|
||||||
// Currently best stable Mono version (5.18 gets us .net 4.7.2 support)
|
|
||||||
var bestVersion = new Version("5.20");
|
|
||||||
var targetVersion = new Version("5.18");
|
|
||||||
if (monoVersion >= targetVersion)
|
|
||||||
{
|
|
||||||
_logger.Debug("Mono version is {0} or better: {1}", targetVersion, monoVersion);
|
|
||||||
return new HealthCheck(GetType());
|
|
||||||
}
|
|
||||||
|
|
||||||
// Stable Mono versions
|
|
||||||
var stableVersion = new Version("5.16");
|
|
||||||
if (monoVersion >= stableVersion)
|
|
||||||
{
|
|
||||||
_logger.Debug("Mono version is {0} or better: {1}", stableVersion, monoVersion);
|
|
||||||
return new HealthCheck(GetType(),
|
|
||||||
HealthCheckResult.Notice,
|
|
||||||
$"Currently installed Mono version {monoVersion} is supported but upgrading to {bestVersion} is recommended.",
|
|
||||||
"#currently_installed_mono_version_is_supported_but_upgrading_is_recommended");
|
|
||||||
}
|
|
||||||
|
|
||||||
// Old but supported Mono versions, there are known bugs
|
|
||||||
var supportedVersion = new Version("5.4");
|
|
||||||
if (monoVersion >= supportedVersion)
|
|
||||||
{
|
|
||||||
_logger.Debug("Mono version is {0} or better: {1}", supportedVersion, monoVersion);
|
|
||||||
return new HealthCheck(GetType(),
|
|
||||||
HealthCheckResult.Warning,
|
|
||||||
$"Currently installed Mono version {monoVersion} is supported but has some known issues. Please upgrade Mono to version {bestVersion}.",
|
|
||||||
"#currently_installed_mono_version_is_supported_but_upgrading_is_recommended");
|
|
||||||
}
|
|
||||||
|
|
||||||
return new HealthCheck(GetType(),
|
|
||||||
HealthCheckResult.Error,
|
|
||||||
$"Currently installed Mono version {monoVersion} is old and unsupported. Please upgrade Mono to version {bestVersion}.",
|
|
||||||
"#currently_installed_mono_version_is_old_and_unsupported");
|
|
||||||
}
|
|
||||||
|
|
||||||
public override bool CheckOnSchedule => false;
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -1,6 +1,6 @@
|
||||||
<Project Sdk="Microsoft.NET.Sdk">
|
<Project Sdk="Microsoft.NET.Sdk">
|
||||||
<PropertyGroup>
|
<PropertyGroup>
|
||||||
<TargetFrameworks>net462;net5.0</TargetFrameworks>
|
<TargetFrameworks>net5.0</TargetFrameworks>
|
||||||
</PropertyGroup>
|
</PropertyGroup>
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<PackageReference Include="Dapper" Version="2.0.78" />
|
<PackageReference Include="Dapper" Version="2.0.78" />
|
||||||
|
@ -24,10 +24,6 @@
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<ProjectReference Include="..\NzbDrone.Common\Lidarr.Common.csproj" />
|
<ProjectReference Include="..\NzbDrone.Common\Lidarr.Common.csproj" />
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
<ItemGroup Condition="'$(TargetFramework)' == 'net462'">
|
|
||||||
<Reference Include="System.Web" />
|
|
||||||
<Reference Include="System.Web.Extensions" />
|
|
||||||
</ItemGroup>
|
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<EmbeddedResource Include="..\..\Logo\64.png">
|
<EmbeddedResource Include="..\..\Logo\64.png">
|
||||||
<Link>Resources\Logo\64.png</Link>
|
<Link>Resources\Logo\64.png</Link>
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
<Project Sdk="Microsoft.NET.Sdk">
|
<Project Sdk="Microsoft.NET.Sdk">
|
||||||
<PropertyGroup>
|
<PropertyGroup>
|
||||||
<TargetFrameworks>net462;net5.0</TargetFrameworks>
|
<TargetFrameworks>net5.0</TargetFrameworks>
|
||||||
</PropertyGroup>
|
</PropertyGroup>
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<ProjectReference Include="..\NzbDrone.Host\Lidarr.Host.csproj" />
|
<ProjectReference Include="..\NzbDrone.Host\Lidarr.Host.csproj" />
|
||||||
|
|
|
@ -1,19 +1,10 @@
|
||||||
<Project Sdk="Microsoft.NET.Sdk.Web">
|
<Project Sdk="Microsoft.NET.Sdk.Web">
|
||||||
<PropertyGroup>
|
<PropertyGroup>
|
||||||
<TargetFrameworks>net462;net5.0</TargetFrameworks>
|
<TargetFrameworks>net5.0</TargetFrameworks>
|
||||||
<OutputType>Library</OutputType>
|
<OutputType>Library</OutputType>
|
||||||
</PropertyGroup>
|
</PropertyGroup>
|
||||||
<ItemGroup Condition="'$(TargetFramework)' == 'net462'">
|
|
||||||
<PackageReference Include="Microsoft.AspNetCore.Hosting" Version="2.2.7" />
|
|
||||||
<PackageReference Include="Microsoft.AspNetCore.SignalR" Version="1.1.0" />
|
|
||||||
<PackageReference Include="Microsoft.AspNetCore.Server.Kestrel" Version="2.2.0" />
|
|
||||||
<PackageReference Include="Microsoft.AspNetCore.Owin" Version="2.2.0" />
|
|
||||||
</ItemGroup>
|
|
||||||
|
|
||||||
<ItemGroup Condition="'$(TargetFramework)' == 'net5.0'">
|
|
||||||
<PackageReference Include="Microsoft.AspNetCore.Owin" Version="5.0.5" />
|
|
||||||
</ItemGroup>
|
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
|
<PackageReference Include="Microsoft.AspNetCore.Owin" Version="5.0.5" />
|
||||||
<PackageReference Include="NLog.Extensions.Logging" Version="1.7.2" />
|
<PackageReference Include="NLog.Extensions.Logging" Version="1.7.2" />
|
||||||
<PackageReference Include="System.Text.Encoding.CodePages" Version="5.0.0" />
|
<PackageReference Include="System.Text.Encoding.CodePages" Version="5.0.0" />
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
|
@ -30,7 +21,4 @@
|
||||||
<EmbedInteropTypes>True</EmbedInteropTypes>
|
<EmbedInteropTypes>True</EmbedInteropTypes>
|
||||||
</Reference>
|
</Reference>
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
<ItemGroup Condition="'$(TargetFramework)' == 'net462'">
|
|
||||||
<Reference Include="System.ServiceProcess" />
|
|
||||||
</ItemGroup>
|
|
||||||
</Project>
|
</Project>
|
||||||
|
|
|
@ -55,17 +55,10 @@ namespace NzbDrone.Host.Middleware
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
#if NETCOREAPP
|
|
||||||
appBuilder.UseEndpoints(x =>
|
appBuilder.UseEndpoints(x =>
|
||||||
{
|
{
|
||||||
x.MapHub<MessageHub>(URL_BASE + "/signalr/messages");
|
x.MapHub<MessageHub>(URL_BASE + "/signalr/messages");
|
||||||
});
|
});
|
||||||
#else
|
|
||||||
appBuilder.UseSignalR(x =>
|
|
||||||
{
|
|
||||||
x.MapHub<MessageHub>("/signalr/messages");
|
|
||||||
});
|
|
||||||
#endif
|
|
||||||
|
|
||||||
// This is a side effect of haing multiple IoC containers, TinyIoC and whatever
|
// 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
|
// Kestrel/SignalR is using. Ideally we'd have one IoC container, but that's non-trivial with TinyIoC
|
||||||
|
|
|
@ -105,23 +105,14 @@ namespace NzbDrone.Host
|
||||||
{
|
{
|
||||||
services
|
services
|
||||||
.AddSignalR()
|
.AddSignalR()
|
||||||
#if !NETCOREAPP
|
|
||||||
.AddJsonProtocol(options =>
|
|
||||||
{
|
|
||||||
options.PayloadSerializerSettings = Json.GetSerializerSettings();
|
|
||||||
});
|
|
||||||
#else
|
|
||||||
.AddJsonProtocol(options =>
|
.AddJsonProtocol(options =>
|
||||||
{
|
{
|
||||||
options.PayloadSerializerOptions = STJson.GetSerializerSettings();
|
options.PayloadSerializerOptions = STJson.GetSerializerSettings();
|
||||||
});
|
});
|
||||||
#endif
|
|
||||||
})
|
})
|
||||||
.Configure(app =>
|
.Configure(app =>
|
||||||
{
|
{
|
||||||
#if NETCOREAPP
|
|
||||||
app.UseRouting();
|
app.UseRouting();
|
||||||
#endif
|
|
||||||
app.Properties["host.AppName"] = BuildInfo.AppName;
|
app.Properties["host.AppName"] = BuildInfo.AppName;
|
||||||
app.UsePathBase(_configFileProvider.UrlBase);
|
app.UsePathBase(_configFileProvider.UrlBase);
|
||||||
|
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
<Project Sdk="Microsoft.NET.Sdk.Web">
|
<Project Sdk="Microsoft.NET.Sdk.Web">
|
||||||
<PropertyGroup>
|
<PropertyGroup>
|
||||||
<TargetFrameworks>net462;net5.0</TargetFrameworks>
|
<TargetFrameworks>net5.0</TargetFrameworks>
|
||||||
<OutputType>Library</OutputType>
|
<OutputType>Library</OutputType>
|
||||||
</PropertyGroup>
|
</PropertyGroup>
|
||||||
<ItemGroup Condition="'$(TargetFramework)' == 'net462'">
|
<ItemGroup Condition="'$(TargetFramework)' == 'net462'">
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
<Project Sdk="Microsoft.NET.Sdk">
|
<Project Sdk="Microsoft.NET.Sdk">
|
||||||
<PropertyGroup>
|
<PropertyGroup>
|
||||||
<TargetFrameworks>net462;net5.0</TargetFrameworks>
|
<TargetFrameworks>net5.0</TargetFrameworks>
|
||||||
</PropertyGroup>
|
</PropertyGroup>
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<ProjectReference Include="..\NzbDrone.Test.Common\Lidarr.Test.Common.csproj" />
|
<ProjectReference Include="..\NzbDrone.Test.Common\Lidarr.Test.Common.csproj" />
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
<Project Sdk="Microsoft.NET.Sdk">
|
<Project Sdk="Microsoft.NET.Sdk">
|
||||||
<PropertyGroup>
|
<PropertyGroup>
|
||||||
<TargetFrameworks>net462;net5.0</TargetFrameworks>
|
<TargetFrameworks>net5.0</TargetFrameworks>
|
||||||
</PropertyGroup>
|
</PropertyGroup>
|
||||||
<ItemGroup Condition="'$(TargetFramework)' == 'net462'">
|
<ItemGroup Condition="'$(TargetFramework)' == 'net462'">
|
||||||
<PackageReference Include="Mono.Posix-4.5" Version="4.5.0" PrivateAssets="all" />
|
<PackageReference Include="Mono.Posix-4.5" Version="4.5.0" PrivateAssets="all" />
|
||||||
|
|
|
@ -1,19 +1,10 @@
|
||||||
<Project Sdk="Microsoft.NET.Sdk">
|
<Project Sdk="Microsoft.NET.Sdk">
|
||||||
<PropertyGroup>
|
<PropertyGroup>
|
||||||
<TargetFrameworks>net462;net5.0</TargetFrameworks>
|
<TargetFrameworks>net5.0</TargetFrameworks>
|
||||||
</PropertyGroup>
|
</PropertyGroup>
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<PackageReference Include="NLog" Version="4.7.9" />
|
<PackageReference Include="NLog" Version="4.7.9" />
|
||||||
<PackageReference Include="System.IO.Abstractions" Version="13.2.29" />
|
<PackageReference Include="System.IO.Abstractions" Version="13.2.29" />
|
||||||
</ItemGroup>
|
|
||||||
<ItemGroup Condition="'$(TargetFramework)' == 'net462'">
|
|
||||||
<PackageReference Include="Mono.Posix-4.5" Version="4.5.0" PrivateAssets="all" />
|
|
||||||
</ItemGroup>
|
|
||||||
<!--
|
|
||||||
The netstandard veresion here doesn't work in net framework
|
|
||||||
See https://github.com/xamarin/XamarinComponents/issues/282
|
|
||||||
-->
|
|
||||||
<ItemGroup Condition="'$(TargetFramework)' == 'net5.0'">
|
|
||||||
<PackageReference Include="Mono.Posix.NETStandard" Version="5.20.1-servarr1" />
|
<PackageReference Include="Mono.Posix.NETStandard" Version="5.20.1-servarr1" />
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
|
|
|
@ -1,12 +1,8 @@
|
||||||
<Project Sdk="Microsoft.NET.Sdk.Web">
|
<Project Sdk="Microsoft.NET.Sdk.Web">
|
||||||
<PropertyGroup>
|
<PropertyGroup>
|
||||||
<TargetFrameworks>net462;net5.0</TargetFrameworks>
|
<TargetFrameworks>net5.0</TargetFrameworks>
|
||||||
<OutputType>Library</OutputType>
|
<OutputType>Library</OutputType>
|
||||||
</PropertyGroup>
|
</PropertyGroup>
|
||||||
<ItemGroup Condition="'$(TargetFramework)' == 'net462'">
|
|
||||||
<PackageReference Include="Microsoft.AspNetCore.SignalR" Version="1.1.0" />
|
|
||||||
<PackageReference Include="Newtonsoft.Json" Version="13.0.1" />
|
|
||||||
</ItemGroup>
|
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<ProjectReference Include="..\NzbDrone.Core\Lidarr.Core.csproj" />
|
<ProjectReference Include="..\NzbDrone.Core\Lidarr.Core.csproj" />
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
|
|
|
@ -7,11 +7,7 @@ namespace NzbDrone.SignalR
|
||||||
public object Body { get; set; }
|
public object Body { get; set; }
|
||||||
public string Name { get; set; }
|
public string Name { get; set; }
|
||||||
|
|
||||||
#if !NETCOREAPP
|
|
||||||
[Newtonsoft.Json.JsonIgnore]
|
|
||||||
#else
|
|
||||||
[System.Text.Json.Serialization.JsonIgnore]
|
[System.Text.Json.Serialization.JsonIgnore]
|
||||||
#endif
|
|
||||||
public ModelAction Action { get; set; }
|
public ModelAction Action { get; set; }
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -164,9 +164,7 @@ namespace NzbDrone.Test.Common.AutoMoq
|
||||||
RegisterPlatformLibrary(container);
|
RegisterPlatformLibrary(container);
|
||||||
AddTheAutoMockingContainerExtensionToTheContainer(container);
|
AddTheAutoMockingContainerExtensionToTheContainer(container);
|
||||||
|
|
||||||
#if NETCOREAPP
|
|
||||||
ContainerBuilderBase.RegisterSQLiteResolver();
|
ContainerBuilderBase.RegisterSQLiteResolver();
|
||||||
#endif
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private static void AddTheAutoMockingContainerExtensionToTheContainer(IUnityContainer container)
|
private static void AddTheAutoMockingContainerExtensionToTheContainer(IUnityContainer container)
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
<Project Sdk="Microsoft.NET.Sdk">
|
<Project Sdk="Microsoft.NET.Sdk">
|
||||||
<PropertyGroup>
|
<PropertyGroup>
|
||||||
<TargetFrameworks>net462;net5.0</TargetFrameworks>
|
<TargetFrameworks>net5.0</TargetFrameworks>
|
||||||
</PropertyGroup>
|
</PropertyGroup>
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<PackageReference Include="FluentAssertions" Version="5.10.3" />
|
<PackageReference Include="FluentAssertions" Version="5.10.3" />
|
||||||
|
|
|
@ -57,8 +57,7 @@ namespace NzbDrone.Test.Common
|
||||||
_startupLog = new List<string>();
|
_startupLog = new List<string>();
|
||||||
if (BuildInfo.IsDebug)
|
if (BuildInfo.IsDebug)
|
||||||
{
|
{
|
||||||
var frameworkFolder = PlatformInfo.IsNetCore ? "net5.0" : "net462";
|
Start(Path.Combine(TestContext.CurrentContext.TestDirectory, "..", "..", "_output", "net5.0", lidarrConsoleExe));
|
||||||
Start(Path.Combine(TestContext.CurrentContext.TestDirectory, "..", "..", "_output", frameworkFolder, lidarrConsoleExe));
|
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
<Project Sdk="Microsoft.NET.Sdk">
|
<Project Sdk="Microsoft.NET.Sdk">
|
||||||
<PropertyGroup>
|
<PropertyGroup>
|
||||||
<OutputType>Exe</OutputType>
|
<OutputType>Exe</OutputType>
|
||||||
<TargetFrameworks>net462;net5.0</TargetFrameworks>
|
<TargetFrameworks>net5.0</TargetFrameworks>
|
||||||
</PropertyGroup>
|
</PropertyGroup>
|
||||||
</Project>
|
</Project>
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
<Project Sdk="Microsoft.NET.Sdk">
|
<Project Sdk="Microsoft.NET.Sdk">
|
||||||
<PropertyGroup>
|
<PropertyGroup>
|
||||||
<TargetFrameworks>net462;net5.0</TargetFrameworks>
|
<TargetFrameworks>net5.0</TargetFrameworks>
|
||||||
</PropertyGroup>
|
</PropertyGroup>
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<ProjectReference Include="..\NzbDrone.Test.Common\Lidarr.Test.Common.csproj" />
|
<ProjectReference Include="..\NzbDrone.Test.Common\Lidarr.Test.Common.csproj" />
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
<Project Sdk="Microsoft.NET.Sdk">
|
<Project Sdk="Microsoft.NET.Sdk">
|
||||||
<PropertyGroup>
|
<PropertyGroup>
|
||||||
<OutputType>WinExe</OutputType>
|
<OutputType>WinExe</OutputType>
|
||||||
<TargetFrameworks>net462;net5.0</TargetFrameworks>
|
<TargetFrameworks>net5.0</TargetFrameworks>
|
||||||
</PropertyGroup>
|
</PropertyGroup>
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<PackageReference Include="NLog" Version="4.7.9" />
|
<PackageReference Include="NLog" Version="4.7.9" />
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
<Project Sdk="Microsoft.NET.Sdk">
|
<Project Sdk="Microsoft.NET.Sdk">
|
||||||
<PropertyGroup>
|
<PropertyGroup>
|
||||||
<TargetFrameworks>net462;net5.0</TargetFrameworks>
|
<TargetFrameworks>net5.0</TargetFrameworks>
|
||||||
</PropertyGroup>
|
</PropertyGroup>
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<ProjectReference Include="..\NzbDrone.Common.Test\Lidarr.Common.Test.csproj" />
|
<ProjectReference Include="..\NzbDrone.Common.Test\Lidarr.Common.Test.csproj" />
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
<Project Sdk="Microsoft.NET.Sdk">
|
<Project Sdk="Microsoft.NET.Sdk">
|
||||||
<PropertyGroup>
|
<PropertyGroup>
|
||||||
<TargetFrameworks>net462;net5.0</TargetFrameworks>
|
<TargetFrameworks>net5.0</TargetFrameworks>
|
||||||
</PropertyGroup>
|
</PropertyGroup>
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<PackageReference Include="NLog" Version="4.7.9" />
|
<PackageReference Include="NLog" Version="4.7.9" />
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
<Project Sdk="Microsoft.NET.Sdk.WindowsDesktop">
|
<Project Sdk="Microsoft.NET.Sdk.WindowsDesktop">
|
||||||
<PropertyGroup>
|
<PropertyGroup>
|
||||||
<OutputType>WinExe</OutputType>
|
<OutputType>WinExe</OutputType>
|
||||||
<TargetFrameworks>net462;net5.0-windows</TargetFrameworks>
|
<TargetFrameworks>net5.0-windows</TargetFrameworks>
|
||||||
<RuntimeIdentifiers>win-x64;win-x86</RuntimeIdentifiers>
|
<RuntimeIdentifiers>win-x64;win-x86</RuntimeIdentifiers>
|
||||||
<UseWindowsForms>true</UseWindowsForms>
|
<UseWindowsForms>true</UseWindowsForms>
|
||||||
<ApplicationIcon>..\NzbDrone.Host\NzbDrone.ico</ApplicationIcon>
|
<ApplicationIcon>..\NzbDrone.Host\NzbDrone.ico</ApplicationIcon>
|
||||||
|
@ -14,9 +14,6 @@
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<ProjectReference Include="..\NzbDrone.Host\Lidarr.Host.csproj" />
|
<ProjectReference Include="..\NzbDrone.Host\Lidarr.Host.csproj" />
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
<ItemGroup Condition="'$(TargetFramework)' == 'net462'">
|
|
||||||
<Reference Include="System.Windows.Forms" />
|
|
||||||
</ItemGroup>
|
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<Compile Update="Properties\Resources.Designer.cs">
|
<Compile Update="Properties\Resources.Designer.cs">
|
||||||
<AutoGen>True</AutoGen>
|
<AutoGen>True</AutoGen>
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
<Project Sdk="Microsoft.NET.Sdk">
|
<Project Sdk="Microsoft.NET.Sdk">
|
||||||
<PropertyGroup>
|
<PropertyGroup>
|
||||||
<OutputType>WinExe</OutputType>
|
<OutputType>WinExe</OutputType>
|
||||||
<TargetFrameworks>net462;net5.0</TargetFrameworks>
|
<TargetFrameworks>net5.0</TargetFrameworks>
|
||||||
</PropertyGroup>
|
</PropertyGroup>
|
||||||
<ItemGroup Condition="'$(TargetFramework)' == 'net5.0'">
|
<ItemGroup Condition="'$(TargetFramework)' == 'net5.0'">
|
||||||
<PackageReference Include="System.Security.Principal.Windows" Version="5.0.0" />
|
<PackageReference Include="System.Security.Principal.Windows" Version="5.0.0" />
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
<Project Sdk="Microsoft.NET.Sdk">
|
<Project Sdk="Microsoft.NET.Sdk">
|
||||||
<PropertyGroup>
|
<PropertyGroup>
|
||||||
<OutputType>WinExe</OutputType>
|
<OutputType>WinExe</OutputType>
|
||||||
<TargetFrameworks>net462;net5.0</TargetFrameworks>
|
<TargetFrameworks>net5.0</TargetFrameworks>
|
||||||
</PropertyGroup>
|
</PropertyGroup>
|
||||||
<ItemGroup Condition="'$(TargetFramework)' == 'net5.0'">
|
<ItemGroup Condition="'$(TargetFramework)' == 'net5.0'">
|
||||||
<PackageReference Include="System.Security.Principal.Windows" Version="5.0.0" />
|
<PackageReference Include="System.Security.Principal.Windows" Version="5.0.0" />
|
||||||
|
|
|
@ -1,17 +0,0 @@
|
||||||
<Project>
|
|
||||||
|
|
||||||
<Target Name="FixBindingRedirects"
|
|
||||||
AfterTargets="ResolveAssemblyReferences"
|
|
||||||
BeforeTargets="GenerateBindingRedirects">
|
|
||||||
|
|
||||||
<ItemGroup Condition="'$(TargetFrameworkIdentifier)' == '.NETFramework' and '$(RuntimeIdentifier)' == 'linux-x64'">
|
|
||||||
<SuggestedBindingRedirects Remove="System.Net.Http, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
|
|
||||||
</ItemGroup>
|
|
||||||
|
|
||||||
<ItemGroup Condition="'$(TargetFrameworkIdentifier)' == '.NETFramework' and $(RuntimeIdentifier.StartsWith('win'))">
|
|
||||||
<SuggestedBindingRedirects Remove="System.Runtime.InteropServices.RuntimeInformation, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
|
|
||||||
</ItemGroup>
|
|
||||||
|
|
||||||
</Target>
|
|
||||||
|
|
||||||
</Project>
|
|
|
@ -1,52 +0,0 @@
|
||||||
<Project>
|
|
||||||
|
|
||||||
<!--
|
|
||||||
When compiling without mono, but targeting mono we need to replace some assemblies with facades to make it run on mono.
|
|
||||||
This MonoFacades.targets file should only be included if not targeting windows and targeting net4x.
|
|
||||||
|
|
||||||
Warning: We ONLY support facades that reside directly in MonoFacadesPath, otherwise the joining of items becomes complicated.
|
|
||||||
|
|
||||||
Any MonoFacade listed that doesn't exist on disk will be removed instead of replaced.
|
|
||||||
|
|
||||||
See: https://github.com/mono/mono/blob/master/tools/nuget-hash-extractor/download.sh
|
|
||||||
That list defines assemblies that are prohibited from being loaded from the appdir, instead loading from mono GAC.
|
|
||||||
-->
|
|
||||||
|
|
||||||
<PropertyGroup>
|
|
||||||
<MonoFacadesPath>$(MSBuildThisFileDirectory)..\Libraries\Mono\</MonoFacadesPath>
|
|
||||||
<ResolveReferencesDependsOn>
|
|
||||||
$(ResolveReferencesDependsOn);
|
|
||||||
SubstituteMonoFacadesBuild
|
|
||||||
</ResolveReferencesDependsOn>
|
|
||||||
</PropertyGroup>
|
|
||||||
|
|
||||||
<ItemGroup>
|
|
||||||
<MonoFacade Include="$(MonoFacadesPath)*.dll" />
|
|
||||||
<MonoFacade Include="System.IO.Compression.dll" />
|
|
||||||
<MonoFacade Include="System.Net.Http.dll" />
|
|
||||||
|
|
||||||
<!-- List of MonoFacade by FileName -->
|
|
||||||
<MonoFacade_Facade Include="@(MonoFacade->'%(Filename)%(Extension)')" />
|
|
||||||
</ItemGroup>
|
|
||||||
|
|
||||||
<Target Name="SubstituteMonoFacadesBuild"
|
|
||||||
AfterTargets="ResolveAssemblyReferences"
|
|
||||||
BeforeTargets="GenerateBindingRedirects">
|
|
||||||
|
|
||||||
<ItemGroup>
|
|
||||||
<!-- List of ReferenceCopyLocalPaths by FileName and filter out those without Facades -->
|
|
||||||
<MonoFacade_Resolved Include="@(ReferenceCopyLocalPaths->'%(Filename)%(Extension)')">
|
|
||||||
<OriginalIdentity>%(ReferenceCopyLocalPaths.Identity)</OriginalIdentity>
|
|
||||||
<MonoFacadeIdentity>$(MonoFacadesPath)%(Filename)%(Extension)</MonoFacadeIdentity>
|
|
||||||
</MonoFacade_Resolved>
|
|
||||||
<MonoFacade_Unrelated Include="@(MonoFacade_Resolved)" />
|
|
||||||
<MonoFacade_Unrelated Remove="@(MonoFacade_Facade)" />
|
|
||||||
<MonoFacade_Resolved Remove="@(MonoFacade_Unrelated)" />
|
|
||||||
|
|
||||||
<!-- Modify the actual copy list -->
|
|
||||||
<ReferenceCopyLocalPaths Remove="@(MonoFacade_Resolved->'%(OriginalIdentity)')" />
|
|
||||||
<ReferenceCopyLocalPaths Include="@(MonoFacade_Resolved->'%(MonoFacadeIdentity)')" Condition="Exists('%(MonoFacade_Resolved.MonoFacadeIdentity)')" />
|
|
||||||
</ItemGroup>
|
|
||||||
</Target>
|
|
||||||
|
|
||||||
</Project>
|
|
|
@ -21,8 +21,6 @@
|
||||||
<Framework>%(Framework)</Framework>
|
<Framework>%(Framework)</Framework>
|
||||||
</Renamed>
|
</Renamed>
|
||||||
|
|
||||||
<Renamed Remove="$(ExcludedRuntimeFrameworkPairs)" />
|
|
||||||
|
|
||||||
<!-- Transform RuntimeIdentifierForPublish items to project items to pass to MSBuild task -->
|
<!-- Transform RuntimeIdentifierForPublish items to project items to pass to MSBuild task -->
|
||||||
<ProjectToPublish Include="@(Renamed->'$(MSBuildProjectFullPath)')">
|
<ProjectToPublish Include="@(Renamed->'$(MSBuildProjectFullPath)')">
|
||||||
<AdditionalProperties>RuntimeIdentifier=%(Renamed.Runtime);TargetFramework=%(Renamed.Framework)</AdditionalProperties>
|
<AdditionalProperties>RuntimeIdentifier=%(Renamed.Runtime);TargetFramework=%(Renamed.Framework)</AdditionalProperties>
|
||||||
|
|
Loading…
Reference in New Issue