如何使调试ASP.NET Sharepoint应用程序的过程耗时更少?
我将它与Java进行比较,我们可以在其中以调试模式启动应用程序服务器,然后将IDE添加到服务器。而且,我们可以"即时"更改代码,而无需重新启动服务器。只要更改不影响任何方法签名或者字段,我们就可以对类进行重新编译,并且应用程序服务器(servlet容器)将重新加载该类。
我想这在ASP.NET中是不可能的,因为所有类都打包到程序集中,并且我们不能卸载/重新加载程序集,可以吗?
因此,当我们有一个.aspx页和一个程序集部署到GAC且代码隐藏更改时,必须重新部署该程序集并重置IIS。我在谈论的是Sharepoint应用程序,我不确定我们是否必须对私有程序集进行iisreset,但我想我们也必须这样做。
因此,调试带有代码的aspx页面的最好方法是在进行主动调试时摆脱后台代码,然后移入页面,然后在工作或者多或者少时将其移回后台代码。 (这仅适用于Sharepoint中的应用程序页面,网站页面不允许内联代码)
我们如何进行ASP.NET应用程序的调试以减少耗时?
解决方案
回答
And you can change your code "on the fly" without restarting the server
如果创建网站项目(而不是Web应用程序项目),则可以使用ASP.net完成此操作。使用一个Web站点项目,我们可以将更改发布到后台代码中,而不必刷新服务器上的任何内容,并且服务器会为我们完成所有代码更改的编译工作。有关更多信息,请参见此处。
这也应解决将程序集部署到GAC的困难。由于服务器处理了Web站点项目的所有编译,因此在更改文件时不必重新部署任何程序集。
回答
是的,专用程序集不需要重置IIS。因此,我们应该只将新版本复制到应用程序的Bin目录中并刷新页面(例如像我一样通过VS post build事件)。
但是有一些权衡取舍。我们应该降低应用程序web.config文件中的信任级别:
<system.web> ... <trust level="WSS_Medium" originUrl="" /> ... </system.web>
顺便一提。我不建议这样部署。这只是舒适度编写测试调试周期长度的解决方法。
回答
如果我们使用的是GAC,则至少可以执行iisapp.vbs / a"应用程序池名称" / r而不是iisreset(重新启动单个应用程序池比重新启动IIS更快)。
回答
来自Matt Smiths博客,内容涉及如何使用sharepoint进行F5调试。一个很酷的把戏。
- 在Visual Studio中创建一个Web应用程序项目(文件->新建->项目-> ASP.Net Web应用程序,而不是文件->新建->网站)。
- 将.csproj和.csproj.user文件以及"属性"文件夹一起移动到C:\ inetpub \ wwwroot \ wss \ virtualdirectories \,此处是我们想要与SharePoint网站相对应的Web应用程序的名称或者编号。调试。
- 将项目添加到现有解决方案(例如STSDEV项目)。
- 设置为启动项目(右键单击项目名称"设置为启动项目")。
- 访问项目属性(右键单击项目名称,"属性"),然后单击
- 在"服务器"设置下,单击"使用IIS Web服务器",然后输入要调试的SharePoint Web应用程序的URL,例如http:// mymachine:99.
回答
首先,在运行SharePoint的计算机上进行开发。最好是,这意味着在Virtual PC或者VMWare上运行Windows Server 2003. 这样,我们就可以直接部署和调试SharePoint代码,而不必在服务器之间复制文件并使用远程调试器。
使用VS加载项可简化部署和调试过程。我一直在使用WSPBuilder,但我认为还有其他功能。 WSPBuilder具有用于部署解决方案,将其打包为WSP以及将调试器添加到本地IIS进程的命令。它不允许我们快速添加/删除程序集,但可以通过VS中的"即时"窗口设置断点并运行代码。
根据生产服务器的配置方式,在具有完全/信任安全设置的服务器上进行开发通常是一个好主意,包括禁止ASPX文件中的代码块。这使调试变得更加困难,但是它减少了将代码最终部署到生产环境时出现的令人讨厌的意外事件的数量。
回答
使用自动化测试框架(NUnit)编写集成测试。这并不能满足所有要求,但是当然,这取决于我们要测试的内容。
如果还安装了TestDriven.NET,则可以使用调试器运行单独的测试。这很有帮助。
回答
WSPBuilder Extensions具有" GAC部署"快捷方式,很不幸,它对我不起作用。但这是编码->编译->测试的一种非常快捷的方法。
如果我们不使用WSPBuilder Extensions,则可以打开命令提示符并运行
gacutil / u程序集名称在此处
gacutil / i yourdllgoeshere.dll
如果经常执行此操作,则可以将其置于构建后事件或者批处理文件中。另外,我不清楚gacutil / u(首先删除DLL)是否必要。
回答
似乎要尝试做的就是告诉Sharepoint"当我在Visual Studio中开始调试时,请使用在项目的/ bin / debug目录中编译的DLL版本,而不是在该目录中注册的DLL版本。 GAC。"我尚未解决该问题,但是这是调试Sharepoint的方法。
开发人员计算机是Win2008,IIS 7,MOSS 2007,VisStudio 2008和WSP Builder。在VS2008内部,添加了一个按钮以添加到w3p.exe进程,而Andrew的HOWTO则添加到w3p
解决方案文件有两个项目:
*第一个项目是部署所有应用程序页面(包括DLL)的.WSP。使用WSPBuilder菜单项来处理.WSP创建和部署。
*第二个项目是页面后面的DLL。
如果我们希望将DLL定期复制到GAC,请在DLL的项目中添加一个从/ bin / Debug复制到GAC的生成后事件。
但是,这些天来,我发现我只是在重新编译解决方案,然后使用菜单项部署.WSP,然后使用按钮启动调试器。我的大多数项目都需要F键和3次单击和大约一分钟的时间,但我想它可能会更快。