У меня есть тестовый проект, который успешно создан в VS2015, но сборка завершается неудачно из-за исключения StackOverflowException, когда я пытаюсь построить его в VS2017 / 2019. Последнее утверждение, напечатанное в журнале диагностики в точке, предшествующей возникновению исключения, таково:
Using shared compilation with compiler from directory: C:\Program Files (x86)\Microsoft Visual Studio\2019\Enterprise\MSBuild\Current\Bin\Roslyn
Я пытался переключить флаг UseSharedCompilation
между истиной и ложью, нокажется, не имеет никакого эффекта. Эта проблема, по-видимому, связана с количеством сцепленных методов Fluent Migrator (подробнее об этом ниже), но у меня нет способа изменить код, чтобы смягчить эту проблему.
Я не очень хорошо себя чувствуюразбираюсь в компиляторах, так что я в недоумении относительно того, что изменилось между VS2015 и более новыми версиями, так что эта проблема внезапно возникнет. Может ли кто-нибудь помочь мне понять, а еще лучше, дать мне несколько советов по сборке для чайников, чтобы заставить мою сборку работать под VS2017 / 2019?
Подробности: Я унаследовал некоторое программное обеспечение, котороетесно связана с общей схемой дБ, используемой совместно с несколькими подобными приложениями. Новые таблицы и справочные данные вставляются в схему базы данных с помощью инструмента, который использует кучу файлов XML, которые содержат как данные, так и метаданные. Для приложения, которое я унаследовал, не было тестового покрытия и около 40 тыс. Строк XML-контента, которые нужно было обновить с помощью поиска и замены и ручной проверки. Чтобы решить эти и связанные с ними проблемы, я написал некоторый код для анализа файлов XML и автоматической генерации классов C # с содержимым Fluent Migrator. Некоторые из (ненормализованных) таблиц имеют сотни столбцов, и это, кажется, является специфической проблемой, вызывающей исключение StackOverflowException. Компилятор, похоже, способен обрабатывать около 200 .WithColumn
вызовов, но помимо этого он взрывается. Кратко кроме ниже. Я упоминаю об этом просто для того, чтобы представить контекст проблемы и объяснить, почему, черт возьми, я делаю то, что делаю.
.WithColumn(nameof(ColumnDescriptions.XXX)).AsString(100).NotPublishedOffline().WithColumnDescription(ColumnDescriptions.XXX)
//.WithColumn(nameof(ColumnDescriptions.YYY)).AsString(100).NotPublishedOffline().WithColumnDescription(ColumnDescriptions.YYY)