Ошибка задачи Google Closure MSBuild - PullRequest
0 голосов
/ 30 августа 2010

Я пытаюсь написать пользовательскую задачу в моем файле MSBuild, чтобы сжать некоторые js-файлы с помощью Google Closure Compiler. Я скачал с сайта файлы ClosureCompiler.dll и ClosureCompiler.tasks и сохранил их в папке на своем компьютере. Я добавил следующие строки в мой файл 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 хранится в корне файлов моего проекта. Я не хочу включать необязательный ApiUrl, так как я хочу сжать файлы локально, используя ClosureCompiler.dll. Файл 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

Может кто-нибудь помочь в том, в чем проблема или что я делаю не так?

Ответы [ 2 ]

1 голос
/ 10 апреля 2011

Перейти к

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

И посмотрите, сможете ли вы вставить в нее что-нибудь. Возможно, вы достигли своего почасового лимита. VS2010 выдает это сообщение, если вышеупомянутое происходит и вызывает ошибку. Так что ... это одна вещь, которая вызовет это.

1 голос
/ 07 апреля 2011

Я столкнулся с той же проблемой, и это ошибка в коде пользовательской задачи. Это связано с тем, что API возвращает ошибку, а пользовательский код не проверяет, возвращает ли API ошибку.

Будет проверено

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

Это создаст объект, не являющийся ссылкой для .InnerText, если нет узла с именем compiledCode Сначала нужно проверить ошибки в ответе.

if (compiledSource.SelectSingleNode("//error") != null)
    throw new Exception(compiledSource.SelectSingleNode("//error").InnerText);
...