Сжатие js и css с помощью Team Foundation Server 2010 - PullRequest
1 голос
/ 10 августа 2011

Я бился головой о кирпичную стену, которую, кажется, легко обойти всем, кроме меня.

Я хочу настроить css и js сжатие , используя стандартную сборку в Team Foundation Server 2010 .Ниже то, что я пробовал до сих пор и потерпел неудачу.Я ищу волшебную руку помощи, которая поможет мне настроить это так, как профессионалы (SO полон их), считают, что так и должно быть.

http://yuicompressor.codeplex.com/releases/view/46679 (загрузить демо с использованием событий после сборки)

Этот метод выглядел многообещающе, поскольку он точно соответствовал обещанию при сборке проекта в Visual Studio.

Моя команда msbuild Post-build:

$ (MSBuildBinPath) \ msbuild.exe "$ (ProjectDir) MSBuild \ MSBuildSettings.xml" /p:CssOutputFile="$(TargetDir)..\Content\StylesSheetFinal.css "/ p: JavaScriptOutputFile =" $ (TargetDir) .. \ Scripts \JavaScriptFinal.js "

Однако, когда сборка выполняется TFS, я получаю много ошибок, подобных этим:

D: \ Builds \ 3 \ CKB 2010_Build_CP \ Sources\ CKB 2010 \ My.Name.Space \ MSBuild \ MSBuildSettings.xml (61): не удалось сохранить сжатый текст в выходной файл [D: \ Builds \ 3 \ CKB 2010_Build_CP \ Binaries .. \ Content \ StylesSheetFinal.css],Пожалуйста, проверьте путь / имя файла и убедитесь, что файл не магически заблокирован, доступен только для чтения и т. Д.

Так что ясно, что проблема в синтаксисе команды Post-build, которая неверна,Но я не могу понять, как заставить его работать как для локальных сборок, так и для сборок TSF.

Обновление 2011-08-17

Как заметил Эдвард Томпсон, я попытался добавить обратную косую чертук пути:

$ (MSBuildBinPath) \ msbuild.exe "$ (ProjectDir) MSBuild \ MSBuildSettings.xml" /p:CssOutputFile="$(TargetDir)\..\Content\styles.min.css "/p:JavaScriptOutputFile="$(TargetDir)\..\Scripts\scripts.min.js"

И результат такой:

Не удалось сохранить сжатый текст в выходной файл [D: \ Builds \ 3 \ CKB 2010_Build_CP \ Binaries \\ .. \ Content \ styles.min.css].Пожалуйста, проверьте путь / имя файла и убедитесь, что файл не магически заблокирован, доступен только для чтения и т. Д.

Ответы [ 2 ]

2 голосов
/ 17 августа 2011

Проблема заключается в разнице значений, с которой TFS и Visual Studio запускают команду msbuild.

Это шаги, которые я предпринял, чтобы получить надлежащую интеграцию YuiCompressor с Visual Studio 2010 и Team Foundation Server 2010.

  1. В желаемом проекте добавьте папку с именем 'MSBuild'

  2. В этой папке вы должны извлечь файлы, загруженные из YuiCompressorпроект на CodePlex enter image description here

  3. Установите свойства этих файлов следующим образом:
    enter image description here

  4. Открыть сейчасфайл MSBuildSettings.xml и отредактируйте его в соответствии со сценариями и CSS-файлами, которые вы хотите сжать. Я загрузил свой файл на pastebin , поскольку при вставке его сюда возникли проблемы с редактором.

  5. Добавьте следующее событие после сборки в ваш проект. Обратите внимание, что пути могут отличаться для вашей среды.

    IF "$ (BuildingInsideVisualStudio)" == "" $ (MSBuildBinPath) \ msbuild.exe
    "$ (ProjectDir) MSBuild \ MSBuildSettings.xml "
    /p:CssOutputFile="$(TargetDir)_PublishedWebsites\$(ProjectName)\Content\styles.min.css" / p: JavaScriptOutputFile = "$ (TargetDir) _ $ $ ($)ProjectName) \ Scripts \ scripts.min.js "
    IF" $ (BuildingInsideVisualStudio) "==" true "$ (MSBuildBinPath) \ msbuild.exe
    " $ (ProjectDir) MSBuild \ MSBuildSettings.xml "
    /p:CssOutputFile="$(TargetDir)..\Content\styles.min.css"
    /p:JavaScriptOutputFile="$(TargetDir)..\Scripts\scripts.min.js"

  6. Создайте проект и посмотрите, были ли файлы созданы должным образом.

  7. Выполните регистрацию и посмотрите, как сборка tfs создает сжатые файлы.для вас.

  8. Для отладки сборки tfs вы найдете журналы в журнале msbuild, который связан с обычным журналом tfsbuild.

Надеюсь, это кому-нибудь поможет.Я не мог найти достойного гида нигде, так что теперь есть один здесь!Если у вас есть другие предложения, не стесняйтесь добавлять их или оставлять в комментариях.

0 голосов
/ 16 августа 2011

Одна вещь, которая бросается в глаза, это то, что вы используете $(TargetDir)..\ - который расширяется до \Binaries..\.Я подозреваю, что у вас нет каталога Binaries.., и это должно быть \$(TargetDir)\..\.(То есть родительский каталог Binaries.)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...