2013-09-24 6 views
0

Я пишу приложение Windows Phone 8 и используя свет MVVM. Я написал класс ViewModel и Model WP8 в отдельный проект PCL.Получение System.Windows.Markup.XamlParseException при попытке запуска приложения WP8

При использовании Expression Blend он правильно заполняет данные времени разработки. Но когда я пытаюсь запустить приложение в эмуляторе, он получает следующую ошибку. Не могли бы вы помочь мне разобраться с исправлением этой ошибки.

A first chance exception of type 'System.Windows.Markup.XamlParseException' 
occurred in System.Windows.ni.dll 

Подробнее об исключении.

System.Windows.Markup.XamlParseException occurred 
    HResult=-2146233087 
    Message=Cannot create instance of type 'MyPkg.Commons.ViewModel.ViewModelLocator' [Line: 12 Position: 61] 
    Source=System.Windows 
    LineNumber=12 
    LinePosition=61 
    StackTrace: 
     at System.Windows.Application.LoadComponent(Object component, Uri resourceLocator) 
     at MyPkg.WindowsPhone8.App.InitializeComponent() 
     at MyPkg.WindowsPhone8.App..ctor() 
    InnerException: System.TypeInitializationException 
     HResult=-2146233036 
     Message=The type initializer for 'MyPkg.Commons.ViewModel.ViewModelLocator' threw an exception. 
     Source=mscorlib 
     TypeName=MyPkg.Commons.ViewModel.ViewModelLocator 
     StackTrace: 
      at System.RuntimeMethodHandle.InvokeMethod(Object target, Object[] arguments, Signature sig, Boolean constructor) 
      at System.Reflection.RuntimeConstructorInfo.Invoke(BindingFlags invokeAttr, Binder binder, Object[] parameters, CultureInfo culture) 
      at MS.Internal.TypeProxy.<>c__DisplayClass32.<GetCreateObjectDelegate>b__2c() 
      at MS.Internal.TypeProxy.CreateInstance(UInt32 customTypeId) 
      at MS.Internal.XamlManagedRuntimeRPInvokes.CreateInstance(XamlTypeToken inXamlType, XamlQualifiedObject& newObject) 
     InnerException: System.IO.FileLoadException 
      HResult=-2146234304 
      Message=Could not load file or assembly 'Microsoft.Practices.ServiceLocation, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35' or one of its dependencies. The located assembly's manifest definition does not match the assembly reference. (Exception from HRESULT: 0x80131040) 
      Source=MyPkg.Commons 
      StackTrace: 
       at MyPkg.Commons.ViewModel.ViewModelLocator..cctor() 
      InnerException: 

Ниже App.xaml

<Application xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
      xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
      xmlns:phone="clr-namespace:Microsoft.Phone.Controls;assembly=Microsoft.Phone" 
      xmlns:shell="clr-namespace:Microsoft.Phone.Shell;assembly=Microsoft.Phone" 
      xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
      xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
      xmlns:vm="clr-namespace:MyPkg.Commons.ViewModel;assembly=MyPkg.Commons" 
      mc:Ignorable="d" x:Class="MyPkg.WindowsPhone8.App"> 
    <!--Application Resources--> 
    <Application.Resources> 
    <local:LocalizedStrings xmlns:local="clr-namespace:MyPkg.WindowsPhone8" x:Key="LocalizedStrings" /> 
     <vm:ViewModelLocator x:Key="Locator" d:IsDataSource="True" /> 
    </Application.Resources> 
    <Application.ApplicationLifetimeObjects> 
    <!--Required object that handles lifetime events for the application--> 
    <shell:PhoneApplicationService Launching="Application_Launching" Closing="Application_Closing" Activated="Application_Activated" Deactivated="Application_Deactivated" /> 
    </Application.ApplicationLifetimeObjects> 
</Application> 

Ниже кода конструктора ViewModelLocator

static ViewModelLocator() 
    { 
     ServiceLocator.SetLocatorProvider(() => SimpleIoc.Default); 

     if (ViewModelBase.IsInDesignModeStatic) 
     { 
      // Create design time view services and models 
      SimpleIoc.Default.Register<IAlaramService, MyPkg.Commons.Design.AlaramService>(); 
     } 
     else 
     { 
      // Create run time view services and models 
      SimpleIoc.Default.Register<IAlaramService, MyPkg.Commons.Design.AlaramService>(); 
     } 

     SimpleIoc.Default.Register<MainViewModel>(); 
    } 

ответ

1

Оказывается, есть проблема с ссылкой на сборку Microsoft.Practices.ServiceLocation. Откройте папку «Ссылки» для своего проекта, щелкните правой кнопкой мыши по Microsoft.Practices.ServiceLocation и выберите свойства. Убедитесь, что файл, на который ссылается Path, существует, и для параметра «Копировать локальное» установлено значение «Истина», а затем перестройте приложение. Если эта ошибка сохраняется, удалите и повторно добавьте библиотеку MVVM Light в ваш проект.

+1

Спасибо, commons (моя библиотека PCL) и проект wp8 ссылались на разную версию Microsoft.Practices.ServiceLocation. Я сделал так, чтобы ссылаться на PCL-версию Microsoft.Practices.ServiceLocation и начал работать. –

Смежные вопросы