【C#编译器对语言进行了哪些扩展?】教程文章相关的互联网学习教程文章

c# – Microsoft CCI – 资源,编写编译器的参考资料

前段时间,我正在研究编译器,我使用System.Reflection从我的AST生成代码(IL).现在,我已经想到了另一个我想要处理的编译器(它将是另一个宠物项目,没有任何将在生产代码中使用,至少,现在不是). 如您所知,宠物项目比生产代码有一个很大的优势:您可以尝试并失败.所以,我决定尝试使用Microsoft’s CCI编写编译器. 我发现的唯一好的参考是基本语言的示例编译器(这是CCI在codeplex上的一部分),但是,我更喜欢有一些其他资源,更像是教程,书籍...

C#命令行反编译器

我希望将很多程序集反编译成C#.我找到了几个可视化反编译的工具.但是我想知道是否有一个工具可以从命令行进行反编译(类似于ildasm / OUT). 动机是有100个程序集,我不想打开每个程序集并保存为.cs文件. .NET Reflector似乎有一批批量装配,但它没有批量保存.所以我在考虑编写一个遍历每个程序集的脚本,并使用命令行命令对其进行反编译.解决方法:如果您希望有一个为程序集生成C#代码的程序,Jon Gallant最近有一篇关于使用Telerik的Jus...

配置Visual Studio 2012以使用Mono的C#编译器而不是默认的csc.exe

我在一个名为Unity3D的游戏引擎中工作,其脚本系统在Mono上运行.默认情况下,Unity使用修改后的Mono版本来开发/编译脚本.我正在设置我的Visual Studio以更好地使用Unity项目及其与.NET有关的各种问题. 我目前卡住尝试配置Visual Studio来处理我的各种程序集的编译. Unity使用旧Mono编译器的修改版本,因此我不能使用默认的csc.exe来构建程序集. 我理想的解决方案是Visual Studio的Build Solution选项,用我指向的编译器来处理我的项目,...

编译器如何在c#中优化异常过滤器?【代码】

在C#6中出现异常过滤器.所以我们可以写一些重试逻辑public static void Retry(){int i = 3;do{try{throw new Exception();}catch (Exception) when (--i < 0){throw;}catch (Exception){Thread.Sleep(10);}} while (true);}在控制台应用程序中它很棒.但是如果我们用“优化代码”创建网站应用程序,那么将会有无限循环,因为’i’的值永远不会改变.没有“优化代码”,这按预期工作.如何测试:在空的asp.net网站应用程序中创建(我尝试.n...

C#5和.Net 4.5 – 编译器技巧或库支持?

我已经阅读了很多关于异步/等待被实现(内部)作为状态机,并且想知道我是否可以使用VS2012编译器,同时仍然使用Net版本4作为我的运行时来使用这些新功能? 我记得我可以使用Net 4的几个新功能,同时仍然使用Net 3.5但使用VS2010编译器. 谢谢,马丁.解决方法:从Visual Studio异步编程页面直接: http://msdn.microsoft.com/en-us/vstudio/async.aspxIf your Visual Studio 2012 project needs to target Silverlight 5 or.NET Framework ...

c# – 我收到编译器错误消息:CS1061:当我单击报告按钮时【代码】

我尝试添加文件来更新应用程序,以便在我在IIS 7上托管的Web应用程序上生成新的Excel报告,但是当我点击生成应用程序时,我收到以下错误 编译错误描述:编译服务此请求所需的资源时发生错误.请查看以下特定错误详细信息并相应地修改源代码. 编译器错误消息: CS1061:'ASP.reportmonthlyreturns_aspx' does not contain a definition for 'btnGenerator_Click'and no extension method 'btnGenerator_Click' accepting a first argume...

C#编译器 – 未分配的DateTime字段和本地变量【代码】

出于好奇: 此代码有效并执行:public class Program {private static DateTime date;public static void Main(){Console.WriteLine(date.ToString("o"));} }看它在.NET Fiddle上工作 但这甚至没有编译(未分配的局部变量):public class Program {public static void Main(){DateTime date;Console.WriteLine(date.ToString("o"));} }看到它(不是)在.NET Fiddle工作 DateTime是一个不可为空的值类型,因此不需要将其分配和初始化为具...

有没有理由C#/ .NET编译器没有警告Dispose()?

