扩展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#代码的结果输出.

相关文章

原文地址:http://msdn.microsoft.com/en-us/magazine/cc163...
前言 随着近些年微服务的流行,有越来越多的开发者和团队所采...
最近因为比较忙,好久没有写博客了,这篇主要给大家分享一下...
在多核CPU在今天和不久的将来,计算机将拥有更多的内核,Mic...
c语言输入成绩怎么判断等级
字符型数据在内存中的存储形式是什么