You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何解决.NET 5主应用引用.NET Framework 4.8类库插件的资源依赖问题

解决方法

.NET 5作为.NET Core分支的运行时,本身不内置System.Web.Services这类.NET Framework专属程序集,要在宿主无静态依赖的前提下解决插件依赖问题,按以下步骤操作即可:

  • 插件端配置依赖输出
    给.NET Framework 4.8插件项目安装Microsoft.Windows.Compatibility NuGet包,该包封装了.NET Core运行时可兼容的.NET Framework API实现,包含System.Web.Services的可用版本。同时在插件的.csproj文件中添加如下配置,强制编译时将所有依赖程序集输出到生成目录:
    <PropertyGroup>
      <CopyLocalLockFileAssemblies>true</CopyLocalLockFileAssemblies>
    </PropertyGroup>
    
    这一步完成后,所有插件需要的依赖都会随插件本身生成到同目录,不需要宿主提前引用任何相关包。
  • 调整宿主的插件加载逻辑
    在宿主创建插件对应的AssemblyLoadContext时,注册自定义的程序集解析回调,优先从插件所在目录搜索加载缺失的依赖,不要走宿主默认的程序集搜索路径,示例代码如下:
    string pluginDirectory = Path.GetDirectoryName(pluginAssemblyPath);
    AssemblyLoadContext pluginAlc = new AssemblyLoadContext($"Plugin_{Guid.NewGuid()}", isCollectible: true);
    
    pluginAlc.Resolving += (alc, assemblyName) => 
    {
        string targetAssemblyPath = Path.Combine(pluginDirectory, $"{assemblyName.Name}.dll");
        if (File.Exists(targetAssemblyPath))
        {
            return alc.LoadFromAssemblyPath(targetAssemblyPath);
        }
        return null;
    };
    
  • 兼容性检查
    如果插件用到了System.Web.Services中未被兼容包实现的老旧API,可以将相关逻辑替换为System.ServiceModel下的等效实现,或者将依赖的原生.NET Framework程序集手动放到插件目录下,会被自定义的解析逻辑正常加载。

内容的提问来源于stack exchange,提问作者rastro

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.03 08:18:01