提问人:Alexandre Jobin 提问时间:9/15/2011 最后编辑:HashAlexandre Jobin 更新时间:9/19/2023 访问量:12223
由于 .suo 文件,发布我的 Web 应用程序可能需要很长时间才能完成
Publishing my web application can take long time to accomplish because of the .suo file
问:
我有一个 Web 应用程序项目,我通过 Visual Studio 2010 将其发布到我的服务器。我的问题是,它可能需要很长时间才能真正发布它。也许10分钟!它不会每次都发生,而是经常发生。
以下是我尝试发布时在 Output -> Build 控制台中的内容摘要:
- 项目正在编译 - OK
- 正在连接到 C:\Users{user}\Desktop\MyProjectTest...(这可能需要长达 10 分钟的时间)
- 文件正在发布...
进程资源管理器
当我打开ProcessExplorer时,我看到devenv.exe
占用了所有CPU。当我打开此进程时,我看到消耗所有 CPU 的任务是 clr.dll!StrongNameSignatureVerification+0x11ee1
。此任务完成后,10 分钟后,发布任务将快速完成。
进程监视器
使用进程监视器,我监视了clr.dll的TID!StrongNAmeSignatureVerification,我有很多 redondant 事件。在超过 5 分钟的时间里,该任务尝试访问计算机上没有的文件。他正在搜索 Microsoft.Build.Task.resources.dll
。这就像发布任务一次又一次地尝试不存在的东西一样。供您参考,我正在使用 Windows 7 法语和 Visual Studio 2010 英语。在屏幕截图上,您会看到 10 多个事件中的 2000 多个事件!
有关我的设置的更多信息
以下是一些有助于识别问题的信息:
- 我的应用程序是使用 MVC3 构建的
- 我有一些第三方dll。其中一些已签名。
- 我正在使用文件系统方法发布。
- 我尝试在本地计算机上发布,但问题也存在,因此我的计算机和服务器之间没有网络问题。
- 我已经在 Windows 7 x86 和 x64 法语版上进行了测试
- My Visual Studio 2010 SP1 是英文版
更新 2011-09-23
我现在知道如何解决这个问题,但我不知道是什么原因造成的。如果我删除 **.suo 文件(与 .sln 文件处于同一级别)并重新打开 Visual Studio,则发布速度将非常快。因此,每次发布变慢时,重新初始化 .suo 文件似乎都可以解决问题。
只是为了进行另一个测试,我在发布缓慢时备份了 .suo 文件并将其删除。现在发布速度很快。如果我将 .suo 文件复制回他的位置并重新打开 Visual Studio,发布将再次变慢。所以一切似乎都指向那个文件。
对此有任何想法吗?
答:
试试这个方法
要在开发或生产服务器上部署版本,请按照以下步骤操作。
- 安装 Web 部署 MSI。
- 右键单击解决方案资源管理器下的项目并添加 Web 部署项目(这里我不使用转换为 Web 应用程序或发布)
- 然后编译文件。这将在项目目录中创建一个文件夹,其中包含要在服务器上部署的所需文件。
- 备份您的虚拟目录,并从 inetpub 中删除虚拟目录和文件。
- 转到 Inet mgr ,在 run hit enter 中键入 inetmgr。
- 在默认网站下,创建一个虚拟目录,将部署的文件保存在 inetpub 中,然后浏览这些文件。
- 允许适当的访问,例如读取、运行脚本和浏览。就这样
如果您发现它有用,请将其标记为您的答案,否则请告诉我......
我不确定这是否是 suo 文件造成的,但对我来说,这解决了问题。
编译后,发布将调用 aspnet_compiler,这实际上需要更长的时间,因为它正在为所有代码生成自定义 dll。
但是,请检查您的 VSPackage,是否有任何为某些解释而编写的包,这些包可能会中断您的发布。
我刚刚遇到了同样的问题,发布到网络共享,并发现在 Windows 资源管理器中复制文件也非常慢。当我压缩构建文件夹并将其复制到它时,它花了几秒钟。我得出的结论是,一端或另一端的 VPN 或防病毒软件或防火墙正在为每次文件传输增加一些开销。
评论
Windows 传输 1 个大文件比传输数千个小文件快得多,即使净大小相同。所以试试这个:
- 发布到本地文件(而不是直接发布到 IIS 文件共享)。
- 压缩本地文件(这些文件可以很好地压缩)。
- 使用文件资源管理器,删除 IIS 文件共享文件。
- 将本地压缩文件复制/粘贴到网络共享。
- 使用文件资源管理器解压缩服务器上的文件。 (您不必远程访问服务器即可执行此操作)
这完成了几件事。1)它的1个大文件,而不是数千个小文件。2) 压缩文件将被压缩 50% 到 80%,因此通过网络传输的数据传输将小得多。
如果您需要备份,则是相反的相同过程,但不进行发布。我通常使用 L7.zip,但内置的 Windows zip 可以工作。我不知道为什么Visual Studio不能以编程方式执行此操作。
我遇到了类似的问题,Visual Studio 2022 需要 30 分钟才能发布到文件夹。投资问题后,我发现 bin 和 obj 文件夹中有超过 100GB 的图像。删除这些文件夹后,发布 ASP.NET 网站需要 10 秒钟。
评论