C# 具有相同类名的Dll

C# 具有相同类名的Dll,c#,dll,C#,Dll,我创建了一个外部dll,其类名为:User。我在另一个程序中导入了它,它具有相同的类名User。现在,如果我键入:User.以访问dll方法,intellisense会显示我自己程序的类User的方法。一个实践示例: [DLL]: public class User{ ... some method ... } [实现dll的程序] using User; public class User{ public void getUsers(){ User

我创建了一个外部dll,其类名为:
User
。我在另一个程序中导入了它,它具有相同的类名
User
。现在,如果我键入:
User.
以访问dll方法,intellisense会显示我自己程序的类
User
的方法。一个实践示例:

[DLL]:

public class User{
  ... some method ...
}
[实现dll的程序]

using User;

public class User{

      public void getUsers(){
            User. //can't access to dll method
      }
}

有办法解决这个问题吗?请注意名称空间是不同的。

使用DLL的完整名称空间来调用
用户
类。大概是这样的:

YourClassLibrary1.User user = new YourClassLibrary1.User();
user.getUsers();
using DLLUser = ClassLibrary1.User;
或者使用如下别名:

YourClassLibrary1.User user = new YourClassLibrary1.User();
user.getUsers();
using DLLUser = ClassLibrary1.User;
然后:


使用DLL的完整命名空间调用
User
类。大概是这样的:

YourClassLibrary1.User user = new YourClassLibrary1.User();
user.getUsers();
using DLLUser = ClassLibrary1.User;
或者使用如下别名:

YourClassLibrary1.User user = new YourClassLibrary1.User();
user.getUsers();
using DLLUser = ClassLibrary1.User;
然后:


很难从您的示例中看出,但看起来您想要的是一个外部别名指令。您可以在此处阅读有关它们的简短教程:

命令行表单的文档如下所示:

假设您的DLL程序集是Foo.DLL。因此,您要做的是,首先向引用的Foo.DLL添加一个别名,将别名称为“Foo”。第二,向命名空间指令添加指令:

extern alias Foo;

然后在您的程序中,您可以说
Foo::User
,编译器就会知道您指的是
Foo.DLL
中的
用户,而不是当前编译中的用户。

从您的示例很难分辨,但看起来您想要的是一个外部别名指令。您可以在此处阅读有关它们的简短教程:

命令行表单的文档如下所示:

假设您的DLL程序集是Foo.DLL。因此,您要做的是,首先向引用的Foo.DLL添加一个别名,将别名称为“Foo”。第二,向命名空间指令添加指令:

extern alias Foo;

然后在您的程序中,您可以说
Foo::User
,编译器将知道您指的是
Foo.DLL
中的
用户,而不是当前编译中的用户。

您还可以在代码中使用别名:

using MyUser = User;

public class User{

      public void getUsers(){
            MyUser.User.<any property or public method>
      }
}
使用MyUser=User;
公共类用户{
public void getUsers(){
MyUser.User。
}
}

您还可以在代码中使用别名:

using MyUser = User;

public class User{

      public void getUsers(){
            MyUser.User.<any property or public method>
      }
}
使用MyUser=User;
公共类用户{
public void getUsers(){
MyUser.User。
}
}


名称空间是否也相等?不,名称空间不同我怀疑您想要
global::User
,但这并不完全清楚-我们也不知道为什么您在类声明中将
User
放在backticks中…所以使用DLL类的完整名称空间如果名称空间不同,请告诉我们。理想情况下,给我们一个简短但完整的示例,而不仅仅是片段。命名空间是否也相等?否,命名空间不同我怀疑您想要
global::User
,但这还不完全清楚-我们也不知道为什么在类声明中把
User
放在backticks中…所以使用DLL类的完整名称空间如果名称空间不同,请告诉我们。理想情况下,给我们一个简短但完整的例子,而不仅仅是片段。这实际上解决了问题,通过名称空间访问。但这是一个好的解决方案吗?有另一种方法可以直接访问类dll名称?@IlDrugo…是的,将其添加到using指令中,但由于有两个名称相同的类,它在主项目中引用一个,因此您必须使用dll的完整命名空间或使用别名。这实际上解决了问题,即通过命名空间访问。但这是一个好的解决方案吗?还有另一种方法可以直接访问类dll名称?@IlDrugo…是的,将其添加到using指令中,但由于您有两个同名的类,它引用主项目中的一个类,因此您必须使用dll的完整名称空间或使用别名。明白了,所以应该在使用dll的软件中添加此别名吗?在dll本身中不可能执行此操作?@IlDrugo:好吧,看看您的注释,dll中的用户类与新编译中的用户类位于不同的命名空间中。因此,在这种情况下,我只需完全限定名称空间的用法,或者如果经常使用它,则使用别名:
using MyUser=MyNamespace.User明白了,那么这个别名应该添加到使用dll的软件中吗?在dll本身中不可能执行此操作?@IlDrugo:好吧,看看您的注释,dll中的用户类与新编译中的用户类位于不同的命名空间中。因此,在这种情况下,我只需完全限定名称空间的用法,或者如果经常使用它,则使用别名:
using MyUser=MyNamespace.User