C# 如何正确打包生成源代码作为构建一部分的Nuget分布式定制工具

C# 如何正确打包生成源代码作为构建一部分的Nuget分布式定制工具,c#,.net-core,msbuild,nuget,build-tools,C#,.net Core,Msbuild,Nuget,Build Tools,多亏了Nate McMaster的精彩文章,我知道如何将.NET核心控制台应用程序打包为Nuget包,并自动将其自身安装为(在本例中为pre)构建任务 为了测试一切是否正常,我只需要让我的定制工具编写一个公共C#类 但是,我的自定义工具添加的文件实际上不是构建的一部分(实际生成文件的第一个文件),因此引入的类不在第一个构建之后的程序集中(请参见第38行)。但是,由于.NET核心项目现在自动包含项目旁边的所有.cs文件,因此它将新类构建到后续构建的输出中(请参见第57行) 生成的文件不会在清理时

多亏了Nate McMaster的精彩文章,我知道如何将.NET核心控制台应用程序打包为Nuget包,并自动将其自身安装为(在本例中为pre)构建任务

为了测试一切是否正常,我只需要让我的定制工具编写一个公共C#类

但是,我的自定义工具添加的文件实际上不是构建的一部分(实际生成文件的第一个文件),因此引入的类不在第一个构建之后的程序集中(请参见第38行)。但是,由于.NET核心项目现在自动包含项目旁边的所有.cs文件,因此它将新类构建到后续构建的输出中(请参见第57行)

生成的文件不会在清理时消失,但通常不会像MSBuild任务输出的那样运行。但是,因为exec发生在目标文件中,所以我们应该能够访问所有的机制来实现这一点。所以我的问题是:

如何正确执行需要检查项目及其文件并生成源代码(最好是在obj/as say
.g.cs
中)的自定义生成工具(控制台应用程序),将其作为单个生成的一部分编译到生成的程序集中?理想情况下,此生成的文件也不应出现在解决方案资源管理器中


帮助!

在中间文件夹中生成中间文件(CustomTool.g.cs)时(您需要解析它,请参见Refit library:中的示例);您需要将其明确添加为编译项

以目标文件()为例:


$(MSBuildProjectDirectory)obj\$(配置)\
dotnet“$(MSBuildThisFileDirectory)/netcoreapp2.2/CustomTool.dll”
“$(MSBuildProjectDir)”

添加在实际生成之前调用的生成目标。示例取自Refit库:。我不明白。我在这里就是这么做的()。此外,您链接到的示例使用的是
UsingTask
,这是一个MSBuild任务,有自己的一组问题,请参见此处:我想使用包含Exec调用的控制台应用程序+MSBuild glue来执行此操作。您需要将生成的中间文件作为编译项包含在内(请参见第44行)。请注意,解决中间路径(见第11行)。太棒了,更新了我的示例,可能也会将其制作成自定义的dotnet模板!请将此作为答案发布,以便我可以接受。再次感谢!:)请使用我问题中的Github链接查看最终解决方案的完整源代码。谢谢@Styxxy!