我正在编写一些IDisposable代码时,我正在考虑这个问题. 对于开发人员来说,直接调用Dispose()或者如果对象的生命周期允许使用using构造,这是一种很好的做法. 我们需要担心的唯一实例是由于代码的机制而无法使用的实例.但是,在某些时候,我们应该在这些对象上调用Dispose(). 鉴于C#编译器知道一个对象实现了IDisposable,理论上它也可以知道Dispose()从未被调用过它(它是一个非常聪明的编译器!).它可能不知道程序员什么时候应该这样做...

c# – 编译器模糊错误不一致【代码】

在this question中,定义了以下类:public class Program {int n = 0;public void Print(){Console.WriteLine(n);}public Program(){}public Program(int num = 10){n = num;} }现在,显然由于第二个构造函数上的可选参数,使用新的Program()调用构造函数是不明确的.在阅读本文时,不清楚n是否应该用0或10初始化. 然而: 问题的实际报告似乎不一致.设置这个类并使用它我能够在C#,VB.Net和.Net 4或.Net 4.5中使用新的Program().所有测试...

c# – 当结构最终变成约束时(由于接口 – 并且编译器变得脾气暴躁)该怎么办?【代码】

编辑:我得出的结论是,不可能满足我所有的要求! 原始问题……我似乎陷入了一个不幸的困境.它归结为结构不是有效的通用约束 – 这是完全理智的,但问题出现了…… 为什么你想要将泛型约束到结构?好吧,我真的不想这样做 – 这是界面设计的结果. 我将通过完成导致我在那里的过程来解释我的困境: 假设我有一个(可能)性能关键泛型方法的接口,即:interface ISomeInterface {Result RelativeComputation(ISomeInterface other); }然而,...

c# – Visual Studio Code和Visual Studio是否使用相同的编译器?

我想知道我是否可以信任Visual Studio Code使用与Visual Studio相同的标准进行编译,并避免在虚拟机上运行Visual Studio.解决方法:Visual Studio Code使用Roslyn平台(参见here).与Visual Studio 2015相同.在Linux和OS X上使用Mono编译器. IDE本身如果基本上是GitHub Atom的扩展(这很棒),当然,它甚至不会接近完整Visual Studio的强大功能.但它非常干净,易于使用.特别是新的ASP.NET 5 Web应用程序非常像Node.js / Angular / etc应用程...

什么是用于指定.net框架版本的C#编译器选项

我完全看了这两篇msdn文章C# Compiler Options Listed Alphabetically和C# Compiler Options Listed by Category中的编译器选项,用于指定可以在命令行构建中使用的目标框架版本.我知道我们可以使用supportedRuntime元素在app.config中指定框架版本. 我们是否也可以在web.config中使用此元素(配置> startup> supportedRuntime)(在asp.net应用程序的情况下)? 我只需要命令行开关就不需要这样做了.我只是因为好奇才知道这个问题而问这...

c# – Azure WebApp部署:抛出表达式导致编译器错误CS1525【代码】

我正在使用C#中的新throw表达式:_configurator = configurator ?? throw new ArgumentException(nameof(configurator));它在Visual Studio 2017中编译得很好但是当从我的版本控件(在本例中为BitBucket)部署到我的临时插槽时它失败了:Repositories\UserRepository.cs(46,45): error CS1525: Invalid expression term 'throw' [D:\home\site\repository\foo\foo.csproj]这发生在我项目的几个地方. 如何设置我的WebApp以允许编译这个...

c# – 显式null检查与null-coalescing运算符的编译器评估?【代码】

请考虑以下代码,该代码使用两种略有不同的方法来检查_instance并在尚未设置时分配它.class InstantiationTest {private Object _instance;public void Method1() {if(_instance == null) {_instance = new Object();}}public void Method2() {_instance = _instance ?? new Object();} }VS或Resharper不断为我的显式空检查加下划线,并提示我使用null-coalescing运算符进行重构. 我想知道编译器是否足够智能来检测Method2()中的情况...

c# – 具体来说,编译器如何积极优化生成的字节码?【代码】

我一直在阅读各种编译器的功能,并且我遇到了许多编译器报告执行的“积极优化”一词.例如,LLVM引用了以下编译时优化功能: >内存/指针特定>循环变换>数据流>算术>死代码消除>内联 具体是什么意思?假设您有以下代码片段,如何优化生成的字节代码以比编译器生成的更快地运行?我特别感兴趣的是优化JIT驱动的运行时的字节码,例如C#,Java和Flash.这很棘手,因为JIT只支持处理器通常执行的操作码的子集,这限制了您可以执行的优化量.尽管如...