Добавить файлы и папку cs в проект программно

Я ищу готовое решение, в идеале о том, как разместить репозиторий «модулей» локально, которые я могу добавлять и удалять из моего проекта визуальной студии с помощью своего рода конфигурации. Я работаю с MVC и хочу добавить представления/контроллеры и т. д., а не просто ссылаться на dll, как nuget, кажется, преуспевает. Буду признателен за любое направление в предварительно построенных системах или идеях о том, как это сделать.


person poptarts    schedule 29.03.2016    source источник


Ответы (2)


Краткий ответ: используйте NuGet и ProGet.

NuGet поддерживает контент, а также библиотеки DLL. Вам необходимо поместить все вложенные файлы содержимого в специальную папку содержимого. Если вам нужен пример, вы можете использовать NuGet Package Explorer и просмотреть пакет для NLog.config. Этот пакет не имеет скомпилированного содержимого. Кроме того, использование файлов .pp в NuGet позволит выполнять преобразования исходного кода, где вы можете исправить такие вещи, как пространство имен, поскольку эти файлы включены в проект.

К сведению, пакеты NuGet — это просто ZIP-файлы с другим расширением, поэтому вы также можете исследовать их с помощью своего любимого инструмента ZIP, такого как 7-Zip.

Структура будет выглядеть примерно так

NuGet.Solution
-- NuGet.Project
---- content
----- Views
------ YourView
---- - Контроллеры
------ Ваш контроллер

Поэтому после настройки NuGet вы можете использовать что-то вроде ProGet для размещайте свои пакеты в частном порядке. Есть много других решений для этого, я лично настроил ProGet, и базовая версия бесплатна и очень проста в установке.

Вы можете соединить это с некоторыми расширениями NuGet и получить действительно простое развертывание из своего решения на свой сервер.

Мы используем настройку, подобную этой, с той лишь разницей, что мы также используем TeamCity для создания и развертывания или пакеты. Примечание. TeamCity имеет собственный внутренний сервер NuGet. Если вы уже используете TeamCity, вы можете просто использовать эту функцию. Вначале у нас не было TeamCity, поэтому мы уже установили ProGet.


Добавление этой части, потому что вы сказали «программно» в своем вопросе. Если вы хотите сделать это с помощью кода, вы можете использовать библиотеку EnvDTE. эта библиотека создана именно для этого. Этот ответ SO является хорошей отправной точкой. Я не собираюсь углубляться в эту опцию, поскольку вы упоминаете, что у вас есть те же функции, что и у NuGet, поэтому лучший способ получить это — использовать NuGet.

person workabyte    schedule 29.03.2016
comment
хорошо, так что это отличный пример и путь, по которому я сейчас иду. Но если создать пустой проект mvc 6 и установить nlog, то с ним никакие файлы не сойдут, только ссылка. i.imgur.com/P9txyLT.png - person poptarts; 29.03.2016
comment
nlog.config не nlog (PM> Install-Package NLog.Config) - person workabyte; 29.03.2016
comment
извините я оговорился. Я установил nlog config 4.2.3 с тем же результатом через консоль - person poptarts; 29.03.2016
comment
это начинает выглядеть так, как будто я просто нахожусь в точке привязки с .net5, и это просто еще не работает. github.com/NuGet/Home/wiki / - person poptarts; 29.03.2016
comment
@poptarts, понятно. мы еще не перешли на .net 5, поэтому не можем с ним говорить. похоже, что-то, что они решат в ближайшем будущем. Если вы используете более раннюю версию, вы можете увидеть, как это работает, и начать запускать некоторые пакеты, а затем обновлять их, как только они устранят проблемы. - person workabyte; 29.03.2016
comment
так как ваш ответ кажется надежным для всего, кроме .net 5, я просто отмечу его как ответ на данный момент. дальнейшее чтение показало, что это планируется работать в RC2 - person poptarts; 29.03.2016

Шаг 1
Сгруппируйте проекты модулей в решение.
Пример.
Module1.sln содержит project1, project2, project3
Module2.sln содержит projectA, projectB, projectC
и т. д.
< br> Шаг 2
Создайте новое решение WebApp1.sln
Затем вы можете добавить Module1 и/или Module2 в свое решение с помощью функции «Добавить существующий» https://blogs.msdn.microsoft.com/habibh/2009/06/25/walkthrough-adding-an-existing-visual-studio-solution-to-another-solution/
Таким образом, добавление Module1.sln в WebApp1.sln копирует все проект ссылается на WebApp1.sln. Это означает, что теперь у него есть проект1, проект2 и проект3.

Проблема в том, что любые обновления Module1.sln НЕ обновляют WebApp1. Таким образом, если вы используете этот подход, вы застряли с одним определением вашего модульного решения, любые обновления должны быть вручную реплицированы во всех проектах, которые использовали модули для добавления ссылок на проекты.

person robaudas    schedule 29.03.2016
comment
правильно возможность загрузки и получения новейшей версии будет иметь решающее значение для этой системы. как работает восстановление пакета nuget при редактировании проекта json или доступна новая версия проекта. Наши модули также в значительной степени полагаются на частичную классификацию, поэтому, к сожалению, отдельные проекты также отсутствуют. - person poptarts; 29.03.2016
comment
Тогда это тяжело. Я сталкивался с этой проблемой пару раз. Если бы у меня было время написать собственное решение, я бы придерживался того же шага 1, но шагом 2 был бы файл манифеста, в котором перечислены модульные решения для решения веб-приложения. Затем сценарий PowerShell, который может просматривать манифест и проверять каждое решение модуля, на которое ссылаются, и добавлять любые отсутствующие ссылки на проект в решение WebApp. Легче сказать, чем сделать правильно? - person robaudas; 29.03.2016