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

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

  1. 删除app_code,构建,添加文件,发布。 (没用)
  2. 删除临时 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 发布代码作为问题的任何可能性。
  • 是的,即使这样也行不通了。同样的问题

标签: asp.net visual-studio-2008 web publish


【解决方案1】:

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

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

【讨论】:

    【解决方案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 文件应该可以解决问题。

                      【讨论】:

                        猜你喜欢
                        • 2020-06-12
                        • 2014-05-11
                        • 1970-01-01
                        • 2012-02-03
                        • 1970-01-01
                        • 2014-06-04
                        • 2011-07-09
                        • 2012-08-31
                        • 2011-11-21
                        相关资源
                        最近更新 更多