Компиляция массивного проекта VB.NET - PullRequest
1 голос
/ 20 декабря 2008

Чтобы скомпилировать мой текущий проект, один исполняемый файл с ~ 90 000 библиотек loc + ~ 100 DLL занимает около получаса или более в зависимости от скорости рабочей станции.

Процесс сборки - это запуск devenv из скриптов Powershell. Это очень хорошо работает без проблем.

Проблема в том, что это медленно. Я хочу ускорить этот процесс сборки.

MSBuild (с использованием VS-2005) является одним из вариантов, но есть ошибка, указывающая значки для компилятора / компоновщика vb в командной строке, так что он не может успешно соединиться.

Какие еще варианты есть, чтобы «создавать» программы VB.NET?

(Быстрая рабочая станция не является опцией.)

Ответы [ 5 ]

3 голосов
/ 20 декабря 2008

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

1 голос
/ 20 декабря 2008

Если вы можете, обновите MSBuild до версии 3.5. Он может создавать файлы решения и обеспечивает поддержку поддержки многопроцессорных систем (или здесь , если вам необходимо разместить его самостоятельно), позволяя создавать проекты параллельно.

Предостережение заключается в том, что вам нужно использовать ссылки на проекты, чтобы он знал, что создавать.

Кроме того, сколько времени это займет сейчас? Вы смотрели на использование процессора / памяти (используя что-то вроде PerfMon ), чтобы увидеть, является ли это узким местом?

1 голос
/ 20 декабря 2008

Есть NAnt и Cruisecontrol.NET для непрерывной сборки.

Вы упомянули, что получить более быстрый ПК не вариант, но сколько у вас памяти? 2 ГБ должно быть минимумом для машины разработчика. Кроме того, использование быстрого 10K RPM жесткого диска имеет большое значение .

Вы пытались отключить любой антивирусный сканер во время сборки?

0 голосов
/ 20 декабря 2008

Если у вас большое количество проектов, постарайтесь сократить их. Вы всегда можете разделить их позже в DLL. Чем меньше проектов, тем быстрее он может построить. Особенно, если он должен строить их в определенном порядке.

Также возможно разбить их на более мелкие решения.

0 голосов
/ 20 декабря 2008

Вы мало что можете сделать, чтобы ускорить процесс сборки, за исключением добавления большего количества ядер, мощности процессора и памяти на вашу машину, но в вашем случае это не вариант.

Большинство крупных проектов не содержатся в одном EXE-файле. Чаще всего логические блоки перемещаются в отдельные сборки, которые могут быть как DLL, так и EXE. Конечный результат - целая куча маленьких сборок, а не одна огромная.

Чтобы привести один пример, один проект, над которым я работал, был огромным, состоящим из 700+ форм и десятков из 1000 классов. Функционально связанные формы, например, связанные с печатью, генерацией отчетов, опросом пользователей и т. Д., Содержались в своих собственных EXE-файлах. Если бы я работал над отчетами, я бы исключил из процесса сборки все проекты, не связанные с отчетами, и это помогает сократить время компиляции с получаса до нескольких секунд.

Этот стиль программирования может быть сложным, но если все сделано правильно, он просто работает и работает без нареканий.

...