Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Общие вопросы по .NET и C# > using, подключение своего класса


Автор: Urvin 26.5.2010, 23:41
Порылся в гуглях и имеющейся литературе, никак не возьму в толк..

Пусть есть у меня проект в папке D:\CSharp\MyProject\MyProject.csproj
Рядом с ним валяется настроечная шелуха и классы, принадлежащие к проекту.

Я придумал свой класс MyClass:
Код

using System
namespace Me.MyClass
{
    public class TMyClass
    {
        public TMyClass()
        {
        }
        ...
    }
}


Так как я подумал, что этот класс было бы неплохо использовать в различных проектах, я сохранил его в папку
 D:\CSharp\Common

Вопрос: как подключить свой класс к своему проекту, да так чтобы он не копировался в папку с проектом (как происходит в меню Add->Existing)?
Ведь если я усовершенствую исходный файл, то он не синхронизируется со сборкой и я как самый несчастный буду должен растиражировать этот файл на N проектов.

В С++ я бы использовал конструкцию
Код
#include "..\Common\MyClass.cpp"

Что сделать в C#?

Автор: Экскалупатор 27.5.2010, 07:25
если добавляешь *.cs, то в свойствах этого файла(когда он уже в солюшен добавлен) выставь Copy Always(типа должен копировать каждый раз при открытии проекта новую копию, и работать с этой копией). 
а если добавляешь Dll то у него есть параметр Copy Local = True(по умолчанию), поставь в false и он не будет копироваться.

Автор: mihryak 27.5.2010, 11:06
Экскалупатор,  Copy Always копирует файл в output directory при билде, не думаю, что автор хочет этого


Urvin, можно добавить файл во проекты как ссылку через Add Existing Item, только нажав не на Add, а на Add As Link из выпадающего списка кнопки
только работать с ним будет не очень удобно, если подразумевается регулярная правка - при частых go to declaration студия будет ругаться, что тот же файл открыт другим проектом, ничего пагубного не несёт, но раздражает

вообще, правильнее, конечно, насобирать кучку таких классов и сделать из них новую сборку common

Автор: Выхухоль 27.5.2010, 14:19
мне кажется вы немного неправильно себе представляете структуры иерархии в С#

все идет последовательно:

1.DLL или EXE (исполняемая сборка)
2.namespace,
3. class

т.е. может быть одна сборка, и в ней куча namespace-ов, и для каждого namespace-а может быть куча классов

просто по умолчанию как только вы создаете проект, название проекта становиться названием namespace.

в c# в отличие от cpp работают со сборками классов (DLL, EXE) а не с их конечными исходниками (*.cs), конечно можно добавить исходник класса как было сказано выше -но это уже будет не красиво.

К примеру, перед вами стоит задача разработки системы сайта +SQl Server.

Я делаю обычно так: 
1. создаю проект SQlToLinqDataContext - это у меня Data Layer для работы с базой данных
2. Создаю проект DLL сборку под названиеи к примеру BL - это у меня будет dll-ка которая содержит всю логику бизнес слоя (Bussnes layer)
3. ASP.NET веб проект под названием MySite. Который содержит конечные страницы для отображения пользователям.

Потом я добавляю связки между сборками во всем Solution-е. т.е. добавляю в Reference у BL сцылку на DL, у ASP.NET проекта на BL и DL.
(Как добавить связку от одного проекта к другому http://msdn.microsoft.com/ru-ru/library/wkze6zky%28VS.80%29.aspx)

в итоге используя классы из BL сборки я в ASP.NET веб проекте обращаюсь к namespace-у под названием BL, а если хочу использовать Слой данных то пишу namescpace DL. и получаю доступ ко всем его данным классам. 

А можно сделать ваще легко, создать один проект ASP.NET веб, и в него добавлять вновь созданные классы такие как в BL. B и добавить новый ITem - LinqToSQlDataContext. и вс еэто дело будет у меня под одним namecoace-ом , namecoace-ом ASP.NET проекта. Но тогда если в последующих проектах, я зохочу использовать BL классы в новом проекте, мне придется брать их исходники из этого веб проекта и компилировать их в новом. 

Автор: mihryak 27.5.2010, 19:03
Выхухоль, добавление .cs файла через линк тоже имеет право на существование
с этой фишкой можно, например, иметь лишь один файл с атрибутами сборки AssemblyInfo.cs (версия и проч.), что избавляет от необходимости править кучку файлов, боясь забыть один из них

а так - да, код таким образом шарить в большинстве случаев не лучшая идея

Автор: Urvin 27.5.2010, 21:59
Цитата(Выхухоль @  27.5.2010,  14:19 Найти цитируемый пост)
в c# в отличие от cpp работают со сборками классов (DLL, EXE) а не с их конечными исходниками (*.cs), конечно можно добавить исходник класса как было сказано выше -но это уже будет не красиво.

А в чем хитрость такого подхода? Зачем?
Минимизация повторяемого кода путем размножения dll?

Класс все же добавил через  Existing+AddAsLink, спасибо!

Автор: jonie 27.5.2010, 22:02
Цитата


А в чем хитрость такого подхода? Зачем?
Минимизация повторяемого кода путем размножения dll?
упрощение деплоя приложения например.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)