14

我可以使用一些帮助来尝试追踪我在我们的 ASP.Net 项目中一直存在的间歇性错误。

在构建解决方案时,构建将间歇性地失败,并出现错误“/: Build (web): Object reference not set to an instance of an object”。该错误没有关联的文件、行、列或项目信息。关于该错误的奇怪之处在于,它会在连续重建时消失,并且似乎不会导致我们在构建成功后遇到的任何运行时错误。有时错误只会弹出一次,有时会弹出 3-4 次,但最终构建将成功完成,然后似乎每次构建都很好。我无法确定错误发生的原因和时间,而且由于它总是最终生成,因此对我们来说并不是一个关键问题。只是一个烦恼。但是我想要的一个出于明显的原因而消失了。

我想我应该补充一点,这是一个最初在 ASP.net 1.1 中开发并转换为 2.0 的应用程序,之后我在某个地方继承了它,所以我不知道问题最初是什么时候出现的。就这里的每个人而言,它一直都在那里。

显然,我不希望有人找出我的问题的原因,因为这将要求他们查看我们的整个解决方案以找出潜在的问题。只是希望有人能给我一些关于如何追踪代码中错误的实际来源的新想法。它一定来自某个地方,对吧?你会怎么去找出哪里?

4

11 回答 11

6

在命令行运行这个命令,看看你是否得到一些更详细的信息

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

于 2008-10-18T21:47:43.173 回答
6

当您在包含无效 HTML 的页面中有 Web 控件时,我已经看到了这一点。如果您的代码隐藏试图对控件执行某些操作,它将无法找到它,并且会在编译时为您提供对象引用...错误。根据我的经验,它不会产生运行时错误,并且如果在构建时关闭了相关文件,则项目将构建。HTH,祝你好运!

于 2008-10-16T18:12:33.190 回答
5

为了解决这个问题,我们从未追查过错误的根源,但是当我们升级到 Visual Studio 2008 并将项目转换为 Web 应用程序时,它就消失了。

于 2009-05-06T22:52:10.833 回答
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>

希望这有帮助!

于 2011-02-04T09:19:56.327 回答
3

我在构建时遇到了这个问题,当时我的项目包含自定义数据源(我自己的对象返回集合)和编译错误(也就是说,我的对象有错误)。

如果您尝试添加数据源并且您的项目在项目的根目录中没有任何数据源(例如,如果您已将所有数据源类放在子文件夹中),您也会收到此错误。我找到的唯一解决方案是在项目的根目录中创建一个数据源。

抱歉,不能更准确,但在编译时数据源/对象似乎有几件事可能出错。

于 2008-10-20T12:26:58.313 回答
3

我会尝试的第一件事是增加编译器的详细程度。这可以在 Visual Studio 选项中设置 - 例如 VS2005 的“工具->选项->项目和解决方案-构建和运行->MSBuild 项目构建输出详细程度”。如果您将其设置为诊断,那么它至少应该告诉您在引发异常时它在做什么。

于 2008-10-20T12:47:45.853 回答
0

“对象引用未设置为对象的实例”显然是运行时错误,而不是编译时错误。所以这对我说的是,Visual Studio 正在窒息某些东西,这可能不一定在您的代码中,或者您的代码中的某些东西只是间接导致的。

我要问的下一个问题是:这仅在 Visual Studio 中发生,还是在您使用 MSBuild 或 CSC 构建时会出现同样的情况?

于 2008-10-16T17:15:52.010 回答
0

真正奇怪的是它是一个运行时错误。你不应该在编译时看到它。您是否有任何附加到解决方案的构建前或构建后步骤?您在“构建”过程中包含的任何单元测试?

这个错误出现在哪里?

于 2008-10-16T17:16:03.427 回答
0

检查事件查看器的应用程序日志 - 它应该告诉您异常被抛出的位置。

于 2008-10-16T17:22:25.130 回答
0

只是为了澄清一下,是编译器本身窒息吗?您是否在代码中使用 #define 和 #if 指令做任何奇怪的事情?也许某些时候某些事情发生了故障......只是一个想法......

于 2008-10-16T17:31:36.360 回答
0
  • 查看是否有任何可能失败的构建后事件。这些可以在每个项目的属性页面上找到。

  • 尝试使用重建解决方案而不是构建解决方案。您可能需要从工具 > 自定义添加重建解决方案。如果您的 Web 应用程序安装或注册了任何 Windows 服务,并且这些服务已启动,那么 Rebuilding 会解决这些类型的问题。

于 2008-10-16T17:42:49.257 回答