是否可以在Visual Studio中编译之前立即添加C#类

是否可以在Visual Studio中编译之前立即添加C#类,c#,visual-studio,compilation,roslyn,C#,Visual Studio,Compilation,Roslyn,现在,我以编程方式生成源代码,并在编译之前创建一些类,显然是将其添加到解决方案中的项目中。也许可以在编译之前“静默”添加类,而无需在磁盘中创建.cs文件,也无需在解决方案资源管理器中显示这些类(可能使用Roslyn) 编辑:我不能使用任何运行时代码生成。您可以将类放在单独的DLL(类库)中。当您使用另一个解决方案创建该DLL时,您将不会在包含它们的项目的解决方案资源管理器中看到这些类 不要忘记在主项目中添加对DLL(类库)的引用 您可能可以使用MSBuild做一些事情,创建一个自定义的项目目标来

现在,我以编程方式生成源代码,并在编译之前创建一些类,显然是将其添加到解决方案中的项目中。也许可以在编译之前“静默”添加类,而无需在磁盘中创建.cs文件,也无需在解决方案资源管理器中显示这些类(可能使用Roslyn)


编辑:我不能使用任何运行时代码生成。

您可以将类放在单独的DLL(类库)中。当您使用另一个解决方案创建该DLL时,您将不会在包含它们的项目的解决方案资源管理器中看到这些类


不要忘记在主项目中添加对DLL(类库)的引用

您可能可以使用MSBuild做一些事情,创建一个自定义的项目目标来完成这项工作,但我从来没有这样做过

我最近所做的工作现在可以在基于DNX的ASP.NET 5平台上实现,这是一个称为元编程的概念。我已经写了一篇关于这个概念的文章,特别是在编译时生成代码的例子。在我的特定示例中,我得到了一个不会编译的类,但是通过引入
ICompileModule
,我可以在编译时填充缺少的方法
return
语句

这是可能的,因为在基于DNX的应用程序中,
RoslynCompiler
类实际上支持在编译时加载
ICompileModule
的实例,然后在主项目编译之前运行这些实例。这使您能够在编译器完成其工作之前在编译中添加/删除/替换语法树

如果你想在ASP.NET5上开发,这可以让你做你需要的事情,但我不知道你会怎么做,否则

在我看来,这是一个很明显的现象

我问了一个问题,我自己也回答了这个问题,关于设计一个编译时解决方案,为另一个场景执行代码生成:


最后,这可能有用的其他示例,也是我一直在玩弄的,是从嵌入程序集中的
.sql
文件生成EF风格迁移类的能力。所有这些场景现在都更容易在ASP.NET 5+Roslyn上实现。

在不正确了解您的用例的情况下,这里有一个想法

创建侦听“生成时”事件的VSIX

初始化构建后,VSIX将创建新类*

同一VSIX还将侦听“构建完成”事件

构建完成后,VSIX将拆除新类

*您的问题指出不应在光盘上创建类,因此VSIX可以

  • 将类创建为内存流(?)

  • 将新类作为代码添加到光盘上的现有文件中

  • 在C:\Temp或其他地方将新类创建为光盘(或云?)上的新文件

  • 新类可以是分部类的一部分(应用程序中的真实分部类或空的新虚拟分部类)

在任何情况下,都需要(由vsix)自动编辑项目文件以引用新文件。大概你想让项目文件还原到另一边

如果你不像我,你想下楼弄脏,你可以随时干预IL,但你只能靠自己


如前所述,在不知道您为什么需要它的情况下,很难提供更明确的答案。

您是否希望实现类似的目标?请检查这一点:虽然它们确实生成.cs文件,但我通常用于编译后生成/插入代码。您应该提供更多信息-为什么要这样做?你的限制是什么?你试过什么?