NET Core - 在构建过程中创建的部分类,仅从第二次运行开始使用

问题描述 投票:0回答:1

我有一个 Visual Studio 2019 解决方案,其中包含的项目已从 .NET Framework 4.8 转换为 NET Core 8。在 VS2019 中,构建项目和解决方案没有任何问题。

现在我有了包含几个 NET Core 项目的 Visual Studio 2022 NET Core 8 解决方案,并且以下所有步骤都已在 VS2019 中执行,但一切都在那里正常工作。其中一个项目包含两个部分类 A 和 B(这些部分始终存在并且是手动编写的)。在构建过程中,通过外部生成器应用程序(通过 Exec Command 调用)在 PreBuildEvent 中创建另外两个文件(其中还包含部分类 A 和 B )。生成的文件与现有类位于同一目录中。自动生成的文件包含部分类 A 和 B,以及手动创建的部分类 A 和 B 中使用的方法。这些文件也会被 Visual Studio 自动识别并显示在解决方案资源管理器中。

第一次构建解决方案或对应的项目时,文件会正确生成。但编译时出现错误(错误CS0103),这表明所使用的某些函数不可用。这些功能在自动生成的分部类中实现。

如果我直接再次运行构建过程,一切都会正常。

如果我手动删除生成的文件,问题可以重现。

如果我使用 false 并将以下内容添加到

<Target BeforeTargets="PreBuildEvent">

<ItemGroup>
   <Compile Include="*.cs" />  
</ItemGroup>

然后添加文件并进行构建。一次。如果我手动删除文件,目标步骤将不再执行。

我尝试了一些方法,有些方法确实有效,但仅限于该项目。当我构建解决方案时,我总是第一次收到此错误。一旦文件可用,第二次就可以工作了。

.net-core msbuild pre-build-event
1个回答
0
投票

在构建管道中发生的许多事件中,对于您的场景来说,

PreBuildEvent
的运行有点太晚了。这些文件需要在早期的构建步骤中生成,否则生成的文件本身不会包含在编译过程中。为此,您可以使用
BeforeBuild
事件来生成它们。

注意:这是受到这个回答“MSBuild中PreBuildEvent、BeforeBuild目标和BeforeCompile目标之间的区别是什么?”的启发,它提供了更多详细信息,并通过下面的第一条评论。

© www.soinside.com 2019 - 2024. All rights reserved.