gpt4 book ai didi

visual-studio - Visual Studio Publish Web Dialogue 加载时间过长

转载 作者:行者123 更新时间:2023-12-03 22:23:09 25 4
gpt4 key购买 nike

每当我为特定项目启动 Visual Studio 2015 Publish Web Dialogue(或 Visual Studio 2013,两者都有相同的问题)时,它需要大约 20-30 秒才能打开。同样,当我在发布配置文件之间切换时,切换到特定配置文件所需的时间也相同。当我切换到列表中的配置文件 A(从配置文件 B)时,它花费的时间与启动对话本身时的时间相同。当我从配置文件 A 切换到配置文件 B 时,它根本不需要任何时间。

有没有人对此有任何想法?仅在这个问题上,我每天就失去 20-30 分钟的开发时间。

我检查了两个配置文件上的 XML ( .pubxml ),除了服务器上的站点名称和 Web.config 之外,它们是相同的。 SQL 字符串转换结果。 (它们都发布到同一个服务器端点,两者都被预编译,所有页面/控件都设置为一个程序集,唯一的区别是配置文件的名称和站点的名称。)

我还查看了简介 .user文件,并且两者再次相同。我不知道这里可能是什么问题。

请注意,发布根本不需要很多时间。配置文件 A 的发布时间与配置文件 B 的发布时间一样长。

此外,在我完全重新安装 Windows 之前,即使在我的旧 Visual Studio 2015 安装中也存在此问题。 (当我升级到 Windows 10 时,我确实完全重新安装了 Windows。)

我愿意接受任何想法,我可能会重新安装 Visual Studio 2015 再次看看问题是否消失。

进一步说明:在加载对话框时,它会完全锁定 Visual Studio。

更新:完全重新安装 Visual Studio 并没有解决问题。

另一个更新:有时 Visual Studio 在打开对话框时会完全崩溃。

最佳答案

TL;博士:要解决此问题,请找到您的 DbContext继承自 IdentityDbContext<> 的类并从 base("DefaultConnection") 更改基类构造函数至 base("DefaultConnection", false)进行全面重建 在您的解决方案上。这将禁用对 Entity 1.0.0 的检查,这会导致从 Publish Web 运行时超时。

调试结果:经过多次调试,我们找到了根本原因。

  • 当您在项目中使用 Code-First 运行 Publish Web 时,它会想要枚举可用的连接字符串以检测您的数据库。
  • 为此,它会调用您的 DbContext类,使用反射定位它并在 VisualStudio 的进程中调用它。
  • 不幸的是,由于它是在 VisualStudio 中执行的,ConnectionManager将使用 devenv.exe.config而不是您的 web.config ,因此您的 web.config其连接字符串被忽略。
  • 只要您调用IdentityDbContext<>base("DefaultConnection") 的形式, it will call base("DefaultConnection", true) ,其中(根据第二个参数)will try to detect您的数据库是否使用 Identity 1.0.0 架构。
  • 为此,它将尝试连接到您的数据库,由传递给 IdentityDbContext<> 的连接名称标识。 (通常是 "DefaultConnection" )
  • web.config未加载,具有此类名称的连接字符串将不可用。
  • 对于不可用的连接字符串,实体将调用 DefaultConnectionFactory .同样,您不能自定义它,如 web.config未加载。默认情况下,DefaultConnectionFactory将尝试连接到 .\SQLEXPRESSInitial Catalog = 您的连接名称,可能会产生以下连接字符串:
    Data Source=.\SQLEXPRESS;Initial Catalog=DefaultConnection;Integrated Security=True;MultipleActiveResultSets=True
  • 如果您没有安装 SQL Express,这将导致 SQL 异常,它将重试无用的连接,直到超时到期。

  • 因此,罪魁祸首是 Publish Web,它通过反射错误地运行程序集,而没有加载相应的 web.config。 .



    我们开始的调试方法:
    让我们弄清楚里面发生了什么。
  • 做一些转储 期间卡住(假设每 2-3 秒转储一次)。要进行转储,我认为最简单的方法是:下载并运行 SysInternals Process Explorer ,并使用 Context Menu on Visual Studio's process | Create Dump | Create Minidump...
  • 分析转储。最简单的方法是使用 OSR's instant analyze
  • 检查转储中的堆栈(从分析结果中的 STACK_TEXT 开始)
  • 堆栈上的函数名称已经可以告诉您出了什么问题。
  • 如果本指南对您没有帮助,我将需要自己查看转储。请注意,转储将包含 VS 内存的一部分,其中可能包含一些个人信息,例如文件路径。

  • 更新

    既然 OSR 的分析无法分析转储中的堆栈,看来我们将不得不以艰难的方式去做。

    一次性准备
  • 安装 Debugging Tools For Windows作为 Windows SDK 的一部分(清除所有其他复选框以不安装您不需要的内容)
  • 运行 WinDBG (X86)来自已安装的软件包
  • File | Symbol File Path...
    srv*C:\Symbols*http://msdl.microsoft.com/download/symbols
  • File | Save workspace

  • 分析转储
  • 在 WinDBG 中,按 File | Open crash dump...并打开你的转储。
  • 在底部的编辑框中,写 !analyze -v并按 Enter。
  • 检查堆栈。
  • 关于visual-studio - Visual Studio Publish Web Dialogue 加载时间过长,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32846284/

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