可以在 Microsoft Ajax Minifier 清单文件中使用通配符和变量吗?
Can wildcards and variables be used in a Microsoft Ajax Minifier manifest file?
我正在使用下面的 Microsoft Ajax Minifier to minify my javascript files. In the manifest, I would like to specify that all js files in a source folder should be minified into a different output folder. The original filename should be used as the output filename plus a variable should be appended. I would like to do something like the 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 和配置设置的作用。
<!-- 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>
这可能吗?
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 逻辑列出 source/destination 文件,然后使用可执行文件单独缩小它们。可能会更慢,只是为了完整性添加这个:
<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>
到目前为止,似乎无法在清单文件中使用通配符和变量,但我能够通过使用@stijn 建议的第二种方法来实现我的总体目标。这是我所做的:
- 已下载并安装 Microsoft Ajax Minifier
- 找到安装文件夹并将AjaxMin.dll、AjaxMin.exe、AjaxMinifier.exe和AjaxMinTask.dll文件复制到项目的Build文件夹中。如果有多个开发人员,则此文件夹应受源代码管理。
- 在项目的 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>
- 卸载然后编辑项目以在底部添加以下内容:
<Import Project="$(MSBuildProjectDirectory)\Build\AjaxMin.targets" />
- 确保 Scripts\PageSource 文件和 Scripts\Pages 文件夹存在。
- 关闭并重新打开解决方案。
- 重建解决方案。
提示:在重新打开解决方案之前,似乎无法识别对 AjaxMin.targets 文件所做的更改。我花了一整天的时间钻进兔子洞,直到我弄明白了。
AjaxMin.targets 文件的 AjaxMinManifestTask 部分根据清单开始缩小和合并多个 js 和 css 文件。清单 XML 的格式记录在 Microsoft Ajax Minifier website.
AjaxMin.targets 文件的处理页面部分开始对 Scripts\PageSource 文件夹中的每个文件进行缩小,并将结果输出到 Scripts\Pages 文件夹。它还将 VerNumber 值附加到生成的文件名中。
我正在使用下面的 Microsoft Ajax Minifier to minify my javascript files. In the manifest, I would like to specify that all js files in a source folder should be minified into a different output folder. The original filename should be used as the output filename plus a variable should be appended. I would like to do something like the 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 和配置设置的作用。
<!-- 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>
这可能吗?
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 逻辑列出 source/destination 文件,然后使用可执行文件单独缩小它们。可能会更慢,只是为了完整性添加这个:
<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>
到目前为止,似乎无法在清单文件中使用通配符和变量,但我能够通过使用@stijn 建议的第二种方法来实现我的总体目标。这是我所做的:
- 已下载并安装 Microsoft Ajax Minifier
- 找到安装文件夹并将AjaxMin.dll、AjaxMin.exe、AjaxMinifier.exe和AjaxMinTask.dll文件复制到项目的Build文件夹中。如果有多个开发人员,则此文件夹应受源代码管理。
- 在项目的 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>
- 卸载然后编辑项目以在底部添加以下内容:
<Import Project="$(MSBuildProjectDirectory)\Build\AjaxMin.targets" />
- 确保 Scripts\PageSource 文件和 Scripts\Pages 文件夹存在。
- 关闭并重新打开解决方案。
- 重建解决方案。
提示:在重新打开解决方案之前,似乎无法识别对 AjaxMin.targets 文件所做的更改。我花了一整天的时间钻进兔子洞,直到我弄明白了。
AjaxMin.targets 文件的 AjaxMinManifestTask 部分根据清单开始缩小和合并多个 js 和 css 文件。清单 XML 的格式记录在 Microsoft Ajax Minifier website.
AjaxMin.targets 文件的处理页面部分开始对 Scripts\PageSource 文件夹中的每个文件进行缩小,并将结果输出到 Scripts\Pages 文件夹。它还将 VerNumber 值附加到生成的文件名中。