Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/320.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
来自c#程序集的类对VB不可见_C#_Vb.net_Interop - Fatal编程技术网

来自c#程序集的类对VB不可见

来自c#程序集的类对VB不可见,c#,vb.net,interop,C#,Vb.net,Interop,我有一个用C#写的程序集。在它里面,我有许多静态类,它们具有静态函数等。从另一个c#项目中引用这些函数可以很好地工作,但是如果我尝试在VB.NET项目中使用它们,这些类根本不可用/不可见,即使它们出现在对象浏览器中,只要我不引用上述类,项目就会编译/运行 下面是我在C#中定义类的方法,例如 namespace Tools { public static class MyTools { public static int SumNumber(int n1, int

我有一个用C#写的程序集。在它里面,我有许多静态类,它们具有静态函数等。从另一个c#项目中引用这些函数可以很好地工作,但是如果我尝试在VB.NET项目中使用它们,这些类根本不可用/不可见,即使它们出现在对象浏览器中,只要我不引用上述类,项目就会编译/运行

下面是我在C#中定义类的方法,例如

namespace Tools
{
    public static class MyTools
    {
        public static int SumNumber(int n1, int n2) { return n1 + n2; }
    }
}
尝试在VB中使用该类将导致以下错误:

'MyTools' is not declared. It may be inaccessible due to its protection level.
尝试使用完全限定的名称“Tools.MyTools.SumNumber…”将产生完全相同的错误消息

我已经检查过了,C#assembly和VB项目的目标都是.NET4.5
我在这里遗漏了什么?

此问题通常是由于在尝试使用该类时未使用正确的命名空间造成的。从C#代码中获取完整名称空间,然后在VB端调用类名时使用该名称空间完全限定类名。如果可行,您应该在项目或文件级别导入该名称空间,或者重新编写名称空间以便于访问


如果仍然不起作用,请确保从VB项目中正确引用了c#项目。确保没有意外引用输出dll的副本或其他陈旧文件。

此问题通常是由于在尝试使用该类时未使用正确的命名空间造成的。从C#代码中获取完整名称空间,然后在VB端调用类名时使用该名称空间完全限定类名。如果可行,您应该在项目或文件级别导入该名称空间,或者重新编写名称空间以便于访问


如果仍然不起作用,请确保从VB项目中正确引用了c#项目。确保没有意外引用输出dll的副本或其他陈旧文件。

我清除了项目属性中的“根命名空间”选项,现在一切正常。保留它会导致不明显的名称空间嵌套,这会让程序员感到困惑。

我清除了项目属性中的“根名称空间”选项,现在一切正常。保留它会导致不明显的名称空间嵌套,这会让程序员感到困惑。

如果您尝试使用该类,会发生什么?它在什么名称空间中?我收到一条错误消息,说没有声明名称。我更新了问题以反映这一点。你能给出一个简短但完整的示例(C代码和访问它的VB代码)吗?这真的应该行得通。你没有另一个引用,它可能有一个同名的非公共类,是吗?你在这两个方面的目标是相同的体系结构(即任何CPU、x86、x64等)?我支持Jon的完整示例请求。我刚刚尝试创建一个引用C#library项目的VB项目。在C#library项目中,我复制了您使用的代码,我可以在VB项目中很好地使用它。如果您尝试使用该类,会发生什么?它在什么名称空间中?我收到一条错误消息,说没有声明名称。我更新了问题以反映这一点。你能给出一个简短但完整的示例(C代码和访问它的VB代码)吗?这真的应该行得通。你没有另一个引用,它可能有一个同名的非公共类,是吗?你在这两个方面的目标是相同的体系结构(即任何CPU、x86、x64等)?我支持Jon的完整示例请求。我刚刚尝试创建一个引用C#library项目的VB项目。在C#library项目中,我复制了您使用的确切代码,我可以在VB项目中完美地使用它。正如我在问题中所说,使用完全限定的名称空间也不起作用。正如我在问题中所说,使用完全限定的名称空间也不起作用。嗯,不,这只会让您感到困惑。下次使用对象浏览器。所以你不会把我的答案标记为正确,甚至不会投票给它?不,它不正确。“使用适当的名称空间”是显而易见的/模糊的。真正的问题是根名称空间混淆了“正确的”名称空间。下次使用对象浏览器。所以你不会把我的答案标记为正确,甚至不会投票给它?不,它不正确。“使用适当的名称空间”是显而易见的/模糊的。真正的问题是根名称空间混淆了“正确的”名称空间。