文章分类 - C#
摘要:【C#.NET】ASP.NET状态管理之三:Application一、全局应用程序类从Application这个单词上大致可以看出Application状态是整个应用程序全局的。在ASP时代我们通常会在Application中存储一些公共数据,而ASP.NET中Application的基本意义没有变:在服务器内存中存储数量较少的数据。由于它的访问速度非常快而且只要应用程序不停止,数据一直存在,我们通常在Application_Start的时候去初始化一些数据,在以后的访问中可以迅速访问和检索。我们可以来实践一下。首先,右键单击网站,选择“添加新项”命令,如图3-1所示,选择全局应用程序类。图3
阅读全文
摘要:一、Session概述Session又称为会话状态,是Web系统中最常用的状态,用于维护和当前浏览器实例相关的一些信息。举个例子来说,我们可以把已登录用户的用户名放在Session中,这样就能通过判断Session中的某个Key来判断用户是否登录,如果登录的话用户名又是多少。我们知道,Session对于每一个客户端(或者说浏览器实例)是“人手一份”,用户首次与Web服务器建立连接的时候,服务器会给用户分发一个SessionID作为标识。SessionID是一个由24个字符组成的随机字符串。用户每次提交页面,浏览器都会把这个SessionID包含在HTTP头中提交给Web服务器,这样Web服务器
阅读全文
摘要:/* * 1. 永不过期。直接赋值缓存的Key和Value即可. * 2. 绝对时间过期 DateTimeOffset.Now.AddMinutes(3) 表示缓存在3分钟后过期, TimeSpan.Zero 表示不使用平滑过期策略. * AbsoluteExpiration = DateTimeOffset.Now.AddMinutes(3), //3分钟后过期 SlidingExpira...
阅读全文
摘要:细说 ASP.NET Cache 及其高级用法阅读目录开始Cache的基本用途Cache的定义Cache常见用法Cache类的特点缓存项的过期时间缓存项的依赖关系 - 依赖其它缓存项缓存项的依赖关系 - 文件依赖缓存项的移除优先级缓存项的移除通知巧用缓存项的移除通知 实现【延迟操作】巧用缓存项的移除通知 实现【自动加载配置文件】文件监视技术的选择各种缓存方案的共存许多做过程序性能优化的人,或者关注过程程序性能的人,应该都使用过各类缓存技术。 而我今天所说的Cache是专指ASP.NET的Cache,我们可以使用HttpRuntime.Cache访问到的那个Cache,而不是其它的缓存技术。以前
阅读全文
摘要:if( System.IO.Path.GetInvalidPathChars().Any (p =>uniqueName.Contains(p) )) { //文件名 包含非法字符 }
阅读全文
摘要:如何:获取对 DTE 和 DTE2 对象的引用 Visual Studio 2010在 EnvDTE 程序集中,DTE 对象表示 Visual Studio 集成开发环境 (IDE),并且是自动化模型层次结构中最高级别的对象。 所有的自动化应用程序必须有对此对象的引用,以获取对核心自动化模型的访问权。 Visual Studio 的情况也如此。但是添加的 EnvDTE80 程序集提供了一个名为 DTE2 的顶级替换对象,以取代 DTE 对象。 两个对象的作用和编程方式相似,但是 DTE2 包含一些新功能,并承载了许多新建和更新的对象和集合。因此,在创建新自动化应用程序和外接程序时,应创建对这两
阅读全文
摘要:在Visual Studio 2010中创建多项目(解决方案)模板【一】当我们使用Visual Studio来新建某个项目(Project)时,通常都会使用File –> New –> Project菜单来打开New Project(新建项目)对话框,里面列出了各种项目类型以供我们选择。大部分读者朋友都应该知道,这个对话框其实是列出了所有已经安装的项目模板,不 仅如此,Visual Studio还允许用户通过File –> Export Template菜单将现有的项目导出为项目模板。平时我们最为常见的是使用Export Template来创建单一项目的项目模板,此时使用Ex
阅读全文
摘要:在Visual Studio 2010中创建多项目(解决方案)模板【二】在上文中 我给大家介绍了多项目解决方案模板的创建,在文章的最后我们遇到了一个问题,就是$safeprojectname$这个模板参数(宏)所指代的意义在各 个项目中都不一样,而我们却希望它能够简单地指代用户所输入的项目名称。本文将从这个问题出发,讨论在Visual Studio 2010中是如何使用Template Wizard来设计复杂的多项目解决方案的。Template Wizard的基本应用创建Template Wizard项目在CMSProjectTemplate解决方案下,新建一个C# Class Library
阅读全文
摘要:在Visual Studio 2010中创建多项目(解决方案)模板【三】前文回顾:在Visual Studio 2010中创建多项目(解决方案)模板【一】:多项目解决方案模板的创建在Visual Studio 2010中创建多项目(解决方案)模板【二】:Template Wizard的使用本文主要讨论多项目(解决方案)模板的部署相关问题,包括:为多项目解决方案模板设置模板名称修改多项目解决方案模板的图标创建Visual Studio 2010扩展的安装包VSIX文件为多项目解决方案模板设置模板名称模板名称的设置非常简单,,只需要修改CMSProjectTemplate.vstemplate文件
阅读全文
摘要:第一步. 在文件夹 ERPTemplate 下面分别创建各个项目模板所对应的文件夹第二步. 将Properties 文件夹下的AssemblyInfo.cs 和所有 *.cs 文件 右击属性编译方式(Build Action)改为 None,否则将出现编译错误第三步. 修改项目模板所对应的文件夹下的 xxx.csproj 文件重命名 ERP.BizService.Implements.csproj 为 BizService.Implements.csproj修改RootNamespace和AssemblyName,将其改为$safeprojectname$.BizService.Impl...
阅读全文
摘要:问题描述如下:1. 使用模板新建项目时候出错:在网上找到这句话,顺利解决了!There's no need to remove the section from the .vstemplate file.You simply need to build CslaItemTemplateWizards.dll and copy it into \Microsoft Visual Studio 9.0\Common7\IDE2. 引用第三方dll 的时候出现感叹号:解决方法: 主要是这里,在对应的*.csproj 文件中加上这句...
阅读全文
摘要:建议15: 使用dynamic来简化反射实现dynamic是Framework 4.0的新特性。dynamic的出现让C#具有了弱语言类型的特性。编译器在编译的时候不再对类型进行检查,编译器默认dynamic对象支持开发者想要的任何特性。比如,即使你对GetDynamicObject方法返回的对象一无所知,也可以像如下这样进行代码的调用,编译器不会报错:dynamic dynamicObject = GetDynamicObject(); Console.WriteLine(dynamicObject.Name); Console.WriteLine(dynamicObject.Sampl..
阅读全文
摘要:建议11: 区别对待==和Equals在开始本建议之前,首先要明确概念“相等性”。CLR中将“相等性”分为两类:“值相等性”和“引用相等性”。如果用来比较的两个变量所包含的数值相等,那么将其定义为“值相等性”;如果比较的两个变量引用的是内存中的同一个对象,那么将其定义为“引用相等性”。无论是操作符“==”还是方法“Equals”,都倾向于表达这样一个原则:对于值类型,如果类型的值相等,就应该返回True。对于引用类型,如果类型指向同一个对象,则返回True。下面的代码输出所遵循的就是以上原则:static void ValueTypeOPEquals() { int i = 1; ...
阅读全文
摘要://方式一:使用 InvokeMember关键字,性能一般/// /// 验证数据字典是否有效/// /// 操作类/// 查找类/// 结果类/// /// public virtual bool ValidDict(string pFuncName, S pObj){ T instance = Activator.CreateInstance(); object[] mParam = new object[] { pObj }; IList mResult = (IList)instance.GetType().InvokeMember(String.IsNullOrEm...
阅读全文
摘要:using System.Threading.Tasks; class Test{ static int N = 1000; static void TestMethod() { // Using a named method. Parallel.For(0, N, Method2); // Using an anonymous method. Parallel.For(0, N, delegate(int i) { // Do Work. }); //...
阅读全文
摘要:介绍 ASP.NET Web 编程使用 Razor 语法 (C#)由微软 ASP.NET 团队|2012 年 5 月 22 日这篇文章给你编程的概述与 ASP.NET 网页中使用 Razor 语法。ASP.NET 是微软的技术,用于在 web 服务器上运行动态 web 页。使用 C# 编程语言中侧重于此的文章。你会学到什么:顶尖 8 编程入门编程使用 Razor 语法的 ASP.NET Web 页面的提示。你需要基本的编程概念。什么 ASP.NET 服务器代码和 Razor 语法是所有有关。请注意在这篇文章的信息适用于 ASP.NET 网页 1.0 和 Web 页 2。凡有版本之间的差异,文字
阅读全文
摘要:当年在ASP.NET MVC 1.0时代我提到,在开发时最好将视图的Model定制为强类型的,这样可以充分利用静态检查功能进行排错。不过有人指出,这么做虽然易于静态检查,但是 定义强类型的Model类型实在是太麻烦了,因此也出现了基于SmartBag等折衷方案。强类型是一种极端方案,而在C# 4.0中我们又可以使用另一个极端,那就是让Model成为dynamic类型,这样在视图中便可以完全自由地获取数据了。不过,在使用匿名对象的情况下 视图会抛出奇怪的“无法找到成员”异常,我们必须解决这个问题。dynamic类型的视图模型我们现在先来创建一个Model类型为dynamic的视图,例如Views
阅读全文
摘要:我们都知道MVC 3 程序的所有请求都是先经过路由解析然后分配到特定的Controller 以及 Action 中的,为什么这些知识讲完了Controller Action Model 后再讲呢?这个东西我个人感觉比较的抽象吧!如如您有基础,看起来一点也不费力,如果您没有基础的话,您连Controller Action 都不知道是什么,那您怎么理解路由呢?嘿嘿仅仅是个人的看法!如果您还没有了解MVC 3 的一些基本的信息请您按照我下面的导航来,先了解MVC 3 的其他知识,然后再看下这篇文章。前面文章但凡涉及路由知识的东东都有对路由的简单的解释,对于不还不了解路由概念的人来说阅读下面这几篇文章
阅读全文
摘要:1. BeginRequest(在 ASP.NET 响应请求时作为 HTTP 执行管线链中的第一个事件发生)本文用到的2. AuthenticateRequest (当安全模块已建立用户标识时发生。注:AuthenticateRequest 事件发出信号表示配置的身份验证机制已对当前请求进行了身份验证。预订 AuthenticateRequest 事件可确保在处理附加的模块或事件处理程序之前对请求进行身份验证。)3. PostAuthenticateRequest (注意:该事件在 .NET Framework 2.0 版中是新增的。 当安全模块已建立用户标识时发生。PostAuthentic
阅读全文