.net程序编译时无法导入gRPC命名空间(CS0246错误)

问题描述 投票:0回答:1

所以我现在不知道发生了什么,我认为这可能是因为我没有正确理解 gRPC 编译?我不擅长编程,但我正在尝试在 VS2022 中创建一个 .net gRPC 客户端程序,并且我已经从 nuget 导入了包并创建了一个 protos/ .proto 文件,如下所示

syntax = "proto3";

option csharp_namespace = "ThreatForge_ALPHA_Client";

package ThreatForge;


message ConnectRequest {
  string teamServerIP = 1;
  string accessToken = 2;
}

message ConnectResponse {
  bool success = 1;
  string message = 2;
}


service ThreatForgeSettings {
  
  
  rpc ConnectToTeamServer(ConnectRequest) returns (ConnectResponse);
  

}

如果我只使用 .proto 文件进行编译,我确实会得到它应该创建的相应 .cs 和 Grpc.cs 文件,但是当我尝试引用类文件中的命名空间时,我会收到 cs0246 错误。

我的班级是

using Grpc.Core;
using Grpc.Net.Client;
using System.Threading.Tasks;
using ThreatForge_ALPHA_Client;

namespace ThreatForge_ALPHA
{

    public class Settings_gRPC
    {
        public string TeamServerIP { get; set; }
        public string TeamServerAccessToken { get; set; }
        public string TeamServerStatus { get; private set; }

        private GrpcChannel channel;

        public Settings_gRPC()
        {
            channel = GrpcChannel.ForAddress("https://server-address:port");
        }

        public async Task ConnectToTeamServer()
        {
            var client = new ThreatForgeSettings.ThreatForgeSettingsClient(channel);
            var request = new ConnectRequest
            {
                TeamServerIP = this.TeamServerIP,
                AccessToken = this.TeamServerAccessToken
            };

....

令我困惑的是,只要我有导入“using ThreatForge_ALPHA_Client;”它表明它正在使用,并且我没有收到“ThreatForgeSettings”和“ConnectRequest”的错误,但如果我删除它,这两个项目就会变得未知。因此,当我尝试编译和运行时,它们似乎被视为预编译,我收到错误

Settings-gRPC.cs(8,7,8,31): error CS0246: The type or namespace name 'ThreatForge_ALPHA_Client' could not be found (are you missing a using directive or an assembly reference?)

所以我认为这与构建过程有关,当我构建时找不到正确的文件,但我对构建过程的了解不够,无法真正进行任何更改。

我一直在尝试遵循 MS 的本教程 https://learn.microsoft.com/en-us/aspnet/core/tutorials/grpc/grpc-start?view=aspnetcore-7.0&tabs=visual-studio 看来我已经做了他们为房子的客户端所做的一切,但我遇到了这个问题。我查看了 .proto 文件,它确实将构建操作显示为 protobuf,但没有显示像您在 .net gRPC 服务器服务中获得的 gRPC 项目,我不确定这是否是问题所在?

还确保添加行

  <ItemGroup>
    <Protobuf Include="Protos\ThreatForge.proto" GrpcServices="Client" />
  </ItemGroup>

进入我的 csproj 文件

因此,在这一点上,我们将不胜感激任何指导或帮助。

c# .net visual-studio grpc
1个回答
0
投票

好吧,所以我发现这确实是构建发生方式的问题。

放入队列

<CoreCompileDependsOn>$(CoreCompileDependsOn);Protobuf_Compile</CoreCompileDependsOn>

进入我的 csproj 文件中编译部分的各个属性组下,它会强制每次运行时编译 proto 文件。现在一切都按预期进行。

对于那些也可能遇到此问题的人来说,这看起来像这样。

  <PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Debug|x64'">
<DebugSymbols>true</DebugSymbols>
<OutputPath>bin\x64\Debug\</OutputPath>
<DefineConstants>DEBUG;TRACE</DefineConstants>
<DebugType>full</DebugType>
<PlatformTarget>x64</PlatformTarget>
<LangVersion>7.3</LangVersion>
<ErrorReport>prompt</ErrorReport>
<Prefer32Bit>true</Prefer32Bit>
<CoreCompileDependsOn>$(CoreCompileDependsOn);Protobuf_Compile</CoreCompileDependsOn>
© www.soinside.com 2019 - 2024. All rights reserved.