每当我为特定的项目启动Visual Studio 2015发布Web对话(或Visual Studio 2013,两者都有相同的问题)时,它需要大约20-30秒才能打开。同样,当我在发布配置文件之间切换时,当我切换到特定的时,它需要相同的时间。当我切换到列表中的配置文件A(来自配置文件B)时,它需要与启动对话本身时相同的时间。当我从配置文件A切换到配置文件B时,它根本不需要任何时间。
有没有人对此有任何想法?仅在这个问题上我每天就会失去20-30分钟的开发时间。
我已检查过两个配置文件中的XML(.pubxml
),除了服务器上站点的名称和Web.config
SQL字符串转换结果外,它们是相同的。 (它们都发布到相同的服务器端点,两者都预编译了所有页面/控件设置为一个程序集,唯一的区别是配置文件的名称和站点的名称。)< / p>
我还检查了个人资料.user
文件,两个再次相同。我不知道这里可能出现什么问题。
请注意,发布不需要花费很多时间。配置文件A需要与配置文件B一样长。
此外,在我完全重新安装Windows之前,即使在我的旧Visual Studio 2015安装中也存在此问题。 (当我升级到Windows 10时,我确实重新安装了Windows 。)
我对所有想法持开放态度,我可能会重新安装Visual Studio 2015 再次以查看问题是否消失。
进一步说明:在加载对话框时,它将Visual Studio完全锁定 。
更新:完全重新安装Visual Studio并没有解决问题。
另一个更新:打开对话框时,Visual Studio偶尔会崩溃。
答案 0 :(得分:15)
TL; DR:作为此问题的解决方法,找到继承自DbContext
的{{1}}类,并将基类构造函数从IdentityDbContext<>
更改为{解决方案中的{1}}和执行完全重建。这将禁用对Entity 1.0.0的检查,这会导致从Publish Web运行时超时。
调试结果:在多次调试之后,我们找到了根本原因。
base("DefaultConnection")
类,用反射定位它并在VisualStudio的过程中调用它。base("DefaultConnection", false)
将使用DbContext
而不是ConnectionManager
,因此忽略了devenv.exe.config
及其连接字符串。web.config
,it will call web.config
的形式致电IdentityDbContext<>
,(根据第二个参数)will try to detect是否您的数据库使用Identity 1.0.0架构。base("DefaultConnection")
的连接名称标识(通常是base("DefaultConnection", true)
)IdentityDbContext<>
,因此具有此名称的连接字符串将不可用。对于不可用的连接字符串,实体将调用"DefaultConnection"
。同样,您无法自定义它,因为未加载web.config
。默认情况下,DefaultConnectionFactory
将尝试使用web.config
=您的连接名称连接到DefaultConnectionFactory
,可能会产生以下连接字符串:
.\SQLEXPRESS
如果您没有安装SQL Express,那将导致SQL异常,这将尝试连接,直到超时到期为止。
因此,罪魁祸首是Publish Web,它通过反射错误地运行程序集而不加载相应的Initial Catalog
。
我们已经开始调试配方: 让我们看看里面发生了什么。
Data Source=.\SQLEXPRESS;Initial Catalog=DefaultConnection;Integrated Security=True;MultipleActiveResultSets=True
web.config
开始)<强>更新强>
现在OSR的分析无法分析转储中的堆栈,我们似乎必须这么做。
一次性准备
Context Menu on Visual Studio's process | Create Dump | Create Minidump...
作为Windows SDK的一部分(清除所有其他复选框,不安装您不需要的内容)STACK_TEXT
在Debugging Tools For Windows
写
WinDBG (X86)
按File | Symbol File Path...
分析转储
srv*C:\Symbols*http://msdl.microsoft.com/download/symbols
并打开转储。File | Save workspace
并按Enter键。