ASP.NET, 存档

将已部署的 asp. net 站点与 ndebend 进行比较

Jason / 十二月 15, 2008

很少有东西可以与继承现有软件项目的经验相比, 当 (无论出于何种原因) 原始开发人员都不在公司。我自己也遇到过几次这种情况, 它永远不会失败, 你及时继承了代码库, 以修复 bug 或实现新功能。

每当发生这种情况时, 我担心的一个问题是, 网站的部署版本是否与源代码管理中的最新版本相匹配。在一个理想的世界里, 源代码控制系统会在最后一次部署时被标记, 他们的工作几乎不会有什么猜测。但生活很少是这种理想。实际上, 除了驻留在服务器上的二进制文件之外, 通常没有指示上次部署到生产中的时间和内容。

幸运的是, ndepend 有很多强大的功能, 可以帮助解决这个确切的困境。对于那些从未使用过 ndepend 的用户, 它是一个非常强大的. net 静态代码分析工具, 包含的功能比我在这里所能做到的要多。对于那些感兴趣的斯科特·汉斯曼在这里写了一篇伟大的评论, ndepend 网站上也有几个屏幕截图。

比较二进制文件

为了演示这一点, 我将把我目前部署的博客 (我恰好知道它正在运行 dasblog 版本 2.3) 与 dasblog 2.2 的已知版本进行比较。若要开始, 请确保您有要比较的两个网站的本地副本, 然后打开 ndebend 的副本。

若要比较源文件, 您甚至不需要创建项目文件。您只需从 visual ndebend gui 的 "比较" 菜单中选择 "选择要比较的程序集或分析"。

在本演示中, 我将仅比较随 dasblog 附带的新智能程序集, 但您需要比较这些程序集以表示您自己的自定义代码。例如, 如果您使用了 nhibernate orm, 则不一定要比较 nhibernate. dll。

选择要比较的程序集并单击 "确定" 后, n源将开始分析程序集的过程。根据程序集的数量和大小, 这可能需要一些时间。但是, 作为对你的小等待的奖励, 你很快就会受到足够多的代码指标的迎接, 即使是最仔细的人也会感到快乐。

挖掘结果

一旦执行了代码分析, 我们就可以开始手头的任务, 找到网站的两个版本之间的差异。对于此任务, 主屏幕中有两个值得关注的区域。类浏览器和 cql 查询窗口。

对于熟悉 visual studio 的任何人来说, 类浏览器都非常直观, 只需提供程序集、命名空间和类型的高级概述即可。对于即时满足, ndepd 善意地通过上下文菜单选项提供。从类浏览器右键单击您比较的程序集之一, 然后选择 "更改了什么?", 然后 "从装配公司选择方法..。在哪里 codewaschanged "。代替类浏览器, 您将看到不同版本的方法列表。

在场景背后, n源针对它在代码分过程中编译的内部数据库发出了它所谓的 cql (代码查询语言) 查询。此数据库包含有关源代码的各种有用信息。使用 cql, 我们可以做的不仅仅是选择已更改的方法。我们可以对返回的内容应用任意数量的约束。例如, 您可能不关心未使用的方法, 即使它们确实不同。使用 cql, 您可以使用如下所示:

从装配公司 "新智慧" 中选择方法。daslog. web " codewaschanged 和 ( 方法 ca > 0 或 ispublic or 单点或 异种接口或 类构造函数或 isfin治器 ) read more

.NET, ASP.NET, aspNETserve, C#, 存档

社区编码竞赛

开发开源项目是一次非常有益的经历。但遗憾的是 (作为开源开发人员) 开源项目很少得到他们应得的反馈。通常, 开发人员只有在软件被破坏时才会听到用户的反馈, 正因为如此, 往往很难知道作者的作品何时才会得到真正的欣赏。 read more

ASP.NET, aspNETserve, 存档

点释放

只是一个快速的更新, 一个新版本的 aspnetserve 已经发布。版本1.3.1 表示包含常规错误修复的点版本, 建议所有用户使用。

.NET, ASP.NET, aspNETserve, C#, 存档

什么是新的

Jason / 八月 19, 2008

正如我在上一篇文章中提到的, aspnetserve 1.3 刚刚发布。随之而来的是一些激动人心的变化。以下是一些最显著的变化的概述:

http 持久连接

aspnetserve 的目标是针对 http 协议的1.1 版, 而在1.3 版之前, 它在该目标中存在明显的缺陷。它甚至没有试图保持周围的 "保持活力" (又名、持续的) 联系。服务器在每次请求后都天真地关闭了连接。

1.3 版中的新 aspnetserve. server 对象完全支持持久连接, 并随之引入了几个新属性:

maxconnect

此属性表示允许的最大同时连接数。一旦达到最高金额, 将拒绝额外的请求。

保持的 aliverequest出路

一个时间段 (以毫秒为单位), aspnetserve 将等待以前建立的连接上的后续通信。

视窗服务服务器

ice (双关语的意思) 允许 aspnetserve 在后台处理请求。此外, 这允许请求处理, 而无需用户首先登录并启动 simpleserver ui。

ice 从一个 xml 文件读取它的配置, 该文件的架构是在 wiki 页面 "概要概述" 上定义的

下面是 xml 文件的一个简单示例:

