1

我有以下 MSBuild 从我的原型文件生成 .cs 文件。构建工作正常,直到我进行重建,它抱怨多次指定的源文件“生成-原型输出/Trade.cs#”。

如何在每次构建/重建之前删除我的 .cs 文件?

错误

严重性代码 描述 项目文件行抑制状态警告 CS2002 源文件 'generated-proto-output\ErrorTrade.cs' 多次指定 MyComp.Trade.Model C:\dev\workspaces\trade-model-workspace\model\csharp\MyComp。贸易模型

在 csproj 文件中构建片段

    <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>
4

2 回答 2

1

尝试添加CompileOutputs="false"到指令。这将抑制警告,并且不会要求您在构建csharp protobuf 构建集成之前删除文件

于 2019-07-17T10:56:56.990 回答
0

如何在每次构建/重建之前删除我的 .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 的全部内容,所以我不知道为什么你使用的构建片段不能工作。但是,无论引擎是否通过您的给定路径找到文件,消息任务都可能有助于输出一些消息。

在 Visual Studio 中,如果您go Tools=>Options=>Project and Solutions=>Build and Run将 build out verbosity 更改为Detailed,您将在每次构建和重建后看到详细的输出消息。Ctrl+F并输入目标名称,您将找到有关删除过程的详细信息:

在此处输入图像描述

希望对您的故障排除有所帮助。

于 2019-03-27T03:12:37.990 回答