0

我创建了一个 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。我非常感谢你能提供的任何帮助,因为我现在很困。谢谢。

4

1 回答 1

0

我猜您ExportCheck.dll在您推荐的项目中没有被推荐(Copy Local True)?

对,如果是这样,您将不得不从 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;
        }
于 2012-10-22T10:33:16.057 回答