Skip to content

Commit e72407f

Browse files
authored
merge PR #160: fix plugin dependency loading
Fix plugin dependency loading and remove excess duplicate package references
2 parents 0ab7dc6 + 732f3b4 commit e72407f

File tree

22 files changed

+110
-77
lines changed

22 files changed

+110
-77
lines changed

Directory.Build.targets

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
<Project>
2+
<Target Name="ExcludePluginProjectReferenceOutput"
3+
AfterTargets="AssignProjectConfiguration"
4+
BeforeTargets="ResolveProjectReferences"
5+
Condition="'$(OutputType)' == 'Library' and '$(CopyLocalLockFileAssemblies)' == 'true' and $(AssemblyName.EndsWith('Tests')) == 'false' ">
6+
<ItemGroup>
7+
<ProjectReferenceWithConfiguration Update="@(ProjectReferenceWithConfiguration)" >
8+
<Private>false</Private>
9+
</ProjectReferenceWithConfiguration>
10+
<ProjectReference Update="@(ProjectReference)" >
11+
<Private>false</Private>
12+
</ProjectReference>
13+
</ItemGroup>
14+
</Target>
15+
</Project>

Flow.Launcher.Core/Flow.Launcher.Core.csproj

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -54,12 +54,8 @@
5454

5555
<ItemGroup>
5656
<PackageReference Include="FSharp.Core" Version="4.7.1" />
57-
<PackageReference Include="JetBrains.Annotations" Version="2019.1.3" />
58-
<PackageReference Include="Newtonsoft.Json" Version="12.0.3" />
5957
<PackageReference Include="squirrel.windows" Version="1.5.2" />
60-
<PackageReference Include="PropertyChanged.Fody" Version="2.5.13" />
6158
<PackageReference Include="SharpZipLib" Version="1.2.0" />
62-
<PackageReference Include="System.Runtime" Version="4.3.1" />
6359
</ItemGroup>
6460

6561
<ItemGroup>
Lines changed: 57 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,57 @@
1+
using Flow.Launcher.Infrastructure;
2+
using System;
3+
using System.IO;
4+
using System.Linq;
5+
using System.Reflection;
6+
using System.Runtime.Loader;
7+
8+
namespace Flow.Launcher.Core.Plugin
9+
{
10+
internal class PluginAssemblyLoader : AssemblyLoadContext
11+
{
12+
private readonly AssemblyDependencyResolver dependencyResolver;
13+
14+
private readonly AssemblyDependencyResolver referencedPluginPackageDependencyResolver;
15+
16+
private readonly AssemblyName assemblyName;
17+
18+
internal PluginAssemblyLoader(string assemblyFilePath)
19+
{
20+
dependencyResolver = new AssemblyDependencyResolver(assemblyFilePath);
21+
assemblyName = new AssemblyName(Path.GetFileNameWithoutExtension(assemblyFilePath));
22+
23+
referencedPluginPackageDependencyResolver =
24+
new AssemblyDependencyResolver(Path.Combine(Constant.ProgramDirectory, "Flow.Launcher.Plugin.dll"));
25+
}
26+
27+
internal Assembly LoadAssemblyAndDependencies()
28+
{
29+
return LoadFromAssemblyName(assemblyName);
30+
}
31+
32+
protected override Assembly Load(AssemblyName assemblyName)
33+
{
34+
string assemblyPath = dependencyResolver.ResolveAssemblyToPath(assemblyName);
35+
36+
// When resolving dependencies, ignore assembly depenedencies that already exits with Flow.Launcher.Plugin
37+
// Otherwise will get unexpected behaviour with plugins, e.g. JsonIgnore attribute not honored in WebSearch or other plugins
38+
// that use Newtonsoft.Json
39+
if (assemblyPath == null || ExistsInReferencedPluginPackage(assemblyName))
40+
return null;
41+
42+
return LoadFromAssemblyPath(assemblyPath);
43+
}
44+
45+
internal Type FromAssemblyGetTypeOfInterface(Assembly assembly, Type type)
46+
{
47+
var allTypes = assembly.ExportedTypes;
48+
49+
return allTypes.First(o => o.IsClass && !o.IsAbstract && o.GetInterfaces().Contains(type));
50+
}
51+
52+
internal bool ExistsInReferencedPluginPackage(AssemblyName assemblyName)
53+
{
54+
return referencedPluginPackageDependencyResolver.ResolveAssemblyToPath(assemblyName) != null;
55+
}
56+
}
57+
}

