我正在编写Windows Phone 8应用程序并使用MVVM灯。我已将ViewModel和WP8应用程序的Model类编写到单独的PCL项目中。
使用Expression Blend时,它会正确填充设计时数据。但是,当我尝试在模拟器中运行应用程序时,会出现以下错误。你能帮我解决一下这个错误吗?
A first chance exception of type 'System.Windows.Markup.XamlParseException'
occurred in System.Windows.ni.dll
以下是Exception的详细信息。
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>();
}
答案 0 :(得分:1)
您对Microsoft.Practices.ServiceLocation程序集的引用似乎存在问题。打开项目的References文件夹,右键单击Microsoft.Practices.ServiceLocation,然后选择属性。确保Path中引用的文件存在且Copy Local设置为True,然后重新构建应用程序。如果此错误仍然存在,请删除MVVM Light库并将其重新添加到项目中。