0

MSBuild ファイルにカスタム タスクを記述して、Google Closure Compiler でいくつかの js ファイルを圧縮しようとしています。サイトから ClosureCompiler.dll および ClosureCompiler.tasks ファイルをダウンロードし、m/c のフォルダーに保存しました。csproj ファイルに以下の行を追加しました

<Import Project="C:\Projects\Closure\ClosureCompiler.tasks" />
<Target Name="AfterBuild">
    <ItemGroup>
        <JS Include="test.js" />
    </ItemGroup>
    <ClosureCompiler CompilationLevel="SIMPLE_OPTIMIZATIONS" SourceFiles="@(JS)" SourceExtensionPattern="\.js$" TargetExtension=".min.js" />
</Target>

test.js ファイルは、プロジェクト ファイルのルートに保持されます。ClosureCompiler.dll を使用してローカルでファイルを圧縮したいので、オプションの ApiUrl を含めたくありません。ClosureCompiler.tasks ファイルは

<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
    <UsingTask TaskName="ClosureCompiler" AssemblyFile="C:\Projects\Closure\ClosureCompiler.dll" /> 
</Project>

ただし、プロジェクトをコンパイルしようとすると、エラーが発生します。

Compilation Failed: test.js, Reason: Object reference not set to instance of an object

問題が何であるか、または私が間違っていることについて誰かが助けることができますか?

4

2 に答える 2

1

に行く

http://closure-compiler.appspot.com/home

そして、「何でも」を貼り付けられるかどうかを確認してください。時間制限に達している可能性があります。VS2010 は、前述の状況が発生してエラーが発生した場合にこのメッセージをスローします。だから...それはそれを引き起こす一つのことです.

于 2011-04-10T15:51:47.857 に答える
1

同じ問題に遭遇しましたが、これはカスタム タスク コードのバグです。これは、API がエラーを返し、カスタム コードが API がエラーを返すかどうかを確認していないためです。

チェックします

compiledSource.SelectSingleNode("//compileCode").InnerText

コンパイルされたコードという名前のノードがない場合、.InnerText の参照ではないオブジェクトがスローされます。最初に応答のエラーを確認する必要があります。

if (compiledSource.SelectSingleNode("//error") != null)
    throw new Exception(compiledSource.SelectSingleNode("//error").InnerText);
于 2011-04-06T22:35:50.590 に答える