<?xml version="1.0" encoding="utf-8"?><s
erver xmlns="http://aspnetserve.googlecode.com/svn/tags/Release%201.3/aspNETserve/Configuration/Xml/aspNETserve.config.xsd">        <
application physicalpath="c:temp">            
    <domain name="www.example.com" virtualpath="/"></domain>         
       <endpoint ip="127.0.0.1" port="80"></endpoint>   
             <endpoint ip="127.0.0.1" port="443" secure="true"></endpoin
t>        </application
></server>
read more

ASP.NET, C#, Visual Studio, 存档

asp. net mvc: 导览游

Jason / 六月 25, 2008

我们都读过什么是 mvc, 但它到底是如何工作的呢?是什么螺母和螺栓, 使 mvc 魔术发生?幸运的是, microsoft 已经向 asp. net mvc 发布了源代码, 我们可以阅读详细信息。但是, 如果你和我一样阅读源代码与真正了解应用程序的工作原理有很大的不同。幸运的是, 自从源代码发布后, 我们可以做的远不止于阅读, 我们可以使用调试器来逐步完成它。

visual studio 中的调试器对于现代开发人员来说是一个非常有用的工具。我经常使用调试器作为开发代码的第一个调试路由。有趣的是, 我们可以使用相同的调试器遍历 asp. net mvc, 以便更好地了解它的运行方式。

我们需要做的第一件事是将源代码下载到 asp. net mvc, 并在启用调试的情况下对其进行编译。源代码可以从它的 codeplex 页面下载。下载包含 visual studio 2008 项目。只需打开项目并进行重建。完成后, 您应该会在提取下载的源代码的文件夹中的 bin 目录中的目录中看到四个文件。

在这些文件中, 我们只对其中的两个感兴趣。System.Web.Mvc.dll 和 System.Web.Mvc.pdb。  请记下这些文件在您的计算机上的位置, 因为我们将需要添加对这些文件的引用。

在 visual studio 的新实例中, 允许创建新的 asp. net mvc 应用程序。我们需要做的第一件事是删除对 System.Web.Mvc 的引用。展开引用文件夹, 右键单击 System.Web.Mvc 并选择 "删除"

删除 System.Web.Mvc 的引用后, 您现在需要将其添加回。只有这次, 我们将引用我们刚刚编译的 dll, 而不是引用 asp. net mvc 附带的 dll。通过右键单击引用文件夹并选择 "添加引用…", 您将获得浏览引用的选项。只需导航到我要求您记住之前的路径, 然后选择 System.Web.Mvc.dll 文件, 然后单击 "确定"。

现在, 我们都已准备好开始调试 asp. net mvc 的内部。对于启动器, 导航到预先生成的家庭控制器, 并在 index 方法的第一行上放置个断点。  现在, 在启用调试的情况下启动站点。

完成所有编译并启动应用程序后, visual studio 实例应立即停止。

此时, 在 "调用堆栈" 窗口中, 您应该会看到 System.Web.MVC.DLL 的条目, 并且这些条目应为黑色 (而不是灰色)。这意味着 visual studio 具有需要向我们显示这些方法的源代码的调试信息。这正是我们所尝试的, visual studio 现在将我们都以与代码非常相似的方式逐步完成 asp. net mvc 代码。让我们从详细分析调用堆栈开始。

在调用堆栈中, 我们看到以下内容:

mvcapation.1. dll!MvcApplication1.Controllers.HomeController.Index () System.Web.Mvc.DLL!!!System.Web.Mvc.ControllerActionInvoker.InvokeActionMethod (...) System.Web.Mvc.DLL!!!System.Web.Mvc.ControllerActionInvoker.InvokeActionMethodWithFilters.AnonymousMethod (...) System.Web.Mvc.DLL!!!System.Web.Mvc.ControllerActionInvoker.InvokeActionMethodFilter (...) System.Web.Mvc.DLL!!!System.Web.Mvc.ControllerActionInvoker.InvokeActionMethodWithFilters.AnonymousMethod () System.Web.Mvc.DLL!!!System.Web.Mvc.ControllerActionInvoker.InvokeActionMethodWithFilters (...) System.Web.Mvc.DLL!!!System.Web.Mvc.ControllerActionInvoker.InvokeAction (...) System.Web.Mvc.DLL!!!System.Web.Mvc.Controller.Execute (...) System.Web.Mvc.DLL!!!System.Web.Mvc.Controller.System.Web.Mvc.IController.Execute (...) System.Web.Mvc.DLL!!!System.Web.Mvc.MvcHandler.ProcessRequest (...) System.Web.Mvc.DLL!!!System.Web.Mvc.MvcHandler.ProcessRequest (...) System.Web.Mvc.DLL!!!System.Web.Mvc.MvcHandler.System.Web.IHttpHandler.ProcessRequest (...) read more

ASP.NET, 存档

asp. net mvc 身份验证综述

Jason / 六月 25, 2008

从 asp. net mvc 的预览3开始, 身份验证似乎已被排除在框架之外。因此, 在将这一功能包括在内之前, 微软似乎已经将安全作为读者的练习。许多开发人员都找到了保护其 mvc 应用程序的创造性解决方案。下面是一些有趣的链接: read more

.NET, ASP.NET, aspNETserve, C#, 存档

更新

Jason / 六月 25, 2008

我已经有一段时间没有提到任何关于 aspnetserve 的事情了, 所以我想现在是更新的时候了。自2007年12月上一次更新以来, 直到最近才有任何活动。在被大量的个人和职业义务分散注意力之间, 这个项目退居二线。 read more