发布 asp.net 网站给出“对象引用未设置为对象的实例”。错误

Posted

技术标签:

【中文标题】发布 asp.net 网站给出“对象引用未设置为对象的实例”。错误【英文标题】:publishing asp.net website give "Object reference not set to an instance of an object." error 【发布时间】:2011-01-18 08:22:46 【问题描述】:

我厌倦了这个错误。我在整个网络上进行了搜索,并尝试了我能找到的针对此错误的所有可能建议。

    删除app_code,构建,添加文件,发布。 (没用) 删除临时 asp.net 文件(无效)

最后我什至尝试了命令行并获得了以下堆栈跟踪。

error ASPRUNTIME: Object reference not set to an instance of an object.

[NullReferenceException]: Object reference not set to an instance of an object.
   at System.Web.Compilation.BuildManager.CopyPrecompiledFile(VirtualFile vfile,
 String destPhysicalPath)
   at System.Web.Compilation.BuildManager.CopyStaticFilesRecursive(VirtualDirect
ory sourceVdir, String destPhysicalDir, Boolean topLevel)
   at System.Web.Compilation.BuildManager.CopyStaticFilesRecursive(VirtualDirect
ory sourceVdir, String destPhysicalDir, Boolean topLevel)
   at System.Web.Compilation.BuildManager.CopyStaticFilesRecursive(VirtualDirect
ory sourceVdir, String destPhysicalDir, Boolean topLevel)
   at System.Web.Compilation.BuildManager.PrecompileAppInternal(VirtualPath star
tingVirtualDir)
   at System.Web.Compilation.BuildManager.PrecompileApp(VirtualPath startingVirt
ualDir)
   at System.Web.Compilation.BuildManager.PrecompileApp(ClientBuildManagerCallba
ck callback)
   at System.Web.Compilation.BuildManagerHost.PrecompileApp(ClientBuildManagerCa
llback callback)
   at System.Web.Compilation.BuildManagerHost.PrecompileApp(ClientBuildManagerCa
llback callback)
   at System.Web.Compilation.ClientBuildManager.PrecompileApplication(ClientBuil
dManagerCallback callback, Boolean forceCleanBuild)
   at System.Web.Compilation.ClientBuildManager.PrecompileApplication(ClientBuil
dManagerCallback callback)
   at System.Web.Compilation.Precompiler.Main(String[] args)

我使用了以下命令行:

aspnet_compiler.exe -p d:\code\websites\brokerweb -v / d:\code\websites\published -f -c -errorstack -u

【问题讨论】:

您是否尝试回滚到源代码控制中仍然有效的最后一个已知版本,并尝试发布该版本?我想消除您的代码与 Visual Studio 发布代码作为问题的任何可能性。 是的,即使这样也行不通了。同样的问题 【参考方案1】:

在 Visual Studio 2017 中,这里给出的解决方案都不适合我。我能够通过以下步骤解决问题:

    如果 Visual Studio 正在运行,则退出它 从开始菜单打开 Visual Studio 安装程序已安装选项卡下,它将显示您计算机上的 Visual Studio 版本 点击更多选项并选择修复 修复操作完成后,在 Visual Studio 中重新启动您的项目 现在,当您单击 发布 时应该不会出现此错误

【讨论】:

【参考方案2】:

确保您没有直接在虚拟目录上发布。如果是,请停止站点,然后发布,然后重新启动站点。

【讨论】:

【参考方案3】:

当我尝试发布我的网络服务时,我遇到了同样的问题。问题是当您将网站发布到目录时创建的 PrecompiledApp.config 文件是如何添加到我的项目中的。添加后,它导致了错误。

解决方案:我从 Visual Studio 中的项目树中删除了该文件,然后我能够在启用/选中预编译设置的情况下再次发布 Web 服务。

【讨论】:

【参考方案4】:

同样,这是一篇旧帖子,但我有以下内容:

VS2012 asp.net web forms app -> 升级到VS2013

尝试发布 - 得到与 OP 相同的错误。

当我终于弄清楚时,问题是由一件事引起的:

当我查看 web.config 中的成员资格提供程序时,一项缺少 connectionStringName 属性:

不好:

