可以在Microsoft Ajax Minifier清单文件中使用通配符和变量吗?

时间:2016-12-20 21:47:50

标签: msbuild wildcard manifest microsoft-ajax-minifier

我正在使用Microsoft Ajax Minifier来缩小我的javascript文件。在清单中,我想指定源文件夹中的所有js文件应缩小为不同的输出文件夹。原始文件名应该用作输出文件名,并且应该附加一个变量。我想做一些像下面的manifest,输出使用*通配符,变量版本号是4.60。

<?xml version="1.0" encoding="utf-8"?>
$(version) = "-4.60"
<root>
    <output path="..\Scripts\Pages\*$(version)" type="js">
        <input path="Scripts\PageSource\" type="js" />
    </output>
</root>

在输出设置中使用*会引发构建错误但是可能存在不同的通配符?有很多输出和输入设置,这就是为什么我想指定一次版本号并重复使用它。

targets file(见下文)中的任何设置都可用于此目的吗?我找不到任何显示ProjectDefaultSwitches和Configuration设置的示例。

    

<!-- target to build all ajaxmin manifest files in the project -->
<Target Name="BuildAjaxMinManifests" AfterTargets="Build">
    <Message Text="Processing AjaxMin Manifests" Importance="high" />
    <CreateItem Include="@(None)" Condition="'%(Extension)'=='.ajaxmin'">
        <Output TaskParameter="Include" ItemName="AjaxMinManifests"/>
    </CreateItem>

    <AjaxMinManifestTask ProjectDefaultSwitches="-define:$(DefineConstants))"
                         Configuration="$(Configuration)"
                         TreatWarningsAsErrors="false"
                         InputFolder="$(ProjectDir)"
                         OutputFolder="$(ProjectDir)Content\"
                         Manifests="@(AjaxMinManifests)" />
</Target>

这可能吗?

2 个答案:

答案 0 :(得分:1)

AjaxMinTask的文档中有一些示例,它们完全符合您的要求:列出输入文件并根据它缩小为新的文件名。像这样:

<!-- This should point to the dll, or check docs and alternatively use 'Import'-->
<UsingTask TaskName="AjaxMin" AssemblyFile="$(MSBuildProjectDirectory)\AjaxMinTask.dll" />

<Target Name="Minify" AfterTargets="Build">
  <PropertyGroup>
    <!-- Version number to append should be defined somewhere -->
    <MinVersion>4.60</MinVersion>
  </PropertyGroup>
  <ItemGroup>
    <!-- List the input files, assume relative to project file -->
    <ToMinify Include="$(MSBuildProjectDirectory)\Scripts\PageSource\*.js"/>
  </ItemGroup>
  <!-- Minify -->
  <AjaxMin JsSourceFiles="@(ToMinify)" JsSourceExtensionPattern="\.js$" JsTargetExtension="..\Page\$(MinVersion).js"/>
</Target>

将其粘贴到项目文件末尾附近,AfterTargets="Build"部分会在构建后自动运行此目标。

AjaxMinManifestTask也可以使用,但它似乎没有改变文件名的选项。仍然可以使用它并在它之后重命名所有文件以包含版本号,但这只是额外的工作。另一种方法是使用msbuild逻辑列出源/目标文件,然后使用executable单独缩小它们。可能会慢一些,只需添加它就可以完成:

<Target Name="Minify" AfterTargets="Build">
  <PropertyGroup>
    <MinVersion>4.60</MinVersion>
  </PropertyGroup>
  <ItemGroup>
    <ToMinify Include="$(MSBuildProjectDirectory)\Scripts\PageSource\*.js"/>
  </ItemGroup>
  <Exec Command="ajaxmin.exe %(ToMinify.Identity) -out $(MSBuildProjectDirectory)\Script\Pages\%(ToMinify.FileName)$(MinVersion).jsmin -clobber" />
</Target>

答案 1 :(得分:0)

到目前为止,似乎无法在清单文件中使用通配符和变量,但我能够通过使用@stijn建议的第二种方法来实现我的总体目标。这是我做的:

  1. 已下载并安装了Microsoft Ajax Minifier
  2. 找到安装文件夹,并将AjaxMin.dll,AjaxMin.exe,AjaxMinifier.exe和AjaxMinTask.dll文件复制到项目的Build文件夹中。如果有多个开发人员,则此文件夹应受源代码管理。
  3. 在项目的Build文件夹中创建了一个名为AjaxMin.targets的文件。该文件的内容是:
  4. <Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> <UsingTask TaskName="AjaxMinManifestTask" AssemblyFile="$(ProjectDir)Build\AjaxMinTask.dll" /> <Target Name="BuildAjaxMinManifests" AfterTargets="Build"> <Message Text="Processing Manifest" Importance="high" /> <CreateItem Include="@(None)" Condition="'%(Extension)'=='.ajaxmin'"> <Output TaskParameter="Include" ItemName="AjaxMinManifests"/> </CreateItem> <AjaxMinManifestTask ProjectDefaultSwitches="-define:$(DefineConstants)" Configuration="$(Configuration)" TreatWarningsAsErrors="false" InputFolder="$(ProjectDir)" OutputFolder="$(ProjectDir)" Manifests="@(AjaxMinManifests)" /> <Message Text="Processing Pages" Importance="high" /> <PropertyGroup> <VerNumber>4-62-0-0</VerNumber> </PropertyGroup> <ItemGroup> <ToMinify Include="$(ProjectDir)Scripts\PageSource\*.js"/> </ItemGroup> <Exec Command="$(ProjectDir)Build\AjaxMin.exe %(ToMinify.Identity) -out $(ProjectDir)Scripts\Pages\%(ToMinify.FileName)-$(VerNumber).js -clobber" /> </Target> </Project>

    1. 卸载并编辑项目,在底部添加以下内容:
    2. <Import Project="$(MSBuildProjectDirectory)\Build\AjaxMin.targets" />

      1. 确保存在Scripts \ PageSource文件和Scripts \ Pages文件夹。
      2. 关闭并重新打开解决方案。
      3. 重建解决方案。
      4. 提示:在重新打开解决方案之前,似乎无法识别对AjaxMin.targets文件的更改。我浪费了整整一天的时间去挖洞,直到我弄明白了。

        AjaxMin.targets文件的AjaxMinManifestTask部分根据清单启动了一些js和css文件的缩小和合并。清单XML的格式记录在Microsoft Ajax Minifier website

        AjaxMin.targets文件的Processing Pages部分启动Scripts \ PageSource文件夹中每个文件的缩小,并将结果输出到Scripts \ Pages文件夹。它还会将VerNumber值附加到生成的文件名中。