【问题标题】:Error while accessing class which is present in two different assemblies访问存在于两个不同程序集中的类时出错
【发布时间】:2017-05-04 20:41:06
【问题描述】:

我有一个项目引用了两个不同的 dll。 当我创建该类的对象时,它会显示以下错误

严重性代码描述项目文件行抑制状态 错误 CS0433 类型 'clsRMQNew' 存在于两者中 'XXXX.abc.System,版本=11.0.0.3,文化=中性, PublicKeyToken=null' 和 'YYYY.Common.Queue, 版本=16.12.26.1,文化=中性,

请指导我如何从一个程序集中访问该类。 有没有相同的解决方案?

【问题讨论】:

  • 你应该在你的变量前面加上你想使用的类的完整限定名
  • 我尝试过使用名称空间,即

标签: c#


【解决方案1】:

您需要在类 (Fully Qualify) 前加上您打算使用的特定命名空间以避免冲突。

using NameSpaceOne;
using NameSpaceTwo;

namespace StackOverflow
{
    class Program
    {
        static void Main(string[] args)
        {

            var dupObjectOne = new NameSpaceOne.DuplicateClass() { value = 1};
            var dupObjectTwo = new NameSpaceOne.DuplicateClass() { value = 2 };
        }
    }
}

namespace NameSpaceOne
{
    class DuplicateClass
    {
        public int value { get; set; }
    }
}

namespace NameSpaceTwo
{
    class DuplicateClass
    {
        public int value { get; set; }
    }
}

【讨论】:

  • 您好,先生,我已经尝试了您在给定的 sn-p 中的建议,但我仍然遇到同样的错误。我需要删除一些文件吗??
【解决方案2】:

编译器向你抱怨,因为你在某处以这种方式声明了一个变量

clsRMQNew rmq = new clsRMQNew();

但是对于编译器来说,不可能知道应该使用哪个程序集来创建变量,因为有两个同名程序集并且您没有给出任何关于使用哪个程序集的提示。
因此它会停止编译并出现上述错误

您可以通过添加类的完整限定名来解决此问题

XXXX.abc.System.clsRMQNew rmq = new XXXX.abc.System.clsRMQNew();

YYYY.Common.Queue.clsRMQNew rmq = new YYYY.Common.Queue.clsRMQNew();

取决于您要使用的类。

您还可以缩短这些声明,将其添加到您的 using 指令中

using QueueA = YYYY.Common.Queue;

然后

QueueA.clsRMQNew rmq = new QueueA.clsRMQNew();

【讨论】:

    【解决方案3】:

    您需要提供班级的全名:

    var one = new XXXX.abc.System.clsRMQNew();
    var two = new YYYY.Common.Queue.clsRMQNew();
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-08-27
      • 2015-11-23
      • 1970-01-01
      相关资源
      最近更新 更多