У меня есть большое решение, содержащее много проектов, один из которых - проект установки.Есть также много текущих версий, хранящихся в отдельных ветках.У меня есть инструмент для сборки, который работал в .NET 2, но не работал с тех пор, как мы обновились до .NET 4.
Внутренне, новая версия инструмента для сборки .NET 4 использует Microsoft.TeamFoundation.Client.RegisteredTfsConnections.GetProjectCollections()
иversionControlServer.GetAllTeamProjects(false)
чтобы получить набор TeamProject
s с моего сервера управления исходным кодом TFS.
Затем я отображаю их визуально в пользовательском интерфейсе, и когда пользователь нажимает на конкретную версию решения, приложение вызывает следующее:получите последнюю версию для этой версии решения:
workspace.Get(new string[] { serverPath }, VersionSpec.Latest, RecursionType.Full,
GetOptions.GetAll);
Приложение, используемое для создания файлов решения, и оно будет включать проект установки.На этом этапе проект установки создаст MSI, с которым приложение может быть установлено.Это последний шаг, с которым у меня возникают проблемы.
Мне нужно иметь возможность программно построить решение, выбранное пользователем с использованием кода C #.Рабочий код .NET 2 для этого был следующим:
Process process = new Process();
ProcessStartInfo processStartInfo = process.StartInfo;
processStartInfo.FileName = processName;
processStartInfo.Arguments = string.Format(" \"{0}\" /BUILD \"Release|Any CPU\"",
solutionPath);
processStartInfo.WorkingDirectory = processDirectory;
process.Start();
Нет ошибки при ее запуске, но он больше не запускает Visual Studio и не создает код.Ясно, что изначально это был плохой способ сделать это, но я не могу найти «правильный» способ с использованием классов TFS.
Я также попытался запустить MSBuild.exe напрямую (аналогично приведенному выше примеру),и это создает решение, но по какой-то причине не создает проект установки, который производит MSI.Обратите внимание, что я НЕ использую никакие созданные вручную файлы сборки.
К сожалению, полезную документацию для пространства имен Microsoft.TeamFoundation найти сложно!Я надеюсь, что кто-то здесь использовал эти классы и может направить меня к решению этой проблемы.
Если это вообще возможно, мне нужно использовать классы .NET (например, не Process.Start)как мне действительно нужно знать, когда закончится сборка.Однако я могу установить для этого FileSystemWatcher
объект, если он требует слишком много.