Я генерирую некоторый код с использованием шаблонов T4 и добавляю их в проект с использованием EnvDTE
Чтобы добавить файл в правильную папку проекта, я «рекурсивно» ищу элементы проекта для папки, в которую я хочу добавить новый элемент. Если он не существует, я хочу добавить его.
var directories = resultPath.Split(Path.DirectorySeparatorChar).ToList();
var path = Path.GetDirectoryName(project.FullName);
ProjectItem item = null;
foreach (var dir in directories)
{
path = Path.Combine(path, dir);
item = FindProjectItem(path, dir, item == null ? project.ProjectItems : item.ProjectItems);
}
if (item != null)
{
item.ProjectItems.AddFromFileCopy(workingFullPath);
}
private ProjectItem FindProjectItem(string fullPath, string directory, ProjectItems items)
{
foreach (ProjectItem item in items)
{
if (string.Equals(item.Name, directory, System.StringComparison.InvariantCultureIgnoreCase))
{
return item;
}
}
if (Directory.Exists(fullPath))
{
Directory.Delete(fullPath);
}
return items.AddFolder(directory);
}
Предыдущие тесты создали нужные мне папки / файлы, которые я затем удалил в Visual Studio.
При запуске последующих тестов, несмотря на то, что папка не указана в качестве элемента проекта, код разрывается при попытке добавить новую папку с ошибкой «Папка уже существует».