Ошибка сборки: "Выражение слишком длинное или сложное для компиляции"

Время от времени, когда я создаю конкретное решение, я получаю случайное количество "Слишком длинное выражение или сложность для компиляции" в окне "Список ошибок". Однако единственным объектом, на который указывает ошибка, является конкретный проект, а не файл в проекте или определенный 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.