如何从生成的文件夹中删除自动生成的 proto 文件
Posted
技术标签:
【中文标题】如何从生成的文件夹中删除自动生成的 proto 文件【英文标题】:how to remove auto generated proto files from generated folder 【发布时间】:2019-03-26 12:11:31 【问题描述】:我有下面的 MSBuild 可以从我的 proto 文件生成 .cs 文件。构建工作正常,直到我进行重建,它抱怨源文件“生成的原型输出/Trade.cs#”指定了多次。
如何在每次构建/重建之前删除我的 .cs 文件?
错误
严重性代码描述项目文件行抑制状态 警告 CS2002 源文件 'generated-proto-output\ErrorTrade.cs' 多次指定 MyComp.Trade.Model C:\dev\workspaces\trade-model-workspace\model\csharp\MyComp.Trade.Model
在 csproj 文件中构建 sn-p
<ItemGroup>
<Protobuf Remove="%(RelativePath)generated-proto-output/**/*.cs" />
<Protobuf Include="../../proto/**/*.proto" ProtoRoot="../../proto/" OutputDir="%(RelativePath)generated-proto-output/" GrpcServices="None" />
<Protobuf Update="../../proto/**/*Service.proto" GrpcServices="Both" />
</ItemGroup>
更新 - 完整的 CSProj 文件(根据 Lance 的要求)
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<PackageId>TradeStore.Model</PackageId>
<ProtoIncludes>.;../../proto</ProtoIncludes>
<OutputType>Library</OutputType>
<TargetFramework>netstandard2.0</TargetFramework>
<Protobuf_NoWarnMissingExpected>true</Protobuf_NoWarnMissingExpected>
</PropertyGroup>
<ItemGroup>
<PackageReference Include="Google.Protobuf" Version="3.6.1" />
<PackageReference Include="Grpc" Version="1.19.0" />
<PackageReference Include="Grpc.Tools" Version="1.19.0" PrivateAssets="All" />
</ItemGroup>
<ItemGroup>
<FilesToDelete Include="%(RelativePath)generated-proto-output/*.cs" />
</ItemGroup>
<Target Name="DeleteSpecificFiles" BeforeTargets="Build">
<Message Text="Specific Files: @(FilesToDelete)"/>
<Message Text ="Beginning to delete specific files before build or rebuild..."/>
<Delete Files="@(FilesToDelete)"/>
</Target>
<ItemGroup>
<Protobuf Include="../../proto/**/*.proto" ProtoRoot="../../proto/" OutputDir="%(RelativePath)generated-proto-output/" GrpcServices="None" />
<Protobuf Update="../../proto/**/*Service.proto" GrpcServices="Both" />
</ItemGroup>
</Project>
【问题讨论】:
嗨,有更新吗?如果此问题仍然存在,您能否在此处分享具有类似问题的 csproj 文件或简单示例。? 嗨@LanceLi-MSFT,建议的解决方案不起作用。我无法提供整个项目,但提供了完整的 csproj 文件。请告知删除未按预期进行的问题。 我还用文件夹的完整路径替换了相对路径语法,这也无助于删除文件。我看到消息打印在控制台日志中,但仅此而已,没有文件删除发生。 连完整路径都行不通?请将您的 vs 版本更新到最新版本,并在完整路径中使用“\”而不是“/”。 如果你得到一些消息来显示日志中的指定文件,那么奇怪的是你找不到删除任务(在目标中),确保你在 VS IDE 中运行它。还有你的vs版本是什么,我不确定你的msbuild版本是否支持delete任务。 【参考方案1】:尝试将CompileOutputs="false"
添加到指令中。这将抑制警告,并且不会要求您在构建 csharp protobuf build integration 之前删除文件
【讨论】:
【参考方案2】:如何在每次构建/重建之前删除我的 .cs 文件?
在下面使用BeforeTargets 尝试以下脚本:
<Project...>
...
<ItemGroup>
<FilesToDelete Include="MyPath/*.cs" />
</ItemGroup>
<Target Name="DeleteSpecificFiles" BeforeTargets="build">
<Message Text="Specific Files: @(FilesToDelete)"/>
<Message Text ="Beginning to delete specific files before build or rebuild..."/>
<Delete Files="@(FilesToDelete)"/>
</Target>
</Project>
另外:
没有看到你的 .csproj 的全部内容,所以我不知道为什么你使用的构建 sn-p 不能工作。但是message task 可能有助于输出一些消息,无论引擎是否通过您给定的路径找到文件。
在 Visual Studio 中,如果您 go Tools=>Options=>Project and Solutions=>Build and Run
将构建的详细程度更改为 Detailed
,您将在每次构建和重建后看到详细的输出消息。Ctrl+F
并输入目标名称,您将找到有关删除的详细信息进程:
希望对您的故障排除有所帮助。
【讨论】:
以上是关于如何从生成的文件夹中删除自动生成的 proto 文件的主要内容,如果未能解决你的问题,请参考以下文章
如何从 Protocol Buffers .NET 代码生成 .proto 文件?
如何从根 cpanel (public_html) 重新生成所有文件?
在预构建事件中使用 protogen 从 .proto 文件生成 c# 文件
从 protobuf-net 中的自定义 RuntimeTypeModel 生成 .proto 文件
2022-04-06:go中proto文件能跨平台,那是因为能生成不同语言的代码,做框架开发用protoc+插件生成代码是不合适的,需要解析,请问如何解析?