6

我正在比较它 Java,您可以在其中以调试模式启动应用程序服务器,然后将 IDE 附加到服务器。您可以“即时”更改代码,而无需重新启动服务器。只要您的更改不影响任何方法签名或字段,您就可以重新编译一个类,应用程序服务器(servlet 容器)将重新加载该类。

我想这在 ASP.NET 中是不可能的,因为所有类都打包到程序集中,并且您不能卸载/重新加载程序集,可以吗?

因此,当您将 .aspx 页面和程序集部署到 GAC 并且您的代码隐藏更改时,您必须重新部署程序集并重置 IIS。我特别在谈论 Sharepoint 应用程序,我不确定您是否必须为私有程序集执行 iisreset,但我想您也必须这样做。

因此,我想用代码背后的代码调试 aspx 页面的最佳方法是在主动调试时摆脱代码隐藏并移入页面,然后当它或多或少工作时将其移回代码隐藏。(这仅适用于 Sharepoint 中的应用程序页面,站点页面不允许内联代码)

您如何处理 ASP.NET 应用程序的调试以减少耗时?

4

8 回答 8

5

来自Matt Smiths关于如何使用 sharepoint 进行 F5 调试的博客。一个很酷的把戏。

  1. 在 Visual Studio 中创建一个 Web 应用程序项目(文件 -> 新建 -> 项目 -> ASP.Net Web 应用程序,而不是文件 -> 新建 -> 网站)。
  2. 将 .csproj 和 .csproj.user 文件以及 Properties 文件夹移动到 C:\inetpub\wwwroot\wss\virtualdirectories\,其中是与您想要访问的 SharePoint 网站对应的 Web 应用程序的名称或编号调试。
  3. 将项目附加到现有解决方案(例如 STSDEV 项目)。
  4. 设置为启动项目(右键项目名称,“设置为启动项目”)。
  5. 访问项目属性(右键单击项目名称,“属性”)并单击
  6. 在“服务器”设置下,单击“使用 IIS Web 服务器”,然后输入您要调试的 SharePoint Web 应用程序的 URL,例如http://mymachine:99
于 2008-10-07T01:29:46.927 回答
4

是的,私有程序集不需要重置IIS。所以你应该只是将新版本xcopy到应用程序的 Bin 目录并刷新页面(例如,像我一样通过 VS post build 事件)。但也有一些取舍。您应该降低应用程序 web.config 文件中的信任级别:

<system.web>
    ...
    <trust level="WSS_Medium" originUrl="" />
    ...
</system.web>

顺便一提。我不建议这样部署。这只是舒适的写测试调试周期长度的解决方法。

于 2008-08-28T10:27:21.170 回答
3

If you are using the GAC, you can at least do iisapp.vbs /a "App Pool Name" /r instead of iisreset (it's quicker to recycle a single app pool than to restart IIS).

于 2008-09-02T19:31:37.140 回答
1

首先,在运行 SharePoint 的计算机上进行开发。最好,这意味着在 Virtual PC 或 VMWare 上运行 Windows Server 2003。这将使您可以直接部署和调试 SharePoint 代码,而不必在服务器之间复制文件并使用远程调试器。

使用 VS 插件来简化部署和调试过程。我一直在使用WSPBuilder,但我认为还有其他的。WSPBuilder 具有部署解决方案、将它们打包为 WSP 并将调试器附加到本地 IIS 进程的命令。它不允许您即时添加/删除程序集,但您可以设置断点并通过 VS 中的即时窗口运行代码。

根据您的生产服务器的配置方式,通常最好在具有完全/信任安全设置的服务器上进行开发,包括禁止 ASPX 文件中的代码块。这使调试变得更加困难,但它减少了您在代码最终部署到生产环境时遇到的令人讨厌的意外的数量。

于 2008-10-07T12:20:36.007 回答
0

您可以“即时”更改您的代码,而无需重新启动服务器

如果您创建一个网站项目(而不是一个 Web 应用程序项目),您可以使用 ASP.net 完成此操作。使用网站项目,您可以将更改发布到代码隐藏,而无需刷新服务器上的任何内容,并且服务器会为您完成所有代码更改的编译工作。有关这方面的更多信息,请参见此处

这也应该可以解决您在将程序集部署到 GAC 时遇到的困难。由于服务器处理网站项目的所有编译,因此您不必在更改文件时重新部署任何程序集。

于 2008-08-28T09:51:23.080 回答
0

使用自动化测试框架 (NUnit) 编写集成测试。这并不适用于所有情况,但是当然,这取决于您要测试的内容。

如果您还安装了 TestDriven.NET,则可以使用调试器运行单独的测试。这很有帮助。

于 2008-10-07T18:14:55.370 回答
0

WSPBuilder Extensions 有一个“部署到 GAC”快捷方式,不幸的是它对我不起作用。但这是一种非常快速的编码->编译->测试的方法。

如果您不使用 WSPBuilder Extensions,则可以改为打开命令提示符并运行

gacutil /u yourassemblynamegoeshere gacutil /i yourdllgoeshere.dll

如果您经常这样做,您可以将其放在构建后事件或批处理文件中。另外,我不清楚 gacutil /u (首先删除 DLL)是否是必要的。

于 2008-10-07T18:17:42.477 回答
0

你似乎想要做的是告诉 Sharepoint“当我开始在 Visual Studio 中调试时,使用在项目的 /bin/debug 目录中编译的 DLL 版本,而不是在GAC。” 我还没有解决这个问题,但这是我调试 Sharepoint 的方法。

开发者机器是Win2008、IIS 7、MOSS 2007、VisStudio 2008,安装了WSP Builder。在VS2008里面,增加了一个按钮附加到w3p.exe进程,安德鲁的HOWTO附加到w3p

解决方案文件有两个项目:
* 第一个项目是部署所有应用程序页面的 .WSP,包括 DLL。使用 WSPBuilder 菜单项来处理 .WSP 创建和部署。
* 第二个项目是用于页面后面的 DLL。

如果您希望将 DLL 定期复制到 GAC,请将构建后事件添加到 DLL 的项目中,从 /bin/Debug 复制到 GAC。

但是,这些天来,我发现我刚刚重新编译解决方案,然后使用菜单项部署 .WSP,然后使用按钮启动调试器。我的大多数项目都需要一个 F 键和 3 次点击,大约需要一分钟,但我想它可能会更快。

于 2009-12-23T15:27:19.253 回答