如何使调试ASP.NET Sharepoint应用程序的过程耗时更少?

时间:2008-08-28 09:43:42

标签: asp.net sharepoint debugging

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

我认为这在ASP.NET中是不可能的,因为所有类都打包到程序集中而你无法卸载/重新加载程序集,对吗?

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

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

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

8 个答案:

答案 0 :(得分: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

答案 1 :(得分:4)

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

<system.web>
    ...
    <trust level="WSS_Medium" originUrl="" />
    ...
</system.web>
顺便说一下。我不建议像这样部署。这只是舒适性写测试调试周期长度的解决方法。

答案 2 :(得分:3)

如果 使用GAC,您至少可以iisapp.vbs /a "App Pool Name" /r而不是iisreset(回收单个应用程序池比重新启动IIS更快)。< / p>

答案 3 :(得分:1)

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

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

根据生产服务器的配置方式,在具有完整/信任安全设置的服务器上进行开发通常是个好主意,包括disallowing code blocks in ASPX files。这使调试变得更加困难,但它减少了代码最终部署到生产环境时所产生的令人讨厌的意外情况。

答案 4 :(得分:0)

  

您可以“动态”更改代码而无需重新启动服务器

如果您创建Web站点项目(而不是Web应用程序项目),则可以使用ASP.net完成此操作。使用Web站点项目,您可以将更改发布到代码隐藏,而无需刷新服务器上的任何内容,并且服务器会在所有代码更改时为您执行编译工作。有关详细信息,请参阅here

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

答案 5 :(得分:0)

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

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

答案 6 :(得分:0)

WSPBuilder Extensions有一个“部署到GAC”的快捷方式,不幸的是它永远不适合我。但这是一种非常快速的代码 - &gt; compile-&gt; test。

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

gacutil / u yourassemblynamegoeshere gacutil / i yourdllgoeshere.dll

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

答案 7 :(得分:0)

您尝试做的似乎是告诉Sharepoint“当我在Visual Studio中开始调试时,使用在项目的/ bin / debug目录中编译的DLL的版本而不是DLL的版本已在GAC注册。“我还没有解决这个问题,但这是我如何调试Sharepoint。

开发人员计算机安装了Win2008,IIS 7,MOSS 2007,VisStudio 2008和WSP Builder。在VS2008中,添加了一个按钮以附加到w3p.exe进程Andrew's HOWTO attach to w3p

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

如果要将DLL定期复制到GAC,请将后生成事件添加到DLL的项目中,该项目从/ bin / Debug复制到GAC。

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