roslyn

Getting a SemanticModel of a cshtml file?

空扰寡人 提交于 2020-05-12 22:23:27
问题 I'd like to use Roslyn to analyze semantic information within the context of a block of C# code inside a Razor View. Is there any way (within Visual Studio 2015, or even in a unit test) to get the SemanticModel that represents this code? 回答1: Razor files contain a C# projection buffer with the generated C# code (including the parts that you don't write yourself). This buffer has full Roslyn services and is exactly what you're looking for. You need to walk through the TextView's BufferGraph

Compiler Error Message: The compiler failed with error code -532462766

ⅰ亾dé卋堺 提交于 2020-05-09 18:27:14
问题 This one seems to be originated after upgrading from vs2015 to vs2017. The error is Compiler Error Message: The compiler failed with error code -532462766. Some notes.. It works great on localhost. The target framework is 4.5.2 I removed and re-installed all the nuget packages Whie tracing i have ModuleName AspNetInitializationExceptionModule Notification BEGIN_REQUEST HttpStatus 500 HttpReason Internal Server Error HttpSubStatus 0 ErrorCode The operation completed successfully. And the full

How to replace C# keywords with string subsitutes using Roslyn?

你离开我真会死。 提交于 2020-05-09 04:50:28
问题 I'd like to use Roslyn to load C# sources and write it to another file, replacing keywords with substitutes. Sample: for (int i=0; i<10; i++){} translated to foobar (int i=0; i<10; i++){} What the syntax for such operation could look like? 回答1: I don't know how well is this going to work, but you can replace each ForKeyword token with another ForKeyword token, but this time with your custom text. To do that, you can use CSharpSyntaxRewriter : class KeywordRewriter : CSharpSyntaxRewriter {

【转】C#各个版本中的新增特性详解

笑着哭i 提交于 2020-05-07 19:55:56
转自:http://www.cnblogs.com/knowledgesea/p/6694979.html 序言 自从2000年初期发布以来,c#编程语言不断的得到改进,使我们能够更加清晰的编写代码,也更加容易维护我们的代码,增强的功能已经从1.0搞到啦7.0甚至7.1,每一次改过都伴随着.NET Framework库的相应支持,也不断的带给我们期待与惊喜。下面我们就对c#一路走到现在,做一个回顾与学习。 C#语言目标与前行 c#的设计目标是有以下几点: 旨在是一种简单,现代,通用的面向对象编程语言。 语言及其实现应该为软件工程原理提供支持,例如强类型检查,数组维度检查,未初始化的变量引用检测以及自动垃圾收集。软件的鲁棒性,耐久性和程序员的生产力很重要。 旨在用于开发适用于分布式环境中部署的软件组件。 便携性对于源代码和程序员非常重要,特别是已经熟悉C和C ++的程序员。 支持国际化是非常重要的。 C#适用于为托管和嵌入式系统编写应用程序,从使用复杂的操作系统到非常小的专用功能都非常适用。 虽然C#应用程序在内存和处理能力要求方面是经济的,但是该语言并不打算直接用C或汇编语言直接与性能和尺寸进行竞争。 c#版本 c#版本中添加的功能: C#2.0 泛型 部分类型 匿名方法 迭代器 可空类型 Getter / setter单独可访问性 方法组转换(代表) Co- and Contra

.NET Core技术研究-通过Roslyn代码分析技术规范提升代码质量

家住魔仙堡 提交于 2020-05-07 16:21:26
随着团队越来越多,越来越大,需求更迭越来越快,每天提交的代码变更由原先的2位数,暴涨到3位数,每天几百次代码Check In,补丁提交,大量的代码审查消耗了大量的资源投入。 如何确保提交代码的质量和提测产品的质量,这两个是非常大的挑战。 工欲善其事,必先利其器。在上述需求背景下,今年我们准备用工具和技术,全面把控并提升代码质量和产品提测质量。即: 1. 代码质量提升: 通过自定义代码扫描规则,将有问题的代码、不符合编码规则的代码扫描出来,禁止签入 2. 产品提测质量: 通过单元测试覆盖率和执行通过率,严控产品提交质量,覆盖率和通过率达不到标准,无法提交测试。 准备用2篇文章,和大家分享我们是如何提升代码质量和产品提测质量的。今天分享第一篇:通过Roslyn代码分析全面提升代码质量。 一、什么是Roslyn Roslyn 是微软开源的 .NET 编译平台(.NET Compiler Platform)。 编译平台支持 C# 和 Visual Basic 代码编译,并提供丰富的代码分析 API。 利用Roslyn可以生成代码分析器和代码修补程序,从而发现和更正编码错误。 分析器不仅理解代码的语法和结构,还能检测应更正的做法。 代码修补程序建议一处或多处修复,以修复分析器发现的编码错误。 我们写下面一堆代码,Roslyn编译器会有如下提示: 通过编写分析器和代码修补程序,主要服务以下场景

.NET Core技术研究-通过Roslyn代码分析技术规范提升代码质量

浪尽此生 提交于 2020-05-07 12:52:30
随着团队越来越多,越来越大,需求更迭越来越快,每天提交的代码变更由原先的2位数,暴涨到3位数,每天几百次代码Check In,补丁提交,大量的代码审查消耗了大量的资源投入。 如何确保提交代码的质量和提测产品的质量,这两个是非常大的挑战。 工欲善其事,必先利其器。在上述需求背景下,今年我们准备用工具和技术,全面把控并提升代码质量和产品提测质量。即: 1. 代码质量提升: 通过自定义代码扫描规则,将有问题的代码、不符合编码规则的代码扫描出来,禁止签入 2. 产品提测质量: 通过单元测试覆盖率和执行通过率,严控产品提交质量,覆盖率和通过率达不到标准,无法提交测试。 准备用2篇文章,和大家分享我们是如何提升代码质量和产品提测质量的。今天分享第一篇:通过Roslyn代码分析全面提升代码质量。 一、什么是Roslyn Roslyn 是微软开源的 .NET 编译平台(.NET Compiler Platform)。 编译平台支持 C# 和 Visual Basic 代码编译,并提供丰富的代码分析 API。 利用Roslyn可以生成代码分析器和代码修补程序,从而发现和更正编码错误。 分析器不仅理解代码的语法和结构,还能检测应更正的做法。 代码修补程序建议一处或多处修复,以修复分析器发现的编码错误。 我们写下面一堆代码,Roslyn编译器会有如下提示: 通过编写分析器和代码修补程序,主要服务以下场景

.NET Core技术研究-通过Roslyn代码分析技术规范提升代码质量

☆樱花仙子☆ 提交于 2020-05-07 08:44:01
随着团队越来越多,越来越大,需求更迭越来越快,每天提交的代码变更由原先的2位数,暴涨到3位数,每天几百次代码Check In,补丁提交,大量的代码审查消耗了大量的资源投入。 如何确保提交代码的质量和提测产品的质量,这两个是非常大的挑战。 工欲善其事,必先利其器。在上述需求背景下,今年我们准备用工具和技术,全面把控并提升代码质量和产品提测质量。即: 1. 代码质量提升: 通过自定义代码扫描规则,将有问题的代码、不符合编码规则的代码扫描出来,禁止签入 2. 产品提测质量: 通过单元测试覆盖率和执行通过率,严控产品提交质量,覆盖率和通过率达不到标准,无法提交测试。 准备用2篇文章,和大家分享我们是如何提升代码质量和产品提测质量的。今天分享第一篇:通过Roslyn代码分析全面提升代码质量。 一、什么是Roslyn Roslyn 是微软开源的 .NET 编译平台(.NET Compiler Platform)。 编译平台支持 C# 和 Visual Basic 代码编译,并提供丰富的代码分析 API。 利用Roslyn可以生成代码分析器和代码修补程序,从而发现和更正编码错误。 分析器不仅理解代码的语法和结构,还能检测应更正的做法。 代码修补程序建议一处或多处修复,以修复分析器发现的编码错误。 我们写下面一堆代码,Roslyn编译器会有如下提示: 通过编写分析器和代码修补程序,主要服务以下场景

ExternalException (0x80004005): 无法执行程序

浪子不回头ぞ 提交于 2020-05-01 03:19:30
今天更新系统上传到阿里云服务器,报错如下: “/”应用程序中的服务器错误。 组策略阻止了这个程序。要获取详细信息,请与系统管理员联系。 说明: 执行当前 Web 请求期间,出现未经处理的异常。请检查堆栈跟踪信息,以了解有关该错误以及代码中导致错误的出处的详细信息。 异常详细信息: System.ComponentModel.Win32Exception: 组策略阻止了这个程序。要获取详细信息,请与系统管理员联系。 源错误: 执行当前 Web 请求期间生成了未经处理的异常。可以使用下面的异常堆栈跟踪信息确定有关异常原因和发生位置的信息。 堆栈跟踪: [Win32Exception (0x80004005): 组策略阻止了这个程序。要获取详细信息,请与系统管理员联系。] [ExternalException (0x80004005): 无法执行程序。所执行的命令为 "f:\usr\LocalUser\qxw2309550136\bin\roslyn\csc.exe" /shared /keepalive:"10" /noconfig /fullpaths @"C:\Windows\Microsoft.NET\Framework\v4.0.30319\Temporary ASP.NET Files\root\8726d835\c1ae0133\lx3hbi43.cmdline"。]

Roslyn 如何使用 MSBuild ZipDirectory 压缩文件夹

*爱你&永不变心* 提交于 2020-04-24 23:44:56
在 csproj 文件或在 NuGet 的 Targets 文件中可以通过 Target 调用 ZipDirectory 任务用来制作压缩包,在构建的时候,可以用这个方法将某个输出文件夹等内容压缩输出 使用 ZipDirectory 有两个必要的属性,一个是 DestinationFile 表示输出的 zip 文件的路径,另一个是 SourceDirectory 表示将被压缩的文件夹路径 如果 DestinationFile 文件期望进行覆盖,也就是如果 DestinationFile 路径已经存在,将覆盖写入新的 zip 文件,可以使用 Overwrite 属性 使用方法如下 <Target Name="ZipOutputPath" AfterTargets="Build"> <ZipDirectory SourceDirectory="$(OutputPath)" DestinationFile="$(MSBuildProjectDirectory)\lindexi.zip" /> </Target> 将上面代码放在 csproj 文件,构建将会在 csproj 文件所在文件夹找到创建的文件 本文代码放在 github 欢迎小伙伴访问 ZipDirectory Task 我搭建了自己的博客 https://blog.lindexi.com/ 欢迎大家访问,里面有很多新的博客

实现一个基于动态代理的 AOP

橙三吉。 提交于 2020-04-24 02:31:55
实现一个基于动态代理的 AOP Intro 上次看基于动态代理的 AOP 框架实现,立了一个 Flag, 自己写一个简单的 AOP 实现示例,今天过来填坑了 目前的实现是基于 Emit 来做的,后面有时间再写一个基于 Roslyn 来实现的示例 效果演示 演示代码: 切面逻辑定义: public class TryInvokeAspect : AbstractAspect { public override void Invoke(MethodInvocationContext methodInvocationContext, Action next) { Console.WriteLine($"begin invoke method {methodInvocationContext.ProxyMethod.Name} in {GetType().Name}..."); try { next(); } catch (Exception e) { Console.WriteLine($"Invoke {methodInvocationContext.ProxyMethod.DeclaringType?.FullName}.{methodInvocationContext.ProxyMethod.Name} exception"); Console.WriteLine(e); }