Ошибка сборки: «Выражение слишком длинное или сложное для компиляции» - PullRequest
11 голосов
/ 17 ноября 2011

Время от времени, когда я строю конкретное решение, я получаю случайное количество «Выражение слишком длинное или сложное для компиляции» в окне Список ошибок.Однако единственное, на что указывает ошибка - это конкретный проект, а не файл в проекте или конкретный LOC.

Когда я сталкиваюсь с этим, я «очищаю», а затем перезагружаю VS, и это, кажется, исправляетЭто.Любые идеи о том, что вызывает это?

Это конкретное решение включает в себя 50 проектов.

Ответы [ 8 ]

15 голосов
/ 17 ноября 2011

Между прочим, эта ошибка характерна для компилятора, исчерпавшего пространство стека.Как правило, это происходит, когда вы бросаете проблему «глубокой рекурсии» в компилятор, например, скажем,

int x = (1 + (1 + (1 + (1 + ......... + 1 ) + 1 ) + 1 ) + 1);

, скажем, глубиной в несколько тысяч.Синтаксические и семантические анализаторы являются анализаторами рекурсивного спуска и поэтому склонны к исчерпанию стекового пространства в экстремальных сценариях.

Я понятия не имею, почему выключение и запуск могут повлиять на это.Это действительно странно.

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

4 голосов
/ 20 января 2015

Я получил эту ошибку в одном проекте, когда я переключился с 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"}
            }
        }
    }
}
2 голосов
/ 26 сентября 2014

При сборке вы можете видеть, что при сборке выводится последняя проверенная папка до того, как она выйдет из строя.Я удалил файлы в этой папке и вернул их один за другим.Наконец-то нашел проблему.Я не знаю точно, что это такое, но это была страница ASPX с большим количеством HTML.Он не использовался часто, поэтому я просто удалил его из проекта, и теперь он компилируется.

enter image description here

enter image description here

1 голос
/ 17 ноября 2011

Если очистка и восстановление работоспособны, очевидно, это не проблема с вашим кодом.Вы должны сообщить об этом в Microsoft, похоже, ошибка VS.

0 голосов
/ 25 мая 2017

У меня была такая же проблема на 64-битной машине (VS 2012).

Я использовал ответ @ MikeFlynn, чтобы найти папку, вызвавшую ошибку.

Наконец я обнаружил, что у меня естьСтраница Help.aspx без какого-либо кода - только HTML, но в нем было несколько изображений значков, встроенных как базовые 64

<img src="data:image/png;base64 ... />

Я преобразовал его в статический HTML и скомпилировал.

PS Тот же проекткомпилировал нормально на 32-битной машине VS2012.Обе машины работали под управлением Windows 7.

0 голосов
/ 17 марта 2017

Я получил эту ошибку из-за очень большого файла SVG.и после Google и личного эксперимента я обнаружил, что решение для большого файла SVG:

@Html.Raw(File.ReadAllText(Server.MapPath("~/image.svg")))

в бритвенном файле, есть другой подход с частичным HTML, но, к сожалению, этот трюк не работает с большим файлом SVG.

надеюсь, что это поможет ..

0 голосов
/ 10 сентября 2015

Я получил эту проблему сегодня. Каким-то образом я получил действительно длинную строку в моем файле index.cshtml. Поэтому проверьте наличие длинных строк, которые могут вызвать эту проблему.

0 голосов
/ 17 ноября 2011

Я никогда не видел этого в дикой природе.

Тем не менее, поиск в Google может привести к избытку ссылок на сборки, одна конкретная цитата:

Если я уменьшу количество ссылочных сборок до 5500, он будет скомпилирован и работает

Теперь, конечно, вы бы заметили, что список зависимостей настолько велик, не могли бы вы проверить, есть ли у вас слишком большое количество ссылок на сборки?

...