2010-10-05 3 views
0

Je suis en train d'ajouter une tâche de génération de post pour exécuter le Ajax Minifier (ajaxMin.exe) à chaque fois qu'une version de construction d'un projet est exécutée. J'ai ajouté le code au projet pour compresser tous les CSS et JavaScript, mais quand le déclenchement d'une accumulation sur le serveur TFS construire, je reçois beaucoup d'erreurs de construction dans le BuildLog.txt avec le message:Erreur d'autorisation lors de la réduction de JS/CSS à partir de la sortie MSBuild

erreur: Le Microsoft Ajax Minifier n'a pas la permission d'écrire à JS [nom] .js

Je reçois un message pour chaque JavaScript et le fichier CSS et assez loking à juste titre à la sortie de la construction, aucune minification n'a eu lieu. Le projet est sous le contrôle de la source, mais je pensais être une tâche post-construction, cela n'aurait pas d'importance car il minimise la sortie sur le serveur de construction, pas les fichiers source eux-mêmes? Le code ajouté à mon .csproj est la suivante:

<Import Project="$(MSBuildExtensionsPath)\Microsoft\MicrosoftAjax\AjaxMin.tasks" /> 
    <Target Name="AfterBuild" Condition=" '$(ConfigurationName)'=='Release' "> 
    <ItemGroup> 
     <JsFilesRelease Include="**\*.js" Exclude="**\*.min.js" /> 
     <CssFilesRelease Include="**\*.css" /> 
    </ItemGroup> 
    <AjaxMin JsSourceFiles="@(JsFilesRelease)" JsSourceExtensionPattern="\.js$" JsTargetExtension=".js" 
     CssSourceFiles="@(CssFilesRelease)" CssSourceExtensionPattern="\.css$" CssTargetExtension=".css" /> 
    </Target> 

Est-il possible que je peux contourner cette restriction? Je veux m'assurer que tous les fichiers en sortie de ce qui précède sont minifiés et il semble que ce soit seulement les permissions qui l'empêchent.

Merci

Répondre

0

Avec votre code, le minifier Ajax rapetisser les js et les fichiers CSS dans le répertoire de travail de votre construit a lieu et ses sous-dossiers. Vous pouvez déboguer en imprimant le répertoire de travail avant votre tâche AjaxMin:

<Message Text="MSBuildProjectDirectory: $(MSBuildProjectDirectory)"/> 

Je pense que vous devez spécifier un chemin plus précis dans votre répertoire de sortie que « ** ». Travaillez-vous avec VSS? Je fais de même mais avec la tâche Yui Compressor (http://yuicompressor.codeplex.com/) au lieu du MicrosoftAjax. Vous pouvez trouver une étude sur les compresseurs ici: http://coderjournal.com/2010/01/yahoo-yui-compressor-vs-microsoft-ajax-minifier-vs-google-closure-compiler/ Je travaille avec svn, CC.net et MSBuild.

+0

C'est très bien. Même s'il ne devrait jamais y avoir JS dans le répertoire \ js et css dans le répertoire \ stylesheets, s'ils se trouvent ailleurs, ils seront également minifiés. Nous travaillons avec TFS pour le contrôle des sources. – LDJ

+0

Ce que je voulais dire, c'est que votre ** \ *. Js se réfèrerait à vos fichiers sources, qui sont probablement verrouillés avec TFS. Vos fichiers de sortie sont probablement dans un répertoire _PublishedWebsite plutôt. Même s'il s'agit d'une tâche de post-construction, le processus msbuild est exactement le même que celui qui a construit votre site Web, il est donc probablement démarré dans le répertoire où se trouve votre fichier de solution. Exécutez-vous la construction à partir de Visual Studio? Quelle est la valeur de MSBuildProjectDirectory? –

Questions connexes