我创建了一个wpf mvvm项目,当主页面是app.xaml时,它是空白的,它只运行实际的mainwindow.xaml(通过使用viewmodellocator)。 这个项目工作正常,我作为一个exe运行它倍。 我已经创建了一个类库,并构建了它。
现在我有另一个项目,为此我引用了创建的dll。 我想运行wpf页面。我一直在寻找正确解决方案的几天,并研究了ResourceDirectory,以及论坛中提供的内容,如 -
Assembly a = Assembly.Load(System.IO.File.ReadAllBytes("ExportCheck.dll"));
UserControl UserContrl = (UserControl)a.CreateInstance("ExportCheckInstance");
UserContrl.Show();
我尝试了其他的东西,然而,我似乎无法运行我的wpf。 我非常感谢你提供的任何帮助,因为我现在很困难。 谢谢。
答案 0 :(得分:0)
我猜您的推荐项目中没有引用ExportCheck.dll
(复制本地真实)?
是的,如果是这样,你必须从Uri路径加载DLL。
var asemblyPath = @"C:\MyDevCodeBase\AssetMVVMSample\Asset1MVVMPool\bin\Debug";
var assemblyName = "Asset1MVVMPool"
var myViewModel = "Asset1MVVMPool.List.ViewModels.Asset1ListViewModel, Asset1MVVMPool, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null"
var newAsmbly = Assembly.LoadFrom(assemblyPath + @"\" + assemblyName + ".dll");
if (!string.IsNullOrEmpty(myViewModel))
{
var type = newAsmbly.GetTypes().FirstOrDefault(
t => t.AssemblyQualifiedName == viewModelFullName);
var currentViewModel
= Activator.CreateInstance(type) as IBaseViewModel;
return currentViewModel;
}
修改强>
对于使用Copy Local True的已引用的程序集,请使用以下代码...
var myasmbly = Assembly.GetExecutingAssembly().GetReferencedAssemblies().Where(
asmbly => asmbly.Name == "Export.dll").FirstOrDefault();
if (!string.IsNullOrEmpty(myViewModel))
{
var type = myasmbly.GetTypes().FirstOrDefault(
t => t.AssemblyQualifiedName == viewModelFullName);
var currentViewModel
= Activator.CreateInstance(type) as IBaseViewModel;
return currentViewModel;
}