一切福田,不離方寸,從心而覓,感無不通。

Category Archives: Asp.net

ProjectTemplateLink 元素(Visual Studio 模板)

若要了解有关 Visual Studio 2017 RC 的最新文档,请参阅 Visual Studio 2017 RC 文档。 指定多项目模板中一个项目的 .vstemplate 文件的路径。   语法

特性和元素 以下各部分描述了特性、子元素和父元素。 特性 特性 描述 ProjectName 可选特性。 指定多项目模板中每一个项目的名称。 新项目对话框中不能向单个项目分配名称。 CopyParameters 使主要组模板中的所有变量可复制到每个链接模板。 链接模板中的参数具有前缀 "$ext_*$"。 例如,如果在父组模板参数$projectname$具有值exampleproject1 则轮到,当模板链接获取又要执行,它将获取参数$ext_projectname$,这是一份$projectname$父组模板中的参数。 这使链接模板能够共享一些只能在父组模板中方便地创建的公用参数。 此特性为可选特性,未包含此特性时,它将自动默认为 false。 在 Visual Studio 2013 Update 2 中引入。 若要引用正确的产品版本,请参阅引用程序集提供的 Visual Studio 2013 SDK Update 2。 父元素 元素 描述 ProjectCollection 指定多项目模板的组织和内容。 SolutionFolder 对多项目模板中的项目进行分组。   文本值 需要一个文本值。 此文本指定模板的 .vstemplate 文件的路径。     多项目模板用作两个或多个项目的容器。 ProjectTemplateLink 元素用于指定模板中一个项目的 .vstemplate 文件的位置。 对于多项目模板中的每个项目,此模板的 .vstemplate 文件中都含有一个对应的 ProjectTemplateLink 元素。 有关多项目模板的详细信息,请参阅如何︰ 创建多项目模板。   此示例演示一个简单的多项目 .vstemplate 根文件。 在此示例中,模板包含两个项目:My Windows Application 和 My Class Library。ProjectName 元素的 ProjectTemplateLink 特性可为 Visual Studio 设置要分配给此项目的名称。 如果不存在 ProjectName 特性,则会使用 .vstemplate 文件的名称作为项目名称。

  from:https://msdn.microsoft.com/zh-cn/library/ms171398.aspx

龙生   02 Jun 2018
View Details

vs多项目模板及add-in开发

本文分2部分 第一为自定义多项目模板 第二为vs add-in开发 效果图 1.自定义模板 2. 工具菜单 3.窗口 4.工程 5.文件 …     一. 多项目模板 单项目模板做起来很简单 选中一个项目在文件一栏中选中导出模板 然后选择项目模板 在最后一项向导会给出你的输出路径,一般都是系统的用户文档路径+\Visual Studio 2010\My Exported Templates 在对应目录下会生成你对应的项目模板压缩包 我们生成2个项目的模板文件 然后做一个多项目模板 我们解压2个模板文件并且放进一个新建的名称为MaoyaTemplates的文件夹 剪切到Visual Studio 2010\Templates\ProjectTemplates路径下 新建模板文件MyTemplate.vstemplate 根据要定义的模板内容 修改文件 然后将整个文件夹压缩成zip文件即可 在TemplateData可以定义一些自己需要的信息 例如icon定义你的模板图标 把图标文件放在相对路径即可 然后重新打开vs 即可看到刚才作成的模板 打开以后就是定义的2个demo工程 相当简单 这样就不用每次来新项目都去copy代码了 二 vs插件 概念性的东西可以参考 http://msdn.microsoft.com/zh-cn/library/bb384200.aspx vs插件可以帮助或者优化你在vs开发过程的大部分窗口 它可以针对文件 针对项目 针对窗口 甚至针对不同的后缀做不同的处理 下面图文+代码介绍开发步骤(vs2010) 选择插件项目 进入向导根据自己的场景选择即可 中间向导过程略过 最后一步 完成向导后 默认工程框架如下 最关键的就是connect.cs文件 Connect 继承了2个类 IDTExtensibility2, IDTCommandTarget IDTExtensibility2 包含在实现接口时用作事件的方法。 每当发生影响某个外接程序的事件时(如加载或卸载该外接程序时)以及对该外接程序进行任何更改时,Visual Studio 都会调用这些方法。 IDTCommandTarget 接口使开发者得以在环境中实现命名命令。 并且以定义命令状态或执行命令。 每个方法的描述 中文版可以参考msdn http://msdn.microsoft.com/zh-cn/library/extensibility.idtextensibility2.aspx http://msdn.microsoft.com/zh-cn/library/envdte.idtcommandtarget.aspx 其中我们作为入门开发 需要关注得的是 OnConnection 为IDTExtensibility2的 main 方法,这是因为每次加载外接程序时都会调用该方法。 该方法为外接程序在加载时的入口点,因此可以将要在外接程序启动时运行的任何代码放置在此处(或调用任何其他函数)。 1 2 3 4 5 6 void OnConnection(     Object Application,     ext_ConnectMode ConnectMode,     Object […]

