как удалить автоматически сгенерированные прото файлы из созданной папки - PullRequest
0 голосов
/ 26 марта 2019

У меня есть MSBuild ниже, чтобы генерировать файлы .cs из моих прототипов. Сборка работает нормально, пока я не сделаю перестройку, когда она будет жаловаться на исходный файл 'generate-proto-output / Trade.cs #, указанный несколько раз.

Как мне удалить файлы .cs перед сборкой / перестройкой каждый раз?

Error

Код серьезности Описание Состояние подавления строки файла проекта Предупреждение CS2002 Исходный файл «generate-proto-output \ ErrorTrade.cs» указан несколько раз MyComp.Trade.Model C: \ dev \ workspaces \ trade-model-workspace \ model \ csharp \ MyComp.Trade.Model

сборка фрагмента в файле 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 (по запросу Ланса)

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

Ответы [ 2 ]

0 голосов
/ 17 июля 2019

Попробуйте добавить CompileOutputs="false" к директиве.Это подавит предупреждение и не потребует удаления файлов перед сборкой csharp protobuf build build интеграции

0 голосов
/ 27 марта 2019

Как мне удалить файлы .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 измените многословность компоновки на Detailed, вы увидите подробное выходное сообщение после каждой сборки и перестройки. Ctrl+F и введите имя цели, где вы найдете подробную информацию о процессе удаления:

enter image description here

Надеюсь, это поможет вам в решении проблем.

...