所以我现在不知道发生了什么,我认为这可能是因为我没有正确理解 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 文件
因此,在这一点上,我们将不胜感激任何指导或帮助。
好吧,所以我发现这确实是构建发生方式的问题。
放入队列
<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>