Отслеживание прерывистой "Ссылка на объект не установлена ​​в экземпляр объекта". ошибка при сборке

Я мог бы использовать некоторую помощь, пытаясь отследить прерывистую ошибку, которая у меня была с нашим проектом ASP.Net в течение довольно долгого времени.

С перерывами при создании решения сборка завершится с ошибкой "/: Build (web): ссылка на объект не установлена ​​в экземпляр объекта". Ошибка не связана с информацией о файле, строке, столбце или проекте. Странная вещь об ошибке заключается в том, что она исчезнет при последовательных перестройках и, похоже, не приведет к ошибкам во время выполнения, которые мы встретили, когда сборка будет успешной. Иногда ошибка будет появляться только один раз, иногда 3-4 раза, но в итоге сборка завершится успешно, а затем, похоже, будет просто отлично работать каждый раз после. Я не смог пригвоздить шаблон относительно того, почему и когда ошибка произойдет, и поскольку она всегда в конечном итоге строится, она не была для нас важной проблемой. Просто раздражение. Но я хочу по понятным причинам.

Полагаю, я должен добавить, что это приложение, которое изначально было разработано в ASP.net 1.1 и преобразовано в 2.0, и после этого я унаследовал его где-то по линии, поэтому я не знаю, когда проблема возникла впервые. Что касается всех здесь, он всегда был там.

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

Ответы

Ответ 1

Я видел это, когда у вас есть веб-элемент управления на странице с недопустимым HTML. Если ваш код пытается что-то сделать с элементом управления, он не сможет его найти и даст вам сообщение об объекте... во время компиляции. По моему опыту, он не создает ошибку времени выполнения, и проект будет построен, если этот файл закрыт во время сборки. HTH, удачи!

Ответ 2

Запустите эту команду в командной строке и посмотрите, есть ли у вас более подробная информация

% WINDIR%\Microsoft.NET\Framework\v3.5\msbuild.exe YourSolution.sln/v: n

Ответ 3

Чтобы следить за этой проблемой, мы никогда не отслеживали происхождение ошибки, но она исчезла при обновлении до Visual Studio 2008 и преобразовала проект в веб-приложение.

Ответ 4

У меня была эта проблема в течение долгого времени и, наконец, я нашел решение, которое отлично работает для меня. Для меня это не имеет смысла... но изменение моего файла web.config со следующим окончательно избавляется от этой ошибки прерывистой сборки:

<buildProviders>
    <add extension=".rdlc" type="Microsoft.Reporting.RdlBuildProvider, Microsoft.ReportViewer.Common, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"/>
    <!-- add this line below -->
    <remove extension=".rdlc"/> 
 </buildProviders>

Надеюсь на эту помощь!

Ответ 5

У меня было это во время сборки, когда в моем проекте содержались пользовательские источники данных (мои собственные объекты, возвращающие коллекции) с ошибками компиляции (то есть у моих объектов были ошибки).

Вы также получите эту ошибку, если попытаетесь добавить источник данных, и ваш проект не имеет каких-либо источников данных в корне проекта (например, если вы поместили все свои классы источников данных в подпапку). Единственным решением, которое я нашел, было создание источника данных в корне проекта.

Извините, если не уточнить, но, похоже, есть несколько вещей, которые могут пойти не так с источниками данных/объектами во время компиляции.

Ответ 6

Первое, что я попробую, это увеличить многословность компилятора. Это можно установить в параметрах Visual Studio - например, "Инструменты- > Параметры- > Проекты и решения - сборка и запуск → Расширение вывода сборки проекта MSBuild" для VS2005. Если вы установите его на диагностику, тогда он должен сказать вам, что он делает в то время, когда исключение возникает как минимум.

Ответ 7

"Ссылка на объект, не установленная на экземпляр объекта", явно является ошибкой во время выполнения, а не ошибкой времени компиляции. Итак, что мне говорит, это то, что Visual Studio задыхается от чего-то, что может быть не обязательно в вашем коде, или что-то в вашем коде косвенно вызывает.

Следующий вопрос, который я задал бы: происходит ли это только в Visual Studio или появляется то же самое при создании с использованием MSBuild или CSC?

Ответ 8

Что действительно странно, так это ошибка во время выполнения. Вы не должны видеть это во время компиляции. У вас есть какие-либо шаги до и после сборки, связанные с решением? Какие-либо модульные тесты, которые вы включаете в процесс сборки?

Где появляется эта ошибка?

Ответ 9

Проверьте журнал приложений вашего средства просмотра событий - он должен указать, где вы выбрали исключение.

Ответ 10

Просто, чтобы уточнить, неужели сам компилятор задыхается? Вы делаете что-то странное с директивами #define и #if в своем коде? Возможно, в какой-то момент что-то делается не по порядку... Просто мысль...

Ответ 11

  • Посмотрите, есть ли какие-либо события после сборки, которые могут быть неудачными. Их можно найти на каждой странице свойств проекта.

  • Попробуйте использовать Rebuild Solution вместо Build Solution. Возможно, вам придется добавить решение перестройки из "Инструменты" > "Настроить". Если ваше веб-приложение устанавливает или регистрирует любые службы Windows, и эти службы запускаются, Rebuilding плужит эти проблемы.