Pull to refresh

Очень долгая компиляция проекта .NET Framework под Windows CE и решение.

Reading time2 min
Views6.3K
Если ваш несложный, казалось бы, проект, который вы пишете в MS Visual Studio 2005/2008 под ОС Windows CE собирается очень долго (у меня время сборки было примерно минут 5), то вы пришли по адресу. У меня была такая проблема, но всемогущий гугель меня выручил.

Диагностика


Выбираем
Tools — Options — Projects and Solutions — Build and Run
В списке MSBuild project buld output verbosity выберем Diagnostic. Теперь открываем окно output
View — Output
и собираем проект и после долгого ожидания в самом конце огромного лога, который выдал компилятор, видим следующее:
Task Performance Summary:
        0 ms  Message                                    3 calls
        0 ms  WriteLinesToFile                           2 calls
        0 ms  RemoveDuplicates                           3 calls
        0 ms  FindAppConfigFile                          1 calls
        0 ms  ConvertToAbsolutePath                      1 calls
        0 ms  ReadLinesFromFile                          2 calls
        0 ms  AssignTargetPath                           5 calls
        0 ms  Delete                                     2 calls
        0 ms  MakeDir                                    2 calls
        0 ms  CreateProperty                             1 calls
        0 ms  GetFrameworkPath                           1 calls
       10 ms  ResolveAssemblyReference                   1 calls
       10 ms  GetDeviceFrameworkPath                     1 calls
       20 ms  AssignCulture                              1 calls
       30 ms  Copy                                       6 calls
       40 ms  FindUnderPath                              7 calls
       60 ms  ResolveComReference                        1 calls
      290 ms  CreateCSharpManifestResourceName           1 calls
      761 ms  GenerateResource                           1 calls
     2804 ms  Csc                                        1 calls
   118073 ms  PlatformVerificationTask                   1 calls
Последняя строка просто тихий ужас какой-то, правда? Раскочегариваем гугель и находим следущее. Оказывается, что Platform Verification Task — это специальная процедура, которая проверяет, сможет ли программа, которая только что скомпилировалась, запуститься на всех платформах, на которых есть .NET Framework. В реализации под одну платформу может отсутствовать что-нибудь, что присутствует в реализации под другую.

Решено, отключаем!

  1. Открываем файл
    %windir%\Microsoft.NET\Framework\v2.0.50727\Microsoft.CompactFramework.Common.Targets
    для редактирования.
  2. Если установлен .NET Framework 3.5, то открываем точно такой же файл
    %windir%\Microsoft.NET\Framework\v3.5\Microsoft.CompactFramework.Common.Targets
  3. Находим строку
    Name="PlatformVerificationTask">
    и заменяем её на
    Name="PlatformVerificationTask" Condition="'$(SkipPlatformVerification)' != 'true'">
  4. Теперь заводим новую переменную окружения. Для этого нажимаем волшебное сочетание клавиш windows+break. Далее
    Дополнительно — Переменные среды — Системные переменные — Добавить
    Имя переменной
    SkipPlatformVerification
    значение
    true
    Теперь нужно перезайти в систему, а то без этого переменные окружения не обновляются.

    Всё! Теперь должно работать быстро.

    UPD:
    P.S.
    По поводу п.4: Обновляются переменные окружения или не обновляются… Тут тайна, покрытая мраком. В одном случае обновилось, в другом — нет. У нас с пользователем DarkestMaster чуть ссора на этой почве не произошла, но, вроде бы всё хорошо.
Tags:
Hubs:
Total votes 36: ↑33 and ↓3+30
Comments28

Articles