我想将一个新的引用导入到我的工作流设计器中,但是我遇到了一个奇怪的问题。
这是我导入引用的代码。
var root = GetRootElement();
VisualBasicSettings vbs = VisualBasic.GetSettings(root);
vbs.ImportReferences.Add(new VisualBasicImportReference { Assembly = Assembly.Load("Castle.Core").FullName, Import = "Castle.Core.Configuration.Xml" });
private object GetRootElement()
{
var modelservice = workflowDesigner.Context.Services.GetService<ModelService>();
if (modelservice == null)
return null;
var rootmodel = modelservice.Root.GetCurrentValue();
return rootmodel;
}
当我第一次加载我的设计器时,它可以工作,程序集很好地添加到哈希集 ImportReferences 中,然后我还在"导入"面板中看到了命名空间。但是当我调用上面的方法时,当用户通过选取器对话框选取一个 dll 时,我调用上面的代码,程序集也很好地添加到 ImportReferences 中,但"导入"面板没有刷新......
有什么想法吗?
感谢您的帮助。
你试过 DesignerView.OnReferenceUpdated 吗?这似乎是你要找的:
如果添加了引用的程序集,则找到的类型的命名空间 添加到导入的命名空间列表中。如果 引用的程序集被删除,在 中找到的类型的命名空间 程序集将从导入的命名空间列表中删除。
使用示例:
var designerView = workflowDesigner.Context.Services.GetService<DesignerView>();
designerView.OnReferenceUpdated(assemblyName, true/false);
实际上,命名空间导入得很好,它隐藏在上面的下拉列表中。
下面是导入命名空间的最简单代码。http://blogs.msdn.com/b/tilovell/archive/2011/11/02/wf4-adding-vb-namespace-imports-to-your-workflow-programmatically.aspx