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

如何解决DryIoc中Rules类型存在于双程序集的编译错误

解决DryIoc类型冲突编译错误

针对Rules类型同时存在于DryIoc和DryIoc.Shared程序集导致的编译冲突,可通过以下几种方式解决:

1. 用命名空间别名明确指定类型归属

在代码的using指令中给目标DryIoc命名空间设置别名,消除类型歧义:

using Prism.Ioc;
using Prism.Container.DryIoc;
using Prism.Events;
using DryIoc = global::DryIoc; // 明确引用DryIoc程序集下的类型

var containerRegistry = new DryIocContainerExtension(DryIoc.Rules.MicrosoftDependencyInjectionRules);

2. 排除冲突的依赖包

检查项目依赖树,找到引入DryIoc.Shared的包,在csproj中排除该依赖。例如修改Prism.DryIoc.Avalonia的包引用:

<PackageReference Include="Prism.DryIoc.Avalonia" Version="9.0.401.11110-pre">
  <ExcludePackageReferences>
    <ExcludePackageReference>DryIoc.Shared</ExcludePackageReference>
  </ExcludePackageReferences>
</PackageReference>

也可以显式添加DryIoc的包引用,让NuGet优先使用指定版本(替换为Prism.DryIoc.Avalonia依赖的对应版本):

<PackageReference Include="DryIoc" Version="16.0.1" />

3. 使用程序集别名限定

如果命名空间别名无法解决冲突,可给DryIoc程序集设置全局别名:
首先修改csproj,给DryIoc包添加别名:

<PackageReference Include="DryIoc" Version="x.x.x">
  <Aliases>DryIocMain</Aliases>
</PackageReference>

然后在代码开头添加extern alias并使用:

extern alias DryIocMain;
using Prism.Ioc;
using Prism.Container.DryIoc;
using Prism.Events;
using DryIoc = DryIocMain::DryIoc;

var containerRegistry = new DryIocContainerExtension(DryIoc.Rules.MicrosoftDependencyInjectionRules);

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.15 01:15:54