如何将wpf dll附加到不同的项目

时间:2012-10-22 10:19:03

标签: wpf xaml dll class-library

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

1 个答案:

答案 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;
        }