.Net Framework

[ASP.NET]强大的网页处理类NSoup

徘徊边缘 提交于 2020-08-20 05:25:07
我们如果在项目中碰到要处理HTML,如果是.NET程序员的话,强烈推荐使用NSoup,不然的话截取字符串是在是太痛苦了。NSoup是一个开源框架,是JSoup的.NET移植版本,使用方法基本一致!NSoup 点击下载 获取网页的html代码 处理网页html [csharp] view plain copy print ? <span style= "font-family: Arial, Helvetica, sans-serif;" >NSoup.Nodes.Document doc = NSoup.NSoupClient.Connect( "http://blog.csdn.net/dingxiaowie2013" ).Get();</span> 或者是自定义html,生成html页面 [csharp] view plain copy print ? NSoup.Nodes.Document doc = NSoup.NSoupClient.Parse(HtmlString); 但是很遗憾NSoup默认的是UTF-8,处理中文会有乱码(对于编码是UTF-8自然会正常,但是有些是GB2312的就可能有乱码) 解决NSoup解析HTML乱码的办法 1.下载网页源代码再处理 [csharp] view plain copy print ? //下载网页源代码 WebClient

.NET Attribute在数据校验上的应用

六眼飞鱼酱① 提交于 2020-08-20 04:24:55
.NET Attribute在数据校验上的应用 Attribute(特性)的概念不在此赘述了,相信有点.NET基础的开发人员都明白,用过Attribute的人也不在少数,毕竟很多框架都提供自定义的属性,类似于Newtonsoft.JSON中JsonProperty、JsonIgnore等 自定义特性 .NET 框架允许创建自定义特性,用于存储声明性的信息,且可在运行时被检索。该信息根据设计标准和应用程序需要,可与任何目标元素相关。 创建并使用自定义特性包含四个步骤: 声明自定义特性 构建自定义特性 在目标程序元素上应用自定义特性 通过反射访问特性 声明自定义特性 一个新的自定义特性必须派生自System.Attribute类,例如: public class FieldDescriptionAttribute : Attribute { public string Description { get; private set; } public FieldDescriptionAttribute(string description) { Description = description; } } public class UserEntity { [FieldDescription("用户名称")] public string Name { get; set; } }

C# dotnet 自己实现一个线程同步上下文

て烟熏妆下的殇ゞ 提交于 2020-08-20 03:38:58
昨天鹏飞哥问了我一个问题,为什么在控制台程序的主线程等待某个线程执行完成之后回来,是在其他线程执行的。而 WPF 在等待某个线程执行完成之后,可以回到主线程执行。其实这是因为在 WPF 和 WinForms 和 ASP.NET 框架里面都自己实现了线程同步上下文,通过线程同步上下文做到调度线程执行。本文就来和小伙伴聊一下如何自己实现一个线程同步上下文 我昨天和鹏飞哥说的时候感觉特别绕,但是实际上过来写了一点代码,又发现很好理解。其实线程同步上下文这个概念在于我能否返回到之前的线程,返回到之前的线程需要哪些内容。而 await 在出现线程切换的时候,是通过调用之前等待之前的线程的线程同步上下文进行线程调度,大概在进入 await 的做法如下 var currentSynchronizationContext = SynchronizationContext.Current; // await 里面的复杂逻辑 currentSynchronizationContext.Post(state => { // 异步状态机调度过来的后面的任务 }, state: null); 可以看到在 await 进入之前存放当前线程的同步上下文,而在执行完成之后,将后面的代码作为异步状态机调度创建委托,通过线程同步上下文的 Post 方法进行调度 那么什么是异步状态机调度过来的后面的任务,其实

在Visual Studio 2019中安装Blend 4.5 SDK

北慕城南 提交于 2020-08-20 02:14:51
Visual Studio 2017安装时可以指定Blend SDK,到Visual Studio 2019时,安装时已经没有这个选项了。 官方提供的只有老版本4.0的安装包。要使用Blend SDK 4.5版本,可以有以下两个方法 1、使用Nuget包 PM> Install-Package Expression.Blend.Sdk -Version 1.0.2 2、下载Blend SDK 4.5安装包安装(附件提供下载) Microsoft Expression Blend Software Development Kit (SDK) for .NET 4.5 作者: zhaotianff 转载请注明出处 来源: oschina 链接: https://my.oschina.net/u/4387680/blog/4407437

.NET服务端开发—多线程使用小结(多线程使用常识)

依然范特西╮ 提交于 2020-08-20 02:08:54
有一段时间没有更新博客了,最近半年都在着写书 《.NET框架设计—大型企业级框架设计艺术》 ,很高兴这本书将于今年的10月份由图灵出版社出版,有关本书的具体介绍等书要出版的时候我在另写一篇文行做介绍。可以先透露一下,本书是博主多年来对应用框架学习的总结,里面包含了十几个重量级框架模式,这些模式都是我们目前所经常使用到的,对于学习框架和框架开发来说是很好的参考资料,大家敬请期待。 好了,进入文章主题。 最近几个月本人一直从事着SOA服务开发工作,简单点讲就是提供服务接口的;从提供前端接口WEBAPI,到提供后端接口WCF\SOAFramework,期间学到了不少有关多线程使用上的经验,这些经验有的是本人自己的错误使用后的经验,有些是公司的前辈的指点,总之这些东西你不遇到过你是不会意识到该如何使用的,所以本人觉得很有必要总结分享给广大和我一样工作在一线的博友们。 我们从服务的处理环节为顺序来介绍: 1.使用入口线程来处理超长时间调用: 任何服务的调用都需要首先进到服务的入口方法中,该方法通常扮演着领域逻辑的门面接口(将系统用例进行服务接口的划分),通过该接口进行用例的调用。当我们需要处理长时间过程时都会面临着头疼的超时异常,如果我们再去设计如何做超时补偿措施就会很复杂而且是没有必要的开销。长时处理的服务调用场景多半在同步数据中,通过某个JobWs(工作服务)定期的来同步数据

