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 も使用できる可能性がありますが、ファイル名を変更するオプションはないようです。それでも、それを使用して、すべてのファイルの名前を変更してバージョン番号を含めることはできますが、それは余分な作業です。もう 1 つの方法は、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 が提案した 2 番目のアプローチを使用して、全体的な目標を達成することができました。これが私がしたことです:

  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 の Web サイトに記載されています。

AjaxMin.targets ファイルの Processing Pages 部分は、Scripts\PageSource フォルダー内のすべてのファイルの縮小を開始し、結果を Scripts\Pages フォルダーに出力します。また、結果のファイル名に VerNumber 値を追加します。

于 2016-12-22T15:18:34.380 に答える