防止在dotnet clean上删除生成的Protobuf / gRPC文件

时间:2019-06-07 15:19:47

标签: c# .net-core msbuild grpc protoc

我们有一个.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>DefaultTargetsInitialTargetsBeforeTargets,{{1} }和AfterTargets,我能想到。

使用DependsOnTargetsdotnet builddotnet msbuild时存在相同的问题。

奇怪的是,使用Visual Studio 2019无法重现该问题(即使用``生成''菜单选项进行构建)。但是,使用Visual Studio for Mac 8,存在相同的问题。

0 个答案:

没有答案