包括由预生成事件生成的源文件



我想从平面缓冲区模式生成C#类,并在另一个项目中使用这些类。

为此,我需要调用flatbuffer模式编译器来生成类。我不想签入类文件,而是在构建过程中生成它们,这样我就不需要手动更新它们。

假设一个C#解决方案有两个项目:

MessageDefinitions.csproj
MessageConsumer.csproj

MessageDefinitions包含一个预生成事件,该事件调用扁平缓冲区模式编译器,并将生成的C#源文件放入文件夹MessageDefinitions/Messages/中。

然后,我想在MessageConsumer(它引用了MessageDefinitions(中使用生成的类型。

问题是编译的MessageDefinitions.dll不包含生成的类型,因此生成MessageConsumer失败。如果我第二次编译,则编译成功,因为MessageDefinitions/Messages/中的文件已经存在,并且包含在编译的输出中。

有没有办法让编译器在第一次生成时将预生成事件生成的源文件包含在MessageDefinitions中?

感谢任何帮助,致以亲切的问候。

MessageDefinitions.csproj中添加以下内容。我根据MSBuild结构化日志查看器(强烈建议在使用MSBuild时使用该工具(的作者的要点AddGeneratedFile.csproj对其进行了改编和简化。

<PropertyGroup>
<MessageClassesPath>MessageDefinitions/Messages/**/*.cs</MessageClassesPath>
</PropertyGroup>
<Target Name="AddMessageClasses" AfterTargets="PreBuildEvent" BeforeTargets="BeforeCompile;CoreCompile">
<ItemGroup>
<Compile Include="$(MessageClassesPath)" />
</ItemGroup>
</Target>

最新更新