У мене є помічник проекту, який я використовую у всіх створених програмах. Він містить деякі методи розширення та купу загальних допоміжних класів, елементів управління тощо. Час від часу я оновлюю / розширюю хелперний проект. Зазвичай це невеликі та непов'язані проекти, і я єдина людина, яка працює над усіма ними.
Я спробував два підходи до його використання
- додайте файли .cs безпосередньо (Додати як посилання) до кожного проекту, де я їх використовую
- компілюйте його як .dll і додайте його як довідник
Я бачу деякі переваги та недоліки цих підходів.
Перший:
- простіше, тому що класи помічників збираються у файл exe, тому я часто дуже просто можу надати лише один .exe-файл, який буде працювати чудово. Оскільки я додаю як посилання, я можу бути впевнений, що коли я будую будь-який проект, який використовує помічник, файли помічників будуть останньою версією.
- ще простіше, тому що я можу розділити файли, так що мої методи розширення, які добре працюють на .NET 4.0, можна посилатись окремо від тих, для яких потрібна .NET 4.5, а це означає, що програма в цілому може працювати на .NET 4.0
- Дозволяє налагоджувати код, з усіма перевагами точок прориву тощо тощо ...
- не здається, що це "найкраща практика"
Другий:
- виявляється правильним підходом, але:
- вимагає, щоб я доставив окремий .dll файл, який чомусь набагато складніше для користувачів (вони, як правило, діляться моїми програмами без .dll, який потім виходить з ладу при запуску)
- оскільки він збирається в один .dll, для нього знадобиться найвища версія .NET - багато моїх користувачів не мають .NET 4.5, і цього вимагають лише деякі елементи мого допоміжного класу, це означає, що я можу змусити деяких людей оновлювати свої системи без причини
- Мені також потрібно переконатися, що щоразу, коли я оновлюю будь-яку з моїх програм, я також надсилаю файл .dll - навіть якщо я не знаю, чи він був змінений після останньої версії, чи ні (це могло бути, але це могла б бути та ж версія). Я не можу побачити простий спосіб визначити це, не відслідковуючи версію збірки, що є додатковою роботою. Наразі, коли я оновлюю свої програми, я постачаю лише оновлений exe, і мені подобається, щоб він був невеликим і низьким.
Отже, у чому полягає фактична перевага використання тут файлу .dll? Зауважте, що я єдина особа, яка редагує код усіх програм та допоміжних файлів.
Крім того, для уточнення - додатків зазвичай дуже мало, тоді як код, що міститься в допоміжних класах, є абсолютно загальним для всіх (деякі прості порівняння рядків, шляхи чи XML-операції тощо)
Насправді хтось змусив мене зрозуміти, що існує третій варіант. Оскільки у мене є допоміжний код у проекті separte, я можу додати цей проект до рішень кожного мого окремого додатка - який працює на зразок "Додати як посилання" для окремих файлів, за винятком того, що я додаю лише один проект ... Але як зауважив Док Браун, це по суті означає, що .dll потрібно буде все-таки додати до проекту ...
Ще одна річ, яка на користь того, що не використовувати файли dll, - це можливість активно налагоджувати хелперний клас ...