1、1 说明以下方法不要求宿主引用类,但是,如果xoml中使用了自定义的Activity,要将自定义的Activity所在的dll文件复制到宿主程序目录中可以将其转换成另一种xoml文件,具体见编译成DLL的工作流的XOML文件2 VS2005设计器生成的xoml文件SequentialWorkflowActivity x:Class=wxwinter.wf.TestWorkflow.wxdTestWorkflow3 x:Name=wxdTestWorkflow3 xmlns:ns0=clr-namespace:wxwinter.wf.TestWorkflow xmlns:x= xmlns= 注意
2、该文件不能用于直接创选实例,也不能用于动态编译如果要使用,可参考下面的方法要求修改x:Class与xmlns:ns0=clr-namespace部分3 从xoml文件创建工作流实例只有加载由从工作流类得到xoml字串格式的xoml文件,即没有x:Class部分要有xmlns:ns0=clr-namespace部分有Assembly与Version与Culture与PublicKeyToken信息SequentialWorkflowActivity x:Name=Workflow1 xmlns:ns0=clr-namespace:WorkflowLibrary1;Assembly=Workflo
3、wLibrary1, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null xmlns:x= xmlns=Assembly=WorkflowLibrary1, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null可以使用System.Reflection.Assembly a = System.Reflection.Assembly.LoadFrom(WorkflowLibrary1.dll);System.Console.WriteLine(a.FullName);得到方法 / / 从
4、xoml文件创建工作流实例 / / xomlfile文件 / 实例guid或错误信息 public string CreateWorkflowFromXomlFile(string xomlfile) try System.Workflow.Runtime.WorkflowInstance instance; XmlReader xr = XmlReader.Create(xomlfile); instance = WFEngine.CreateWorkflow(xr); return instance.InstanceId.ToString(); catch (System.Workflow
5、ComponentModel.Compiler.WorkflowValidationFailedException ex) return err: + ex.Message; 4 从xoml字串创建工作流实例只有加载由从工作流类得到xoml字串格式的xoml文件,即没有x:Class部分要有xmlns:ns0=clr-namespace部分有Assembly与Version与Culture与PublicKeyToken信息SequentialWorkflowActivity x:Name=Workflow1 xmlns:ns0=clr-namespace:WorkflowLibrary1;A
6、ssembly=WorkflowLibrary1, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null xmlns:x= xmlns=Assembly=WorkflowLibrary1, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null可以使用System.Reflection.Assembly a = System.Reflection.Assembly.LoadFrom(WorkflowLibrary1.dll);System.Console.WriteLine(a.FullN
7、ame);得到方法 / / 从xoml字串创建工作流实例 / / xoml字符串 / 实例guid或错误信息 public string CreateWorkflowFormXomlString(string xomlstring) try System.Text.UTF8Encoding utf8 = new System.Text.UTF8Encoding(); byte b = utf8.GetBytes(xomlstring); System.IO.MemoryStream ms = new System.IO.MemoryStream(b); XmlReader xr = XmlReader.Create(ms); System.Workflow.Runtime.WorkflowInstance instance; instance = WFEngine.CreateWorkflow(xr); return instance.InstanceId.ToString(); catch (System.Workflow.ComponentModel.Compiler.WorkflowValidationFailedException ex) return err: + ex.Message; 5