تعطيل ADBLOCK

يمنع ADBlock بعض المحتوى على الموقع

ADBlock errore

لا يمكن تحميل الملف أو التجميع 'System.Data.SQLite "

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

سؤال

ولقد قمت بتركيب ELMAH 1.1 صافي 3.5 إلى x64 في مشروع ASP.NET الخاص بي، وأنا الآن الحصول على هذا الخطأ (كلما أحاول أن نرى أي صفحة):

<اقتباس فقرة>   

وتعذر تحميل الملف أو التجميع   "System.Data.SQLite، الإصدار = 1.0.61.0،   الثقافة = محايدة،   PublicKeyToken = db937bc2d44ff139 "أو   أحد تبعياته. محاولة   وقدم لتحميل برنامج مع   تنسيق غير صحيح.

     

والوصف:   حدث استثناء غير معالج أثناء   تنفيذ ويب الحالي   طلب. الرجاء مراجعة تتبع المكدس   لمزيد من المعلومات حول الخطأ   وحيث نشأ في التعليمات البرمجية.

     

وتفاصيل الاستثناء:   System.BadImageFormatException: هل   يتم تحميل الملف أو التجميع   "System.Data.SQLite، الإصدار = 1.0.61.0،   الثقافة = محايدة،   PublicKeyToken = db937bc2d44ff139 "أو   أحد تبعياته. محاولة   وقدم لتحميل برنامج مع   تنسيق غير صحيح.

وتفاصيل الخطأ عن في الأسفل.

وبلدي منصة الحل النشطة هي "أي وحدة المعالجة المركزية" وأنا على التوالي على ويندوز 7 إلى x64 على x64 و بطبيعة الحال، والمعالج. السبب في أننا نستخدم هذا الإصدار من ELMAH لأن 1.0 صافي 3.5 (x86 و الذي هو المنصة الوحيدة التي جمعت هو عليه) قدم لنا هذا الخطأ نفسه على موقعنا على خادم ويندوز إلى x64.

ولقد حاولت تجميع لx86 و x64 وأحصل على نفس الخطأ. لقد حاولت إزالة الناتج عن مترجم (بن والكائنات). وأخيرا لقد قدمت إشارة إلى سكليتي DLL مباشرة، وهو الأمر الذي لم يكن هناك حاجة لهذا المشروع للعمل على الخادم وأنا عندي هذا الخطأ مترجم:

<اقتباس فقرة>   

والخطأ 1 تحذير كما خطأ: الجيل الجمعية - المشار إليه الجمعية أهداف "System.Data.SQLite.dll" معالج مختلف MyProject

وأي أفكار ما قد تكون المشكلة؟

والمزيد من تفاصيل الخطأ:

<اقتباس فقرة>   

وخطأ المصدر:

     

تم إنشاء استثناء غير معالج   أثناء تنفيذ الحالي   طلب ويب. المعلومات المتعلقة   أصل وموقعه الاستثناء   ويمكن تحديد باستخدام استثناء   تتبع المكدس أدناه.

     

وتتبع المكدس:

     

[BadImageFormatException: تعذر   تحميل الملف أو التجميع   "System.Data.SQLite، الإصدار = 1.0.61.0،   الثقافة = محايدة،   PublicKeyToken = db937bc2d44ff139 "أو   أحد تبعياته. محاولة   وقدم لتحميل برنامج مع   تنسيق غير صحيح.]
  System.Reflection.Assembly._nLoad (AssemblyName   اسم الملف، سلسلة تعليمات البرمجة الأساسية، الأدلة   assemblySecurity، الجمعية   locationHint، StackCrawlMark &   stackMark، منطقية   throwOnFileNotFound، منطقية   forIntrospection) +0
  System.Reflection.Assembly.nLoad (AssemblyName   اسم الملف، سلسلة تعليمات البرمجة الأساسية، الأدلة   assemblySecurity، الجمعية   locationHint، StackCrawlMark &   stackMark، منطقية   throwOnFileNotFound، منطقية   forIntrospection) +43
  System.Reflection.Assembly.InternalLoad (AssemblyName   assemblyRef، الأدلة   assemblySecurity، StackCrawlMark &   stackMark، منطقية forIntrospection)   +127 System.Reflection.Assembly.InternalLoad (سلسلة   assemblyString، الأدلة   assemblySecurity، StackCrawlMark &   stackMark، منطقية forIntrospection)   +142 System.Reflection.Assembly.Load (سلسلة   assemblyString) +28
  System.Web.Configuration.CompilationSection.LoadAssemblyHelper (سلسلة   assemblyName، منطقية starDirective)   +46

     

