У нас есть .NET Core .csproj
, где мы используем пакет NuGet gRPC для генерации исходного кода C #. Проблема в том, что dotnet clean
удалит сгенерированные файлы, но затем по какой-то причине последующий dotnet publish
не удастся (с ошибками компиляции, вызванными отсутствием сгенерированных файлов). Тем не менее, он все равно будет генерировать файлы. следующий dotnet publish
будет работать.
Есть ли способ (1) предотвратить удаление сгенерированных файлов на dotnet clean
, (2) убедиться, что генерация файлов происходит за до основной компиляции C #, или (3) решить эта проблема с помощью других средств?
Соответствующие части .csproj
следующие:
<Project InitialTargets="ProtoCompiler" DefaultTargets="Build" Sdk="Microsoft.NET.Sdk" ...>
<!-- Protobuf integration; see https://github.com/grpc/grpc/blob/master/src/csharp/BUILD-INTEGRATION.md -->
<Target Name="ProtoCompiler">
<PropertyGroup>
<Protobuf_NoWarnMissingExpected>true</Protobuf_NoWarnMissingExpected>
</PropertyGroup>
<ItemGroup>
<PackageReference Include="Google.Protobuf" Version="3.7.0" />
<PackageReference Include="Grpc" Version="1.21.0" />
<PackageReference Include="Grpc.Tools" Version="1.21.0" PrivateAssets="All" >
<IncludeAssets>runtime; build; native; contentfiles; analyzers</IncludeAssets>
<PrivateAssets>all</PrivateAssets>
</PackageReference>
<Protobuf ProtoRoot = "Source\Protos"
Include = "Source\Protos\*.proto"
OutputDir = "Source\Models\Generated" CompileOutputs="false" />
</ItemGroup>
</Target>
<!-- Compile all source including generated Protobuf -->
<Target Name="Build">
<ItemGroup>
<Compile Include="Source\**\*.cs" />
</ItemGroup>
</Target>
....
Я также пытался использовать все комбинации (на <Project>
) DefaultTargets
, InitialTargets
и (на самих целях) BeforeTargets
, AfterTargets
и DependsOnTargets
, которые я могу думать о.
Та же проблема существует при использовании dotnet build
, или dotnet msbuild
, или msbuild.exe
.
Как ни странно, проблема не может быть воспроизведена с помощью Visual Studio 2019 (т.е. сборка с использованием параметра меню «Построение»). Однако при использовании Visual Studio для Mac 8 такая же проблема существует.