我想在我的XAP for Windows Phone中包含另一个程序集而不直接引用它(如插件系统)所以我可以在运行时加载它并从中激活类型但我找不到任何类型的引用
我大多发现了一些关于如何加载它的问题,但是如何(正确地)包含它,没有。
答案 0 :(得分:2)
您可以将已编译的程序集(.dll文件)添加到WP8项目,并将文件Build Action设置为“Content”。然后您可以尝试加载它:
var folder = await StorageFolder.GetFolderFromPathAsync(Path.Combine(Windows.ApplicationModel.Package.Current.InstalledLocation.Path, "Plugins", "Services"));
var files = await folder.GetFilesAsync();
var firstFile = files.FirstOrDefault();
var assy = Assembly.LoadFrom(firstFile.Path);
但是Assembly.LoadFrom会失败,因为它不受支持。您仍然可以使用它来加载其他二进制内容,但不能加载代码。
您所能做的只是引用所有'插件'或您可能需要的任何程序集,不直接引用这些程序集中的任何类型。通过'引用程序集',我的意思是右键单击引用(在WP8项目中)和“添加引用...”。
然后你可以这样做:
var assy = Assembly.Load("MyCompany.MyProject.WhateverAssembly");
var tp = typeof(IService);
var x = ass.GetTypes().Where(t => t.IsClass && tp.IsAssignableFrom(t)).SingleOrDefault();
Activator.CreateInstance(x);
不是很优雅,但我可以称之为解决方法。