微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何摆脱 ASP.NET Core gRPC 集成测试项目中的编译器警告

如何解决如何摆脱 ASP.NET Core gRPC 集成测试项目中的编译器警告

我有一个 ASP.Net Core gRPC 项目,我想在其上运行集成测试。因此,我建立了一个集成测试项目。

我的目录结构如下所示:

- src
  - MyService.Grpc
    - Protos
      - my-service.proto
    - Startup.cs
- tests
  - MyService.Grpc.Tests

为了设置 WebApplicationFactory调用 Startup 中的 MyService.Grpc 类并使用 Grpc.Net.Client 提供的生成客户端,我设置了测试项目像这样:

<Project Sdk="Microsoft.NET.Sdk">

    <PropertyGroup>
        <TargetFramework>net5.0</TargetFramework>

        <IsPackable>false</IsPackable>
    </PropertyGroup>

    <ItemGroup>
        <!-- Proto file reference -->
        <Protobuf Include="../../src/MyService.Grpc/Protos/my-service.proto" GrpcServices="Client" />
        <!-- ASP.NEt Core gRPC dependencies -->
        <packagereference Include="Google.Protobuf" Version="3.17.3" />
        <packagereference Include="Grpc.Net.Client" Version="2.38.0" />
        <packagereference Include="Grpc.Tools" Version="2.38.1">
          <PrivateAssets>all</PrivateAssets>
          <IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
        </packagereference>
        <!-- Testing framework references -->
        <packagereference Include="Microsoft.AspNetCore.Mvc.Testing" Version="5.0.8" />
        <packagereference Include="Microsoft.NET.Test.Sdk" Version="16.10.0" />
        <packagereference Include="xunit" Version="2.4.1" />
        <packagereference Include="xunit.runner.visualstudio" Version="2.4.3">
            <IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
            <PrivateAssets>all</PrivateAssets>
        </packagereference>
        <packagereference Include="coverlet.collector" Version="3.1.0">
            <IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
            <PrivateAssets>all</PrivateAssets>
        </packagereference>
    </ItemGroup>

    <ItemGroup>
        <ProjectReference Include="../../src/MyService.Grpc/MyService.Grpc.csproj" />
    </ItemGroup>

请注意,我同时引用了测试项目中的 gRPC 服务器项目 (MyService.Grpc.csproj) 和 proto 文件 (my-service.proto)。

一切都可以编译,但我遇到了一些我想摆脱的编译警告。

  MyService.cs(44,67): [CS0436] The type 'MyRequest' in 'tests\MyService.Grpc.Tests\obj\Debug\net5.0\MyService.cs' conflicts with the imported type 'MyRequest' in 'MyService.Grpc,Version=1.0.0.0,Culture=neutral,PublicKeyToken=null'. Using the type defined in 'tests\MyService.Grpc.Tests\obj\Debug\net5.0\MyService.cs'.

我理解编译器在抱怨什么,因为类型 MyRequest 被定义了两次:一次由 Grpc.Net.Client 从 proto 文件生成,一次由项目引用导入生成。同时,我无法摆脱测试项目中的任何一个引用,因为我需要它们。

我的问题是如何在测试中不两次导入相同类型的情况下消除此警告?

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。