<membership defaultProvider="SomeMembershipProvider">
  <providers>
    <clear />
    <add name="SomeMembershipProvider" type="System.Web.Security.SqlMembershipProvider" passwordFormat="Encrypted" applicationName="SomeAppName"  />
    <add connectionStringName="SomeConnectionString" enablePasswordRetrieval="false" enablePasswordReset="true" requiresQuestionAndAnswer="true" applicationName="/SomeAppName" requiresUniqueEmail="false" blaw blaw blaw />
  </providers>
</membership>

好:

<membership defaultProvider="SomeMembershipProvider">
  <providers>
    <clear />
    <add name="SomeMembershipProvider" connectionStringName="PerhapsSomeOtherConnectionString" type="System.Web.Security.SqlMembershipProvider" passwordFormat="Encrypted" applicationName="SomeAppName"  />
    <add connectionStringName="SomeConnectionString" enablePasswordRetrieval="false" enablePasswordReset="true" requiresQuestionAndAnswer="true" applicationName="/SomeAppName" requiresUniqueEmail="false" blaw blaw blaw />
  </providers>
</membership>

我不确定为什么要删除其中一个 connectionStringName 属性,或者即使它曾经存在,但您可以使用此设置打开和关闭此错误。

【讨论】:

【参考方案5】:

就我而言,清除 cookie 解决了这个问题。

StackTrace 提到了一些授权和 cookie 的事情。我在InCognito mode(不保留cookie存储)中打开了Web应用程序,发现该应用程序正在运行。

希望它对某人有所帮助。

【讨论】:

【参考方案6】:

我知道这是一篇旧帖子,但以防万一有人发现它有用:

对我来说,这个问题的原因是 McAfee 防病毒软件

ASPNETCOMPILER(0,0):错误 ASPRUNTIME:对象引用未设置为对象的实例

【讨论】:

我的 McAfee 在我们的公司网络中造成了这种情况。我让我们的 AV 人员修复它,问题就消失了。然后他去度假了,AV Scanner 再次开始扫描目录(GPO 更新)。有效词。【参考方案7】:

当我尝试使用 MSBUILD 编译项目时,我发生了这个错误 - 它可以在 Visual Studio 中正常构建,甚至可以在我的本地浏览器中进行调试。 VS 中的发布选项也有效。但是命令行 MSBUILD 每次都会导致项目出错。

我设法在 VS 2012 中解决了这个问题,方法是打开我网站上的属性页,打开“MSBuild 选项”选项卡,取消选中“允许此预编译站点可更新”选项,然后点击“全部保存”。

【讨论】:

我花了整整 2 天的时间来解决这个问题,但它就像一个魅力。但我仍然不确定,为什么“允许此预编译站点可更新”会导致此错误?【参考方案8】:

从网站的 Bin 文件夹中删除所有 *.compiled 文件对我有用。 :)

这些文件可以安全删除,并且是在预编译期间创建的。欲了解更多信息,请查看此MSDN link。

【讨论】:

【参考方案9】:

我遇到了类似的问题。应用程序将在 IDE 中构建和运行,但无法发布;在“将 dll 合并到单个程序集”阶段结束。在研究 aspnet_merge.exe 后,我发现通过取消选中发布选项中的“发出调试信息”复选框解决了该问题。

这可能不是解决问题的“干净”解决方案,但它是一种解决方法。

希望这会有所帮助。

安德鲁

【讨论】:

【参考方案10】:

我最近遇到了这个错误。正如上面提到的@samiz,首先,您需要在构建并发布您的网站之后删除所有 *.dll.Refresh。但是,有时,就像我一样,当您删除 *.dll.refresh,然后发布您的网站时,错误会像往常一样提醒。我做了很多测试,但没有任何变化。

我还创建了一个新文件夹并复制了我的网站所需的所有 *.dll。接下来,删除 Bin 文件夹内的所有 *.dll,然后将它们添加一个。

最后,我重新启动我的电脑,然后我尝试发布我的网站。信不信由你,它工作正常,没有发生错误。

【讨论】:

【参考方案11】:

将您的 Visual Studio 升级到 VS 2013。它为我解决了这个问题。 :)

【讨论】:

【参考方案12】:

我有同样的经历,从解决方案目录树中删除压缩标志,重新设置编译器工作。

【讨论】:

如果我能投票一千次,我会的。这就是我的原因。 你在哪里可以找到这个选项? @ganjan 位于项目/解决方案文件夹的高级属性中。【参考方案13】:

