我们有一个非常复杂的多阶段构建系统:
重要的是,在第一阶段,一组简短的XML文件被转换为C#文件。各种.csproj文件会自动更新,以添加生成的任何新C#文件,并删除任何不再相关的C#文件。
这就是我们的软件已经建立多年的方式,这对我们来说是一个巨大的胜利。只有几千行XML自动生成了超过一百万行代码:我们使用自定义代码生成器的整体设计绝对不会改变!
但是,代码生成过程在 Visual Studio外部作为手动步骤。我们非常希望将代码生成过程集成到标准的Visual Studio构建中。
我们的计划是将代码生成作为预生成事件在另一个空的.csproj文件上运行,并且在Visual Studio有机会之前生成 next .csproj文件得到它(使用依赖关系来控制构建顺序)。
不幸的是,Visual Studio的构建缓存逻辑失败了:一个.csproj显然无法在构建期间修改另一个.csproj文件,因为Visual Studio缓存了第二个.csproj文件的内容。
如果你尝试的话,Visual Studio会大声抱怨,带有令人愉快的不可思议的错误信息和一般的毛刺。
那么有办法解决这个问题吗? 有没有办法在Visual Studio构建过程中生成大量的C#代码?
或者我们是否坚持将它作为Visual Studio外部的单独手动过程?