Фон
Я создаю вспомогательное приложение, которое переформатирует некоторые файлы кода и создает новые файлы кода, которые должны быть добавлены в мой другой проект, поэтому я мог бы сразу использовать новый код, но у меня возникают серьезные проблемы с добавлением новый файл кода в мой проект автоматически. Кстати, это в С#, а вспомогательное приложение - WinForms.
Неудачные попытки
Этот вопрос только ответ имеет два способа сделать это, но я не мог заставить никого из них работать. С первым я не могу найти сборку Microsoft.Build
для ссылки, а в другой явно недостаточно аргументов для командной строки.
Вопрос
Как программно включить файл в проект без использования сторонних приложений?
В принципе, я ищу эквивалент этого:
... Но с использованием кода.
Требования
Это функции, которые, как я полагаю, должны предложить:
- Выберите решение, в котором есть проект, который мы добавляем в файл
- Выберите проект, в который должен быть добавлен файл
- Выберите каталог в проекте
- И, конечно же, файл, который мы добавляем
Прогресс
С помощью user @psubsee2003 мне удалось найти файл Microsoft.Build.dll
в папке C:\Windows\Microsoft.NET\Framework\v4.0.30319
на моем компьютере и успешно импортировать его, изменив целевую структуру проекта до версии 4 Полный профиль, а не профиль клиента по умолчанию.
И я нашел, как использовать метод AddItem
:
var p = new Microsoft.Build.Evaluation.Project(@"C:\projects\MyProject.csproj");
p.AddItem("Compile", @"C:\folder\file.cs");
p.Save();
Файл появится в корневой папке проекта, если у проекта уже не была папка с именем folder
, и в этом случае файл будет помещен туда. Таким образом, в основном файл будет помещен в самую глубокую цепочку папок, найденную в исходном пути к файлу, идущему к корневой папке.