2013-07-29 2 views
1

У меня есть сборка, написанная на C#. Внутри него у меня есть ряд статических классов, у которых есть статические функции и т. Д. Ссылка на эти функции из другого проекта C# работает очень хорошо, но если я попытаюсь использовать их в проекте VB.NET, классы недоступны/видимы в все, даже если они отображаются в обозревателе объектов, и проект будет компилироваться/выполняться, пока я не ссылаюсь на указанные классы.Класс из сборки C# не отображается VB

Вот как я определить класс в 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#, так и проект VB нацелены на .NET 4.5 Что мне здесь не хватает?

+3

Что именно происходит, если вы пытаетесь использовать класс? И в каком пространстве имён? –

+0

Я получаю сообщение об ошибке, говорящее, что имя не объявлено. Я обновил вопрос, чтобы отразить это. –

+0

Можете ли вы придумать короткий, но полный пример (как код C#, так и код VB, доступ к которому)? Это действительно должно работать нормально. У вас нет другой ссылки, которая может иметь непубличный класс с тем же именем, не так ли? –

ответ

1

Я очистил параметр «Корневое пространство имен» в свойствах проекта, и теперь все работает нормально. Оставляя его в результате приводит к неочевидному пространству имен, которое смущает программистов.

+1

Хм, нет, это только тебя смутило. Используйте браузер объектов в следующий раз. –

+0

Duly отметил и обновил. –

+0

Значит, вы не станете отмечать мой ответ как правильный или даже проголосовать за него? –

0

Эта проблема, как правило, связана с тем, что вы не используете подходящее пространство имен при попытке использовать класс. Получите полное пространство имен из кода C#, затем используйте это пространство имен, чтобы полностью квалифицировать имя класса при вызове его на стороне VB. Если это работает, вы должны либо импортировать это пространство имен на уровне проекта или файла, либо переработать пространство имен для упрощения доступа.

Если это не работает, убедитесь, что у вас есть ссылка на проект C# из проекта VB. Убедитесь, что вы случайно не ссылались на копию выходных dll или какого-либо другого устаревшего файла.

+0

Как я уже сказал в вопросе, использование полного пространства имен тоже не работает. –

Смежные вопросы