[ConfigurationErrorsException: هل يمكن   يتم تحميل الملف أو التجميع   "System.Data.SQLite، الإصدار = 1.0.61.0،   الثقافة = محايدة،   PublicKeyToken = db937bc2d44ff139 "أو   أحد تبعياته. محاولة   وقدم لتحميل برنامج مع   تنسيق غير صحيح.]
  System.Web.Configuration.CompilationSection.LoadAssemblyHelper (سلسلة   assemblyName، منطقية starDirective)   +613 System.Web.Configuration.CompilationSection.LoadAllAssembliesFromAppDomainBinDirectory ()   +203 System.Web.Configuration.CompilationSection.LoadAssembly (AssemblyInfo   منظمة العفو الدولية) +105
  System.Web.Compilation.BuildManager.GetReferencedAssemblies (CompilationSection   compConfig) +178
  System.Web.Compilation.BuildProvidersCompiler..ctor (VirtualPath   configPath، منطقية   supportLocalization، سلسلة   outputAssemblyName) +54
  System.Web.Compilation.ApplicationBuildProvider.GetGlobalAsaxBuildResult (منطقية   isPrecompiledApp) +232
  System.Web.Compilation.BuildManager.CompileGlobalAsax ()   +52 System.Web.Compilation.BuildManager.EnsureTopLevelFilesCompiled ()   +337

     

[HttpException (0x80004005) غير: تعذر   تحميل الملف أو التجميع   "System.Data.SQLite، الإصدار = 1.0.61.0،   الثقافة = محايدة،   PublicKeyToken = db937bc2d44ff139 "أو   أحد تبعياته. محاولة   وقدم لتحميل برنامج مع   تنسيق غير صحيح.]
  System.Web.Compilation.BuildManager.ReportTopLevelCompilationException ()   +58 System.Web.Compilation.BuildManager.EnsureTopLevelFilesCompiled ()   +512 System.Web.Hosting.HostingEnvironment.Initialize (ApplicationManager   appManager، IApplicationHost appHost،   IConfigMapPathFactory   configMapPathFactory،   HostingEnvironmentParameters   hostingParameters) +729

     

[HttpException (0x80004005) غير: تعذر   تحميل الملف أو التجميع   "System.Data.SQLite، الإصدار = 1.0.61.0،   الثقافة = محايدة،   PublicKeyToken = db937bc2d44ff139 "أو   أحد تبعياته. محاولة   وقدم لتحميل برنامج مع   تنسيق غير صحيح.]
  System.Web.HttpRuntime.FirstRequestInit (HttpContext   السياق) +8896783
  System.Web.HttpRuntime.EnsureFirstRequestInit (HttpContext   السياق) +85
  System.Web.HttpRuntime.ProcessRequestInternal (HttpWorkerRequest   WR) +259

المحلول

وSystem.Data.SQLite.dll هو التجمع المختلط، أي أنه يحتوي على كل من التعليمات البرمجية المدارة والتعليمات البرمجية الأصلية. بالتالي System.Data.SQLite.dll وجه الخصوص هو إما إلى x86 أو إلى x64، ولكن أبدا على حد سواء.

على تحديث (<م> مجاملة J. بابلو فرنانديز ): كاسيني، خادم الويب تطوير المستخدمة من قبل Visual Studio عند الضغط على F5 أو انقر على «اللعب» الأخضر زر، هي إلى x86 الوحيد الذي يعني أنه حتى لو محطة العمل الخاصة بك إلى x64، عليك أن تكون قادرا على استخدام الإصدار إلى x86 من System.Data.SQLite.dll فقط.

وبديل لا لاستخدام كاسيني لكن IIS7 وهو صحيح إلى x64.

نصائح أخرى

تأكد من أن "تمكين 32 - تطبيقات بت". ومن المقرر أن كاذبة لتجمع التطبيق

وانتقل إلى IIS7 Application Pool -> advanced settings and set the 32-bit application to true.

