Web 窗体 - .Net Framework 4.7.2

Web forms - .Net Framework 4.7.2

提问人:GDR 提问时间:11/10/2023 最后编辑:Heretic MonkeyGDR 更新时间:11/13/2023 访问量:64

问:

我正在为一位客户更新他的 Web 应用程序 C#(以便将来迁移到更新的技术)。

有单独的配置,其中一种配置需要在发生异常时在堆栈跟踪中显示行号。生成和高级生成设置已调整(仅限 Pdb),然后部署到 Azure 应用服务。

现在,当发生错误时,会触发异常,但它仍然不显示行号。

高级构建设置

调试信息已更新为: 高级构建设置

此外,在关闭 Visual Studio(社区/专业版和企业版)2022 时,在保存更改并重新打开项目后,“调试”信息已设置回“无”。

堆栈跟踪示例:
Stacktrace:

    System.NullReferenceException: Object reference not set to an instance of an object. 
    at MyApp.SiteMaster.master_Page_PreLoad(Object sender, EventArgs e)
    at System.EventHandler.Invoke(Object sender, EventArgs e)
    at System.Web.UI.Page.OnPreLoad(EventArgs e)
    at System.Web.UI.Page.ProcessRequestMain(Boolean 
    includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint)

应为(粗体):堆栈跟踪:

    System.NullReferenceException: Object reference not set to an 
    instance of an object.
    at MyApp.SiteMaster.master_Page_PreLoad(Object sender, EventArgs e) 
    **in C:\code\MyApp\project\MyApp\Site.Master.cs:line 64**
    at System.EventHandler.Invoke(Object sender, EventArgs e)
    at System.Web.UI.Page.OnPreLoad(EventArgs e)
    at System.Web.UI.Page.ProcessRequestMain(Boolean 
    includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint)
C# asp.net Web 窗体

评论

0赞 Albert D. Kallal 11/11/2023
我会尝试将调试信息框设置为已满。它不会损害网站,并且您仍然会将网站发布为构建模式 = 发布,因此实际上不存在性能问题。我的印象是,即使没有 ..PDB 文件。但是,为什么不设置 .pdf 文件内部版本 = 完整。你注意到“迁移”,你是否将代码拉出到单独的类对象和项目中?如果是,则包括每个此类外部类的.pdb。所以,设置调试信息=完整,我很难想为什么这样做是个坏主意?(没关系)。
0赞 Albert D. Kallal 11/11/2023
您可能没有使用“应用程序”。对于应用程序,我假设您发布,这意味着该站点在部署之前已预编译。因此,发布向导将包含 .pdb 文件,即使编译为发布模式也是如此。
0赞 GDR 11/12/2023
嗨,阿尔伯特,谢谢你的回答。不幸的是,这也无济于事。我已将每个(项目/类)相同的配置设置设置为“完整”。保存所有关闭 VS 的项目,然后重新打开将恢复为无(因此 Full 再次消失)。接下来,我尝试再次设置它,然后构建,然后发布。PDB 不被带走。但是,PDB 文件确实存在于 Bin 文件夹中。我还要求另一位开发人员在他的 VS 安装中做同样的事情。结果完全相同。
0赞 GDR 11/12/2023
经过进一步调查,似乎更改为 Pdb-Only 或 Full 甚至不会创建 PDB 文件。还有其他任何地方可能会覆盖这一点吗?此外,我还选中了“打包/发布 Web”选项卡,并且未选中“排除生成的调试文件”。
0赞 Albert D. Kallal 11/13/2023
如果设置未保存,则任何有效测试的所有投注都将关闭。首先必须解决缺乏储蓄的问题,否则这是浪费时间。当您注意到/谈论未保存的设置时,您是在谈论一个项目中存在的多个项目,还是只是说对于这个项目,这些设置不起作用且不保存?这听起来像是复制/解压缩项目时的一些权限问题。我总是会以管理员身份启动 VS,看看是否有帮助。因此,当您声明选项不保存时,大量浪费时间来尝试选项

答:

0赞 GDR 11/13/2023 #1

经过进一步调查,配置文件似乎有些“损坏”。即使在保存后,任何新的更改都会被丢弃。 该解决方案有多个项目(Web、类等),适用于任何项目。尽管默认的调试/发布配置文件不是问题。

为了解决这个问题,我不得不做一些重构:

  1. 从解决方案中删除有故障的配置文件
  2. 执行以清理任何剩菜Get-Project -All | Foreach { $_.ConfigurationManager.DeleteConfigurationRow("PROFILENAME") }
  3. 创建新的配置文件(注意:不要使用与已删除配置文件相同的名称,否则也无法正常工作)
  4. 在解决方案上设置配置(生成)Set the configuration on the solution (Build)
  5. 更新每个项目的生成配置文件
  6. 重命名/重新创建每个项目中的 App.XXXX.config / Web.XXXX.config 文件(如果适用)。
  7. 更新发布描述文件以使用新的配置文件。

Once all this is done, I could make changes to the build profile and build with the generation of the PDB. Better to be safe than sorry, I did this in a separate branch!!! Just to be on the safe side.