mirror of
https://github.com/greenshot/greenshot
synced 2025-08-20 21:43:24 -07:00
Added assembly attribute for plugin identifier
This commit is contained in:
parent
b2a9dd8dd2
commit
dcae7e47a2
13 changed files with 240 additions and 22 deletions
|
@ -0,0 +1,46 @@
|
||||||
|
/*
|
||||||
|
* Greenshot - a free and open source screenshot tool
|
||||||
|
* Copyright (C) 2007-2025 Thomas Braun, Jens Klingen, Robin Krom
|
||||||
|
*
|
||||||
|
* For more information see: https://getgreenshot.org/
|
||||||
|
* The Greenshot project is hosted on GitHub https://github.com/greenshot/greenshot
|
||||||
|
*
|
||||||
|
* This program is free software: you can redistribute it and/or modify
|
||||||
|
* it under the terms of the GNU General Public License as published by
|
||||||
|
* the Free Software Foundation, either version 1 of the License, or
|
||||||
|
* (at your option) any later version.
|
||||||
|
*
|
||||||
|
* This program 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 General Public License for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU General Public License
|
||||||
|
* along with this program. If not, see <https://www.gnu.org/licenses/>.
|
||||||
|
*/
|
||||||
|
|
||||||
|
using System;
|
||||||
|
|
||||||
|
namespace Greenshot.Base.Interfaces.Plugin
|
||||||
|
{
|
||||||
|
/// <summary>
|
||||||
|
/// Attribute to specify a custom plugin identifier at assembly level
|
||||||
|
/// </summary>
|
||||||
|
[AttributeUsage(AttributeTargets.Assembly, AllowMultiple = false)]
|
||||||
|
public class AssemblyPluginIdentifierAttribute : Attribute
|
||||||
|
{
|
||||||
|
/// <summary>
|
||||||
|
/// The identifier used for the plugin in configuration
|
||||||
|
/// </summary>
|
||||||
|
public string Identifier { get; }
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Constructor for the plugin identifier attribute
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="identifier">The identifier for the plugin in configuration</param>
|
||||||
|
public AssemblyPluginIdentifierAttribute(string identifier)
|
||||||
|
{
|
||||||
|
Identifier = identifier;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
|
@ -21,11 +21,13 @@
|
||||||
|
|
||||||
using System.Reflection;
|
using System.Reflection;
|
||||||
using System.Runtime.InteropServices;
|
using System.Runtime.InteropServices;
|
||||||
|
using Greenshot.Base.Interfaces.Plugin;
|
||||||
|
|
||||||
// General Information about an assembly is controlled through the following
|
// General Information about an assembly is controlled through the following
|
||||||
// set of attributes. Change these attribute values to modify the information
|
// set of attributes. Change these attribute values to modify the information
|
||||||
// associated with an assembly.
|
// associated with an assembly.
|
||||||
[assembly: AssemblyDescription("A plugin to upload images to Box")]
|
[assembly: AssemblyDescription("A plugin to upload images to Box")]
|
||||||
|
[assembly: AssemblyPluginIdentifier("Box Plugin")]
|
||||||
|
|
||||||
// This sets the default COM visibility of types in the assembly to invisible.
|
// This sets the default COM visibility of types in the assembly to invisible.
|
||||||
// If you need to expose a type to COM, use [ComVisible(true)] on that type.
|
// If you need to expose a type to COM, use [ComVisible(true)] on that type.
|
||||||
|
|
34
src/Greenshot.Plugin.Confluence/Properties/AssemblyInfo.cs
Normal file
34
src/Greenshot.Plugin.Confluence/Properties/AssemblyInfo.cs
Normal file
|
@ -0,0 +1,34 @@
|
||||||
|
/*
|
||||||
|
* Greenshot - a free and open source screenshot tool
|
||||||
|
* Copyright (C) 2007-2021 Thomas Braun, Jens Klingen, Robin Krom, Francis Noel
|
||||||
|
*
|
||||||
|
* For more information see: https://getgreenshot.org/
|
||||||
|
* The Greenshot project is hosted on GitHub https://github.com/greenshot/greenshot
|
||||||
|
*
|
||||||
|
* This program is free software: you can redistribute it and/or modify
|
||||||
|
* it under the terms of the GNU General Public License as published by
|
||||||
|
* the Free Software Foundation, either version 1 of the License, or
|
||||||
|
* (at your option) any later version.
|
||||||
|
*
|
||||||
|
* This program 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 General Public License for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU General Public License
|
||||||
|
* along with this program. If not, see <https://www.gnu.org/licenses/>.
|
||||||
|
*/
|
||||||
|
|
||||||
|
using System.Reflection;
|
||||||
|
using System.Runtime.InteropServices;
|
||||||
|
using Greenshot.Base.Interfaces.Plugin;
|
||||||
|
|
||||||
|
// General Information about an assembly is controlled through the following
|
||||||
|
// set of attributes. Change these attribute values to modify the information
|
||||||
|
// associated with an assembly.
|
||||||
|
[assembly: AssemblyDescription("A plugin to upload images to Confluence")]
|
||||||
|
[assembly: AssemblyPluginIdentifier("Confluence Plugin")]
|
||||||
|
|
||||||
|
// This sets the default COM visibility of types in the assembly to invisible.
|
||||||
|
// If you need to expose a type to COM, use [ComVisible(true)] on that type.
|
||||||
|
[assembly: ComVisible(false)]
|
|
@ -21,11 +21,13 @@
|
||||||
|
|
||||||
using System.Reflection;
|
using System.Reflection;
|
||||||
using System.Runtime.InteropServices;
|
using System.Runtime.InteropServices;
|
||||||
|
using Greenshot.Base.Interfaces.Plugin;
|
||||||
|
|
||||||
// General Information about an assembly is controlled through the following
|
// General Information about an assembly is controlled through the following
|
||||||
// set of attributes. Change these attribute values to modify the information
|
// set of attributes. Change these attribute values to modify the information
|
||||||
// associated with an assembly.
|
// associated with an assembly.
|
||||||
[assembly: AssemblyDescription("A plugin to upload images to Dropbox")]
|
[assembly: AssemblyDescription("A plugin to upload images to Dropbox")]
|
||||||
|
[assembly: AssemblyPluginIdentifier("Dropbox Plugin")]
|
||||||
|
|
||||||
// This sets the default COM visibility of types in the assembly to invisible.
|
// This sets the default COM visibility of types in the assembly to invisible.
|
||||||
// If you need to expose a type to COM, use [ComVisible(true)] on that type.
|
// If you need to expose a type to COM, use [ComVisible(true)] on that type.
|
||||||
|
|
|
@ -0,0 +1,34 @@
|
||||||
|
/*
|
||||||
|
* Greenshot - a free and open source screenshot tool
|
||||||
|
* Copyright (C) 2007-2025 Thomas Braun, Jens Klingen, Robin Krom, Francis Noel
|
||||||
|
*
|
||||||
|
* For more information see: https://getgreenshot.org/
|
||||||
|
* The Greenshot project is hosted on GitHub https://github.com/greenshot/greenshot
|
||||||
|
*
|
||||||
|
* This program is free software: you can redistribute it and/or modify
|
||||||
|
* it under the terms of the GNU General Public License as published by
|
||||||
|
* the Free Software Foundation, either version 1 of the License, or
|
||||||
|
* (at your option) any later version.
|
||||||
|
*
|
||||||
|
* This program 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 General Public License for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU General Public License
|
||||||
|
* along with this program. If not, see <https://www.gnu.org/licenses/>.
|
||||||
|
*/
|
||||||
|
|
||||||
|
using System.Reflection;
|
||||||
|
using System.Runtime.InteropServices;
|
||||||
|
using Greenshot.Base.Interfaces.Plugin;
|
||||||
|
|
||||||
|
// General Information about an assembly is controlled through the following
|
||||||
|
// set of attributes. Change these attribute values to modify the information
|
||||||
|
// associated with an assembly.
|
||||||
|
[assembly: AssemblyDescription("A plugin to send screenshots to other applications")]
|
||||||
|
[assembly: AssemblyPluginIdentifier("External command Plugin")]
|
||||||
|
|
||||||
|
// This sets the default COM visibility of types in the assembly to invisible.
|
||||||
|
// If you need to expose a type to COM, use [ComVisible(true)] on that type.
|
||||||
|
[assembly: ComVisible(false)]
|
|
@ -21,11 +21,13 @@
|
||||||
|
|
||||||
using System.Reflection;
|
using System.Reflection;
|
||||||
using System.Runtime.InteropServices;
|
using System.Runtime.InteropServices;
|
||||||
|
using Greenshot.Base.Interfaces.Plugin;
|
||||||
|
|
||||||
// General Information about an assembly is controlled through the following
|
// General Information about an assembly is controlled through the following
|
||||||
// set of attributes. Change these attribute values to modify the information
|
// set of attributes. Change these attribute values to modify the information
|
||||||
// associated with an assembly.
|
// associated with an assembly.
|
||||||
[assembly: AssemblyDescription("A plugin to upload images to Flickr")]
|
[assembly: AssemblyDescription("A plugin to upload images to Flickr")]
|
||||||
|
[assembly: AssemblyPluginIdentifier("Flickr Plugin")]
|
||||||
|
|
||||||
// This sets the default COM visibility of types in the assembly to invisible.
|
// This sets the default COM visibility of types in the assembly to invisible.
|
||||||
// If you need to expose a type to COM, use [ComVisible(true)] on that type.
|
// If you need to expose a type to COM, use [ComVisible(true)] on that type.
|
||||||
|
|
|
@ -21,11 +21,13 @@
|
||||||
|
|
||||||
using System.Reflection;
|
using System.Reflection;
|
||||||
using System.Runtime.InteropServices;
|
using System.Runtime.InteropServices;
|
||||||
|
using Greenshot.Base.Interfaces.Plugin;
|
||||||
|
|
||||||
// General Information about an assembly is controlled through the following
|
// General Information about an assembly is controlled through the following
|
||||||
// set of attributes. Change these attribute values to modify the information
|
// set of attributes. Change these attribute values to modify the information
|
||||||
// associated with an assembly.
|
// associated with an assembly.
|
||||||
[assembly: AssemblyDescription("A plugin to upload images to GooglePhotos")]
|
[assembly: AssemblyDescription("A plugin to upload images to GooglePhotos")]
|
||||||
|
[assembly: AssemblyPluginIdentifier("GooglePhotos Plugin")]
|
||||||
|
|
||||||
// This sets the default COM visibility of types in the assembly to invisible.
|
// This sets the default COM visibility of types in the assembly to invisible.
|
||||||
// If you need to expose a type to COM, use [ComVisible(true)] on that type.
|
// If you need to expose a type to COM, use [ComVisible(true)] on that type.
|
||||||
|
|
|
@ -21,11 +21,13 @@
|
||||||
|
|
||||||
using System.Reflection;
|
using System.Reflection;
|
||||||
using System.Runtime.InteropServices;
|
using System.Runtime.InteropServices;
|
||||||
|
using Greenshot.Base.Interfaces.Plugin;
|
||||||
|
|
||||||
// General Information about an assembly is controlled through the following
|
// General Information about an assembly is controlled through the following
|
||||||
// set of attributes. Change these attribute values to modify the information
|
// set of attributes. Change these attribute values to modify the information
|
||||||
// associated with an assembly.
|
// associated with an assembly.
|
||||||
[assembly: AssemblyDescription("A plugin to upload images to Imgur")]
|
[assembly: AssemblyDescription("A plugin to upload images to Imgur")]
|
||||||
|
[assembly: AssemblyPluginIdentifier("Imgur Plugin")]
|
||||||
|
|
||||||
// This sets the default COM visibility of types in the assembly to invisible.
|
// This sets the default COM visibility of types in the assembly to invisible.
|
||||||
// If you need to expose a type to COM, use [ComVisible(true)] on that type.
|
// If you need to expose a type to COM, use [ComVisible(true)] on that type.
|
||||||
|
|
34
src/Greenshot.Plugin.Jira/Properties/AssemblyInfo.cs
Normal file
34
src/Greenshot.Plugin.Jira/Properties/AssemblyInfo.cs
Normal file
|
@ -0,0 +1,34 @@
|
||||||
|
/*
|
||||||
|
* Greenshot - a free and open source screenshot tool
|
||||||
|
* Copyright (C) 2007-2025 Thomas Braun, Jens Klingen, Robin Krom, Francis Noel
|
||||||
|
*
|
||||||
|
* For more information see: https://getgreenshot.org/
|
||||||
|
* The Greenshot project is hosted on GitHub https://github.com/greenshot/greenshot
|
||||||
|
*
|
||||||
|
* This program is free software: you can redistribute it and/or modify
|
||||||
|
* it under the terms of the GNU General Public License as published by
|
||||||
|
* the Free Software Foundation, either version 1 of the License, or
|
||||||
|
* (at your option) any later version.
|
||||||
|
*
|
||||||
|
* This program 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 General Public License for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU General Public License
|
||||||
|
* along with this program. If not, see <https://www.gnu.org/licenses/>.
|
||||||
|
*/
|
||||||
|
|
||||||
|
using System.Reflection;
|
||||||
|
using System.Runtime.InteropServices;
|
||||||
|
using Greenshot.Base.Interfaces.Plugin;
|
||||||
|
|
||||||
|
// General Information about an assembly is controlled through the following
|
||||||
|
// set of attributes. Change these attribute values to modify the information
|
||||||
|
// associated with an assembly.
|
||||||
|
[assembly: AssemblyDescription("A plugin to upload images to Jira")]
|
||||||
|
[assembly: AssemblyPluginIdentifier("Jira Plugin")]
|
||||||
|
|
||||||
|
// This sets the default COM visibility of types in the assembly to invisible.
|
||||||
|
// If you need to expose a type to COM, use [ComVisible(true)] on that type.
|
||||||
|
[assembly: ComVisible(false)]
|
|
@ -21,11 +21,13 @@
|
||||||
|
|
||||||
using System.Reflection;
|
using System.Reflection;
|
||||||
using System.Runtime.InteropServices;
|
using System.Runtime.InteropServices;
|
||||||
|
using Greenshot.Base.Interfaces.Plugin;
|
||||||
|
|
||||||
// General Information about an assembly is controlled through the following
|
// General Information about an assembly is controlled through the following
|
||||||
// set of attributes. Change these attribute values to modify the information
|
// set of attributes. Change these attribute values to modify the information
|
||||||
// associated with an assembly.
|
// associated with an assembly.
|
||||||
[assembly: AssemblyDescription("A plugin to export images to Office applications")]
|
[assembly: AssemblyDescription("A plugin to export images to Office applications")]
|
||||||
|
[assembly: AssemblyPluginIdentifier("Office Plugin")]
|
||||||
|
|
||||||
// This sets the default COM visibility of types in the assembly to invisible.
|
// This sets the default COM visibility of types in the assembly to invisible.
|
||||||
// If you need to expose a type to COM, use [ComVisible(true)] on that type.
|
// If you need to expose a type to COM, use [ComVisible(true)] on that type.
|
||||||
|
|
|
@ -21,12 +21,14 @@
|
||||||
|
|
||||||
using System.Reflection;
|
using System.Reflection;
|
||||||
using System.Runtime.InteropServices;
|
using System.Runtime.InteropServices;
|
||||||
|
using Greenshot.Base.Interfaces.Plugin;
|
||||||
|
|
||||||
|
|
||||||
// General Information about an assembly is controlled through the following
|
// General Information about an assembly is controlled through the following
|
||||||
// set of attributes. Change these attribute values to modify the information
|
// set of attributes. Change these attribute values to modify the information
|
||||||
// associated with an assembly.
|
// associated with an assembly.
|
||||||
[assembly: AssemblyDescription("A plugin to upload images to Photobucket")]
|
[assembly: AssemblyDescription("A plugin to upload images to Photobucket")]
|
||||||
|
[assembly: AssemblyPluginIdentifier("Photobucket Plugin")]
|
||||||
|
|
||||||
// This sets the default COM visibility of types in the assembly to invisible.
|
// This sets the default COM visibility of types in the assembly to invisible.
|
||||||
// If you need to expose a type to COM, use [ComVisible(true)] on that type.
|
// If you need to expose a type to COM, use [ComVisible(true)] on that type.
|
||||||
|
|
|
@ -1,10 +1,33 @@
|
||||||
using System.Reflection;
|
/*
|
||||||
|
* Greenshot - a free and open source screenshot tool
|
||||||
|
* Copyright (C) 2007-2025 Thomas Braun, Jens Klingen, Robin Krom
|
||||||
|
*
|
||||||
|
* For more information see: https://getgreenshot.org/
|
||||||
|
* The Greenshot project is hosted on GitHub https://github.com/greenshot/greenshot
|
||||||
|
*
|
||||||
|
* This program is free software: you can redistribute it and/or modify
|
||||||
|
* it under the terms of the GNU General Public License as published by
|
||||||
|
* the Free Software Foundation, either version 1 of the License, or
|
||||||
|
* (at your option) any later version.
|
||||||
|
*
|
||||||
|
* This program 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 General Public License for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU General Public License
|
||||||
|
* along with this program. If not, see <https://www.gnu.org/licenses/>.
|
||||||
|
*/
|
||||||
|
|
||||||
|
using System.Reflection;
|
||||||
using System.Runtime.InteropServices;
|
using System.Runtime.InteropServices;
|
||||||
|
using Greenshot.Base.Interfaces.Plugin;
|
||||||
|
|
||||||
// General Information about an assembly is controlled through the following
|
// General Information about an assembly is controlled through the following
|
||||||
// set of attributes. Change these attribute values to modify the information
|
// set of attributes. Change these attribute values to modify the information
|
||||||
// associated with an assembly.
|
// associated with an assembly.
|
||||||
[assembly: AssemblyDescription("A plug-in for Windows 10 only functionality")]
|
[assembly: AssemblyDescription("A plug-in for Windows 10 only functionality")]
|
||||||
|
[assembly: AssemblyPluginIdentifier("Win10 Plugin")]
|
||||||
|
|
||||||
// Setting ComVisible to false makes the types in this assembly not visible
|
// Setting ComVisible to false makes the types in this assembly not visible
|
||||||
// to COM components. If you need to access a type in this assembly from
|
// to COM components. If you need to access a type in this assembly from
|
||||||
|
|
|
@ -219,31 +219,15 @@ namespace Greenshot.Helpers
|
||||||
{
|
{
|
||||||
var assembly = Assembly.LoadFrom(pluginFile);
|
var assembly = Assembly.LoadFrom(pluginFile);
|
||||||
|
|
||||||
var assemblyName = assembly.GetName().Name;
|
if (IsPluginExcludedByConfig(assembly, pluginFile) )
|
||||||
|
{
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
var assemblyName = assembly.GetName().Name;
|
||||||
var pluginEntryName = $"{assemblyName}.{assemblyName.Replace("Greenshot.Plugin.", string.Empty)}Plugin";
|
var pluginEntryName = $"{assemblyName}.{assemblyName.Replace("Greenshot.Plugin.", string.Empty)}Plugin";
|
||||||
var pluginEntryType = assembly.GetType(pluginEntryName, false, true);
|
var pluginEntryType = assembly.GetType(pluginEntryName, false, true);
|
||||||
|
|
||||||
// the sub namespace from plugin is used to include/exclude plugins
|
|
||||||
var excludeIdentifier = assemblyName.Replace("Greenshot.Plugin.", string.Empty);
|
|
||||||
|
|
||||||
if (CoreConfig.IncludePlugins is {} includePlugins
|
|
||||||
&& includePlugins.Count(p => !string.IsNullOrWhiteSpace(p)) > 0 // ignore empty entries i.e. a whitespace
|
|
||||||
&& !includePlugins.Contains(excludeIdentifier))
|
|
||||||
{
|
|
||||||
Log.WarnFormat("Include plugin list: {0}", string.Join(",", includePlugins));
|
|
||||||
Log.WarnFormat("Skipping the not included plugin '{0}' with version {1} from {2}", excludeIdentifier, assembly.GetName().Version, pluginFile);
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (CoreConfig.ExcludePlugins is { } excludePlugins
|
|
||||||
&& excludePlugins.Contains(excludeIdentifier))
|
|
||||||
{
|
|
||||||
Log.WarnFormat("Exclude plugin list: {0}", string.Join(",", excludePlugins));
|
|
||||||
Log.WarnFormat("Skipping the excluded plugin '{0}' with version {1} from {2}", excludeIdentifier, assembly.GetName().Version, pluginFile);
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
|
|
||||||
var plugin = (IGreenshotPlugin) Activator.CreateInstance(pluginEntryType);
|
var plugin = (IGreenshotPlugin) Activator.CreateInstance(pluginEntryType);
|
||||||
if (plugin != null)
|
if (plugin != null)
|
||||||
{
|
{
|
||||||
|
@ -268,5 +252,54 @@ namespace Greenshot.Helpers
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
/// <summary>
|
||||||
|
/// This method checks the plugin against the configured include and exclude plugin
|
||||||
|
/// lists. If a plugin is excluded, a warning is logged with details about the exclusion.
|
||||||
|
/// </summary>
|
||||||
|
private bool IsPluginExcludedByConfig(Assembly assembly, string pluginFile)
|
||||||
|
{
|
||||||
|
// Get plugin identifier from assembly attributes
|
||||||
|
string pluginConfigIdentifier = GetPluginIdentifier(assembly, pluginFile);
|
||||||
|
|
||||||
|
if (CoreConfig.IncludePlugins is { } includePlugins
|
||||||
|
&& includePlugins.Count(p => !string.IsNullOrWhiteSpace(p)) > 0 // ignore empty entries i.e. a whitespace
|
||||||
|
&& !includePlugins.Contains(pluginConfigIdentifier))
|
||||||
|
{
|
||||||
|
Log.WarnFormat("Include plugin list: {0}", string.Join(",", includePlugins));
|
||||||
|
Log.WarnFormat("Skipping the not included plugin '{0}' with version {1} from {2}", pluginConfigIdentifier, assembly.GetName().Version, pluginFile);
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (CoreConfig.ExcludePlugins is { } excludePlugins
|
||||||
|
&& excludePlugins.Contains(pluginConfigIdentifier))
|
||||||
|
{
|
||||||
|
Log.WarnFormat("Exclude plugin list: {0}", string.Join(",", excludePlugins));
|
||||||
|
Log.WarnFormat("Skipping the excluded plugin '{0}' with version {1} from {2}", pluginConfigIdentifier, assembly.GetName().Version, pluginFile);
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Retrieves the plugin identifier for the specified assembly.
|
||||||
|
/// </summary>
|
||||||
|
private string GetPluginIdentifier(Assembly assembly, string pluginFile)
|
||||||
|
{
|
||||||
|
// Try to find PluginIdentifierAttribute
|
||||||
|
var attribute = assembly
|
||||||
|
.GetCustomAttributes<AssemblyPluginIdentifierAttribute>()
|
||||||
|
.FirstOrDefault();
|
||||||
|
|
||||||
|
if (!string.IsNullOrEmpty(attribute?.Identifier))
|
||||||
|
{
|
||||||
|
return attribute.Identifier;
|
||||||
|
}
|
||||||
|
|
||||||
|
// If no attribute found, fall back to the sub namespace
|
||||||
|
var pluginSubNamespace = assembly.GetName().Name.Replace("Greenshot.Plugin.", string.Empty);
|
||||||
|
Log.WarnFormat("No '{0}' found in '{1}'. Use plugin namespace '{2}' as fallback.", nameof(AssemblyPluginIdentifierAttribute), pluginFile, pluginSubNamespace);
|
||||||
|
return pluginSubNamespace;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
Loading…
Add table
Add a link
Reference in a new issue