Возможно ли, чтобы два проекта библиотеки классов VS2008 C # совместно использовали одно пространство имен? - PullRequest
0 голосов
/ 01 июня 2010

Я пытаюсь разделить общее пространство имен между двумя проектами в одном решении. Это проекты "Blueprint" и "Repositories". Blueprint содержит интерфейсы для всего приложения и служит ссылкой на структуру приложения.

В проекте Blueprint у меня есть интерфейс со следующим объявлением:

namespace Application.Repositories{
    public interface IRepository{
        IEntity Get(Guid id);
    }
}

В проекте Repositories у меня есть класс следующего класса:

namespace Application.Repositories{
    public class STDRepository: IRepository
    {
        STD Get(Guid id){
             return new SkankyExGirlfriendDataContext()
                           .FirstOrDefault<STD>(x=>x.DiseaseId == id);
        }
    }
}

Однако это не работает. Проект Repositories имеет ссылку на проект Blueprint. Я получаю сообщение об ошибке VS: «Не удалось найти тип или имя пространства имен« IRepository »(отсутствует директива using или ссылка на сборку?) - Обычно это легко исправить, но добавление оператора using не имеет смысла так как они имеют одно и то же пространство имен. Я все равно попробовал, и оно не сработало. Ссылка была добавлена, и без строки кода, ссылающейся на этот интерфейс, оба проекта успешно компилируются. Я потерян здесь. ничего не нашли, поэтому я предполагаю, что с тем, что я делаю, что-то в корне не так, но я не знаю, что это такое. Я надеюсь, что вы, ребята, можете помочь.

Примечание. Причина, по которой я хочу сделать это и сохранить интерфейсы в одном и том же пространстве имен, заключается в том, что я хочу, чтобы твердый проект содержал все интерфейсы, чтобы иметь ссылку на полную архитектуру приложение. Я рассмотрел обходные пути, такие как помещение всех интерфейсов в пространство имен Blueprint.Application вместо пространства имен приложения. Однако это потребовало бы, чтобы я написал заявление об использовании практически на каждой странице приложения ... и мои пальцы устали. Еще раз спасибо, ребята ...

Ответы [ 3 ]

1 голос
/ 01 июня 2010

Хорошо. Итак, я отметил SLaks как правильный, потому что его ответ был правильным и, вероятно, будет решением для любого, кто еще увидит это в будущем. Моя проблема была связана с другими 6 файлами проекта в моем решении. Я выгрузил их и перестроил решение только с двумя опубликованными экземплярами, и внезапно мой Intellisense начал работать. Хотя в этих двух проектах не было ошибок, ошибки в других проектах вызывали некоторые проблемы при компиляции. Блин ... Спасибо, ребята.

1 голос
/ 01 июня 2010

Это возможно.

Например, mscorlib.dll и System.dll - это два разных проекта C #, которые определяют классы в пространстве имен System. (среди прочих)

Эта ошибка может произойти, если проект Repositories не ссылается на Blueprint.

0 голосов
/ 01 июня 2010

Для того, что вы пытаетесь архивировать, вы также можете попробовать собрать все в одну сборку и объявить все классы как internal вместо public. Таким образом, программа, которая использует его, будет видеть только интерфейсы. Вам нужно будет создать набор фабричных классов, которые будут создавать экземпляры определенных интерфейсов в зависимости от некоторых параметров. Это действительно путь, потому что небольшие сборки вызывают много накладных расходов. См. Рекомендации по производительности Microsoft .

...