
.net
文章平均质量分 61
eqera
6年软件开发经验,4年项目管理经验,2年移动开发经验,6年不算长也不算短,我的青春就这样给了中国的软件行业。
展开
-
C#实现排列和组合,打印排列和组合的总数以及集中的各种组合方式
class Program { //采用递归的方式进行实现组合 static IEnumerable<IEnumerable<T>> GetCombinations<T>(IEnumerable<T> list, int length) where T : IComparable { if (length == 1) return list.Select(...原创 2022-04-26 13:38:32 · 1356 阅读 · 0 评论 -
.NET中XUnit和NUNIT对比
属性对照MSTest NUnit xUnit.net 描述 [TestMethod] [Test] [Fact] 标记为测试方法 [TestClass] [TestFixture] n/a 包含有测试方法的类,在xUnit.net中无需标记,它会查找程序集中所有的public的测试方法 [ExpectedException] [ExpectedException] Assert.Throws Record.Ex原创 2022-01-02 21:31:14 · 1421 阅读 · 0 评论 -
.NET5 类库多版本支持设置
本文介绍如何通过visual sutdio 2019 创建同时支持多个版本的类库,下面以意见建立号的.NET5类库为例,将类库同时支持.NET5和.NET4.5其他类库操作类似。 首先我们找到需要多版本支持的.net类库程序,右键项目文件选择“编辑项目文件”,.csproj文件有类似下面的内容:<Project Sdk="Microsoft.NET.Sdk"> <PropertyGroup> <TargetFramework>net...原创 2021-12-08 11:18:43 · 1255 阅读 · 0 评论 -
ASP.NET MVC Controller激活系统详解
一.总体设计我们将整个ASP.NET MVC框架划分为若干个子系统,那么针对请求上下文激活目标Controller对象的子系统被我们成为Controller激活系统。在正式讨论Controller对象具体是如何被创建爱之前,我们先来看看Controller激活系统在ASP.NET MVC中的总体设计,了解一下组成该子系统的一些基本的组件,以及它们对应的接口或者抽象类是什么。1、Co转载 2012-12-27 09:57:21 · 5843 阅读 · 0 评论 -
MVC、MVP以及Model2
一、自治视图说到自治视图,可能很多人会感到模式,但是我想很多人(尤其是.NET开发人员)可能经常在采用这种模式来设计我们的应用。Windows Forms和ASP.NET Web Forms虽然分别属于GUI和Web开发框架,但是它们都采用了事件驱动的开发方式。所有与UI相关的逻辑都可以定义在针对视图(Windows Form或者Web Form)的后台代码(Code Behind)中,并最终转载 2012-12-27 10:30:44 · 1442 阅读 · 0 评论 -
ASP.NET路由系统实现原理:HttpHandler的动态映射
我们知道一个请求最终通过一个具体的HttpHandler进行处理,而我们熟悉的用于表示一个Web页面的Page对象就是一个HttpHandler,被用于处理基于某个.aspx文件的请求。我们可以通过HttpHandler的动态映射来实现请求地址与物理文件路径之间的分离。实际上ASP.NET路由系统就是采用了这样的实现原理。如下图所示,ASP.NET路由系统通过一个注册到当前应用的自定义HttpMo转载 2012-12-27 10:22:50 · 1121 阅读 · 0 评论 -
NHibernate一个完整的例子
准备开发环境操作系统:Windows Vista, Windows 7, Windows Server 2003 或 Windows Server 2008IDE:VS 2010 Professional, VS C# 2010 Express 或 VS Basic 2010 Express如果不使用Visual Studio,可以使用开源的IDE:MonoDevelop,它是转载 2012-12-27 11:01:21 · 7724 阅读 · 3 评论 -
Nhibernate创建模型
什么是Model我这里简单的用一句话概括什么是model:model是对现实的描述,它可以被开发人员、业务分析师、客户所理解,它不是UML图或者其他任何以开发者为中心描述domain的方式。model的元素实体(Entity)实体是这样一个对象:由它的属性组合唯一标识以及有定义好的生命周期。通常实体包含一个ID或key属性,用于唯一标识它。两个具有相同类型和相同标识符的实体转载 2012-12-27 11:06:24 · 1249 阅读 · 0 评论 -
ASP.NET的路由系统
一、URL与物理文件的分离1、URL与物理文件的分离对于一个 ASP.NET Web Form应用来说,任何一个请求都对应着某个具体的物理文件。部署在Web服务器上的物理文件可以是静态的(比如图片和静态HTML文件等),也可以是动态的(比如.asxp文件)。对于静态文件的请求,ASP.NET直接返回文件的整个内容;而针对动态文件的请求则会触发相关代码的执行,并最终返回执行后的结果。转载 2012-12-27 10:48:32 · 7400 阅读 · 3 评论 -
UriTemplate、UriTemplateTable与WebHttpDispatchOperationSelector
REST服务采用面向资源的架构,而资源通过URI进行标识和定位,所以URI在REST中具有重要的地位。对于WCF来说,服务调用请求的URI映射为某个具体的操作,所以服务端需要解决的是如何根据请求URI选择出对应的操作。如果采用SOAP,操作的选择是根据消息的报头来实现的,那么REST服务又采用怎样的操作选择机制呢?一、URI模板在定义服务契约的时候,我们可以通过应用在操作方法上的W转载 2012-12-27 10:23:52 · 1334 阅读 · 0 评论 -
ASP.NET MVC路由扩展:路由映射
一、基本路由映射通过前面的介绍我们知道基于某个物理文件的路由映射通过调用代表全局路由表的RouteTable的静态属性Routes(一个RouteCollection对象)的MapPageRoute方法来完成,为了实现针对目标Controller和Action的路由,ASP.NET MVC针对RouteCollection类型定义了一系列的扩展方法以实现文件路径无关的路由映射,这些扩展方法定义转载 2012-12-27 10:19:17 · 1698 阅读 · 0 评论 -
asp.net mvc3 razor简介
1.开发工具 Razor是MVC3中的一个视图模板引擎,所以,我们只需要在VS2010中安装一个MVC3的工具,就可以使用Razor了。 如果你不想使用MVC3,还有另外一种选择,那便是WebMatrix + VS 2010;WebMatrix提供了Razor模板的网站,但它并不是一个优秀的IDE,没有像VS一样的智能感知和编辑时错误提醒功能。所以,在使用WebMatrix创建了Raz转载 2012-12-26 09:40:43 · 4240 阅读 · 0 评论 -
mono开发asp.net mvc 中的一些问题
当使用Xamarin 调试asp.net mvc 如果出现类似下面的问题 Could not load file or assembly 'System.Web.WebPages, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35' or one of its dependencies. The原创 2014-02-14 06:32:10 · 6274 阅读 · 0 评论 -
vs2012编译mono
1.请按顺序执行一下命令cd "C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.0\Profilemklink /d Mono "C:\Program Files (x86)\Mono-2.10.9\lib\mono\4.0cd Monomkdir RedistList原创 2014-02-14 10:55:28 · 3562 阅读 · 0 评论 -
.NET领域驱动设计—实践(穿过迷雾走向光明)
开篇介绍1.1示例介绍 (OnlineExamination在线考试系统介绍)1.2分析、建模 (对真实业务进行分析、模型化)1.2.1 用例分析 (提取系统的所有功能需求)1.3系统设计、建模 (技术化业务模型)1.3.1 枚举类型的使用 (别让枚举类型成为数值型对象)1.3.2 基础数据、业务数据 (显示实体和隐式过程)1.3.3 模型在数据库中的主外键关联问题 (面向对象转载 2017-02-01 23:03:57 · 1057 阅读 · 0 评论 -
.NET领域驱动设计—初尝(疑问、模式、原则、工具、过程、框架、实践)
1.1.疑问1.1.1.UML何用1.1.2.领域建模1.2.模式1.3.原则1.5.过程1.6.框架1.7.项目演示最近在研究DDD颇有收获,所以整理出来跟大家分享,共同进步!我们在设计业务系统的时候都会存在一个非常棘手而又无法回避的问题“业务扩展性”、“业务灵活性、”面向对象化“,尽管我们熟练掌握设计思想、设计模式、设计原则等等关于如何设计灵活性的系统设计理论,但是转载 2017-02-01 22:51:16 · 681 阅读 · 0 评论 -
.NET领域驱动设计—初尝(原则、工具、过程、框架)
1.原则1.1.精简聚合1.2.分离用例与接口功能(设计模式的用武之地)2.工具、框架、组件3.过程1】原则原则对于任何一项技术实现来说都是至关重要的,在设计某一个系统功能的时候我们讲究的是设计原则:【单一职责原则Single Responsibility Principle、里氏替换原则Liskov Substitution Principle、依赖倒置原则D转载 2017-02-01 22:44:02 · 1912 阅读 · 0 评论 -
jquery1.9变化
jQuery.browser()jQuery.browser() removedThe jQuery.browser() method has been deprecated since jQuery 1.3 and is removed in 1.9. If needed, it is available as part of the jQuery Migrate plu转载 2014-07-17 07:09:15 · 1525 阅读 · 0 评论 -
浅谈.NET编译时注入(C#-->IL)
.NET是一门多语言平台,这是我们所众所周知的,其实现原理在于因为了MSIL(微软中间语言)的一种代码指令平台。所以.NET语言的编译就分为了两部分,从语言到MSIL的编译(我喜欢称为预编译),和运行时的从MSIL到本地指令,即时编译(JIT)。JIT编译分为经济编译器和普通编译器,在这里就不多说了,不是本文的重点。本文主要讨论下预编译过程中我们能做的改变编译情况,改变生成的IL,从编译前后看看微转载 2014-02-16 22:18:25 · 1258 阅读 · 0 评论 -
编译时MSIL注入--实践Mono Cecil
我们需要看看这个Mono.Cecil,先来一个简单的认识。我来在我们的方法执行前后加入我们的输出信息:原来代码:class Program { static void Main(string[] args) { Console.WriteLine("破浪Blog:http://www.cnblogs转载 2014-02-16 22:10:02 · 2572 阅读 · 0 评论 -
利用Mono.Cecil动态修改程序集来破解商业组件
Mono.Cecil是一个强大的MSIL的注入工具,利用它可以实现动态创建程序集,也可以实现拦截器横向切入动态方法,甚至还可以修改已有的程序集,并且它支持多个运行时框架上例如:.net2.0/3.5/4.0,以及silverlight程序官方地址:http://www.mono-project.com/Cecil 首先,我先假想有一个这样的商业组件,该组件满足了以下条件:转载 2014-02-16 22:04:23 · 2956 阅读 · 0 评论 -
使用PostSharp在.NET平台上实现AOP
本文首先介绍AOP(面向方面编程)的相关概念及理论,然后介绍如何使用PostSharp框架在.NET平台上实现AOP,最后对PostSharp的机制及AOP的优劣进行一个简单的分析。AOP(Aspect-Oriented Programming)AOP的基本定义及作用根据维基百科的定义,“AOP(Aspect-Oriented Programming)是一种将函数的辅助性功转载 2014-02-16 22:42:58 · 1415 阅读 · 0 评论 -
浅谈VS编译自定义编译任务—MSBuild Task(csproject)
1:首先需要添加Microsoft.Build.Utilities.v3.5.dll和Microsoft.Build.Framework.dll中引用。在Microsoft.Build.Framework中为我们定义了接口ITask,自定义任务需要去实现这个契约。其定义如下: public interface ITask { IBuildEngine Bu转载 2014-02-16 22:12:46 · 2825 阅读 · 0 评论 -
NHibernate中一对一关联的延迟加载
由于项目需要,我最近对.NET平台下各ORM框架(LINQ to SQL、Entity Framework V2 & V4、以及NHibernate)进行了功能对比,NHiberante可以说是各框架之中历史最为悠久,功能最强,也是使用最为复杂的一个。在使用NHibernate的过程中也遇到了许多麻烦,不过也得到了不少体会。例如NH的不足之处,我理想中的ORM框架是怎么样的,等等这些,以后有机会也转载 2012-12-24 09:38:47 · 1354 阅读 · 0 评论 -
Fluent NHibernate之旅(三)-- 继承
经过了“开篇”和“简单映射”两篇文章,相信大家对Fluent NHibernate 有了一定的了解了,FluentNHibernate实际就是对 NHibernate 映射的一定扩展,我们能完全利用强类型、泛型、Lambde表达式等等Vs、Framework等特性简单完成映射工作,同时也能让我们学习NHibernate的映射方式,一举夺得,这么好玩的东东,有理由不继续完成这个系列吗?废话不说,回到转载 2012-12-24 04:21:08 · 1657 阅读 · 0 评论 -
[WCF权限控制]基于Windows用户组的授权方式
Windows用户组安全主体权限模式,顾名思义,就是将利用Windows安全系统将对应的Windows帐号所在的用户组作为该用户权限集的授权方式。认证和授权密不可分,但是对于认证和授权在WCF安全体系中的实现来说,它们则是相对独立的。认证属于安全传输的范畴,是在信道层实现的,而授权则是在服务模型层实现的。但是对于基于Windows用户组的授权来说,最终体现出来的授权行为却和采用何种认证具有密切的关转载 2012-12-24 02:49:37 · 3076 阅读 · 0 评论 -
[WCF权限控制]ASP.NET Roles授权[上篇]
在采用Windows认证的情况下,使用基于Windows用户组安全主体权限模式是一个不错的选择。我们可以直接使用现有的用户组设置,也可以为相应的应用或服务创建单独的用户组。但是,由于该模式对Windows认证的依赖,意味着这种模式只能使用于局域网环境中。如果采用证书和Windows帐号的映射,也可以适用于像B2B这样的外部网环境。在其他的网络环境中,基于Windows用户组的授权方式将会无能为力。转载 2012-12-24 01:48:55 · 953 阅读 · 0 评论 -
浅谈Dynamic 关键字系列之二:调用属性,方法,字段
新建类Product:class Product{ public string name; public int Id { get; set; } public void ShowProduct() { Console.WriteLine("Id={0} ,Name={1}", Id, name); }}M转载 2012-12-24 01:34:17 · 1441 阅读 · 0 评论 -
Entity Framework 4.1 Code-First 学习笔记
CodeFirst提供了一种先从代码开始工作,并根据代码直接生成数据库的工作方式。Entity Framework 4.1在你的实体不派生自任何基类、不添加任何特性的时候正常的附加数据库。另外呢,实体的属性也可以添加一些标签,但这些标签不是必须的。下面是一个简单的示例:publicclass Order{ publicint OrderID {get; set; }转载 2012-12-24 03:24:21 · 1856 阅读 · 0 评论 -
Entity Framework 4.1 之二 : 覆盖默认的约定
在这篇文章中,我将讨论如何覆盖默认的约定。我们已经看过了在 EF4.1 Code First 中模型与数据库中的默认约定。当这些约定不能满足我们的时候,我们有两种不同的途径来覆盖这些约定:拦截模型的构建器,使用流畅的 API 来修改模型为我们的模型增加标签在未来的版本中,我们还将有能力增加或者删除约定,现在还没有提供这个能力。对于我们基本的例子,我们使用下面所示的订单类。转载 2012-12-24 03:02:34 · 796 阅读 · 0 评论 -
[WCF权限控制]ASP.NET Roles授权[下篇]
为了让读者对基于ASP.ENT Roles授权方式有一个全面的认识,我们现在来做一个实例演示。在这个实例中,我们将采用不同的认证方式,包括Windows认证和证书认证(ASP.NET Membership + Roles为常见的组合方式,在这里就不多作演示)。简单起见,我们依然沿用一贯的基于如下图所示的解决方案结构,并且依然采用声明式的授权。所以在服务操作方法Add上通过应用PrincipalPe转载 2012-12-24 01:50:59 · 756 阅读 · 0 评论 -
浅谈Dynamic 关键字系列之四:dynamic为什么比反射快
static void Main(string[] args){ dynamic str = "abcd"; Console.WriteLine(str.Length); Console.WriteLine(); Console.WriteLine(str.Substring(1)); Console.ReadLine();}转载 2012-12-24 01:47:34 · 908 阅读 · 0 评论 -
浅谈Dynamic 关键字系列之三:ExpandoObject, DynamicObject, DynamicMetaObject
ExpandoObject:表示一个对象,该对象包含可在运行时动态添加和移除的成员。dynamic dynEO = new ExpandoObject();dynEO.number = 10;dynEO.Increment = new Action(() => { dynEO.number++; });Console.WriteLine(dynEO.number);转载 2012-12-24 01:44:48 · 1410 阅读 · 0 评论 -
浅谈Dynamic 关键字系列之一:dynamic 就是Object
C# 4.0提供了一个dynamic 关键字,那么什么是dynamic,究竟dynamic是如何工作的呢?从最简单的示例开始:static void Main(string[] args) { dynamic dyn = 1; object obj = 1; //在编译时将鼠标放到 ”d转载 2012-12-24 01:29:19 · 926 阅读 · 0 评论 -
安装Visual Studio SP1 后生成时出现"FindRibbons"加载失败
1. 使用记事本打开"C:\Program Files (x86)\MSBuild\Microsoft\VisualStudio\v10.0\OfficeTools\Microsoft.VisualStudio.Tools.Office.targets"2. 移除如下信息 AssemblyName="$(AbsolutePathToCustomization)"原创 2012-08-30 18:19:52 · 3136 阅读 · 1 评论 -
[WCF权限控制]通过扩展自行实现服务授权
其实针对安全主体的授权实现的原理很简单,原则上讲,只要你能在服务操作执行之前能够根据本认证的用户正确设置当前的安全主体就可以了。如果你了解WCF的整个运行时框架结构,你会马上想到用于授权的安全主体初始化可以通过自定义CallContextInitializer来实现。[源代码从这里下载]目录: CallContextInitializer简介 步骤一、自定义CallContextI转载 2012-12-24 02:59:20 · 1916 阅读 · 0 评论 -
Entity Framework 4.1 之一 : 基础
从 Code First 的名字可以猜到,使用 Code-First,你需要从代码开始数据的工作,你可以直接通过代码生成相应的数据库,也可以使用已经存在的数据库。使用 Code First 的好处在于,你的实体类不需要任何 EF 的内容:不需要派生自某个特定的基类,也不需要任何讨厌的标签附加在其上。好了,对于标签来说,像我们将要看到的,是可选的。让我们通过一个简单的实体模型开始吧:订单和订单明转载 2012-12-24 03:01:28 · 695 阅读 · 0 评论 -
Fluent NHibernate之旅一
ORM大家都非常熟悉了吧,我相信也有很多朋友正在用自己或者一些公开的框架,而最常用而且强大的,非Hibernate了(Net中为NHibernate),网上的文档非常多,不过在博客园中,介绍NHibernate的非常少,李哥的NHibernate系列(NHibernate之旅)不失为一个经典,对于新手的我们,需要完全掌握还需要很长一段路,对于新手来说,最初的配置是非常头大的一件事情,好在老赵推荐一转载 2012-12-24 03:32:14 · 1500 阅读 · 0 评论 -
Entity Framework 4.1 之七:继承
在 ORM 文献中,有三种方式将对象的继承关系映射到表中。每个类型一张表 TPT: 在继承层次中的每个类都分别映射到数据库中的一张表,彼此之间通过外键关联。继承层次中所有的类型一张表 TPH:对于继承层次中的所有类型都映射到一张表中,所有的数据都在这张表中。每种实现类型一张表 TPC: 有点像其他两个的混合,对于每种实现类型映射到一张表,抽象类型像 TPH 一样展开到表中。这里我将讨论转载 2012-12-24 03:14:59 · 1021 阅读 · 0 评论 -
Entity Framework 4.1 之六:乐观并发
这篇文章讨论乐观并发。我们经常要面对多用户并发访问问题。这是因为人访问机器的速度无法与高速的机器匹配,典型情况下,人需要大约一分钟或者更多来填写数据,而机器的交易处理通常只需要不到一秒钟。在用户编辑相应数据的时候,我们不能让数据库的事务处理保持打开,这有许多原因:连接问题,信任问题,技术原因等等。基于这些原因,我们需要并发管理。有两种管理方法:乐观和悲观。悲观方式更难处理,因为你需要实现基转载 2012-12-24 03:12:01 · 900 阅读 · 0 评论