1

我正在使用Microsoft Ajax Minifier来缩小我的 javascript 文件。在清单中,我想指定源文件夹中的所有 js 文件都应缩小到不同的输出文件夹中。原始文件名应用作输出文件名,并应附加一个变量。我想做类似下面的清单,其中输出使用 * 通配符,变量是 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>

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

目标文件(见下文)中的任何设置都可以用于此目的吗?我找不到任何示例来显示 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>

这可能吗?

4

2 回答 2

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 逻辑列出源/目标文件,然后使用可执行文件单独缩小它们。可能会更慢,只是为了完整性添加这个:

<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>
于 2016-12-21T09:39:52.977 回答
0

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

  1. 下载并安装了Microsoft Ajax Minifier
  2. 找到安装文件夹并将 AjaxMin.dll、AjaxMin.exe、AjaxMinifier.exe 和 AjaxMinTask.dll 文件复制到项目的 Build 文件夹中。如果有多个开发人员,则此文件夹应受源代码控制。
  3. 在项目的 Build 文件夹中创建了一个名为 AjaxMin.targets 的文件。该文件的内容是:

<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. 卸载然后编辑项目以在底部添加以下内容:

<Import Project="$(MSBuildProjectDirectory)\Build\AjaxMin.targets" />

  1. 确保 Scripts\PageSource 文件和 Scripts\Pages 文件夹存在。
  2. 关闭并重新打开解决方案。
  3. 重建解决方案。

提示:在重新打开解决方案之前,似乎无法识别对 AjaxMin.targets 文件的更改。我浪费了一整天的时间去兔子洞,直到我弄清楚了。

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

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

于 2016-12-22T15:18:34.380 回答