gpt4 book ai didi

msbuild - 发布网站,aspnet_compiler 空引用异常

转载 作者:行者123 更新时间:2023-12-04 20:06:39 27 4
gpt4 key购买 nike

我在通过命令行发布解决方案时遇到问题。它在各种项目上间歇性地失败,但每隔一段时间就会成功。我同时收到空引用错误和“运行线程的应用程序域已被卸载”,这可能只是具有竞争条件的空引用。它似乎只在具有 Web 服务(原始 .asmx 和带有 .svc 或无文件激活的 WCF)的项目上失败。它有时会成功这一事实让我认为这不是我们代码的问题,尽管我们可以做一些更改来减轻根本原因(无论是什么)。

我尝试/检查的内容:

  • 我跑了tfpt scorch清理任何本地更改,包括构建输出但没有成功,所以我知道这不是源目录的问题。
  • 我在 C:\Windows\Microsoft.NET\Framework\v4.0.30319\Temporary ASP.NET Files 清除了临时文件(我们在 32 位上)并且似乎更进一步,但仍然存在问题。再次发布后,目录仍然是空的,因此可能无关。
  • 使用进程监视器我发现 aspnet_compiler正在写信给 %LocalAppData%\Temp\Temporary ASP.NET Files .清除这些文件似乎有时有效,或者我很幸运,但随后又开始失败。我没有发现任何其他可能相关的内容。
  • 确保我有足够的内存,似乎没有什么区别。
  • 单线程运行msbuild,没有区别
  • 从命令行运行 aspnet_compiler(从 MSBuild 日志输出中获取命令),总是成功
  • 没有压缩文件夹
  • 我使用的是最新的稳定版 Visual Studio(VS 2013 更新 2),但这无关紧要,因为我是从命令行运行的,并且使用的可执行文件位于框架目录中。
  • 一些失败的项目中没有 App_Code 文件夹

  • 构建输出没有提供任何好的信息,所以我设置了 DebugDiag 以在崩溃时输出。结果如下:
    DetailID = 1
    Count: 1
    Type: System.NullReferenceException
    Message:
    Stack:
    System.Web.Compilation.DiskBuildResultCache.CacheBuildResult(System.String, System.Web.Compilation.BuildResult, Int64, System.DateTime)
    System.Web.Compilation.BuildManager.CacheBuildResultInternal(System.String, System.Web.Compilation.BuildResult, Int64, System.DateTime)
    System.Web.Compilation.WebDirectoryBatchCompiler.CacheAssemblyResults(System.Web.Compilation.AssemblyBuilder, System.CodeDom.Compiler.CompilerResults)
    System.Web.Compilation.WebDirectoryBatchCompiler.CompileAssemblyBuilder(System.Web.Compilation.AssemblyBuilder)
    System.Web.Compilation.WebDirectoryBatchCompiler.CompileAssemblyBuilderParallel(System.Collections.ICollection)
    System.Web.Compilation.WebDirectoryBatchCompiler.CompileNonDependentBuildProviders(System.Collections.ICollection)
    System.Web.Compilation.WebDirectoryBatchCompiler.Process()
    System.Web.Compilation.BuildManager.BatchCompileWebDirectoryInternal(System.Web.Hosting.VirtualDirectory, Boolean)
    System.Web.Compilation.BuildManager.BatchCompileWebDirectory(System.Web.Hosting.VirtualDirectory, System.Web.VirtualPath, Boolean)
    System.Web.Compilation.BuildManager.PrecompileWebDirectoriesRecursive(System.Web.Hosting.VirtualDirectory, Boolean)
    System.Web.Compilation.BuildManager.PrecompileAppInternal(System.Web.VirtualPath, System.Collections.Generic.IEnumerable`1<System.String>)
    System.Web.Compilation.BuildManager.PrecompileApp(System.Web.VirtualPath, System.Collections.Generic.IEnumerable`1<System.String>)
    System.Web.Compilation.BuildManager.PrecompileApp(System.Web.Compilation.ClientBuildManagerCallback, System.Collections.Generic.IEnumerable`1<System.String>)
    System.Web.Compilation.BuildManagerHost.PrecompileApp(System.Web.Compilation.ClientBuildManagerCallback, System.Collections.Generic.List`1<System.String>)
    [GCFrame]
    [GCFrame]
    [ContextTransitionFrame]
    [GCFrame]
    [GCFrame]
    [GCSafeCollectionFrame]
    [GCSafeCollectionFrame]
    [GCSafeCollectionFrame]
    [GCSafeCollectionFrame]
    [GCSafeCollectionFrame]
    [GCSafeCollectionFrame]
    [GCSafeCollectionFrame]
    [TPMethodFrame]
    *** WARNING: Unable to verify checksum for C:\Windows\assembly\NativeImages_v4.0.30319_32\System.Web\3d247ccfb800c38a29cf91c27a6339da\System.Web.ni.dll
    Module load completed but symbols could not be loaded for C:\Windows\assembly\NativeImages_v4.0.30319_32\System.Web\3d247ccfb800c38a29cf91c27a6339da\System.Web.ni.dll
    System.Web.Compilation.ClientBuildManager.PrecompileApplication(System.Web.Compilation.ClientBuildManagerCallback)
    *** ERROR: Module load completed but symbols could not be loaded for C:\Windows\Microsoft.NET\Framework\v4.0.30319\aspnet_compiler.exe
    [GCFrame]


    DetailID = 2
    Count: 1
    Type: System.NullReferenceException
    Message: Object reference not set to an instance of an object.
    Stack:
    [GCFrame]
    [GCFrame]
    [GCFrame]
    [GCSafeCollectionFrame]
    [GCSafeCollectionFrame]
    [GCSafeCollectionFrame]
    [GCSafeCollectionFrame]
    [GCSafeCollectionFrame]
    [GCSafeCollectionFrame]
    [GCSafeCollectionFrame]
    [TPMethodFrame]
    System.Web.Compilation.ClientBuildManager.PrecompileApplication(System.Web.Compilation.ClientBuildManagerCallback, Boolean)
    System.Web.Compilation.ClientBuildManager.PrecompileApplication(System.Web.Compilation.ClientBuildManagerCallback)
    System.Web.Compilation.Precompiler.Main(System.String[])
    [GCFrame]

    我发现其他人有类似的问题,但他们要么没有得到答复,要么解决方案对我不起作用。还有更多想法吗?

    编辑:
    这是我正在使用的命令行:
    "C:\Program Files (x86)\MSBuild\12.0\bin\MSBuild.exe" Solution.sln /t:Build /m:1 /p:Configuration=Prod /p:Platform="Mixed Platforms" /p:DeployOnBuild=true /p:PublishProfile=Prod /p:AutoParameterizationWebConfigConnectionStrings=false /v:diag > out.txt

    这是一些控制台输出(重定向到文件):
    Target "AspNetPreCompile: (TargetId:3773)" in file "C:\Program Files (x86)\MSBuild\Microsoft\VisualStudio\v12.0\Web\Transform\Microsoft.Web.Publishing.AspNetCompileMerge.targets" from project "C:\Source\Project\Project.csproj" (target "PipelineAspNetCompileMergePhase" depends on it):
    Task "AspNetCompiler" (TaskId:2474)
    Task Parameter:PhysicalPath=C:\Source\Project\obj\x86\Release\AspnetCompileMerge\Source (TaskId:2474)
    Task Parameter:TargetPath=C:\Source\Project\obj\x86\Release\AspnetCompileMerge\TempBuildDir (TaskId:2474)
    Task Parameter:VirtualPath=/ (TaskId:2474)
    Task Parameter:Debug=False (TaskId:2474)
    Task Parameter:Updateable=False (TaskId:2474)
    Task Parameter:ToolPath=C:\Windows\Microsoft.NET\Framework\v4.0.30319 (TaskId:2474)

    C:\Windows\Microsoft.NET\Framework\v4.0.30319\aspnet_compiler.exe -v / -p C:\Source\Project\obj\x86\Release\AspnetCompileMerge\Source C:\Source\Project\obj\x86\Release\AspnetCompileMerge\TempBuildDir (TaskId:2474)
    Microsoft (R) ASP.NET Compilation Tool version 4.0.30319.34209 (TaskId:2474)
    Utility to precompile an ASP.NET application (TaskId:2474)
    Copyright (C) Microsoft Corporation. All rights reserved. (TaskId:2474)
    (TaskId:2474)
    ASPNETCOMPILER : error ASPRUNTIME: Object reference not set to an instance of an object. [C:\Source\Project\Project.csproj]
    The command exited with code 1. (TaskId:2474)

    Done executing task "AspNetCompiler" -- FAILED. (TaskId:2474)
    Done building target "AspNetPreCompile" in project "Project.csproj" -- FAILED.: (TargetId:3773)

    如您所见,msbuild 诊断输出并不是很有帮助。

    编辑 2:
    试着看看我是否可以调试 aspnet_compiler对此有更多的了解。我开始了 gflags.exe启用自动附加到调试器。我能够打破 NullReferenceException但我在加载 System.Web 的符号时遇到问题.它来自 C:\Windows\Microsoft.Net\assembly\GAC_32\System.Web\v4.0_4.0.0.0__b03f5f7f11d50a3a\System.Web.dll .

    从堆栈跟踪来看,这种方法失败了:
    internal override void CacheBuildResult(string cacheKey, BuildResult result, long hashCode, DateTime utcStart)
    {
    if (!result.CacheToDisk)
    return;
    if (HostingEnvironment.ShutdownInitiated)
    {
    BuildResultCompiledAssemblyBase compiledAssemblyBase = result as BuildResultCompiledAssemblyBase;
    if (compiledAssemblyBase == null)
    return;
    this.MarkAssemblyAndRelatedFilesForDeletion(compiledAssemblyBase.ResultAssembly.GetName().Name);
    }
    else
    new PreservationFileWriter(this.PrecompilationMode).SaveBuildResultToFile(this.GetPreservedDataFileName(cacheKey), result, hashCode);
    }

    因此,其中任何一个都可能为空并导致异常: result , HostingEnvironment , compiledAssemblyBase .

    最佳答案

    我知道这是一篇旧帖子,但以防万一有人会觉得这很有用:

    对我来说这个问题的原因是迈克菲防病毒软件

    ASPNETCOMPILER(0,0): Error ASPRUNTIME: Object reference not set to an instance of an object

    关于msbuild - 发布网站,aspnet_compiler 空引用异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24616801/

    27 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com