وهذا هو بسيط جدا إذا كنت لا تستخدم سكليتي:

ويمكنك حذف دلس سكليتي من المجلدات بن لحل الخاص بك، ثم من المجلد حيث قمت مرجع ELMAH. إعادة بناء، وسوف التطبيق الخاص بك لا تحاول تحميل هذا DLL التي لم تكن تستخدم.

ولدي آلة ديف 64 بت و الخادم بناء 32 بت. أنا استخدم هذا الرمز قبل NHibernate initialisation. يعمل السحر على أي بنية (جيد 2 لقد اختبرت)

وآمل أن يساعد هذا شخص.

وغيدو

        private static void LoadSQLLiteAssembly()
        {
            Uri dir = new Uri(Assembly.GetExecutingAssembly().CodeBase);
            FileInfo fi = new FileInfo(dir.AbsolutePath);           
            string binFile = fi.Directory.FullName + "\\System.Data.SQLite.DLL";
            if (!File.Exists(binFile)) File.Copy(GetAppropriateSQLLiteAssembly(), binFile, false);
        }

        private static string GetAppropriateSQLLiteAssembly()
        {
            string pa = Environment.GetEnvironmentVariable("PROCESSOR_ARCHITECTURE");
            string arch = ((String.IsNullOrEmpty(pa) || String.Compare(pa, 0, "x86", 0, 3, true) == 0) ? "32" : "64");
            return GetLibsDir() + "\\NUnit\\System.Data.SQLite.x" + arch + ".DLL";
        }

وكما شخص قد اضطروا إلى التعامل مع عدد غير قليل من التقارير الشوائب على سيسقط المعرفة مع بالضبط نفس القضية، وهذا هو ما عليك القيام به:

  • وهل تستخدم إلى x64 أو إلى x86؟ سكليتي يأتي مع دلس للأبنية منفصلة - نسخ الحق واحد إلى مجلد بن الخاص، وهناك نوعان من دلس للالمزود الرسمي: System.Data.SQLite.dll System.Data.SQLite.Linq.dll
  • إذا كنت لا يمكن ازعجت الصيد في جميع أنحاء لهذه الجمعيات، وتمكين وضع 32 بت لتجمع التطبيقات الخاصة بك (حل للآلات ديف فقط عادة)
  • وإذا كنت استضافة على الخادم، ستحتاج القابلة مايكروسوفت C ++ وقت التشغيل - انها ليست مثبتة على سيرفر 2008 R2 افتراضيا. إلى x64 نسخة و <لأ href = "HTTP: / /www.microsoft.com/en-us/download/details.aspx؟id=8328 "يختلط =" نوفولو "> نسخة إلى x86

وانها الألم الحقيقي في الحمار كم الأطواق لديك من خلال القفز عند إعادة توزيع-الثنائيات. NET سكليتي، كان لي حل لسيسقط في النهاية لنسخ ثنائيات الصحيحة إلى المجلد ~ / بن على أساس العمارة باستخدام. للأسف لا حل قضية وقت تشغيل C ++.

وأنا حل هذا عن طريق تثبيت System.Data.SQLite مع التمديد Nuget. هذا التمديد يمكن استخدامها لبرنامج Visual Studio 2010 أو أعلى. أولا، لديك لتثبيت تمديد Nuget. يمكنك متابعة هنا:

  • انتقل إلى Visual Studio 2010، القائمة -> أدوات
  • حدد مدير الارشاد
  • وأدخل NuGet في مربع البحث وانقر أروقة. في انتظار ذلك استرجاع المعلومات ...
  • حدد استرجاع NuGet مدير مجموعة، انقر فوق تنزيل. الانتظار هو تحميل ...
  • انقر على تثبيت عند مرئية مدير ستوديو تمديد المثبت NuGet حزمة. انتظر التثبيت لإكمال.
  • انقر على إغلاق و "إعادة التشغيل الآن.

وثانيا، الآن، يمكنك تثبيت برنامج SQLite:

والآن، يمكنك استخدام System.Data.SQLite.

في هذه القضية، رأيت اثنين إلى x64 مجلد و، x86 و تحتوي هذه المجلدات SQLite.Interop.dll. الآن انتقل إلى خصائص نوافذ تلك دلس ومجموعة العمل البناء هو المحتوى ونسخ إلى الدليل الإخراج هو نسخة دائما.

