C# C语言中的自定义代码生成#

C# C语言中的自定义代码生成#,c#,wpf,xml,code-generation,C#,Wpf,Xml,Code Generation,如何在编译时从XML文件生成C#代码?有没有办法做到这一点?下面是我的XML示例: <Resources xmlns="" Version="1.0"> <Language Culture="Neutral"> <Group Name="Default"> <Resource Name="File"><![CDATA[File]]></Resource> <

如何在编译时从XML文件生成C#代码?有没有办法做到这一点?下面是我的XML示例:

<Resources xmlns="" Version="1.0">
    <Language Culture="Neutral">
        <Group Name="Default">
            <Resource Name="File"><![CDATA[File]]></Resource>
        </Group>
        <Group Name="Files">
            <Resource Name="Title"><![CDATA[[~Default.File] Selector]]></Resource>
            <Resource Name="SearchLabel"><![CDATA[Enter Search]]></Resource>
        </Group>
    </Language>
</Resources>


这是一个字符串资源集合。如您所见,它是自引用,而RESX不是。

您可以在预构建步骤中使用XSLT将XML转换为可编译代码。

查看T4模板。T4模板是Visual Studio的一项功能,允许您在生成过程中将任意文件转换为代码


也许你会感兴趣地看一看。无论何时需要生成数据或代码,这都是一个不错的选择。

我知道T4模板是什么。他们不提供编译时代码再生,是吗?在那里,我取消了我的答案。我不确定你所说的“编译时生成”是什么意思,我也不确定。我知道T4模板在保存输入文件时会重新生成。如果输出文件不存在,我不知道他们是否会在构建时重新生成。哦,看,我不知道。我认为它们只不过是VisualStudio项目和项目模板之上的一种扩展。你不应该删除你的答案。我通常避免使用XSLT,就像它是瘟疫一样,但你的确切意思是什么?而且,XSLT不太支持my XML中的自引用功能。XSLT是将XML转换为另一种格式(例如转换为C#)的好选择。只需做一点工作,它就可以处理自引用了。您可以让Visual Studio在构建开始时执行任意命令,其中之一可能是通过XSLT处理器将XML转换为其他格式。已经有人提出了这一建议,并删除了他们的问题。我希望他们没有,因为我知道T4,但我不认为T4支持编译时代码生成,我可能错了。T4非常适合在编译时生成代码,请参阅Scott Hanselmans great old post