أحاول تحليل ملف 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.
لقد نسيت أن أذكر الحل عندما قمت بحلها. نعم كان هذا بالضبط هو الموضوع. شكرا على المساعدة!
@ rh78 في هذه الحالة يجب إغلاق المشكلة.
التعليق الأكثر فائدة
لقد واجهت للتو مشكلة مماثلة وواجهت هذه المشكلة أبحث عن حل. نظرًا لأنني اكتشفت الآن السبب ، اعتقدت أنني سأشاركه هنا.
كانت المشكلة في حالتي هي المحدد. عندما لا تحدد المحدد بشكل صريح ، أظن أن CsvHelper يستخدم المحدد الافتراضي من إعدادات الثقافة المحلية ، والتي كانت في حالتي على Windows عبارة عن فاصلة منقوطة. لذلك ، إذا كان ملفك يستخدم الفاصلة المنقوطة ، فسيعمل بشكل جيد على Windows. بعد ذلك ، عند الانتقال إلى نظام تشغيل مختلف (كما في حالتي Linux في حاوية Docker) ، قد يتم تطبيق محدد مختلف (مثل الفاصلة) ، ويتم رفع الاستثناء الذي رأيته.
لذا فإن الحل الأكثر أمانًا هو تحديد المحدد بشكل صريح باستخدام Configuration.Delimiter.