我在 MVC WebApplication 中编译视图时遇到了类似的问题。只有在 VS 或 MSBuild 中构建解决方案时才会引发 NullReferenceException。从命令行运行 aspnet_compiler.exe 没有错误。

error ASPRUNTIME: Object reference not set to an instance of an object.

[NullReferenceException]: Object reference not set to an instance of an object.
   at System.Web.Compilation.DiskBuildResultCache.CacheBuildResult(String cacheKey, BuildResult result, Int64 hashCode, DateTime utcStart)
   at System.Web.Compilation.BuildManager.CacheBuildResultInternal(String cacheKey, BuildResult result, Int64 hashCode, DateTime utcStart)
   at System.Web.Compilation.WebDirectoryBatchCompiler.CacheAssemblyResults(AssemblyBuilder assemblyBuilder, CompilerResults results)
   at System.Web.Compilation.WebDirectoryBatchCompiler.CompileAssemblyBuilder(AssemblyBuilder builder)
   at System.Web.Compilation.WebDirectoryBatchCompiler.<CompileNonDependentBuildProviders>b__0(AssemblyBuilder assemblyBuilder)
   at System.Web.Compilation.CompilationUtil.CompileParallel(ICollection assemblyBuilders, Action`1 action)
   at System.Web.Compilation.WebDirectoryBatchCompiler.CompileNonDependentBuildProviders(ICollection buildProviders)
   at System.Web.Compilation.WebDirectoryBatchCompiler.Process()
   at System.Web.Compilation.BuildManager.BatchCompileWebDirectoryInternal(VirtualDirectory vdir, Boolean ignoreErrors)
   at System.Web.Compilation.BuildManager.BatchCompileWebDirectory(VirtualDirectory vdir, VirtualPath virtualDir, Boolean ignoreErrors)
   at System.Web.Compilation.BuildManager.PrecompileWebDirectoriesRecursive(VirtualDirectory vdir, Boolean topLevel)
   at System.Web.Compilation.BuildManager.PrecompileWebDirectoriesRecursive(VirtualDirectory vdir, Boolean topLevel)
   at System.Web.Compilation.BuildManager.PrecompileAppInternal(VirtualPath startingVirtualDir, IEnumerable`1 excludedVirtualPaths)
   at System.Web.Compilation.BuildManager.PrecompileApp(VirtualPath startingVirtualDir, IEnumerable`1 excludedVirtualPaths)
   at System.Web.Compilation.BuildManager.PrecompileApp(ClientBuildManagerCallback callback, IEnumerable`1 excludedVirtualPaths)
   at System.Web.Compilation.BuildManagerHost.PrecompileApp(ClientBuildManagerCallback callback, List`1 excludedVirtualPaths)
   at System.Web.Compilation.BuildManagerHost.PrecompileApp(ClientBuildManagerCallback callback, List`1 excludedVirtualPaths)
   at System.Web.Compilation.ClientBuildManager.PrecompileApplication(ClientBuildManagerCallback callback, Boolean forceCleanBuild)
   at System.Web.Compilation.ClientBuildManager.PrecompileApplication(ClientBuildManagerCallback callback)
   at System.Web.Compilation.Precompiler.Main(String[] args)

在网上寻找答案并使用 ProcessMonitor 发现一天后,我发现编译器尝试编译 ReportService.svc 文件时会发生这种情况。如果这个文件被删除或扩展名被重命名,一切都编译得很好。 非常奇怪的解决方案修复了编译 svc 文件的问题。几天前我在这个项目上打开了 ntfs 压缩以节省一些空间。这是唯一的问题。当从网站文件夹中删除 ntfs 压缩属性时,NullReferenceException 问题得到解决。

【讨论】:

【参考方案14】:

bin 目录中的*.dll.refresh 文件指向不再可用的位置时,通常会发生这种情况。删除 *.dll.refresh 文件应该可以解决问题。

【讨论】:

以上是关于发布 asp.net 网站给出“对象引用未设置为对象的实例”。错误的主要内容,如果未能解决你的问题,请参考以下文章

将我的 ASP.NET 网站移至 Windows Server 2012 上的 IIS 8 ...服务丢失:.svc 文件是可见的,但他们的方法给出了 404

在 ASP.NET 中打开 Crystal Report 时出错

今天为 ASP.net 推荐哪个数据访问层?

将ASP.NET Identity模型移动到类库

Asp.NET Identity 2 给出“无效令牌”错误

发布ASP.net网站问题