.net获取Excel单元格内的信息

给你一囗甜甜゛ 提交于 2020-08-20 02:07:56
两种方式, 一:通过写死具体单元格的行列获取 二:通过标签获取,标签获取实际不如写死单元格方便,因为要获取的位置较多,设置很麻烦 Dim FmObj As New OpenFileDialog FmObj.Filter = "Word文件|*.doc;*.docx|Html文件|*.html" FmObj.Multiselect = False If FmObj.ShowDialog(Me) <> DialogResult.OK Then Exit Sub End If Dim FilePath As String = FmObj.FileName Dim FileExt As String = System.IO.Path.GetExtension(FilePath).ToLower Dim SysWorkPath As String = Application.StartupPath & "\..\" '系统路径 Dim SysTmpPath As String = SysWorkPath & "..\Tmp\" '临时目录路径 Try If FileExt = ".doc" OrElse FileExt = ".docx" Then Dim wordDoc As Interop.Word.Document Dim wordApp As New Microsoft.Office

What&apos;s new in PHP 8 (转载)

纵然是瞬间 提交于 2020-08-20 01:14:17
PHP 8 will be released on November 26, 2020 . It's a new major version, which means that it will introduce some breaking changes, as well as lots of new features and performance improvements. PHP 8 is in very active development right now, with its first alpha expected on June 18, 2020. Because of the breaking changes, there's a higher chance you'll need to make some changes in your code to get it running on PHP 8. If you've kept up to date with the latest releases though, the upgrade shouldn't be too hard, since most breaking changes were deprecated before in the 7.* versions. And don't worry,

Unity3D 入门:安装 Unity3D 并配置与 Visual Studio 的协作开发环境

我的梦境 提交于 2020-08-19 23:57:28
实际上本文不看也罢,因为整个过程除了网速之外基本没啥坑。不过装完可能有一些配置,所以如果不知道的话可以参考本文。 @ TOC 安装 我们共需要安装两款应用: Visual Studio 2019 及 Unity 编辑器组件 Unity Hub 这两款应用安装不分先后,不过建议全部都安装完后再启动,避免单独启动无法运行使用的问题。 安装 Visual Studio 2019 的 Unity 编辑器组件。 Visual Studio 2019 的安装包自带 Unity 编辑器的安装入口。在你的开始菜单中搜索并打开“Visual Studio Installer”。如果你没有安装 Visual Studio 的话,那么还是建议去下载安装一下的。 启动完 Visual Studio Installer 之后,选择“修改”: 在“单个组件”里面勾选两个: Unity 64 位编辑器 Visual Studio Tools for Unity 点击右下角的“修改”后就等待。(可能部分运营商的速度会过慢,这时你可能需要考虑梯子。) 安装 Unity Hub 下载安装地址: Download - Unity 获得授权 如果没有 Unity 的授权,那么你将无法使用 Unity 编辑器,而 Unity 的授权在 Unity Hub 的应用中才能进行(这也是为什么一定要下一个 Unity Hub

.NET 程序员的 Playground :LINQPad

送分小仙女□ 提交于 2020-08-19 23:28:42
如果想执行一个简单的 C# 语句并获得运行结果,通常我们需要做几个步骤才能达成: 打开 Visual Studio 并新建一个控制台项目。 在 Program.cs 中编写代码并保存。 点击运行按钮或者 F5 运行程序并查看结果。 通常来说这并不会产生问题。但如果你和笔者一样为 Visual Studio 安装了各种插件,那么 Visual Studio 的启动时间就会变得很长。在新建项目时,我们必须为这些临时的代码指定名称和保存路径,如果保持默认的名字,就很可能在今后忘记建立这些文件的用途。 使用 LINQPad 可以解决上面的问题。LINQPad 的软件包很小只有二十兆左右,启动速度很快。使用时只需输入想要执行的 C# 语句,并按下 F5 即可: 快捷键 F4 可以打开“查询属性”窗口,在这个窗口中,你可以引用所有在运行时需要的东西,包括:dll、配置文件、json和文本文件等,这些引用的文件将会被复制到输出目录。 同时,LINQPad 也支持直接将 NuGet 包引用到查询中: 也可以将查询保存为一个扩展名为 .linq 的文件,以便复用代码。 语言支持 包括“C# 表达式(C# Expression)”在内,LINQPad 一共支持 4 种语言和 10 种查询类型: C# Expression C# Statement(s) C# Program VB Expression

将JSON字符串反序列化为指定的.NET对象类型

别来无恙 提交于 2020-08-19 23:07:11
前言:   关于将JSON字符串反序列化为指定的.NET对象类型数据常见的场景主要是关于网络请求接口,获取到请求成功的响应数据。本篇主要讲的的是如何通过使用Newtonsoft.Json中的JsonConvert.DeserializeObject<T>(string value)方法将对应的JSON字符串转化为指定的.NET对象类型数据。 方法一、在项目中定义对应的对象参数模型,用于映射反序列化出来的参数(复杂JSON字符串数据推荐使用): 如下是一组.NET后台请求接口成功获取到的复杂的JSON字符串数据: { " id " : " 123456 " , " result " : { " data " : { " liveToken " : " zxcvbnm " , " liveStatus " : 1 , " liveType " : 1 , " deviceId " : " 1234567890 " , " channelId " : " 0 " , " coverUpdate " : 30 , " streams " : [{ " hls " : " zxcv.safd " , " coverUrl " : " http://asdaf " , " streamId " : 0 }], " job " : [{ " status " : true , " period