Skip to content

Commit b03dc8a

Browse files
authored
Merge pull request #191 from Flow-Launcher/dev
Release 1.4.0 | Plugin 1.2.2
2 parents 152e32e + 336cb3c commit b03dc8a

File tree

54 files changed

+493
-513
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

54 files changed

+493
-513
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/Alphabet.cs

Lines changed: 0 additions & 178 deletions
This file was deleted.

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

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -49,14 +49,11 @@
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" />
56-
<PackageReference Include="Pinyin4DotNet" Version="2016.4.23.4" />
5755
<PackageReference Include="System.Drawing.Common" Version="4.7.0" />
58-
<PackageReference Include="System.Runtime" Version="4.3.1" />
59-
<PackageReference Include="PropertyChanged.Fody" Version="2.5.13" />
56+
<PackageReference Include="ToolGood.Words.Pinyin" Version="3.0.1.4" />
6057
</ItemGroup>
6158

6259
<ItemGroup>

0 commit comments

Comments
 (0)