JBS*_*rro 10 c# visual-studio vs-extensibility
遗憾的是,C#不允许使用额外的用户定义语法.但是我想知道是否有可能通过进入视觉工作室onbuild-event来超越这个限制.
假设我有一些语法糖,可以很容易地转换成实际的C#代码.如果我要自动将包含这种新语法的cs文档转换为有效的cs文档,那么在构建C#项目之前,项目就可以成功构建.总的来说,这就好像我已经扩展了C#语言,因为我开始使用包含非官方语法的无效cs文档,但无论如何都编译了.
我意识到这有一些问题,例如这种翻译是永久性的.这可以通过恢复原始cs来避免(在调试结束后应该恢复,否则会丢失一些IDE功能).但这些是次要问题.
请让我知道你对这个想法的看法.这是可能的,如果是这样,有人可以指导我一些有用的教程,以实现这一目标吗?特别是点击进入建筑事件.我搜索过MSDN,但主题(http://msdn.microsoft.com/en-us/library/hthab0h8.aspx)对我没有帮助.
Dr.*_*ice 10
我不会说这是不是一个好主意,因为我不太了解你想要做什么.不过我建议这样做:你提出的建议是使用某种"扩展C#"源代码文件,在构建过程中将其转换为常规cs.
就个人而言,我首先要澄清你正在"扩展"C#语言的想法; 我会把它想象为定义一种恰好在语法上类似于C#的新语言(我假设).使用不同的文件扩展名,以便Visual Studio不会尝试将您的语言编译为C#.(也许.csx?人们喜欢加上字母x,对吧?)
Visual Studio已经以其他方式做了这种事情,可能并不那么明显.如果将资源文件添加到项目中,Visual Studio通常还会包含一个动态生成的"designer.cs",其中包含基于.resx文件内容生成的代码.如果查看.resx文件的属性,您会注意到"自定义工具"属性的值为"ResXFileCodeGenerator".从理论上讲,您应该能够实现自己的生成器来执行您提到的转换步骤.事实上,正如你所说,这种翻译不一定是一次性的.翻译过程应该生成一个新文件,但原始文件保持不变.对原始文件的任何更改都会导致Visual Studio重新生成自动生成的文件.
我自己没有尝试过实现自定义生成器,但我认为这些文章是相关的: 实现单个文件生成器,以及注册单个文件生成器
您的.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>
Run Code Online (Sandbox Code Playgroud)
其中Example.csx是包含扩展语法的源代码文件,而Example.cs是将Example.csx转换为普通C#代码的结果输出.
归档时间: |
|
查看次数: |
577 次 |
最近记录: |