2010-10-05 54 views
0

我在添加一个后期构建任务来执行项目的恢复构建时运行Ajax Minifier(ajaxMin.exe)。我已经添加代码到项目压缩所有的CSS和JavaScript,但在TFS触发一个构建时,构建服务器,我有很多构建错误在BuildLog.txt与消息:从MSBuild输出中缩小JS/CSS时的权限错误

错误:微软的Ajax Minifier 没有写权限 JS [文件名] .js文件

我得到一个消息,每个JavaScript和CSS文件,并在生成输出正确足够寻找热塑成型,没有缩小已经发生。 该项目在源代码控制下,但我认为是一个后期构建任务,这不会因为它缩小了构建服务器上的输出而不是源文件本身? 添加到我的.csproj的代码如下:

<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> 

有没有什么办法可以解决这个限制?我想确保从上面输出的所有文件都被缩小,并且它似乎只是阻止它的权限。

感谢

回答

0

与您的代码,阿贾克斯minifier将运行如下的任何js和css文件在工作目录中建发生和其子文件夹。你可以通过你的AjaxMin任务之前打印工作目录调试:

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

我想你应该指定比你的输出目录更精确的路径“**”。你在使用VSS吗?

我这样做,但与Yui Compressor任务(http://yuicompressor.codeplex.com/),而不是MicrosoftAjax。你可以在这里找到关于压缩机的研究:http://coderjournal.com/2010/01/yahoo-yui-compressor-vs-microsoft-ajax-minifier-vs-google-closure-compiler/ 我使用svn,CC.net和MSBuild。

+0

这很好。尽管\ js目录中只有JS,而\ stylesheets目录中只有css,但如果它们确实发生在其他任何地方,它们也会被缩小。我们正在与TFS进行源代码控制。 – LDJ 2010-10-05 11:12:49

+0

我的意思是你的** \ *。js会引用你的源文件,这些文件可能被TFS锁定。您的输出文件可能位于_PublishedWebsite目录中。即使它是一个后期构建任务,msbuild过程与构建网站的过程完全相同,因此它可能在解决方案文件所在的目录中启动。你是否从Visual Studio运行构建? MSBuildProjectDirectory的价值是什么? – 2010-10-05 11:54:06