Remove redundant protos from csharp (#467)

* Remove redundant protos from csharp

* Enable submodule in Checkout
diff --git a/.github/workflows/csharp_build.yml b/.github/workflows/csharp_build.yml
index 041f41f..1cdc50f 100644
--- a/.github/workflows/csharp_build.yml
+++ b/.github/workflows/csharp_build.yml
@@ -11,6 +11,8 @@
     steps:
       - name: Checkout
         uses: actions/checkout@v3
+        with:
+          submodules: true
       - name: Setup dotnet
         uses: actions/setup-dotnet@v3
         with:
diff --git a/csharp/rocketmq-client-csharp/Protos/apache/rocketmq/v2/admin.proto b/csharp/rocketmq-client-csharp/Protos/apache/rocketmq/v2/admin.proto
deleted file mode 100644
index 7dbb702..0000000
--- a/csharp/rocketmq-client-csharp/Protos/apache/rocketmq/v2/admin.proto
+++ /dev/null
@@ -1,43 +0,0 @@
-// Licensed to the Apache Software Foundation (ASF) under one or more
-// contributor license agreements.  See the NOTICE file distributed with
-// this work for additional information regarding copyright ownership.
-// The ASF licenses this file to You under the Apache License, Version 2.0
-// (the "License"); you may not use this file except in compliance with
-// the License.  You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-syntax = "proto3";
-
-package apache.rocketmq.v2;
-
-option cc_enable_arenas = true;
-option csharp_namespace = "Apache.Rocketmq.V2";
-option java_multiple_files = true;
-option java_package = "apache.rocketmq.v2";
-option java_generate_equals_and_hash = true;
-option java_string_check_utf8 = true;
-option java_outer_classname = "MQAdmin";
-
-message ChangeLogLevelRequest {
-  enum Level {
-    TRACE = 0;
-    DEBUG = 1;
-    INFO = 2;
-    WARN = 3;
-    ERROR = 4;
-  }
-  Level level = 1;
-}
-
-message ChangeLogLevelResponse { string remark = 1; }
-
-service Admin {
-  rpc ChangeLogLevel(ChangeLogLevelRequest) returns (ChangeLogLevelResponse) {}
-}
\ No newline at end of file
diff --git a/csharp/rocketmq-client-csharp/Protos/apache/rocketmq/v2/definition.proto b/csharp/rocketmq-client-csharp/Protos/apache/rocketmq/v2/definition.proto
deleted file mode 100644
index d10418d..0000000
--- a/csharp/rocketmq-client-csharp/Protos/apache/rocketmq/v2/definition.proto
+++ /dev/null
@@ -1,552 +0,0 @@
-// Licensed to the Apache Software Foundation (ASF) under one or more
-// contributor license agreements.  See the NOTICE file distributed with
-// this work for additional information regarding copyright ownership.
-// The ASF licenses this file to You under the Apache License, Version 2.0
-// (the "License"); you may not use this file except in compliance with
-// the License.  You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-syntax = "proto3";
-
-import "google/protobuf/timestamp.proto";
-import "google/protobuf/duration.proto";
-
-package apache.rocketmq.v2;
-
-option csharp_namespace = "Apache.Rocketmq.V2";
-option java_multiple_files = true;
-option java_package = "apache.rocketmq.v2";
-option java_generate_equals_and_hash = true;
-option java_string_check_utf8 = true;
-option java_outer_classname = "MQDomain";
-
-enum TransactionResolution {
-  TRANSACTION_RESOLUTION_UNSPECIFIED = 0;
-  COMMIT = 1;
-  ROLLBACK = 2;
-}
-
-enum TransactionSource {
-  SOURCE_UNSPECIFIED = 0;
-  SOURCE_CLIENT = 1;
-  SOURCE_SERVER_CHECK = 2;
-}
-
-enum Permission {
-  PERMISSION_UNSPECIFIED = 0;
-  NONE = 1;
-  READ = 2;
-  WRITE = 3;
-  READ_WRITE = 4;
-}
-
-enum FilterType {
-  FILTER_TYPE_UNSPECIFIED = 0;
-  TAG = 1;
-  SQL = 2;
-}
-
-message FilterExpression {
-  FilterType type = 1;
-  string expression = 2;
-}
-
-message RetryPolicy {
-  int32 max_attempts = 1;
-  oneof strategy {
-    ExponentialBackoff exponential_backoff = 2;
-    CustomizedBackoff customized_backoff = 3;
-  }
-}
-
-// https://en.wikipedia.org/wiki/Exponential_backoff
-message ExponentialBackoff {
-  google.protobuf.Duration initial = 1;
-  google.protobuf.Duration max = 2;
-  float multiplier = 3;
-}
-
-message CustomizedBackoff {
-  // To support classic backoff strategy which is arbitrary defined by end users.
-  // Typical values are: `1s 5s 10s 30s 1m 2m 3m 4m 5m 6m 7m 8m 9m 10m 20m 30m 1h 2h`
-  repeated google.protobuf.Duration next = 1;
-}
-
-message Resource {
-  string resource_namespace = 1;
-
-  // Resource name identifier, which remains unique within the abstract resource
-  // namespace.
-  string name = 2;
-}
-
-message SubscriptionEntry {
-  Resource topic = 1;
-  FilterExpression expression = 2;
-}
-
-enum AddressScheme {
-  ADDRESS_SCHEME_UNSPECIFIED = 0;
-  IPv4 = 1;
-  IPv6 = 2;
-  DOMAIN_NAME = 3;
-}
-
-message Address {
-  string host = 1;
-  int32 port = 2;
-}
-
-message Endpoints {
-  AddressScheme scheme = 1;
-  repeated Address addresses = 2;
-}
-
-message Broker {
-  // Name of the broker
-  string name = 1;
-
-  // Broker index. Canonically, index = 0 implies that the broker is playing
-  // leader role while brokers with index > 0 play follower role.
-  int32 id = 2;
-
-  // Address of the broker, complying with the following scheme
-  // 1. dns:[//authority/]host[:port]
-  // 2. ipv4:address[:port][,address[:port],...] – IPv4 addresses
-  // 3. ipv6:address[:port][,address[:port],...] – IPv6 addresses
-  Endpoints endpoints = 3;
-}
-
-message MessageQueue {
-  Resource topic = 1;
-  int32 id = 2;
-  Permission permission = 3;
-  Broker broker = 4;
-  repeated MessageType accept_message_types = 5;
-}
-
-enum MessageType {
-  MESSAGE_TYPE_UNSPECIFIED = 0;
-
-  NORMAL = 1;
-
-  // Sequenced message
-  FIFO = 2;
-
-  // Messages that are delivered after the specified duration.
-  DELAY = 3;
-
-  // Messages that are transactional. Only committed messages are delivered to
-  // subscribers.
-  TRANSACTION = 4;
-}
-
-enum DigestType {
-  DIGEST_TYPE_UNSPECIFIED = 0;
-
-  // CRC algorithm achieves goal of detecting random data error with lowest
-  // computation overhead.
-  CRC32 = 1;
-
-  // MD5 algorithm achieves good balance between collision rate and computation
-  // overhead.
-  MD5 = 2;
-
-  // SHA-family has substantially fewer collision with fair amount of
-  // computation.
-  SHA1 = 3;
-}
-
-// When publishing messages to or subscribing messages from brokers, clients
-// shall include or validate digests of message body to ensure data integrity.
-//
-// For message publishing, when an invalid digest were detected, brokers need
-// respond client with BAD_REQUEST.
-//
-// For messages subscription, when an invalid digest were detected, consumers
-// need to handle this case according to message type:
-// 1) Standard messages should be negatively acknowledged instantly, causing
-// immediate re-delivery; 2) FIFO messages require special RPC, to re-fetch
-// previously acquired messages batch;
-message Digest {
-  DigestType type = 1;
-  string checksum = 2;
-}
-
-enum ClientType {
-  CLIENT_TYPE_UNSPECIFIED = 0;
-  PRODUCER = 1;
-  PUSH_CONSUMER = 2;
-  SIMPLE_CONSUMER = 3;
-}
-
-enum Encoding {
-  ENCODING_UNSPECIFIED = 0;
-
-  IDENTITY = 1;
-
-  GZIP = 2;
-}
-
-message SystemProperties {
-  // Tag, which is optional.
-  optional string tag = 1;
-
-  // Message keys
-  repeated string keys = 2;
-
-  // Message identifier, client-side generated, remains unique.
-  // if message_id is empty, the send message request will be aborted with
-  // status `INVALID_ARGUMENT`
-  string message_id = 3;
-
-  // Message body digest
-  Digest body_digest = 4;
-
-  // Message body encoding. Candidate options are identity, gzip, snappy etc.
-  Encoding body_encoding = 5;
-
-  // Message type, normal, FIFO or transactional.
-  MessageType message_type = 6;
-
-  // Message born time-point.
-  google.protobuf.Timestamp born_timestamp = 7;
-
-  // Message born host. Valid options are IPv4, IPv6 or client host domain name.
-  string born_host = 8;
-
-  // Time-point at which the message is stored in the broker, which is absent
-  // for message publishing.
-  optional google.protobuf.Timestamp store_timestamp = 9;
-
-  // The broker that stores this message. It may be broker name, IP or arbitrary
-  // identifier that uniquely identify the server.
-  string store_host = 10;
-
-  // Time-point at which broker delivers to clients, which is optional.
-  optional google.protobuf.Timestamp delivery_timestamp = 11;
-
-  // If a message is acquired by way of POP, this field holds the receipt,
-  // which is absent for message publishing.
-  // Clients use the receipt to acknowledge or negatively acknowledge the
-  // message.
-  optional string receipt_handle = 12;
-
-  // Message queue identifier in which a message is physically stored.
-  int32 queue_id = 13;
-
-  // Message-queue offset at which a message is stored, which is absent for
-  // message publishing.
-  optional int64 queue_offset = 14;
-
-  // Period of time servers would remain invisible once a message is acquired.
-  optional google.protobuf.Duration invisible_duration = 15;
-
-  // Business code may failed to process messages for the moment. Hence, clients
-  // may request servers to deliver them again using certain back-off strategy,
-  // the attempt is 1 not 0 if message is delivered first time, and it is absent
-  // for message publishing.
-  optional int32 delivery_attempt = 16;
-
-  // Define the group name of message in the same topic, which is optional.
-  optional string message_group = 17;
-
-  // Trace context for each message, which is optional.
-  optional string trace_context = 18;
-
-  // If a transactional message stay unresolved for more than
-  // `transaction_orphan_threshold`, it would be regarded as an
-  // orphan. Servers that manages orphan messages would pick up
-  // a capable publisher to resolve
-  optional google.protobuf.Duration orphaned_transaction_recovery_duration = 19;
-
-  // Information to identify whether this message is from dead letter queue.
-  optional DeadLetterQueue dead_letter_queue = 20;
-}
-
-message DeadLetterQueue {
-  // Original topic for this DLQ message.
-  string topic = 1;
-  // Original message id for this DLQ message.
-  string message_id = 2;
-}
-
-message Message {
-
-  Resource topic = 1;
-
-  // User defined key-value pairs.
-  // If user_properties contain the reserved keys by RocketMQ,
-  // the send message request will be aborted with status `INVALID_ARGUMENT`.
-  // See below links for the reserved keys
-  // https://github.com/apache/rocketmq/blob/master/common/src/main/java/org/apache/rocketmq/common/message/MessageConst.java#L58
-  map<string, string> user_properties = 2;
-
-  SystemProperties system_properties = 3;
-
-  bytes body = 4;
-}
-
-message Assignment {
-  MessageQueue message_queue = 1;
-}
-
-enum Code {
-  CODE_UNSPECIFIED = 0;
-
-  // Generic code for success.
-  OK = 20000;
-
-  // Generic code for multiple return results.
-  MULTIPLE_RESULTS = 30000;
-
-  // Generic code for bad request, indicating that required fields or headers are missing.
-  BAD_REQUEST = 40000;
-  // Format of access point is illegal.
-  ILLEGAL_ACCESS_POINT = 40001;
-  // Format of topic is illegal.
-  ILLEGAL_TOPIC = 40002;
-  // Format of consumer group is illegal.
-  ILLEGAL_CONSUMER_GROUP = 40003;
-  // Format of message tag is illegal.
-  ILLEGAL_MESSAGE_TAG = 40004;
-  // Format of message key is illegal.
-  ILLEGAL_MESSAGE_KEY = 40005;
-  // Format of message group is illegal.
-  ILLEGAL_MESSAGE_GROUP = 40006;
-  // Format of message property key is illegal.
-  ILLEGAL_MESSAGE_PROPERTY_KEY = 40007;
-  // Transaction id is invalid.
-  INVALID_TRANSACTION_ID = 40008;
-  // Format of message id is illegal.
-  ILLEGAL_MESSAGE_ID = 40009;
-  // Format of filter expression is illegal.
-  ILLEGAL_FILTER_EXPRESSION = 40010;
-  // The invisible time of request is invalid.
-  ILLEGAL_INVISIBLE_TIME = 40011;
-  // The delivery timestamp of message is invalid.
-  ILLEGAL_DELIVERY_TIME = 40012;
-  // Receipt handle of message is invalid.
-  INVALID_RECEIPT_HANDLE = 40013;
-  // Message property conflicts with its type.
-  MESSAGE_PROPERTY_CONFLICT_WITH_TYPE = 40014;
-  // Client type could not be recognized.
-  UNRECOGNIZED_CLIENT_TYPE = 40015;
-  // Message is corrupted.
-  MESSAGE_CORRUPTED = 40016;
-  // Request is rejected due to missing of x-mq-client-id header.
-  CLIENT_ID_REQUIRED = 40017;
-  // Polling time is illegal.
-  ILLEGAL_POLLING_TIME = 40018;
-
-  // Generic code indicates that the client request lacks valid authentication
-  // credentials for the requested resource.
-  UNAUTHORIZED = 40100;
-
-  // Generic code indicates that the account is suspended due to overdue of payment.
-  PAYMENT_REQUIRED = 40200;
-
-  // Generic code for the case that user does not have the permission to operate.
-  FORBIDDEN = 40300;
-
-  // Generic code for resource not found.
-  NOT_FOUND = 40400;
-  // Message not found from server.
-  MESSAGE_NOT_FOUND = 40401;
-  // Topic resource does not exist.
-  TOPIC_NOT_FOUND = 40402;
-  // Consumer group resource does not exist.
-  CONSUMER_GROUP_NOT_FOUND = 40403;
-
-  // Generic code representing client side timeout when connecting to, reading data from, or write data to server.
-  REQUEST_TIMEOUT = 40800;
-
-  // Generic code represents that the request entity is larger than limits defined by server.
-  PAYLOAD_TOO_LARGE = 41300;
-  // Message body size exceeds the threshold.
-  MESSAGE_BODY_TOO_LARGE = 41301;
-
-  // Generic code for use cases where pre-conditions are not met.
-  // For example, if a producer instance is used to publish messages without prior start() invocation,
-  // this error code will be raised.
-  PRECONDITION_FAILED = 42800;
-
-  // Generic code indicates that too many requests are made in short period of duration.
-  // Requests are throttled.
-  TOO_MANY_REQUESTS = 42900;
-
-  // Generic code for the case that the server is unwilling to process the request because its header fields are too large.
-  // The request may be resubmitted after reducing the size of the request header fields.
-  REQUEST_HEADER_FIELDS_TOO_LARGE = 43100;
-  // Message properties total size exceeds the threshold.
-  MESSAGE_PROPERTIES_TOO_LARGE = 43101;
-
-  // Generic code indicates that server/client encountered an unexpected
-  // condition that prevented it from fulfilling the request.
-  INTERNAL_ERROR = 50000;
-  // Code indicates that the server encountered an unexpected condition
-  // that prevented it from fulfilling the request.
-  // This error response is a generic "catch-all" response.
-  // Usually, this indicates the server cannot find a better alternative
-  // error code to response. Sometimes, server administrators log error
-  // responses like the 500 status code with more details about the request
-  // to prevent the error from happening again in the future.
-  //
-  // See https://developer.mozilla.org/en-US/docs/Web/HTTP/Status/500
-  INTERNAL_SERVER_ERROR = 50001;
-  // The HA-mechanism is not working now.
-  HA_NOT_AVAILABLE = 50002;
-
-  // Generic code means that the server or client does not support the
-  // functionality required to fulfill the request.
-  NOT_IMPLEMENTED = 50100;
-
-  // Generic code represents that the server, which acts as a gateway or proxy,
-  // does not get an satisfied response in time from its upstream servers.
-  // See https://developer.mozilla.org/en-US/docs/Web/HTTP/Status/504
-  PROXY_TIMEOUT = 50400;
-  // Message persistence timeout.
-  MASTER_PERSISTENCE_TIMEOUT = 50401;
-  // Slave persistence timeout.
-  SLAVE_PERSISTENCE_TIMEOUT = 50402;
-
-  // Generic code for unsupported operation.
-  UNSUPPORTED = 50500;
-  // Operation is not allowed in current version.
-  VERSION_UNSUPPORTED = 50501;
-  // Not allowed to verify message. Chances are that you are verifying
-  // a FIFO message, as is violating FIFO semantics.
-  VERIFY_FIFO_MESSAGE_UNSUPPORTED = 50502;
-
-  // Generic code for failed message consumption.
-  FAILED_TO_CONSUME_MESSAGE = 60000;
-}
-
-message Status {
-  Code code = 1;
-  string message = 2;
-}
-
-enum Language {
-  LANGUAGE_UNSPECIFIED = 0;
-  JAVA = 1;
-  CPP = 2;
-  DOT_NET = 3;
-  GOLANG = 4;
-  RUST = 5;
-  PYTHON = 6;
-  PHP = 7;
-  NODE_JS = 8;
-  RUBY = 9;
-  OBJECTIVE_C = 10;
-  DART = 11;
-  KOTLIN = 12;
-}
-
-// User Agent
-message UA {
-  // SDK language
-  Language language = 1;
-
-  // SDK version
-  string version = 2;
-
-  // Platform details, including OS name, version, arch etc.
-  string platform = 3;
-
-  // Hostname of the node
-  string hostname = 4;
-}
-
-message Settings {
-  // Configurations for all clients.
-  optional ClientType client_type = 1;
-
-  optional Endpoints access_point = 2;
-
-  // If publishing of messages encounters throttling or server internal errors,
-  // publishers should implement automatic retries after progressive longer
-  // back-offs for consecutive errors.
-  //
-  // When processing message fails, `backoff_policy` describes an interval
-  // after which the message should be available to consume again.
-  //
-  // For FIFO messages, the interval should be relatively small because
-  // messages of the same message group would not be readily available until
-  // the prior one depletes its lifecycle.
-  optional RetryPolicy backoff_policy = 3;
-
-  // Request timeout for RPCs excluding long-polling.
-  optional google.protobuf.Duration request_timeout = 4;
-
-  oneof pub_sub {
-    Publishing publishing = 5;
-
-    Subscription subscription = 6;
-  }
-
-  // User agent details
-  UA user_agent = 7;
-
-  Metric metric = 8;
-}
-
-message Publishing {
-  // Publishing settings below here is appointed by client, thus it is
-  // unnecessary for server to push at present.
-  //
-  // List of topics to which messages will publish to.
-  repeated Resource topics = 1;
-
-  // If the message body size exceeds `max_body_size`, broker servers would
-  // reject the request. As a result, it is advisable that Producer performs
-  // client-side check validation.
-  int32 max_body_size = 2;
-
-  // When `validate_message_type` flag set `false`, no need to validate message's type
-  // with messageQueue's `accept_message_types` before publishing.
-  bool validate_message_type = 3;
-}
-
-message Subscription {
-  // Subscription settings below here is appointed by client, thus it is
-  // unnecessary for server to push at present.
-  //
-  // Consumer group.
-  optional Resource group = 1;
-
-  // Subscription for consumer.
-  repeated SubscriptionEntry subscriptions = 2;
-
-  // Subscription settings below here are from server, it is essential for
-  // server to push.
-  //
-  // When FIFO flag is `true`, messages of the same message group are processed
-  // in first-in-first-out manner.
-  //
-  // Brokers will not deliver further messages of the same group until prior
-  // ones are completely acknowledged.
-  optional bool fifo = 3;
-
-  // Message receive batch size here is essential for push consumer.
-  optional int32 receive_batch_size = 4;
-
-  // Long-polling timeout for `ReceiveMessageRequest`, which is essential for
-  // push consumer.
-  optional google.protobuf.Duration long_polling_timeout = 5;
-}
-
-message Metric {
-  // Indicates that if client should export local metrics to server.
-  bool on = 1;
-
-  // The endpoint that client metrics should be exported to, which is required if the switch is on.
-  optional Endpoints endpoints = 2;
-}
\ No newline at end of file
diff --git a/csharp/rocketmq-client-csharp/Protos/apache/rocketmq/v2/service.proto b/csharp/rocketmq-client-csharp/Protos/apache/rocketmq/v2/service.proto
deleted file mode 100644
index 6d203d4..0000000
--- a/csharp/rocketmq-client-csharp/Protos/apache/rocketmq/v2/service.proto
+++ /dev/null
@@ -1,355 +0,0 @@
-// Licensed to the Apache Software Foundation (ASF) under one or more
-// contributor license agreements.  See the NOTICE file distributed with
-// this work for additional information regarding copyright ownership.
-// The ASF licenses this file to You under the Apache License, Version 2.0
-// (the "License"); you may not use this file except in compliance with
-// the License.  You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-syntax = "proto3";
-
-import "google/protobuf/duration.proto";
-import "google/protobuf/timestamp.proto";
-
-import "apache/rocketmq/v2/definition.proto";
-
-package apache.rocketmq.v2;
-
-option csharp_namespace = "Apache.Rocketmq.V2";
-option java_multiple_files = true;
-option java_package = "apache.rocketmq.v2";
-option java_generate_equals_and_hash = true;
-option java_string_check_utf8 = true;
-option java_outer_classname = "MQService";
-
-// Topics are destination of messages to publish to or subscribe from. Similar
-// to domain names, they will be addressable after resolution through the
-// provided access point.
-//
-// Access points are usually the addresses of name servers, which fulfill
-// service discovery, load-balancing and other auxiliary services. Name servers
-// receive periodic heartbeats from affiliate brokers and erase those which
-// failed to maintain alive status.
-//
-// Name servers answer queries of QueryRouteRequest, responding clients with
-// addressable message-queues, which they may directly publish messages to or
-// subscribe messages from.
-//
-// QueryRouteRequest shall include source endpoints, aka, configured
-// access-point, which annotates tenant-id, instance-id or other
-// vendor-specific settings. Purpose-built name servers may respond customized
-// results based on these particular requirements.
-message QueryRouteRequest {
-  Resource topic = 1;
-  Endpoints endpoints = 2;
-}
-
-message QueryRouteResponse {
-  Status status = 1;
-
-  repeated MessageQueue message_queues = 2;
-}
-
-message SendMessageRequest {
-  repeated Message messages = 1;
-}
-
-message SendResultEntry {
-  Status status = 1;
-  string message_id = 2;
-  string transaction_id = 3;
-  int64 offset = 4;
-}
-
-message SendMessageResponse {
-  Status status = 1;
-
-  // Some implementation may have partial failure issues. Client SDK developers are expected to inspect
-  // each entry for best certainty.
-  repeated SendResultEntry entries = 2;
-}
-
-message QueryAssignmentRequest {
-  Resource topic = 1;
-  Resource group = 2;
-  Endpoints endpoints = 3;
-}
-
-message QueryAssignmentResponse {
-  Status status = 1;
-  repeated Assignment assignments = 2;
-}
-
-message ReceiveMessageRequest {
-  Resource group = 1;
-  MessageQueue message_queue = 2;
-  FilterExpression filter_expression = 3;
-  int32 batch_size = 4;
-  // Required if client type is simple consumer.
-  optional google.protobuf.Duration invisible_duration = 5;
-  // For message auto renew and clean
-  bool auto_renew = 6;
-  optional google.protobuf.Duration long_polling_timeout = 7;
-}
-
-message ReceiveMessageResponse {
-  oneof content {
-    Status status = 1;
-    Message message = 2;
-    // The timestamp that brokers start to deliver status line or message.
-    google.protobuf.Timestamp delivery_timestamp = 3;
-  }
-}
-
-message AckMessageEntry {
-  string message_id = 1;
-  string receipt_handle = 2;
-}
-
-message AckMessageRequest {
-  Resource group = 1;
-  Resource topic = 2;
-  repeated AckMessageEntry entries = 3;
-}
-
-message AckMessageResultEntry {
-  string message_id = 1;
-  string receipt_handle = 2;
-
-  // Acknowledge result may be acquired through inspecting
-  // `status.code`; In case acknowledgement failed, `status.message`
-  // is the explanation of the failure.
-  Status status = 3;
-}
-
-message AckMessageResponse {
-
-  // RPC tier status, which is used to represent RPC-level errors including
-  // authentication, authorization, throttling and other general failures.
-  Status status = 1;
-
-  repeated AckMessageResultEntry entries = 2;
-}
-
-message ForwardMessageToDeadLetterQueueRequest {
-  Resource group = 1;
-  Resource topic = 2;
-  string receipt_handle = 3;
-  string message_id = 4;
-  int32 delivery_attempt = 5;
-  int32 max_delivery_attempts = 6;
-}
-
-message ForwardMessageToDeadLetterQueueResponse { Status status = 1; }
-
-message HeartbeatRequest {
-  optional Resource group = 1;
-  ClientType client_type = 2;
-}
-
-message HeartbeatResponse { Status status = 1; }
-
-message EndTransactionRequest {
-  Resource topic = 1;
-  string message_id = 2;
-  string transaction_id = 3;
-  TransactionResolution resolution = 4;
-  TransactionSource source = 5;
-  string trace_context = 6;
-}
-
-message EndTransactionResponse { Status status = 1; }
-
-message PrintThreadStackTraceCommand { string nonce = 1; }
-
-message ThreadStackTrace {
-  string nonce = 1;
-  optional string thread_stack_trace = 2;
-}
-
-message VerifyMessageCommand {
-  string nonce = 1;
-  Message message = 2;
-}
-
-message VerifyMessageResult {
-  string nonce = 1;
-}
-
-message RecoverOrphanedTransactionCommand {
-  Message message = 1;
-  string transaction_id = 2;
-}
-
-message TelemetryCommand {
-  optional Status status = 1;
-
-  oneof command {
-    // Client settings
-    Settings settings = 2;
-
-    // These messages are from client.
-    //
-    // Report thread stack trace to server.
-    ThreadStackTrace thread_stack_trace = 3;
-
-    // Report message verify result to server.
-    VerifyMessageResult verify_message_result = 4;
-
-    // There messages are from server.
-    //
-    // Request client to recover the orphaned transaction message.
-    RecoverOrphanedTransactionCommand recover_orphaned_transaction_command = 5;
-
-    // Request client to print thread stack trace.
-    PrintThreadStackTraceCommand print_thread_stack_trace_command = 6;
-
-    // Request client to verify the consumption of the appointed message.
-    VerifyMessageCommand verify_message_command = 7;
-  }
-}
-
-message NotifyClientTerminationRequest {
-  // Consumer group, which is absent for producer.
-  optional Resource group = 1;
-}
-
-message NotifyClientTerminationResponse { Status status = 1; }
-
-message ChangeInvisibleDurationRequest {
-  Resource group = 1;
-  Resource topic = 2;
-
-  // Unique receipt handle to identify message to change
-  string receipt_handle = 3;
-
-  // New invisible duration
-  google.protobuf.Duration invisible_duration = 4;
-
-  // For message tracing
-  string message_id = 5;
-}
-
-message ChangeInvisibleDurationResponse {
-  Status status = 1;
-
-  // Server may generate a new receipt handle for the message.
-  string receipt_handle = 2;
-}
-
-// For all the RPCs in MessagingService, the following error handling policies
-// apply:
-//
-// If the request doesn't bear a valid authentication credential, return a
-// response with common.status.code == `UNAUTHENTICATED`. If the authenticated
-// user is not granted with sufficient permission to execute the requested
-// operation, return a response with common.status.code == `PERMISSION_DENIED`.
-// If the per-user-resource-based quota is exhausted, return a response with
-// common.status.code == `RESOURCE_EXHAUSTED`. If any unexpected server-side
-// errors raise, return a response with common.status.code == `INTERNAL`.
-service MessagingService {
-
-  // Queries the route entries of the requested topic in the perspective of the
-  // given endpoints. On success, servers should return a collection of
-  // addressable message-queues. Note servers may return customized route
-  // entries based on endpoints provided.
-  //
-  // If the requested topic doesn't exist, returns `NOT_FOUND`.
-  // If the specific endpoints is empty, returns `INVALID_ARGUMENT`.
-  rpc QueryRoute(QueryRouteRequest) returns (QueryRouteResponse) {}
-
-  // Producer or consumer sends HeartbeatRequest to servers periodically to
-  // keep-alive. Additionally, it also reports client-side configuration,
-  // including topic subscription, load-balancing group name, etc.
-  //
-  // Returns `OK` if success.
-  //
-  // If a client specifies a language that is not yet supported by servers,
-  // returns `INVALID_ARGUMENT`
-  rpc Heartbeat(HeartbeatRequest) returns (HeartbeatResponse) {}
-
-  // Delivers messages to brokers.
-  // Clients may further:
-  // 1. Refine a message destination to message-queues which fulfills parts of
-  // FIFO semantic;
-  // 2. Flag a message as transactional, which keeps it invisible to consumers
-  // until it commits;
-  // 3. Time a message, making it invisible to consumers till specified
-  // time-point;
-  // 4. And more...
-  //
-  // Returns message-id or transaction-id with status `OK` on success.
-  //
-  // If the destination topic doesn't exist, returns `NOT_FOUND`.
-  rpc SendMessage(SendMessageRequest) returns (SendMessageResponse) {}
-
-  // Queries the assigned route info of a topic for current consumer,
-  // the returned assignment result is decided by server-side load balancer.
-  //
-  // If the corresponding topic doesn't exist, returns `NOT_FOUND`.
-  // If the specific endpoints is empty, returns `INVALID_ARGUMENT`.
-  rpc QueryAssignment(QueryAssignmentRequest) returns (QueryAssignmentResponse) {
-  }
-
-  // Receives messages from the server in batch manner, returns a set of
-  // messages if success. The received messages should be acked or redelivered
-  // after processed.
-  //
-  // If the pending concurrent receive requests exceed the quota of the given
-  // consumer group, returns `UNAVAILABLE`. If the upstream store server hangs,
-  // return `DEADLINE_EXCEEDED` in a timely manner. If the corresponding topic
-  // or consumer group doesn't exist, returns `NOT_FOUND`. If there is no new
-  // message in the specific topic, returns `OK` with an empty message set.
-  // Please note that client may suffer from false empty responses.
-  //
-  // If failed to receive message from remote, server must return only one
-  // `ReceiveMessageResponse` as the reply to the request, whose `Status` indicates
-  // the specific reason of failure, otherwise, the reply is considered successful.
-  rpc ReceiveMessage(ReceiveMessageRequest) returns (stream ReceiveMessageResponse) {
-  }
-
-  // Acknowledges the message associated with the `receipt_handle` or `offset`
-  // in the `AckMessageRequest`, it means the message has been successfully
-  // processed. Returns `OK` if the message server remove the relevant message
-  // successfully.
-  //
-  // If the given receipt_handle is illegal or out of date, returns
-  // `INVALID_ARGUMENT`.
-  rpc AckMessage(AckMessageRequest) returns (AckMessageResponse) {}
-
-  // Forwards one message to dead letter queue if the max delivery attempts is
-  // exceeded by this message at client-side, return `OK` if success.
-  rpc ForwardMessageToDeadLetterQueue(ForwardMessageToDeadLetterQueueRequest)
-      returns (ForwardMessageToDeadLetterQueueResponse) {}
-
-  // Commits or rollback one transactional message.
-  rpc EndTransaction(EndTransactionRequest) returns (EndTransactionResponse) {}
-
-  // Once a client starts, it would immediately establishes bi-lateral stream
-  // RPCs with brokers, reporting its settings as the initiative command.
-  //
-  // When servers have need of inspecting client status, they would issue
-  // telemetry commands to clients. After executing received instructions,
-  // clients shall report command execution results through client-side streams.
-  rpc Telemetry(stream TelemetryCommand) returns (stream TelemetryCommand) {}
-
-  // Notify the server that the client is terminated.
-  rpc NotifyClientTermination(NotifyClientTerminationRequest) returns (NotifyClientTerminationResponse) {
-  }
-
-  // Once a message is retrieved from consume queue on behalf of the group, it
-  // will be kept invisible to other clients of the same group for a period of
-  // time. The message is supposed to be processed within the invisible
-  // duration. If the client, which is in charge of the invisible message, is
-  // not capable of processing the message timely, it may use
-  // ChangeInvisibleDuration to lengthen invisible duration.
-  rpc ChangeInvisibleDuration(ChangeInvisibleDurationRequest) returns (ChangeInvisibleDurationResponse) {
-  }
-}
\ No newline at end of file
diff --git a/csharp/rocketmq-client-csharp/Protos/google/rpc/code.proto b/csharp/rocketmq-client-csharp/Protos/google/rpc/code.proto
deleted file mode 100644
index 98ae0ac..0000000
--- a/csharp/rocketmq-client-csharp/Protos/google/rpc/code.proto
+++ /dev/null
@@ -1,186 +0,0 @@
-// Copyright 2020 Google LLC
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-syntax = "proto3";
-
-package google.rpc;
-
-option go_package = "google.golang.org/genproto/googleapis/rpc/code;code";
-option java_multiple_files = true;
-option java_outer_classname = "CodeProto";
-option java_package = "com.google.rpc";
-option objc_class_prefix = "RPC";
-
-// The canonical error codes for gRPC APIs.
-//
-//
-// Sometimes multiple error codes may apply.  Services should return
-// the most specific error code that applies.  For example, prefer
-// `OUT_OF_RANGE` over `FAILED_PRECONDITION` if both codes apply.
-// Similarly prefer `NOT_FOUND` or `ALREADY_EXISTS` over `FAILED_PRECONDITION`.
-enum Code {
-  // Not an error; returned on success
-  //
-  // HTTP Mapping: 200 OK
-  OK = 0;
-
-  // The operation was cancelled, typically by the caller.
-  //
-  // HTTP Mapping: 499 Client Closed Request
-  CANCELLED = 1;
-
-  // Unknown error.  For example, this error may be returned when
-  // a `Status` value received from another address space belongs to
-  // an error space that is not known in this address space.  Also
-  // errors raised by APIs that do not return enough error information
-  // may be converted to this error.
-  //
-  // HTTP Mapping: 500 Internal Server Error
-  UNKNOWN = 2;
-
-  // The client specified an invalid argument.  Note that this differs
-  // from `FAILED_PRECONDITION`.  `INVALID_ARGUMENT` indicates arguments
-  // that are problematic regardless of the state of the system
-  // (e.g., a malformed file name).
-  //
-  // HTTP Mapping: 400 Bad Request
-  INVALID_ARGUMENT = 3;
-
-  // The deadline expired before the operation could complete. For operations
-  // that change the state of the system, this error may be returned
-  // even if the operation has completed successfully.  For example, a
-  // successful response from a server could have been delayed long
-  // enough for the deadline to expire.
-  //
-  // HTTP Mapping: 504 Gateway Timeout
-  DEADLINE_EXCEEDED = 4;
-
-  // Some requested entity (e.g., file or directory) was not found.
-  //
-  // Note to server developers: if a request is denied for an entire class
-  // of users, such as gradual feature rollout or undocumented whitelist,
-  // `NOT_FOUND` may be used. If a request is denied for some users within
-  // a class of users, such as user-based access control, `PERMISSION_DENIED`
-  // must be used.
-  //
-  // HTTP Mapping: 404 Not Found
-  NOT_FOUND = 5;
-
-  // The entity that a client attempted to create (e.g., file or directory)
-  // already exists.
-  //
-  // HTTP Mapping: 409 Conflict
-  ALREADY_EXISTS = 6;
-
-  // The caller does not have permission to execute the specified
-  // operation. `PERMISSION_DENIED` must not be used for rejections
-  // caused by exhausting some resource (use `RESOURCE_EXHAUSTED`
-  // instead for those errors). `PERMISSION_DENIED` must not be
-  // used if the caller can not be identified (use `UNAUTHENTICATED`
-  // instead for those errors). This error code does not imply the
-  // request is valid or the requested entity exists or satisfies
-  // other pre-conditions.
-  //
-  // HTTP Mapping: 403 Forbidden
-  PERMISSION_DENIED = 7;
-
-  // The request does not have valid authentication credentials for the
-  // operation.
-  //
-  // HTTP Mapping: 401 Unauthorized
-  UNAUTHENTICATED = 16;
-
-  // Some resource has been exhausted, perhaps a per-user quota, or
-  // perhaps the entire file system is out of space.
-  //
-  // HTTP Mapping: 429 Too Many Requests
-  RESOURCE_EXHAUSTED = 8;
-
-  // The operation was rejected because the system is not in a state
-  // required for the operation's execution.  For example, the directory
-  // to be deleted is non-empty, an rmdir operation is applied to
-  // a non-directory, etc.
-  //
-  // Service implementors can use the following guidelines to decide
-  // between `FAILED_PRECONDITION`, `ABORTED`, and `UNAVAILABLE`:
-  //  (a) Use `UNAVAILABLE` if the client can retry just the failing call.
-  //  (b) Use `ABORTED` if the client should retry at a higher level
-  //      (e.g., when a client-specified test-and-set fails, indicating the
-  //      client should restart a read-modify-write sequence).
-  //  (c) Use `FAILED_PRECONDITION` if the client should not retry until
-  //      the system state has been explicitly fixed.  E.g., if an "rmdir"
-  //      fails because the directory is non-empty, `FAILED_PRECONDITION`
-  //      should be returned since the client should not retry unless
-  //      the files are deleted from the directory.
-  //
-  // HTTP Mapping: 400 Bad Request
-  FAILED_PRECONDITION = 9;
-
-  // The operation was aborted, typically due to a concurrency issue such as
-  // a sequencer check failure or transaction abort.
-  //
-  // See the guidelines above for deciding between `FAILED_PRECONDITION`,
-  // `ABORTED`, and `UNAVAILABLE`.
-  //
-  // HTTP Mapping: 409 Conflict
-  ABORTED = 10;
-
-  // The operation was attempted past the valid range.  E.g., seeking or
-  // reading past end-of-file.
-  //
-  // Unlike `INVALID_ARGUMENT`, this error indicates a problem that may
-  // be fixed if the system state changes. For example, a 32-bit file
-  // system will generate `INVALID_ARGUMENT` if asked to read at an
-  // offset that is not in the range [0,2^32-1], but it will generate
-  // `OUT_OF_RANGE` if asked to read from an offset past the current
-  // file size.
-  //
-  // There is a fair bit of overlap between `FAILED_PRECONDITION` and
-  // `OUT_OF_RANGE`.  We recommend using `OUT_OF_RANGE` (the more specific
-  // error) when it applies so that callers who are iterating through
-  // a space can easily look for an `OUT_OF_RANGE` error to detect when
-  // they are done.
-  //
-  // HTTP Mapping: 400 Bad Request
-  OUT_OF_RANGE = 11;
-
-  // The operation is not implemented or is not supported/enabled in this
-  // service.
-  //
-  // HTTP Mapping: 501 Not Implemented
-  UNIMPLEMENTED = 12;
-
-  // Internal errors.  This means that some invariants expected by the
-  // underlying system have been broken.  This error code is reserved
-  // for serious errors.
-  //
-  // HTTP Mapping: 500 Internal Server Error
-  INTERNAL = 13;
-
-  // The service is currently unavailable.  This is most likely a
-  // transient condition, which can be corrected by retrying with
-  // a backoff. Note that it is not always safe to retry
-  // non-idempotent operations.
-  //
-  // See the guidelines above for deciding between `FAILED_PRECONDITION`,
-  // `ABORTED`, and `UNAVAILABLE`.
-  //
-  // HTTP Mapping: 503 Service Unavailable
-  UNAVAILABLE = 14;
-
-  // Unrecoverable data loss or corruption.
-  //
-  // HTTP Mapping: 500 Internal Server Error
-  DATA_LOSS = 15;
-}
diff --git a/csharp/rocketmq-client-csharp/Protos/google/rpc/error_details.proto b/csharp/rocketmq-client-csharp/Protos/google/rpc/error_details.proto
deleted file mode 100644
index c4d6c4b..0000000
--- a/csharp/rocketmq-client-csharp/Protos/google/rpc/error_details.proto
+++ /dev/null
@@ -1,249 +0,0 @@
-// Copyright 2020 Google LLC
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-syntax = "proto3";
-
-package google.rpc;
-
-import "google/protobuf/duration.proto";
-
-option go_package = "google.golang.org/genproto/googleapis/rpc/errdetails;errdetails";
-option java_multiple_files = true;
-option java_outer_classname = "ErrorDetailsProto";
-option java_package = "com.google.rpc";
-option objc_class_prefix = "RPC";
-
-// Describes when the clients can retry a failed request. Clients could ignore
-// the recommendation here or retry when this information is missing from error
-// responses.
-//
-// It's always recommended that clients should use exponential backoff when
-// retrying.
-//
-// Clients should wait until `retry_delay` amount of time has passed since
-// receiving the error response before retrying.  If retrying requests also
-// fail, clients should use an exponential backoff scheme to gradually increase
-// the delay between retries based on `retry_delay`, until either a maximum
-// number of retries have been reached or a maximum retry delay cap has been
-// reached.
-message RetryInfo {
-  // Clients should wait at least this long between retrying the same request.
-  google.protobuf.Duration retry_delay = 1;
-}
-
-// Describes additional debugging info.
-message DebugInfo {
-  // The stack trace entries indicating where the error occurred.
-  repeated string stack_entries = 1;
-
-  // Additional debugging information provided by the server.
-  string detail = 2;
-}
-
-// Describes how a quota check failed.
-//
-// For example if a daily limit was exceeded for the calling project,
-// a service could respond with a QuotaFailure detail containing the project
-// id and the description of the quota limit that was exceeded.  If the
-// calling project hasn't enabled the service in the developer console, then
-// a service could respond with the project id and set `service_disabled`
-// to true.
-//
-// Also see RetryInfo and Help types for other details about handling a
-// quota failure.
-message QuotaFailure {
-  // A message type used to describe a single quota violation.  For example, a
-  // daily quota or a custom quota that was exceeded.
-  message Violation {
-    // The subject on which the quota check failed.
-    // For example, "clientip:<ip address of client>" or "project:<Google
-    // developer project id>".
-    string subject = 1;
-
-    // A description of how the quota check failed. Clients can use this
-    // description to find more about the quota configuration in the service's
-    // public documentation, or find the relevant quota limit to adjust through
-    // developer console.
-    //
-    // For example: "Service disabled" or "Daily Limit for read operations
-    // exceeded".
-    string description = 2;
-  }
-
-  // Describes all quota violations.
-  repeated Violation violations = 1;
-}
-
-// Describes the cause of the error with structured details.
-//
-// Example of an error when contacting the "pubsub.googleapis.com" API when it
-// is not enabled:
-//
-//     { "reason": "API_DISABLED"
-//       "domain": "googleapis.com"
-//       "metadata": {
-//         "resource": "projects/123",
-//         "service": "pubsub.googleapis.com"
-//       }
-//     }
-//
-// This response indicates that the pubsub.googleapis.com API is not enabled.
-//
-// Example of an error that is returned when attempting to create a Spanner
-// instance in a region that is out of stock:
-//
-//     { "reason": "STOCKOUT"
-//       "domain": "spanner.googleapis.com",
-//       "metadata": {
-//         "availableRegions": "us-central1,us-east2"
-//       }
-//     }
-message ErrorInfo {
-  // The reason of the error. This is a constant value that identifies the
-  // proximate cause of the error. Error reasons are unique within a particular
-  // domain of errors. This should be at most 63 characters and match
-  // /[A-Z0-9_]+/.
-  string reason = 1;
-
-  // The logical grouping to which the "reason" belongs. The error domain
-  // is typically the registered service name of the tool or product that
-  // generates the error. Example: "pubsub.googleapis.com". If the error is
-  // generated by some common infrastructure, the error domain must be a
-  // globally unique value that identifies the infrastructure. For Google API
-  // infrastructure, the error domain is "googleapis.com".
-  string domain = 2;
-
-  // Additional structured details about this error.
-  //
-  // Keys should match /[a-zA-Z0-9-_]/ and be limited to 64 characters in
-  // length. When identifying the current value of an exceeded limit, the units
-  // should be contained in the key, not the value.  For example, rather than
-  // {"instanceLimit": "100/request"}, should be returned as,
-  // {"instanceLimitPerRequest": "100"}, if the client exceeds the number of
-  // instances that can be created in a single (batch) request.
-  map<string, string> metadata = 3;
-}
-
-// Describes what preconditions have failed.
-//
-// For example, if an RPC failed because it required the Terms of Service to be
-// acknowledged, it could list the terms of service violation in the
-// PreconditionFailure message.
-message PreconditionFailure {
-  // A message type used to describe a single precondition failure.
-  message Violation {
-    // The type of PreconditionFailure. We recommend using a service-specific
-    // enum type to define the supported precondition violation subjects. For
-    // example, "TOS" for "Terms of Service violation".
-    string type = 1;
-
-    // The subject, relative to the type, that failed.
-    // For example, "google.com/cloud" relative to the "TOS" type would indicate
-    // which terms of service is being referenced.
-    string subject = 2;
-
-    // A description of how the precondition failed. Developers can use this
-    // description to understand how to fix the failure.
-    //
-    // For example: "Terms of service not accepted".
-    string description = 3;
-  }
-
-  // Describes all precondition violations.
-  repeated Violation violations = 1;
-}
-
-// Describes violations in a client request. This error type focuses on the
-// syntactic aspects of the request.
-message BadRequest {
-  // A message type used to describe a single bad request field.
-  message FieldViolation {
-    // A path leading to a field in the request body. The value will be a
-    // sequence of dot-separated identifiers that identify a protocol buffer
-    // field. E.g., "field_violations.field" would identify this field.
-    string field = 1;
-
-    // A description of why the request element is bad.
-    string description = 2;
-  }
-
-  // Describes all violations in a client request.
-  repeated FieldViolation field_violations = 1;
-}
-
-// Contains metadata about the request that clients can attach when filing a bug
-// or providing other forms of feedback.
-message RequestInfo {
-  // An opaque string that should only be interpreted by the service generating
-  // it. For example, it can be used to identify requests in the service's logs.
-  string request_id = 1;
-
-  // Any data that was used to serve this request. For example, an encrypted
-  // stack trace that can be sent back to the service provider for debugging.
-  string serving_data = 2;
-}
-
-// Describes the resource that is being accessed.
-message ResourceInfo {
-  // A name for the type of resource being accessed, e.g. "sql table",
-  // "cloud storage bucket", "file", "Google calendar"; or the type URL
-  // of the resource: e.g. "type.googleapis.com/google.pubsub.v1.Topic".
-  string resource_type = 1;
-
-  // The name of the resource being accessed.  For example, a shared calendar
-  // name: "example.com_4fghdhgsrgh@group.calendar.google.com", if the current
-  // error is [google.rpc.Code.PERMISSION_DENIED][google.rpc.Code.PERMISSION_DENIED].
-  string resource_name = 2;
-
-  // The owner of the resource (optional).
-  // For example, "user:<owner email>" or "project:<Google developer project
-  // id>".
-  string owner = 3;
-
-  // Describes what error is encountered when accessing this resource.
-  // For example, updating a cloud project may require the `writer` permission
-  // on the developer console project.
-  string description = 4;
-}
-
-// Provides links to documentation or for performing an out of band action.
-//
-// For example, if a quota check failed with an error indicating the calling
-// project hasn't enabled the accessed service, this can contain a URL pointing
-// directly to the right place in the developer console to flip the bit.
-message Help {
-  // Describes a URL link.
-  message Link {
-    // Describes what the link offers.
-    string description = 1;
-
-    // The URL of the link.
-    string url = 2;
-  }
-
-  // URL(s) pointing to additional information on handling the current error.
-  repeated Link links = 1;
-}
-
-// Provides a localized error message that is safe to return to the user
-// which can be attached to an RPC error.
-message LocalizedMessage {
-  // The locale used following the specification defined at
-  // http://www.rfc-editor.org/rfc/bcp/bcp47.txt.
-  // Examples are: "en-US", "fr-CH", "es-MX"
-  string locale = 1;
-
-  // The localized error message in the above locale.
-  string message = 2;
-}
diff --git a/csharp/rocketmq-client-csharp/Protos/google/rpc/status.proto b/csharp/rocketmq-client-csharp/Protos/google/rpc/status.proto
deleted file mode 100644
index 3b1f7a9..0000000
--- a/csharp/rocketmq-client-csharp/Protos/google/rpc/status.proto
+++ /dev/null
@@ -1,47 +0,0 @@
-// Copyright 2020 Google LLC
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-syntax = "proto3";
-
-package google.rpc;
-
-import "google/protobuf/any.proto";
-
-option cc_enable_arenas = true;
-option go_package = "google.golang.org/genproto/googleapis/rpc/status;status";
-option java_multiple_files = true;
-option java_outer_classname = "StatusProto";
-option java_package = "com.google.rpc";
-option objc_class_prefix = "RPC";
-
-// The `Status` type defines a logical error model that is suitable for
-// different programming environments, including REST APIs and RPC APIs. It is
-// used by [gRPC](https://github.com/grpc). Each `Status` message contains
-// three pieces of data: error code, error message, and error details.
-//
-// You can find out more about this error model and how to work with it in the
-// [API Design Guide](https://cloud.google.com/apis/design/errors).
-message Status {
-  // The status code, which should be an enum value of [google.rpc.Code][google.rpc.Code].
-  int32 code = 1;
-
-  // A developer-facing error message, which should be in English. Any
-  // user-facing error message should be localized and sent in the
-  // [google.rpc.Status.details][google.rpc.Status.details] field, or localized by the client.
-  string message = 2;
-
-  // A list of messages that carry the error details.  There is a common set of
-  // message types for APIs to use.
-  repeated google.protobuf.Any details = 3;
-}
diff --git a/csharp/rocketmq-client-csharp/rocketmq-client-csharp.csproj b/csharp/rocketmq-client-csharp/rocketmq-client-csharp.csproj
index 2b5e07c..27b27a8 100644
--- a/csharp/rocketmq-client-csharp/rocketmq-client-csharp.csproj
+++ b/csharp/rocketmq-client-csharp/rocketmq-client-csharp.csproj
@@ -34,15 +34,8 @@
         <PackageReference Include="OpenTelemetry.Api" Version="1.3.1" />

         <PackageReference Include="OpenTelemetry.Exporter.OpenTelemetryProtocol" Version="1.3.1" />

 

-        <Protobuf Include="Protos\apache\rocketmq\v2\definition.proto" ProtoRoot="Protos" GrpcServices="Client" />

-        <Protobuf Include="Protos\google\rpc\code.proto" ProtoRoot="Protos" GrpcServices="Client" />

-        <Protobuf Include="Protos\google\rpc\error_details.proto" ProtoRoot="Protos" GrpcServices="Client" />

-        <Protobuf Include="Protos\google\rpc\status.proto" ProtoRoot="Protos" GrpcServices="Client" />

-        <Protobuf Include="Protos\apache\rocketmq\v2\service.proto" ProtoRoot="Protos" GrpcServices="Client">

-            <Link>Protos\apache\rocketmq\v2\definition.proto</Link>

-            <Link>Protos\google\rpc\status.proto</Link>

-            <Link>Protos\google\rpc\error_details.proto</Link>

-        </Protobuf>

+        <Protobuf Include="..\..\protos\apache\rocketmq\v2\definition.proto" ProtoRoot="..\..\protos" GrpcServices="Client" />

+        <Protobuf Include="..\..\protos\apache\rocketmq\v2\service.proto" ProtoRoot="..\..\protos" GrpcServices="Client" />

         <None Include="logo.png" Pack="true" PackagePath="" />

     </ItemGroup>

 </Project>