Csvhelper: "لم يتم تعيين أعضاء للنوع" ، ليس على جهاز Windows المحلي ، ولكن على جهاز CentOS

تم إنشاؤها على ١٢ فبراير ٢٠١٩  ·  3تعليقات  ·  مصدر: JoshClose/CsvHelper

أحاول تحليل ملف CSV ، ويظهر هذا الخطأ. كحل حاولت أيضًا تسجيل خريطة الفصل لكنها لا تساعد.

الشيء الغريب أنه يعمل على جهازي المحلي (Windows ، .NET Core 2.2 ، ASP.NET Core 2.2.1) ، لكنه فشل في جهاز الإنتاج الخاص بي (CentOS 7 ، .NET Core 2.2 ، ASP.NET Core 2.2. 1) لذلك لا يبدو أن هناك مشكلة في التكوين.

ما هي الأسباب المحتملة لهذا الاستثناء ، والتي من المحتمل أن تعتمد على البيئة؟

تتبع المكدس:
في CsvHelper.Expressions.ObjectRecordCreator.CreateCreateRecordDelegate (اكتب نوع السجل)
في CsvHelper.Expressions.RecordCreator.GetCreateRecordDelegate (اكتب نوع السجل)
في CsvHelper.Expressions.RecordCreator.Create T.
في CsvHelper.CsvReader.GetRecords T + MoveNext ()
...

التعليق الأكثر فائدة

لقد واجهت للتو مشكلة مماثلة وواجهت هذه المشكلة أبحث عن حل. نظرًا لأنني اكتشفت الآن السبب ، اعتقدت أنني سأشاركه هنا.

كانت المشكلة في حالتي هي المحدد. عندما لا تحدد المحدد بشكل صريح ، أظن أن CsvHelper يستخدم المحدد الافتراضي من إعدادات الثقافة المحلية ، والتي كانت في حالتي على Windows عبارة عن فاصلة منقوطة. لذلك ، إذا كان ملفك يستخدم الفاصلة المنقوطة ، فسيعمل بشكل جيد على Windows. بعد ذلك ، عند الانتقال إلى نظام تشغيل مختلف (كما في حالتي Linux في حاوية Docker) ، قد يتم تطبيق محدد مختلف (مثل الفاصلة) ، ويتم رفع الاستثناء الذي رأيته.

لذا فإن الحل الأكثر أمانًا هو تحديد المحدد بشكل صريح باستخدام Configuration.Delimiter.

ال 3 كومينتر

لقد واجهت للتو مشكلة مماثلة وواجهت هذه المشكلة أبحث عن حل. نظرًا لأنني اكتشفت الآن السبب ، اعتقدت أنني سأشاركه هنا.

كانت المشكلة في حالتي هي المحدد. عندما لا تحدد المحدد بشكل صريح ، أظن أن CsvHelper يستخدم المحدد الافتراضي من إعدادات الثقافة المحلية ، والتي كانت في حالتي على Windows عبارة عن فاصلة منقوطة. لذلك ، إذا كان ملفك يستخدم الفاصلة المنقوطة ، فسيعمل بشكل جيد على Windows. بعد ذلك ، عند الانتقال إلى نظام تشغيل مختلف (كما في حالتي Linux في حاوية Docker) ، قد يتم تطبيق محدد مختلف (مثل الفاصلة) ، ويتم رفع الاستثناء الذي رأيته.

لذا فإن الحل الأكثر أمانًا هو تحديد المحدد بشكل صريح باستخدام Configuration.Delimiter.

لقد نسيت أن أذكر الحل عندما قمت بحلها. نعم كان هذا بالضبط هو الموضوع. شكرا على المساعدة!

@ rh78 في هذه الحالة يجب إغلاق المشكلة.

هل كانت هذه الصفحة مفيدة؟
0 / 5 - 0 التقييمات