微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

扩展C#语法的想法

不幸的是C#不允许额外的用户定义语法.但是,我想知道是否有可能通过窃听视频工作室的建立事件来超越这个限制.

假设我有一些语法糖,可以很容易地转换成实际的C#代码.
如果我自动将包含此新语法的cs文档翻译成有效的cs文档,就在构建C#-project之前,该项目可以成功构建.总体而言,这将像我扩展C#语言一样起作用,因为我启动了一个包含非法语法的无效的cs文档,但是它编译.

我意识到这有一些问题,比如这个翻译是永久的.这可能是通过恢复原始cs(应该在调试结束后恢复的,否则一些IDE功能将丢失)来规避.但这些是次要问题.

请让我知道你对这个想法的看法.这是可能的,如果是这样,有人可以指导我一些有用的教程,以达到这个目的?具体来说,tap-into-a-onbuild事件.
搜索过MSDN,但主题(http://msdn.microsoft.com/en-us/library/hthab0h8.aspx)没有帮助我.

解决方法

我不会说这是否是一个好主意,因为我不太了解你想要做什么.我建议这样做:虽然你所提出的是在构建过程中有一些“扩展的C#”源代码文件被转换成常规的cs.

就我个人而言,首先要从“扩展”C#语言的思想中脱颖而出,我认为它是定义一种恰好与C#语法相似的新语言(我假设).使用不同的文件扩展名,以便Visual Studio不会尝试将您的语言编译为C#. (也许.csx?人们喜欢添加字母x,对吗?)

Visual Studio已经以其他方式做了这样的事情,可能不太明显.如果将资源文件添加到项目中,Visual Studio通常还将包含动态生成的“designer.cs”,其中包含基于.resx文件内容生成代码.如果您查看.resx文件属性,您将注意到“自定义工具”属性的值为“ResXFileCodeGenerator”.理论上你应该可以实现你自己的生成器来执行你提到的翻译步骤.事实上,这个翻译不一定是你所说的一次性的事情.翻译过程应该生成一个文件,但保留原始文件.对原始文件的任何更改都会导致Visual Studio重新生成自动生成文件.

我没有试图自己实现自定义生成器,但我认为这些文章是相关的:Implementing Single File GeneratorsRegistering Single File Generators

您的.csproj文件将包含以下内容

<Content Include="Example.csx">
  <Generator>ExtendedCSharpCodeGenerator</Generator>
  <LastGenOutput>Example.cs</LastGenOutput>
</Content>
<Compile Include="Example.cs">
  <AutoGen>True</AutoGen>
  <DesignTime>True</DesignTime>
  <DependentUpon>Example.csx</DependentUpon>
</Compile>

其中Example.csx是包含扩展语法的源代码文件,Example.cs是将Example.csx转换为正常C#代码的结果输出.

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


原文地址:http://msdn.microsoft.com/en-us/magazine/cc163791.aspx 原文发布日期: 9/19/2005 原文已经被 Microsoft 删除了,收集过程中发现很多文章图都不全,那是因为原文的图都不全,所以特收集完整全文。 目录 前言 CLR启动程序
前言 随着近些年微服务的流行,有越来越多的开发者和团队所采纳和使用,它的确提供了很多的优势也解决了很多的问题,但是我们也知道也并不是银弹,提供优势的同时它也给我们的开发人员和团队也带来了很多的挑战。 为了迎接或者采用这些新技术,开发团队需要更加注重一些流程或工具的使用,这样才能更好的适应这些新技术所
最近因为比较忙,好久没有写博客了,这篇主要给大家分享一下PLINQ中的分区。上一篇介绍了并行编程,这边详细介绍一下并行编程中的分区和自定义分区。 先做个假设,假设我们有一个200Mb的文本文件需要读取,怎么样才能做到最优的速度呢?对,很显然就是拆分,把文本文件拆分成很多个小文件,充分利用我们计算机中
在多核CPU在今天和不久的将来,计算机将拥有更多的内核,Microsoft为了利用这个硬件特性,于是在Visual Studio 2010 和 .NET Framework 4的发布及以上版本中,添加了并行编程这个新特性,我想它以后势必会改变我们的开发方式。 在以前或者说现在,我们在并行开发的时候可
c语言输入成绩怎么判断等级
字符型数据在内存中的存储形式是什么
c语言怎么求字符串的长度并输出
c语言函数的三种调用方式是什么
c语言中保留两位小数怎么表示
double的输入格式符是什么