0

我创建了一个小型 .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不能将其视为“未使用的程序集”,因为它在控制台应用程序中被积极使用,如上所示。

那么,当启用修剪未使用的程序集发布选项时,为什么控制台应用程序不再识别插件?

4

0 回答 0