我创建了一个小型 .NET 6 控制台应用程序(GitHub 上的GPU Offers),它使用插件系统动态(在运行时)加载插件(DLL 文件)。
当我使用带有修剪未使用程序集dotnet publish
选项的控制台应用程序(而不是插件)时,控制台应用程序不再将插件识别为插件......
private static IEnumerable<IPluginInterface> CreatePlugins(Assembly assembly)
{
int count = 0;
foreach (Type type in assembly.GetTypes())
{
if (typeof(IPluginInterface).IsAssignableFrom(type))
{
IPluginInterface result = Activator.CreateInstance(type) as IPluginInterface;
if (result != null)
{
count++;
yield return result;
}
}
}
if (count == 0)
{
string availableTypes = string.Join(", ", Enumerable.Select(assembly.GetTypes(), t => t.FullName));
throw new ApplicationException(
$"Can't find any type which implements IPluginInterface in {assembly} from {assembly.Location}.\nAvailable types: {availableTypes}");
}
}
当我为控制台应用程序禁用修剪未使用的程序集选项时,插件会再次被识别。
在我看来,IPluginInterface
不能将其视为“未使用的程序集”,因为它在控制台应用程序中被积极使用,如上所示。
那么,当启用修剪未使用的程序集发布选项时,为什么控制台应用程序不再识别插件?