У меня есть решение под названием «Инструменты», в котором есть три проекта; Инструменты, PerecentageBar, MessageBox. Каждый из этих проектов является частью сборки «Инструменты». [На странице свойств каждого из них я установил AssemblyName в MyCompany.Tools.Controls].Почему пространство имен не распознается?
я в Инструменты проекта:
namespace MyCompany.Tools.Controls
{
public class MyPictureBox : PictureBox
{}
}
И в проекте MessageBox.
namespace MyCompany.Tools.Controls
{
public class MyMessageBox : Form
{}
}
И в проекте PercentageBar
namespace MyCompany.Tools.Controls
{
public class PercentageBar: UserControl
{}
}
Это решение построено и MyCompany.Tools.Controls.dll создан.
В другом решении у меня есть проект под названием MapperTool.
namespace MapperTool
{
public class MapperToolFacade : IDisposable, IDiagService
{}
}
В этом проекте я добавить ссылку на DLL выше и добавить, используя заявление таким образом:
using MyCompany.Tools.Controls;
Все хорошо до сих пор, однако. В этом проекте я могу только «видеть» и использовать MyPictureBox с помощью вышеприведенной инструкции. Другие типы MyMessageBox и PercentageBar недоступны.
Почему это?
EDIT: Исследование показывает, что существуют другие типы и под пространством имен MyCompany.Tools.Controls. Однако, глядя в класс, они не перечислены в сборке MyCompany.Tools.Controls. Вместо этого они организованы таким образом:
MyCompany.Tools.Controls (assembly)
MyCompany.Tools.Controls (namespace)
MyPictureBox (type)
PercentageBar
MyCompany.Tools.Controls
PercentageBar
MyMessageBox
MyCompany.Tools.Controls
MyMessageBox
Так что я думаю, следующий вопрос, если я указал имя сборки, как MyCompany.Tools.Controls в каждом проекте почему вторые два проекта был построен в сборе с другое имя? [DLL в выходном каталоге, однако, имеет naem MyCompany.Tools.Controls.dll]
Кроме того, я хочу создать все свои элементы управления в пространстве имен MyCompany.Tools.Controls и создать их в одном MyCompany.Tools .Controls assembly, так что я могу добавить только эту ссылку на любой другой проект, который должен их использовать.
Похоже на то, что происходит над тем, что каждый отдельный проект инструментов в моем решении MyCompany.Tools.Controls должен быть встроен в уникальную сборку и что каждый из них нужно будет ссылаться индивидуально ...?
Проблема была в моем понимании проектов и сборок. Похоже, что невозможно собрать 3 проекта в одну сборку. Каждый из них должен построить свою собственную сборку - тогда мне придется использовать инструмент слияния, чтобы объединить их в одну сборку.
Это поведение совершенно противоположно тому, что я вижу. Если я упоминаю это в другом проекте, MyCompany.Tools.Controls.MyMessageBox видна, но не Controls.MyMessageBox. Возможно ли, что DLL, на которую вы ссылаетесь, не синхронизирована с источником? Был ли MyMessageBox ранее в пространстве имен верхнего уровня, называемом Controls? –
У вас нет класса с именем 'MyCompany'? – tofi9