由于 .suo 文件,发布我的 Web 应用程序可能需要很长时间才能完成

Publishing my web application can take long time to accomplish because of the .suo file

提问人:Alexandre Jobin 提问时间:9/15/2011 最后编辑:HashAlexandre Jobin 更新时间:9/19/2023 访问量:12223

问:

我有一个 Web 应用程序项目,我通过 Visual Studio 2010 将其发布到我的服务器。我的问题是,它可能需要很长时间才能真正发布它。也许10分钟!它不会每次都发生,而是经常发生。

以下是我尝试发布时在 Output -> Build 控制台中的内容摘要:

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

enter image description here

进程资源管理器

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

enter image description here

进程监视器

使用进程监视器,我监视了clr.dll的TID!StrongNAmeSignatureVerification,我有很多 redondant 事件。在超过 5 分钟的时间里,该任务尝试访问计算机上没有的文件。他正在搜索 Microsoft.Build.Task.resources.dll。这就像发布任务一次又一次地尝试不存在的东西一样。供您参考,我正在使用 Windows 7 法语Visual Studio 2010 英语。在屏幕截图上,您会看到 10 多个事件中的 2000 多个事件!

enter image description here

有关我的设置的更多信息

以下是一些有助于识别问题的信息:

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

更新 2011-09-23

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

只是为了进行另一个测试,我在发布缓慢时备份了 .suo 文件并将其删除。现在发布速度很快。如果我将 .suo 文件复制回他的位置并重新打开 Visual Studio,发布将再次变慢。所以一切似乎都指向那个文件。

对此有任何想法吗?

asp.net visual-studio-2010 asp.net-mvc-3 发布 发布

评论

0赞 rlb.usa 9/15/2011
如果您想了解网络方面到底发生了什么,您可以尝试 WireShark。(请记住,如果 VS 使用 100% 的 CPU,一切都会运行得很慢)
1赞 Alexandre Jobin 9/17/2011
@rlb.usa,我运行过 Fiddler & Wireshark,但我什么也没找到,但我对我的问题有了新的线索。我使用过进程监视器,发现有很多可重复的事件。我已经编辑了描述。
0赞 davethecoder 9/17/2011
我敢肯定,如果你正在运行强名称,那么你一定需要它们,但如果它有任何帮助,你有没有看到这个 codeproject.com/KB/security/StrongNameExplained.aspx 它可能会有所帮助,只是运行一些要求并检查你是否都设置正确,以便做到这一点。
0赞 Alexandre Jobin 9/20/2011
@minus4,谢谢你的链接,但根据我这个周末所做的所有研究,它似乎不是一个强有力的名称问题。事实上,这是一个非常奇怪的问题,因为今天,我的发布速度非常快,我还没有改变任何东西:)
0赞 mike 5/8/2015
我在两个不同的客户站点上遇到了同样的问题,您删除 *.suo 文件的建议为我解决了这个问题,而且它似乎没有给我带来任何其他问题。

答:

0赞 AnandMohanAwasthi 12/1/2011 #1

试试这个方法

要在开发或生产服务器上部署版本,请按照以下步骤操作。

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

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

0赞 rAhulD 6/5/2014 #2

我不确定这是否是 suo 文件造成的,但对我来说,解决了问题。

编译后,发布将调用 aspnet_compiler,这实际上需要更长的时间,因为它正在为所有代码生成自定义 dll。

但是,请检查您的 VSPackage,是否有任何为某些解释而编写的包,这些包可能会中断您的发布。

0赞 Mark Roberts 12/15/2021 #3

我刚刚遇到了同样的问题,发布到网络共享,并发现在 Windows 资源管理器中复制文件也非常慢。当我压缩构建文件夹并将其复制到它时,它花了几秒钟。我得出的结论是,一端或另一端的 VPN 或防病毒软件或防火墙正在为每次文件传输增加一些开销。

评论

2赞 Tamil Selvan 12/15/2021
请使用评论部分进行讨论和疑问,而不是答案
0赞 kgw 3/22/2022
该用户没有这样做的声誉。
0赞 Russ Ebbing 5/7/2022 #4

Windows 传输 1 个大文件比传输数千个小文件快得多,即使净大小相同。所以试试这个:

  1. 发布到本地文件(而不是直接发布到 IIS 文件共享)。
  2. 压缩本地文件(这些文件可以很好地压缩)。
  3. 使用文件资源管理器,删除 IIS 文件共享文件。
  4. 将本地压缩文件复制/粘贴到网络共享。
  5. 使用文件资源管理器解压缩服务器上的文件。 (您不必远程访问服务器即可执行此操作)

这完成了几件事。1)它的1个大文件,而不是数千个小文件。2) 压缩文件将被压缩 50% 到 80%,因此通过网络传输的数据传输将小得多。

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

0赞 Mitko 4/20/2023 #5

我遇到了类似的问题,Visual Studio 2022 需要 30 分钟才能发布到文件夹。投资问题后,我发现 bin 和 obj 文件夹中有超过 100GB 的图像。删除这些文件夹后,发布 ASP.NET 网站需要 10 秒钟。