وهكذا، وهذا هو طريقي.

وشكرا. كيم ثو فام، مدينة هو تشي منه، فيتنام. البريد الإلكتروني: tho.phamkim@gmail.com

ودليل المتعلقة الحمل التجمع System.Data.SQLite يمكن حل هذه.

وتغيير gatapia في القانون على النحو التالي:

    public static void LoadSQLLiteAssembly()
    {
        Uri dir = new Uri(Assembly.GetExecutingAssembly().CodeBase);
        FileInfo fi = new FileInfo(dir.AbsolutePath);
        string appropriateFile = Path.Combine(fi.Directory.FullName, GetAppropriateSQLLiteAssembly());
        Assembly.LoadFrom(appropriateFile);
    }

    private static string GetAppropriateSQLLiteAssembly()
    {
        string pa = Environment.GetEnvironmentVariable("PROCESSOR_ARCHITECTURE");
        string arch = ((String.IsNullOrEmpty(pa) || String.Compare(pa, 0, "x86", 0, 3, true) == 0) ? "32" : "64");
        return "System.Data.SQLite.x" + arch + ".DLL";
    }

وحصلت على هذا الخطأ عندما تم تحويلها يندوز سيرفر لدينا من نظام التشغيل 32 بت إلى 64 بت. تم تعيين التجميع الذي تم رمي الخطأ أن يجمع في وضع إلى x86 (أي 32 واسطة). أنا تحولت إلى "أي وحدة المعالجة المركزية" والتي لم الحيلة. يمكنك تغيير هذه القيمة عن طريق القيام بما يلي:

وانقر بالزر الأيمن على المشروع الذهاب إلى Properties -> Build -> Platform Target -> change to "Any CPU"

وأنا حل هذا، الغريب، عن طريق تثبيت System.Data.SQLite عبر تطبيق Nuget واجهة المستخدم الرسومية، بدلا من وحدة إدارة الحزمة.

وتثبيت عن طريق وحدة لم تتضمن التبعيات تحتاج هذه المكتبة للتشغيل.

وخطرت لي 2 حلول سريعة. إما العمل بالنسبة لي. أعتقد أن المشكلة هي بسبب الأذونات.

1) بدلا من استخدام ملف Elmah.dll من الدليل صافي 2.0، كنت Elmah.dll من صافي 1.1.

2) بدلا من حفظ Elmah.dll في الدليل بن المشروع. I جعل دليل دلل على وضعه في.

وهناك طريقة أخرى للالتفاف على هذا هو فقط لترقية التطبيق الخاص بك لELMAH 1.2 بدلا من 1.1.

وSystem.Data.SQLite لديه الاعتماد على System.Data.SQLite.interop تأكد من كل من الحزم هي نفس الإصدار وكلاهما على إلى x86 .

وهذا هو السؤال القديم، لكنني حاولت كل ما سبق. كنت أعمل على بصرامة على إلى x86 مشروع، لذلك لم يكن هناك مجلدين / x86 و / إلى x64. ولكن لسبب ما، كان System.Data.SQLite إصدار مختلف لSystem.Data.SQLite.interop، مرة واحدة انزلوا مطابقة دلس تم إصلاح المشكلة.

هل قمت بحذف مجلد بن التصحيح وإعادة ترجمة مرة أخرى؟

وأو تحقق مرجع مشروع الخاص بك إلى System.Data.SQLite، وتعقب حيث يقع عليه، ثم فتح دلل في العاكس. إذا كنت لا يمكن فتحه، وهذا يعني أن تلف دلل، قد ترغب في إيجاد الصحيح واحد أو بإعادة تثبيت .NET Framework.

إذا كنت تستخدم IIS Express كما خادم الويب على جهازك تطوير أود أن تغيير IIS المحلي. هذا العمل بالنسبة لي.

وهذه هي وظيفة العمر، لكنها قد تساعد بعض الناس يبحثون عن هذا الخطأ لمحاولة تحديد "تمكين تطبيقات 32 بت" إلى True لتجمع التطبيق. هذا هو ما حل الخطأ بالنسبة لي. جئت إلى هذا الحل من خلال قراءة بعض التعليقات إلى @ beckelmw في الإجابة.

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow