Как я могу программно построить файлы моего решения из кода C #? - PullRequest
4 голосов
/ 15 июня 2011

У меня есть большое решение, содержащее много проектов, один из которых - проект установки.Есть также много текущих версий, хранящихся в отдельных ветках.У меня есть инструмент для сборки, который работал в .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 объект, если он требует слишком много.

Ответы [ 2 ]

5 голосов
/ 15 июня 2011

msbuild пропускает проекты установщика, потому что не знает, как их собрать. FinalBuilder создает devenv.exe для их создания.

Вызов `devenv / build" Release | Any CPU "/ project" MyInstaller.vdproj "должен запустить необходимую сборку из командной строки, не запуская VS GUI. Попробуй!

С учетом всего сказанного: мы тоже используем FinalBuilder, и VS Installer устарел, так что вы, вероятно, захотите его заменить.

2 голосов
/ 16 июня 2011

Оказывается, проблема, к сожалению, совершенно не связана. Код .NET 2, который должен был быть обновлен, жестко запрограммировал «Program Files» в пути к файлу devenv.exe - однако новые компьютеры являются 64-битными, а Visual Studio 2010 установлен в «Program Files (x86)»!

Таким образом, это означает, что приведенный выше пример кода работает и позволит мне создавать решения на C #. Это не объектно-ориентированный способ, которым я бы предпочел сделать это, но после всех ваших комментариев, я просто рад, что это сработало вообще.

Спасибо, что уделили время всем.

...