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

如何在项目中使用两个含共享类的类库?解决重复定义报错

解决类型重复定义错误的方案

问题核心

共享项目的代码会被直接嵌入到引用它的类库中,因此Common.csproj和CustomControls.csproj编译后,各自都包含了myDataInfo.cs的完整实现。当Test.csproj同时引用这两个类库时,就会触发类型重复定义的冲突。

具体解决办法

1. 将共享项目转为类库项目

把SharedProject1从共享项目改为普通类库项目:

  • 右键SharedProject1 → 卸载项目 → 编辑.shproj文件,将项目类型修改为类库格式;或者直接新建类库项目,把myDataInfo.cs迁移过去。
  • 让Common和CustomControls都引用这个类库项目(而非共享项目),这样myDataInfo的实现仅存在于类库中,Test项目引用两个类库时不会出现冲突。

2. 通过命名空间隔离共享代码

若必须保留共享项目,给myDataInfo.cs添加命名空间隔离:

  • 在myDataInfo.cs中加入条件编译指令:
    #if COMMON_PROJECT
    namespace Common
    #elif CUSTOM_CONTROLS_PROJECT
    namespace CustomControls
    #endif
    public class myDataInfo
    {
        // 类逻辑代码
    }
    
  • 分别给两个类库项目添加编译常量:
    • Common.csproj:在项目属性的「生成」选项卡中添加COMMON_PROJECT常量
    • CustomControls.csproj:添加CUSTOM_CONTROLS_PROJECT常量
  • 在Test项目中使用时,通过对应命名空间引用:new Common.myDataInfo() 或 new CustomControls.myDataInfo()

3. 在Test项目中排除重复类型

如果只需要其中一个类库中的myDataInfo,可在Test.csproj中排除另一个类库的该类型:

  • 编辑Test.csproj,在对应类库的引用节点中添加排除规则:
    <ItemGroup>
      <ProjectReference Include="..\CustomControls\CustomControls.csproj">
        <ExcludeAssets>all</ExcludeAssets>
        <IncludeAssets>compile; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
        <Private>True</Private>
        <ExcludeTypes>CustomControls.myDataInfo</ExcludeTypes>
      </ProjectReference>
    </ItemGroup>
    
    注意:此方法要求两个类库中的myDataInfo功能完全一致,否则可能引发逻辑异常。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.31 12:23:03