发布我的Web应用程序可能需要很长时间才能完成,因为.suo文件的存在。

17

我有一个Web应用程序项目,我通过Visual Studio 2010发布到我的服务器上。问题是在实际发布之前可能需要很长时间,也许10分钟!这并不是每次都发生,但非常频繁。

以下是我尝试发布时在 输出->生成 控制台中的摘要:

  • 项目正在编译 - OK
  • 连接到C:\Users\{user}\Desktop\MyProjectTest...(这里可能需要长达10分钟
  • 正在发布文件...

输入图像描述

Process Explorer

当我打开ProcessExplorer时,我看到devenv.exe占用了所有CPU。当我打开此进程时,我看到消耗所有CPU的任务为clr.dll!StrongNameSignatureVerification+0x11ee1。此任务完成后,大约10分钟后,发布任务会快速完成。

输入图像描述

Process Monitor

使用Process Monitor,我已经监视了clr.dll!StrongNAmeSignatureVerification的TID,并且我有许多冗余事件。五分钟以上,该任务尝试访问我电脑上没有的文件。他正在搜索Microsoft.Build.Task.resources.dll。就好像发布任务一遍又一遍地尝试着不存在的东西。供您参考,我正在使用Windows 7 FrenchVisual Studio 2010 English。在屏幕截图中,您可以看到大约2000个事件中的10个相同事件!

输入图像描述

关于我的设置的更多信息

以下信息有助于确定问题:

  • 我的应用程序是使用MVC3构建的
  • 我有几个第三方的dll库,其中一些是签名的
  • 我使用文件系统方法进行发布
  • 我尝试在本地计算机上发布,但问题依然存在,因此这不是我的计算机和服务器之间的网络问题
  • 我已在Windows 7 x86和x64法语版上进行了测试
  • 我的Visual Studio 2010 SP1是英文版

更新 2011-09-23

我现在知道如何解决这个问题但是我不知道是什么原因导致的。如果我删除 **.suo 文件(与 .sln 文件处于同一级别),然后重新打开 Visual Studio,则发布将非常快速。因此,在每次发布变慢时重新初始化 .suo 文件似乎可以解决该问题。

为了进行另一个测试,当发布变慢时,我备份了 .suo 文件并将其删除。现在发布很快。如果我将 .suo 文件复制回原来的位置并重新打开 Visual Studio,则发布将再次变慢。因此,所有的迹象似乎指向了那个文件。

对此有什么想法吗?


如果您想查看网络方面发生的情况,可以尝试使用 WireShark。(请记住,如果 VS 使用了 100% 的 CPU,所有操作都会变慢) - rlb.usa
1
@rlb.usa,我已经运行了Fiddler和Wireshark,但是除了一条新的线索外,我什么都没找到。我使用了Process Monitor并发现有很多冗余事件。我已编辑了描述。 - Alexandre Jobin
我相信如果你正在运行强名称,那么你一定需要它们,但是如果有帮助的话,你是否看过这个网址:http://www.codeproject.com/KB/security/StrongNameExplained.aspx。它可能会帮助你浏览一些要求并检查你是否已经准备好了。 - davethecoder
@minus4,感谢您提供的链接,但是在我这个周末所做的所有研究中,似乎这不是一个强名称问题。事实上,这是一个非常奇怪的问题,因为今天我的发布速度非常快,而且我还没有改变任何东西 :) - Alexandre Jobin
我在两个不同的客户现场遇到了同样的问题,您建议删除*.suo文件已经为我解决了这个问题,并且似乎没有引起其他任何问题。 - mike
你尝试过删除 *.suo 文件吗? - Kiquenet
5个回答

0

我不确定是不是suo文件导致的问题,但对我来说,this解决了这个问题。

编译后,发布将调用aspnet_compiler,它会生成所有代码的自定义dll,因此需要更长时间。

但是请检查您的VSPackages,是否有为某些解释或其他操作编写的包,可能会中断您的发布。


0
我曾经遇到过类似的问题,Visual Studio 2022 发布到文件夹需要30分钟的时间。在排查问题后,我发现 bin 和 obj 文件夹中有超过100GB的图像文件。删除这些文件夹后,ASP.NET网站发布只需要10秒钟。

0

在传输文件时,Windows处理一个大文件比处理成千上万个小文件要快得多,即使它们的总大小相同。因此可以尝试以下方法:

  1. 将文件发布到本地文件(而不是直接发布到IIS文件共享)。
  2. 压缩本地文件(这些文件会压缩得很好)。
  3. 使用文件资源管理器删除IIS文件共享中的文件。
  4. 复制/粘贴本地已压缩的文件到网络共享中。
  5. 使用文件资源管理器在服务器上解压文件。(您无需远程连接服务器即可完成此操作)

这样做有几个好处:1)只有一个大文件,而不是成千上万个小文件;2)压缩后的文件将压缩50%至80%,因此通过网络传输的数据量就会更小。

如果需要备份,可以采用相反的方法,但不需要发布。我通常使用L7.zip,但内置的Windows zip也可以使用。我不知道为什么Visual Studio不能以编程方式执行此操作。


0

我刚刚遇到了同样的问题,尝试将文件发布到网络共享时发现在Windows资源管理器中复制文件也非常缓慢。但是当我将构建文件夹压缩并复制到另一个位置时只需要几秒钟。我得出结论,VPN、杀毒软件或防火墙在文件传输过程中增加了一些开销。


2
请使用评论区进行讨论和疑问,而不是答案。 - Tamil Selvan
该用户没有足够的声望来这样做。 - kgw

0

尝试这种方式

为了在开发或生产服务器上部署发布,请按照以下步骤进行。

  1. 安装Web Deployment MSI。
  2. 在解决方案资源管理器下右键单击您的项目,添加Web Deployment项目(此处我不使用转换为Web应用程序或发布)
  3. 然后编译文件。这将在您的项目目录中创建一个文件夹,其中包含要部署到服务器上的所需文件。
  4. 备份您的虚拟目录并从inetpub中删除虚拟目录以及文件。
  5. 进入Inet mgr,在运行中键入inetmgr。
  6. 在默认网站下创建虚拟目录,在inetpub中保留已部署的文件并浏览文件。
  7. 允许适当的访问权限,如读取、运行脚本和浏览。就这样

如果您发现它有用,请将其标记为答案,否则请告诉我...


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接