Flow.Launcher.Core/Plugin/PluginsLoader.cs

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -41,20 +41,20 @@ public static IEnumerable<PluginPair> DotNetPlugins(List<PluginMetadata> source)
4141
{
4242

4343
#if DEBUG
44-
var assembly = AssemblyLoadContext.Default.LoadFromAssemblyPath(metadata.ExecuteFilePath);
45-
var types = assembly.GetTypes();
46-
var type = types.First(o => o.IsClass && !o.IsAbstract && o.GetInterfaces().Contains(typeof(IPlugin)));
44+
var assemblyLoader = new PluginAssemblyLoader(metadata.ExecuteFilePath);
45+
var assembly = assemblyLoader.LoadAssemblyAndDependencies();
46+
var type = assemblyLoader.FromAssemblyGetTypeOfInterface(assembly, typeof(IPlugin));
4747
var plugin = (IPlugin)Activator.CreateInstance(type);
4848
#else
4949
Assembly assembly = null;
5050
IPlugin plugin = null;
5151

5252
try
5353
{
54-
assembly = AssemblyLoadContext.Default.LoadFromAssemblyPath(metadata.ExecuteFilePath);
54+
var assemblyLoader = new PluginAssemblyLoader(metadata.ExecuteFilePath);
55+
assembly = assemblyLoader.LoadAssemblyAndDependencies();
5556

56-
var types = assembly.GetTypes();
57-
var type = types.First(o => o.IsClass && !o.IsAbstract && o.GetInterfaces().Contains(typeof(IPlugin)));
57+
var type = assemblyLoader.FromAssemblyGetTypeOfInterface(assembly, typeof(IPlugin));
5858

5959
plugin = (IPlugin)Activator.CreateInstance(type);
6060
}

Flow.Launcher.Infrastructure/Flow.Launcher.Infrastructure.csproj

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -49,13 +49,10 @@
4949
</ItemGroup>
5050

5151
<ItemGroup>
52-
<PackageReference Include="JetBrains.Annotations" Version="2019.1.3" />
5352
<PackageReference Include="Newtonsoft.Json" Version="12.0.3" />
5453
<PackageReference Include="NLog.Schema" Version="4.7.0-rc1" />
5554
<PackageReference Include="NLog.Web.AspNetCore" Version="4.9.0" />
5655
<PackageReference Include="System.Drawing.Common" Version="4.7.0" />
57-
<PackageReference Include="System.Runtime" Version="4.3.1" />
58-
<PackageReference Include="PropertyChanged.Fody" Version="2.5.13" />
5956
<PackageReference Include="ToolGood.Words.Pinyin" Version="3.0.1.4" />
6057
</ItemGroup>
6158

Flow.Launcher.Plugin/Flow.Launcher.Plugin.csproj

Lines changed: 2 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
<Project Sdk="Microsoft.NET.Sdk.WindowsDesktop">
1+
<Project Sdk="Microsoft.NET.Sdk.WindowsDesktop">
22

33
<PropertyGroup>
44
<TargetFramework>netcoreapp3.1</TargetFramework>
@@ -60,12 +60,9 @@
6060
</ItemGroup>
6161

6262
<ItemGroup>
63-
<PackageReference Include="Microsoft.SourceLink.GitHub" Version="1.0.0" PrivateAssets="All"/>
63+
<PackageReference Include="Microsoft.SourceLink.GitHub" Version="1.0.0" PrivateAssets="All" />
6464
<PackageReference Include="JetBrains.Annotations" Version="2019.1.3" />
65-
<PackageReference Include="Mono.Cecil" Version="0.11.2" />
6665
<PackageReference Include="Newtonsoft.Json" Version="12.0.3" />
67-
<PackageReference Include="PropertyChanged.Fody" Version="2.5.13" />
68-
<PackageReference Include="System.Runtime" Version="4.3.1" />
6966
</ItemGroup>
7067

7168
</Project>

Flow.Launcher.sln

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -53,6 +53,7 @@ Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Solution Items", "Solution
5353
.gitattributes = .gitattributes
5454
.gitignore = .gitignore
5555
appveyor.yml = appveyor.yml
56+
Directory.Build.targets = Directory.Build.targets
5657
Scripts\flowlauncher.nuspec = Scripts\flowlauncher.nuspec
5758
LICENSE = LICENSE
5859
Scripts\post_build.ps1 = Scripts\post_build.ps1

Flow.Launcher/Flow.Launcher.csproj

Lines changed: 1 addition & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
<Project Sdk="Microsoft.NET.Sdk.WindowsDesktop">
1+
<Project Sdk="Microsoft.NET.Sdk.WindowsDesktop">
22

33
<PropertyGroup>
44
<OutputType>WinExe</OutputType>
@@ -72,23 +72,13 @@
7272

7373
<ItemGroup>
7474
<PackageReference Include="InputSimulator" Version="1.0.4" />
75-
<PackageReference Include="JetBrains.Annotations" Version="2019.1.3" />
76-
<PackageReference Include="Mages" Version="1.6.0" />
7775
<PackageReference Include="ModernWpfUI" Version="0.8.3" />
78-
<PackageReference Include="Newtonsoft.Json" Version="12.0.3" />
7976
<PackageReference Include="NHotkey.Wpf" Version="1.2.1" />
80-
<PackageReference Include="NLog.Web.AspNetCore" Version="4.9.0" />
8177
<PackageReference Include="NuGet.CommandLine" Version="5.4.0">
8278
<PrivateAssets>all</PrivateAssets>
8379
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
8480
</PackageReference>
8581
<PackageReference Include="PropertyChanged.Fody" Version="2.5.13" />
86-
<PackageReference Include="System.Data.OleDb" Version="4.7.1" />
87-
<PackageReference Include="System.Data.SQLite" Version="1.0.112" />
88-
<PackageReference Include="System.Data.SQLite.Core" Version="1.0.112" />
89-
<PackageReference Include="System.Runtime" Version="4.3.1" />
90-
<PackageReference Include="tlbimp-Microsoft.Search.Interop" Version="1.0.0" />
91-
<PackageReference Include="UnidecodeSharp" Version="1.0.0" />
9282
</ItemGroup>
9383

9484
<ItemGroup>

Plugins/Flow.Launcher.Plugin.BrowserBookmark/Flow.Launcher.Plugin.BrowserBookmark.csproj

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,13 @@
11
<Project Sdk="Microsoft.NET.Sdk.WindowsDesktop">
22

33
<PropertyGroup>
4+
<OutputType>Library</OutputType>
45
<TargetFramework>netcoreapp3.1</TargetFramework>
56
<ProjectGuid>{9B130CC5-14FB-41FF-B310-0A95B6894C37}</ProjectGuid>
67
<AppDesignerFolder>Properties</AppDesignerFolder>
78
<RootNamespace>Flow.Launcher.Plugin.BrowserBookmark</RootNamespace>
89
<AssemblyName>Flow.Launcher.Plugin.BrowserBookmark</AssemblyName>
10+
<CopyLocalLockFileAssemblies>true</CopyLocalLockFileAssemblies>
911
<AppendTargetFrameworkToOutputPath>false</AppendTargetFrameworkToOutputPath>
1012
<AppendRuntimeIdentifierToOutputPath>false</AppendRuntimeIdentifierToOutputPath>
1113
</PropertyGroup>

Plugins/Flow.Launcher.Plugin.BrowserBookmark/plugin.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,6 @@
77
"Version": "1.2.1",
88
"Language": "csharp",
99
"Website": "https://github.com/Flow-Launcher/Flow.Launcher",
10-
"ExecuteFileName": "Flow.Launcher.Plugin.browserBookmark.dll",
10+
"ExecuteFileName": "Flow.Launcher.Plugin.BrowserBookmark.dll",
1111
"IcoPath": "Images\\bookmark.png"
1212
}

0 commit comments

Comments
 (0)