Скрипт # и проблемы с компилятором - PullRequest
5 голосов
/ 14 октября 2010

Я только что столкнулся с довольно странной проблемой с VS2010 и Script #, которые в большинстве случаев я могу воссоздать.

В моем простом сценарии у меня есть 2 проекта в моем решении; стандартное веб-приложение Asp.Net MVC2 и библиотека классов Script # jQuery. Я создал статический класс (приписывается с помощью [Imported]) со статическим методом, предполагая, что я могу сопоставить этот класс в коде с внешней библиотекой Javascript, как описано в документации.

Однако кажется, что всякий раз, когда я украшаю такой класс с помощью [IgnoreNamespace] для достижения этой цели, проект прекращает успешную компиляцию, но не дает мне никакой обратной связи относительно того, почему он не выполняется (ошибок в окне ошибок, например, пример). От этого нелегко избавиться, так как Visual Studio, похоже, постоянно находится в состоянии сбоя сборки; удаление классов и файлов проекта не решает проблему, ни перезапускает Visual Studio. Единственный способ заставить VS успешно построить проект - это полностью удалить проект, создать новый и добавить файлы обратно, что, по меньшей мере, раздражает.

С подробным выходным параметром сборки я получаю следующее:

Цель "AfterCompile" в файле "C: \ Program Files (x86) \ ScriptSharp \ v1.0 \ ScriptSharp.targets" из проекта "e: \ project \ local \ ScriptSharpDemo \ Scripts \ Scripts.csproj" (target " Компиляция "зависит от этого): Задача "ScriptCompilerTask" Выполнено задание "ScriptCompilerTask" - СБОЙ. Завершено создание цели "AfterCompile" в проекте "Scripts.csproj" - СБОЙ.

.. что не говорит мне много.

Несколько раз мне удавалось создать класс такого типа, а затем успешно создать, но в основном я могу достаточно надежно воспроизвести эту проблему.

На данный момент я склонен думать, что ошибка заключается в Script #, но просто хотел бы, чтобы это было подтверждено, и найти возможный обходной путь, если таковой имеется.

Ответы [ 3 ]

5 голосов
/ 04 ноября 2010

На случай, если у кого-то возникнет похожая проблема, я нашел причину проблемы.

При добавлении класса с использованием этого метода или копировании в файл из другого проекта для использования в Script # это приводит к добавлению ссылки на System.dll в проект. Это (понятно) приводит к тому, что проект прекращает компиляцию без ошибок.

Было бы неплохо иметь предупреждение об этом или Script #, чтобы как-то определить, когда возникает такая ситуация, и / или создать новый шаблон для случая, когда я использую «Добавить класс» или импортирую файл, но это просто удобство. и, по крайней мере, теперь я могу безболезненно возобновить компиляцию моего проекта, просто удалив эту ссылку.

1 голос
/ 11 марта 2011

При попытке сделать мой проект снова, я наткнулся на следующие возможные решения:

  • "Home \ HomePage.cs" и "Shared \ Utility.cs" нельзя удалять, и они должны оставаться там, где они были изначально созданы
  • «Home \ HomePage.cs» и «Shared \ Utility.cs» должны быть последними записями в файле «* .csproj». После них не должно быть тега «Compile»
  • Проблемные вызовы «Script.Literal» могут вызывать сбои без вывода сообщений - особенно будьте осторожны при наличии параметров (например, Script.Literal("{0}.doFoo()", variable))
  • То же самое относится и к "String.Format", когда параметры формата недопустимы
  • Пространства имен и папки, кажется, вызывают много проблем, размещение всех классов в одном и том же пространстве имен и все классы в одной папке могут помочь
0 голосов
/ 10 января 2012

Я перепробовал все предложения, которые были даны здесь, но продолжал видеть проблему. В конце концов, я решил, что причина в моей ситуации заключается в том, что я добавил атрибут [IntrinsicProperty] в одно из моих свойств. Удаление это решило проблему. Не спрашивайте меня, почему это вызывает проблему, но я подумал, что поделюсь этим решением, если другие столкнутся с ним.

...