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

时间:2010-02-18 14:07:56

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

我厌倦了这个错误。我在网上搜索并尝试了所有可能的建议,我可以找到这个错误。

  1. 删除app_code,构建,添加文件,发布。 (没用)
  2. 删除临时的asp.net文件(不起作用)
  3. 最后,我甚至尝试了命令行并获得以下堆栈跟踪。

    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
    

13 个答案:

答案 0 :(得分:8)

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

我设法通过在我的网站上打开属性页,打开“MSBuild选项”选项卡,并取消选中“允许此预编译网站可更新”选项,然后点击“全部保存”,在VS 2012中修复此问题。

答案 1 :(得分:7)

我有相同的经验并从解决方案目录树中删除压缩标志,再次设置编译器。

答案 2 :(得分:5)

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

答案 3 :(得分:4)

我知道这是一个旧帖子,但万一有人会发现这个有用:

这个问题的原因是 McAfee防病毒

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

答案 4 :(得分:2)

在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问题已解决。

答案 5 :(得分:1)

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

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

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

答案 6 :(得分:1)

我有类似的问题。该应用程序将在IDE中构建和运行,但无法发布;在“合并dll进入单一装配”阶段进行调整。在研究了aspnet_merge.exe之后,我发现通过取消选中发布选项中的'emit debug information'复选框来解决问题。

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

希望这有帮助。

安德鲁

答案 7 :(得分:1)

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

这些文件可以安全删除,并在预编译期间创建。有关详细信息,请查看此MSDN link

答案 8 :(得分:0)

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

StackTrace提到了一些授权和cookie的事情。我在InCognito mode中打开了这个Web应用程序(它没有持久存储cookie存储)并且发现应用程序正在运行。

希望它对某人有帮助。

答案 9 :(得分:0)

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

VS2012 asp.net网络表单应用 - &gt;升级到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属性被删除,或者即使它曾经存在,但是你可以使用这一个设置来打开和关闭此错误。

答案 10 :(得分:0)

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

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

答案 11 :(得分:0)

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

答案 12 :(得分:-2)

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