خطأ الأداة المخصص: command.proto: 11: 18: "Message2" لم يتم تعريفه

StackOverflow https://stackoverflow.com/questions/2612689

  •  25-09-2019
  •  | 
  •  

سؤال

أنا أستخدم أحدث إصدار من Protobuf-Net مع تكامل VS2008. لقد قمت بإنشاء رسالتين (Message1 و Message2) ، رسالة واحدة في ملف proto 1. عندما أحاول الرجوع إلى Message2 في Message1 ، فإن أداة مولد الرمز تعطيني خطأ "Message2" غير محدد ولن يتم إنشاء ملف الرمز. الحزمة لكلتا رسالتين هي نفسها.
يبدو ذلك بسبب دمج الأداة مع VS2008 ، ويتوقع تجميع جميع الرسائل في ملف .proto. حاليًا يجب أن ألصق رسالة فارغة بنفس الاسم في ملف message1.proto ، مثل هذا:

message Message1 {
 optional Message2 message2 = 1;
}

message Message2 {
}

ثم بعد ذلك ، قم بإزالة إعلان class Message2 من عند Message1.cs. هل هناك أي إعدادات أحتاج إلى القيام بذلك لتجنب هذا الخطأ ، أو تقديم إعلان فارغ هو الطريقة الوحيدة؟ أو إذا لم يكن هناك ذلك ، أقترح عليك (Marc Gravell) أن تتضمن كلمة رئيسية مثل "Extern" لإخبار المترجم بأن تعريف هذا النوع متاح في فئة أخرى

هل كانت مفيدة؟

المحلول

أملك:

(File1.proto)

import "File2.proto";
message Message1 {
 optional Message2 message2 = 1;
}

(File2.proto)

message Message2 {
}

كل مزين (في IDE) مع الأداة المخصصة (ProtoBufTool) وهو يعمل بشكل جيد. اثنين .cs يتم إنشاء الملفات ، واحدة متداخلة تحت File*.proto الملفات ، مع الأنواع التي تم إنشاؤها الضرورية في كل منها.

هل فاتني شيء؟ أنا خمن يمكنني جعل الملف الأول (وحده) ينشئ الأنواع من الملفات المستوردة ، لكن للقيام بذلك ، أحتاج فعليًا إلى كتابة محلل من نقطة الصفر (في الوقت الحالي ، يستخدم محلل Google .Proto تحت الغطاء).

إعادة تغيير اللغة - هذا ما يتعلق بي ؛ ولكن هل تعني ببساطة (موجود) import تصريح؟

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top