فشل تطبيق WPF عند بدء التشغيل باستخدام TypeInitializationException

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

  •  09-06-2019
  •  | 
  •  

سؤال

لدي تطبيق WPF بسيط وأحاول تشغيله.أنا أتبع أنماط وممارسات Microsoft "إرشادات التطبيق المركب لـ WPF".لقد اتبعت تعليماتهم ولكن تطبيق WPF الخاص بي فشل على الفور مع "TypeInitializationException".

تكشف الخاصية InnerException أن "مُهيئ النوع لـ 'System.Windows.Navigation.BaseUriHelper' ألقى استثناءً."

هنا هو app.xaml الخاص بي:

<Application x:Class="MyNamespace.App"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
    <Application.Resources>         
    </Application.Resources>
</Application>

وهنا هو app.xaml.cs الخاص بي (تم طرح الاستثناء في "التطبيق العام ()"):

public partial class App : Application
{
    public App()
    {
        Bootstrapper bootStrapper = new Bootstrapper();
        bootStrapper.Run();
    }
}

لقد قمت بتعيين فئة "التطبيق" ككائن بدء التشغيل في المشروع.

ما الذي يضل؟

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

المحلول

شكرًا @ima، إجابتك وجهتني في الاتجاه الصحيح.كنت أستخدم ملف app.config وكان يحتوي على هذا:

<configuration>
  <startup>
    <supportedRuntime version="v2.0.50727" sku="Client"/>
  </startup>
  <configSections>
    <section name="modules" type="Microsoft.Practices.Composite.Modularity.ModulesConfigurationSection, Microsoft.Practices.Composite"/>
  </configSections>
  <modules>
    <module assemblyFile="Modules/MyNamespace.Modules.ModuleName.dll" moduleType="MyNamespace.Modules.ModuleName.ModuleClass" moduleName="Name"/>
  </modules>
</configuration>

يبدو أن المشكلة كانت في عنصر <startup> لأنه عندما قمت بإزالته كان التطبيق يعمل بشكل جيد.لقد كنت في حيرة من أمري لأن Visual Studio 2008 أضاف ذلك عندما قمت بتحديد المربع لاستخدام "ملف تعريف العميل" المتوفر في 3.5 SP1.

بعد بعض العبث حول تحديد المربع وإلغاء تحديده، انتهى بي الأمر بملف تكوين مثل هذا:

<configuration>
  <configSections>
    <section name="modules" type="Microsoft.Practices.Composite.Modularity.ModulesConfigurationSection, Microsoft.Practices.Composite"/>
  </configSections>
  <modules>
    <module assemblyFile="Modules/MyNamespace.Modules.ModuleName.dll" moduleType="MyNamespace.Modules.ModuleName.ModuleClass" moduleName="Name"/>
  </modules>
  <startup>
    <supportedRuntime version="v2.0.50727" sku="Client"/>
  </startup>
</configuration>

الذي يعمل!

لست متأكدًا من أهمية ترتيب العناصر في app.config - ولكن يبدو أنه كذلك.

نصائح أخرى

أي خطأ في App.config قد يتسبب الملف في حدوث خطأ، مثل الخطأ المطبعي لـ * في نهاية السطر، على سبيل المثال ...</startup> يحتوي على "*" إضافية في نهاية السطر ...</startup>*.

هل تستخدم ملف .config؟إذا كان الأمر كذلك، التحقق من وجود أخطاء.غالبًا ما يتم تشغيل أخطاء التهيئة من هذا النوع بواسطة XML غير صالح:إذا لم تكن هناك أخطاء في XAML، فإن تكوين XML هو المكان الأول الذي يجب البحث فيه.

بتتبع InnerExceptions في أعماقك، قد تجد الخطأ التالي:

"Only one <configSections> element allowed per config file and if present must be the first child of the root <configuration> element"

حدث هذا التغيير في الترتيب بعد أن قام Visual Studio EntityFramework Wizard بإضافة عنصر ConnectionStrings إلى الأعلى

إذا رأيت فقط TypeInitializationException بدون سبب أو بدون تفاصيل حول الخطأ، فقم بتعطيل Just My Code في خيارات Visual Studio.

بالنسبة لي، قمت بنسخ إعدادات التطبيق من تطبيق آخر إلى ملف app.config الخاص بي إلى قسم جديد يسمى "userSettings".ومع ذلك، يجب إضافة "configSections" أيضًا إلى app.config الذي يحدد "userSettings".لقد قمت بحذف قسم إعدادات المستخدم ثم قمت بتحرير إعدادات التطبيق وحفظته.يقوم VS تلقائيًا بإنشاء "إعدادات المستخدم" و"أقسام التكوين" الصحيحة لك في حالة غيابها.

لديك قسمين باسم "الوحدات النمطية".ضع تعريفي الوحدة في قسم واحد يسمى "الوحدات".

لقد واجهت وضعا مماثلا.بعد البحث لمدة أسبوع، وجدت الحل وقد نجح بالفعل بالنسبة لي.لقد حل 2-3 مشاكل تنشأ بسبب نفس المشكلة.

اتبع الخطوات التالية:تحقق من مفتاح WPF (الغياب) في التسجيل:HKEY_LOCAL_MACHINE Software Microsoft Net Framework Setup NDP V3.0 Setup Windows Presentation Foundation كانت مشكلتي بسبب عدم وجود مفتاح أعلاه في التسجيل.

يمكنك تعديل واستخدام التفاصيل التالية في السجل الخاص بك:(في الواقع، يمكنك حفظه في ملف واستيراده في التسجيل)

hkey_local_machine software microsoft net framework setup ndp v3.0 setup windows presentation foundation] @= "wpf v3.0.6920.1453" "version" = "3.0.6920.1453" "wpfrefreenceassemblible ملفات البرنامج مرجعية التجميعات microsoft framework v3.0 "" wpfCommonAssembliesPathx86 "=" C: windows system32 "" installroot "=" c: windows microsoft.net framework v3.0 wpf "" installsuccess "= dword: 00000001" ProductVersion "=" 3.0.6920.1453 "" WPFNEREFERENCESSEMBLIESPTHX86 "=" C: Windows Microsoft.net Framework v3.0 wpf "

أنا متأكد من أنها سوف تنجح.

أتمنى لك كل خير.

يعتبر،

أوميش

في حالتي يجب إضافة هذا:

<configSections>
<!-- For more information on Entity Framework configuration, visit http://go.microsoft.com/fwlink/?LinkID=237468 -->
<section name="entityFramework" type="System.Data.Entity.Internal.ConfigFile.EntityFrameworkSection, EntityFramework, Version=6.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" requirePermission="false" />

القسم في App.config (VS 2015 .NET 4.5.2)

افتح أي مشروع WPF تم إنشاؤه من قبل، وتحقق من البناء، إذا كان موافقًا - تحقق من App.config وقارنه في كلا المشروعين

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