龙生   02 Jun 2018
View Details

ASP.NET MVC中Autofac实现的自动注入模式

熟悉IoC容器的都知道,在开发过程中,最郁闷的莫过于当你新增一个Service时,你需要对该Service进行注册,有的是使用代码注入,有的是XML配置注入,不管是哪种类型的注入,经常会出现开发人员忘记注入的情况, 如果你的页面是直接发送请求的,那么会得到类似于如下页面的错误:   <- _<-   如果该服务是用于AJAX请求实用的,那么你就悲剧了,因为页面只是没反应,只有查看错误日志了。   于是我试着去想办法去避免每次的服务都需要注入,而是系统自动注入。   红色线条框住的地方就是自动注入的代码实现。很高兴Autofac提供一个RegisterAssemblyTypes方法。它回去扫描所有的dll并把每个类注册为它所实现的接口。。。。 既然能够自动注入,那么接口和类的定义一定要有一定的规律。 从上面的代码可以看到baseType这个变量,它是IDependency接口的类型。 IDependency接口如下:   其他任何的接口都需要继承这个接口,例如我们定义一个接口IModelCar:   IModelCar的实现类:     自动注入原理说明:       首先我们去找到所有Dll,再去找到实现了IDependency接口的类,然后使用RegisterAssemblyTypes进行注入。   在Controller中调用试试:   可以看到_carmodel解析后为ModelCar的实例。。    Demo下载: https://github.com/nicholaspei/MvcApplication5   from: https://www.cnblogs.com/n-pei/archive/2013/01/24/2875674.html

龙生   01 Jun 2018
View Details

微信分享到朋友圈

微信内置浏览器(WebView)中特有的javascript API(javascript Interface),随着微信官方的调整,部分API已经不能直接使用,比如类似直接分享到朋友圈WeixinJSBridge.invoke(shareTimeline,data,callback) 这样的功能,直接调用,会得到一个访问拒绝的response

此方法已过时,被微信禁用了。只能用微信官方的接口 1、前台脚本

2、后台代码

请引用微信官方封装好的dll Senparc.Weixin.dll Senparc.Weixin.MP.dll   from:https://blog.csdn.net/lybwwp/article/details/70172232

龙生   17 May 2018
View Details

也谈前后端完全分离后,关于SEO优化的方案

如果用了nodejs作为中间件,您就不需要往下看了,不存在SEO的问题。此时前端不再只是前端,变成了全栈。   此文章指的是用Ajax调用API后渲染页面的情况,这时查看html源码,也是没有数据的,所以搜索引擎也收录不到有用的数据,更不用说更新了。 我的思路大概如下: 不修改原项目的源码。 只针对搜索引擎做优化。 用Java的开源项目HtmlUnit做中转,HtmlUnit模拟了流行的浏览器内核,却没有界面。经过转换的页面会输出ajax填充数据后的html源码。 由此得步骤如下: 先架设HtmlUnit转换项目。虽然HtmlUnit也有.Net版本,但测试后效率不高。还是Java的原项目效率高。所以就直接用Java的,不懂Java也没关系,几十行代码搞定。可以参考我前几篇文章。 根据你项目的语言做相应的拦截器,Java的语言就不说了,可以省略步骤1,直接导包开用就行了。.Net的话最好做HttpModule,一是不污染原项目;二是性能也高。php的话,如果用laravel/yii/tp等框架,本来就是拦截器机制。 准备拦截器要用到的各搜索引擎UserAgent里的关键标识,发一下我的:Baiduspider,Googlebot,bingbot,360Spider,Sogou web spider,Yahoo! Slurp,YoudaoBot,Sosospider。看名字也能猜到各自是哪个搜索引擎吧。 然后检测到是搜索引擎来了,就调用HtmlUnit转换出完整的html源码;然后有数据就会被收录了。 希望对各位同仁有些帮助。有不明白的、有意见的,欢迎通过本博客底部的邮箱和我联系~~

龙生   09 May 2018
View Details

asp.net一个已实现的登陆过滤器

在web.config中:

要点: 1.注册事件时,不要写application.BeginRequest,这样会导致无法获得Session.

  from:https://blog.csdn.net/touch_the_world/article/details/37936297

龙生   09 May 2018
View Details

一步一步学EF系列【6、IOC 之AutoFac】

前言 之前的前5篇作为EF方面的基础篇,后面我们将使用MVC+EF 并且使用IOC ,Repository,UnitOfWork,DbContext来整体来学习。因为后面要用到IOC,所以本篇先单独先学习一下IOC,我们本本文单独主要学习Autofac,其实对于Autofac我也是边学边记录。不对的地方,也希望大家多多指导。 个人在学习过程中参考博客: AutoFac文档:http://www.cnblogs.com/wolegequ/archive/2012/06/09/2543487.html AutoFac使用方法总结:Part I:http://niuyi.github.io/blog/2012/04/06/autofac-by-unit-test/ 为什么使用AutoFac? Autofac是.NET领域最为流行的IOC框架之一,传说是速度最快的一个: 优点: 它是C#语言联系很紧密,也就是说C#里的很多编程方式都可以为Autofac使用,例如可以用Lambda表达式注册组件 较低的学习曲线,学习它非常的简单,只要你理解了IoC和DI的概念以及在何时需要使用它们 XML配置支持 自动装配 与Asp.Net MVC 集成 微软的Orchad开源程序使用的就是Autofac,从该源码可以看出它的方便和强大 上面的优点我也是拷的别人文章里面的,上面的这个几乎所有讲Autofac博文都会出现的。这个也是首次学习,所以我们还是记录的细一点。 怎么使用Autofac 通过VS中的NuGet来加载AutoFac,引入成功后引用就会出现Autofac。 1、我们做一个简单的例子先用一下 就拿数据访问来做案例把,一个数据请求有两个类,一个是Oracle 一个是SQLSERVER。我们在使用的时候可以选择调用那个数据库。 1.1 我们先定义一个数据访问的接口和访问类。

 

 

  最普通的方式大家都会的吧! 如果最普通的方式调用SQLSERVER怎么写?

  改进一下代码。我们在加入一个DataSourceManager类来看一下

这样写的好处是什么,这样加入加入新的数据源,只用调用的时候传入这个对象就可以,就会自动创建一个对应的对象。那接下如果要调用SQLSERVER怎么写。看代码

1.2 注入实现构造函数注入 上面的DataSourceManager的动态创建的方式就是因为又有个带IDataSource的参数的构造函数,只要调用者传入实现该接口的对象,就实现了对象创建。 那我们看看怎么使用AutoFac注入实现构造函数注入

  上面的就是AutoFac构造函数注入,他给IDataSource注入的是Sqlserver所以我们调用的数据,返回的就是Sqlserver数据。那下面我们具体的了解一下AutoFac的一些方法 1.3 Autofac方法说明

var builder = new ContainerBuilder(); //builder.RegisterType<DataSourceManager>(); builder.RegisterType<Sqlserver>().As<IDataSource>(); using (var container = builder.Build()) { var manager = container.Resolve<IDataSource>(); Console.WriteLine(manager.GetData()); Console.ReadLine(); }

1 2 3 4 5 6 7 8 var builder = new ContainerBuilder(); builder.RegisterType<Sqlserver>().Named<IDataSource>("SqlServer"); builder.RegisterType<Oracle>().Named<IDataSource>("Oracel"); using (var container = […]

龙生   03 May 2018
View Details

C# 集合(Collection)

各种集合类和它们的用法 下面是各种常用的 System.Collection 命名空间的类。点击下面的链接查看细节。 类 描述和用法 动态数组(ArrayList) 它代表了可被单独索引的对象的有序集合。它基本上可以替代一个数组。但是,与数组不同的是,您可以使用索引在指定的位置添加和移除项目,动态数组会自动重新调整它的大小。它也允许在列表中进行动态内存分配、增加、搜索、排序各项。 哈希表(Hashtable) 它使用键来访问集合中的元素。当您使用键访问元素时,则使用哈希表,而且您可以识别一个有用的键值。哈希表中的每一项都有一个键/值对。键用于访问集合中的项目。 排序列表(SortedList) 它可以使用键和索引来访问列表中的项。排序列表是数组和哈希表的组合。它包含一个可使用键或索引访问各项的列表。如果您使用索引访问各项,则它是一个动态数组(ArrayList),如果您使用键访问各项,则它是一个哈希表(Hashtable)。集合中的各项总是按键值排序。 堆栈(Stack) 它代表了一个后进先出的对象集合。当您需要对各项进行后进先出的访问时,则使用堆栈。当您在列表中添加一项,称为推入元素,当您从列表中移除一项时,称为弹出元素。 队列(Queue) 它代表了一个先进先出的对象集合。当您需要对各项进行先进先出的访问时,则使用队列。当您在列表中添加一项,称为入队,当您从列表中移除一项时,称为出队。 点阵列(BitArray) 它代表了一个使用值 1 和 0 来表示的二进制数组。当您需要存储位,但是事先不知道位数时,则使用点阵列。您可以使用整型索引从点阵列集合中访问各项,索引从零开始。 from:https://m.runoob.com/csharp/csharp-collection.html

龙生   30 Apr 2018
View Details

验证视图状态 MAC 失败。如果此应用程序由网络场或群集承载,请确保

验证视图状态 MAC 失败。如果此应用程序由网络场或群集承载,请确保 <machineKey> 配置指定了相同的 validationKey 和验证算法。不能在群集中使用 AutoGenerate。 说明: 执行当前 Web 请求期间,出现未处理的异常。请检查堆栈跟踪信息,以了解有关该错误以及代码中导致错误的出处的详细信息。 异常详细信息: System.Web.HttpException: 验证视图状态 MAC 失败。如果此应用程序由网络场或群集承载,请确保 <machineKey> 配置指定了相同的 validationKey 和验证算法。不能在群集中使用 AutoGenerate。 分析: 分析后找到了问题的根源。首先,文章中提到,如果用GridView,并且指定了DataKeyNames属性,则出于安全的理由(因为DataKeyNames指定的字段代表数据的主键,且该主键值需要保存在视图状态中发送到客户端,用户如果篡改主键值,会导致安全问题),GridView会要求加密视图状态。为此会自动在页面表单</forms>之前添加一个

。 然而,Atlas的UpdatePanel要求放置在<form></form>内部,也就是</form>之前。这就意味着添加的隐藏input控件没有被放置在UpdatePanel内,而是放置在UpdatePanel和</form>之间。 当UpdatePanel更新时,UpdatePanel内部的控件被提交到服务器进行处理(Patrial Rendering),而整个页面并没有被提交。也就是说隐藏的input控件没有随着一起提交。因此服务器并不知道提交的ViewState被加密了,从而导致MAC验证错误。 解决方法有二,仅供参考: 1.可以在当前页面的<page …>里加两个属性: enableEventValidation="false" viewStateEncryptionMode ="Never" 2.当然还可以在web.config里加入:(<system.web>之间)

其余方法 在web.config中的pages节点上添加enableviewstatemac=false 附带: 一般而言是因为你的某些操作修改了视图状态,我猜测你可能使用了ajax并在客户端用javascript动态添加了某些项 1. 在出错页面的 <%@ page %>中加enableviewstatemac="false"无效。 2. 在web.config的 <system.web>节中加

我的问题是加入:

解决 最重要的是检查自己的页面,很可能是你的页面中的问题,多注意下,肯定能发现问题,而这个问题并没有报出你想要的错误 !!! 所以,不一定所有的解决方案都适合你!!!   from:https://www.cnblogs.com/Setme/archive/2012/06/05/2537084.html

龙生   08 Apr 2018
View Details

C# 获取文件名及扩展名

string aFirstName = aFile.Substring(aFile.LastIndexOf("\\") + 1, (aFile.LastIndexOf(".") – aFile.LastIndexOf("\\") – 1)); //文件名 string aLastName = aFile.Substring(aFile.LastIndexOf(".") + 1, (aFile.Length – aFile.LastIndexOf(".") – 1)); //扩展名 string strFilePaht="文件路径"; Path.GetFileNameWithoutExtension(strFilePath);这个就是获取文件名的 还有的就是用Substring截取 strFilePaht.Substring(path.LastIndexOf("\\") + 1, path.Length – 1 – path.LastIndexOf("\\")); strFilePaht.Substring(path.LastIndexOf("."), path.Length – path.LastIndexOf(".")); 或者用openFileDialog1.SafeFileName 这样就能取到该文件的所在目录路径 string path1 = System.IO.Path.GetDirectoryName(openFileDialog1.FileName) + @"\"; string path = Path.GetFileName("C:\My Document\path\image.jpg"); //只获取文件名image.jpg ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// string fullPath = @"\WebSite1\Default.aspx"; string filename = System.IO.Path.GetFileName(fullPath);//文件名 “Default.aspx” string extension = System.IO.Path.GetExtension(fullPath);//扩展名 “.aspx” string fileNameWithoutExtension = System.IO.Path.GetFileNameWithoutExtension(fullPath);// 没有扩展名的文件名 “Default” ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// System.IO.Path.GetFileNam(filePath) //返回带扩展名的文件名 System.IO.Path.GetFileNameWithoutExtension(filePath) //返回不带扩展名的文件名 System.IO.Path.GetDirectoryName(filePath) //返回文件所在目录 ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// //获取当前进程的完整路径,包含文件名(进程名)。 string str = this.GetType().Assembly.Location; […]

龙生   05 Apr 2018
View Details
1 12 13 14 44