Ошибка сборки: "Выражение слишком длинное или сложное для компиляции"
Время от времени, когда я создаю конкретное решение, я получаю случайное количество "Слишком длинное выражение или сложность для компиляции" в окне "Список ошибок". Однако единственным объектом, на который указывает ошибка, является конкретный проект, а не файл в проекте или определенный LOC.
Когда я сталкиваюсь с этим, я "Очищаю", а затем перезапускаю VS, и это, кажется, исправляет его. Любые идеи о том, что вызывает это?
В этом конкретном решении есть 50 проектов.
Ответы
Ответ 1
FYI, эта ошибка характерна для компилятора, заканчивающегося из пространства стека. Обычно это происходит, когда вы бросаете проблему "глубокой рекурсии" в компилятор, например,
int x = (1 + (1 + (1 + (1 + ......... + 1 ) + 1 ) + 1 ) + 1);
скажем, несколько тысяч глубин. Синтаксические и семантические анализаторы являются анализаторами рекурсивного спуска и поэтому склонны к исчерпанию пространства стека в экстремальных сценариях.
Я понятия не имею, почему остановка и начало работы повлияют на это. Это действительно странно.
Если вы получите солидный репрограмм, я бы с удовольствием его увидел. Либо отправьте его здесь, либо введите ошибку в Connect, и мы посмотрим на нее. Без сплошного воспроизведения, хотя очень сложно сказать, что здесь происходит.
Ответ 2
Я получил эту ошибку в одном проекте, когда я переключился с Visual Studio 2012 на Visual Studio Community 2013.
В моем случае это был гигантский файл (строки 25k, не написанные мной) с инициализацией List<string[]>
инициализатором коллекции.
Что-то вроде этого:
public class Class
{
public List<string[]> BigList
{
get
{
return new List<string[]>()
{
new string[]{"foo","bar"},
new string[]{"foo","bar"},
new string[]{"foo","bar"},
new string[]{"foo","bar"},
.
.
.
.
.
new string[]{"foo","bar"},
new string[]{"foo","bar"},
new string[]{"foo","bar"},
new string[]{"foo","bar"}
}
}
}
}
Я изменил его на string[][]
, и проект начал компилировать
public class Class
{
public string[][] BigList
{
get
{
return new string[][]
{
new string[]{"foo","bar"},
new string[]{"foo","bar"},
new string[]{"foo","bar"},
new string[]{"foo","bar"},
.
.
.
.
.
new string[]{"foo","bar"},
new string[]{"foo","bar"},
new string[]{"foo","bar"},
new string[]{"foo","bar"}
}
}
}
}
Ответ 3
При построении вы можете увидеть вывод сборки последней папки, которую он проверяет, прежде чем он завершится с ошибкой. Я удалил файлы в этой папке и вернул их один за другим. Наконец нашел проблему. Я не знаю точно, что это такое, но это была страница .aspx с большим количеством HTML. Он не использовался часто, поэтому я просто удалил его из проекта и теперь он компилируется.
![enter image description here]()
![enter image description here]()
Ответ 4
Если очистка и восстановление работают, это, очевидно, не проблема с вашим кодом. Вы должны сообщить об этом Microsoft, похоже на ошибку VS.
Ответ 5
Я никогда не видел этого в дикой природе.
Тем не менее, из googling вокруг него вполне может быть избыток ссылок на сборку, одна конкретная цитата:
Если я уменьшу количество ссылочных ассемблеров до 5500, он скомпилируется и работает
Теперь, конечно, вы заметили бы список зависимостей, который был бы большим, вы могли бы проверить, есть ли у вас слишком большое количество ассемблированных ссылок?
Ответ 6
У меня сегодня проблема. Каким-то образом у меня очень длинная строка в моем index.cshtml
файле. Поэтому проверьте длинные строки, которые могут вызвать эту проблему.
Ответ 7
У меня возникла эта ошибка из-за очень большого файла svg. и после google он и некоторый личный эксперимент я обнаружил, что решение для большого файла svg:
@Html.Raw(File.ReadAllText(Server.MapPath("~/image.svg")))
в файле бритвы есть другой подход с частичным html, но, к сожалению, этот трюк не работает с большим svg файлом.
надеюсь, что эта помощь..
Ответ 8
У меня была такая же проблема на 64-битной машине (VS 2012).
Я использовал @MikeFlynn ответ, чтобы найти папку, вызывающую ошибку.
Наконец, я обнаружил, что у меня есть страница Help.aspx без кода позади - просто HTML
но он имел несколько изображений значков, встроенных в базу 64
<img src="data:image/png;base64 ... />
Я преобразовал его в статический HTML и скомпилировал его.
P.S. Тот же проект составлял O.K. в 32-разрядной машине VS2012.
Обе машины работали под управлением Windows 7.