C# 在预构建中生成代码时出现问题

C# 在预构建中生成代码时出现问题,c#,python,C#,Python,对于我的项目,我需要为GRPC自动生成代码。我使用.bat/.sh文件生成此代码 但是当我在预构建中生成代码时,代码失败,因为它包含错误 然后所有的错误都显示为op,但它们很快就消失了,因为现在它正在查找生成的代码,并且没有错误 我尝试使用脚本名作为prebuild命令运行脚本,其中build决定脚本的扩展 我也尝试过从python运行命令,甚至在生成完成后添加睡眠,但遗憾的是没有任何效果 visual studio中的预生成脚本: python generate.py python脚本: 导

对于我的项目,我需要为GRPC自动生成代码。我使用.bat/.sh文件生成此代码

但是当我在预构建中生成代码时,代码失败,因为它包含错误

然后所有的错误都显示为op,但它们很快就消失了,因为现在它正在查找生成的代码,并且没有错误

我尝试使用脚本名作为prebuild命令运行脚本,其中build决定脚本的扩展

我也尝试过从python运行命令,甚至在生成完成后添加睡眠,但遗憾的是没有任何效果

visual studio中的预生成脚本:

python generate.py
python脚本:

导入系统 导入操作系统 导入时间 打印(“工作目录:+os.getcwd()) 如果系统平台中出现“赢”: 操作系统('generate.bat') 其他: os.system(“bash\”“+os.path.dirname(os.path.realpath(\uuu file\uuuu))+”/generate.sh'+“\”) 打印(“完成安装”) 时间。睡眠(5) 打印(“完成定稿”) 生成输出:

1>done installing
1>done finalising
1>CSharp\TimelineEvents.cs(18,32,18,48): error CS0246: The type or namespace name 'PayloadOneofCase' could not be found (are you missing a using directive or an assembly reference?)
1>CSharp\FrontendEndpointGrpc.cs(28,31,28,51): error CS0246: The type or namespace name 'RegisterFileResponse' could not be found (are you missing a using directive or an assembly reference?)
1>Done building project "Protocol.csproj" -- FAILED.

我希望构建会等待预构建,但情况似乎并非如此,因为第一次运行generate时构建失败,但当我再次构建它时,它运行正常

我通过更改项目文件解决了此问题:

  <Target Name="PreBuild" BeforeTargets="PreBuildEvent">
    <Exec Command="python generate.py" />

为此:

  <Target Name="Generate" BeforeTargets="BeforeBuild">
    <Message Text="Generating GRPC code" />
    <Exec Command="python generate.py" />
    <ItemGroup>
      <Compile Include="CSharp\**\*.cs" />
    </ItemGroup>


这解决了我的问题

原因似乎是选择了操作系统。我相信
os.system
在创建子shell后会立即返回,而as
os.subprocess
将在当前进程中运行,因此会等到它完成后再返回。您好,谢谢您的回答。我会尝试这个方法,但当我只是将generate.bat作为预构建时,它也会失败,所以我不知道这是否是问题所在。好的,我只是尝试了这个方法,但遗憾的是它没有起作用