工作流基础4.5 '表达活动类型'CSharpValue '需要编译才能运行."

本文关键字:编译 quot 运行 CSharpValue 活动 工作流 类型 | 更新日期: 2023-09-27 17:51:07

我正在完成WF45的入门教程,并遇到了一个问题,看起来已经由其他人经历过,但不是以同样的方式,我正在经历它。我希望别人能给我一个解决办法。

当我完成教程时,一切都很好,直到我不得不从工作流主机运行它。此时,工作流的实例化失败并返回以下消息。

"表达式活动类型'CSharpValue ' 1'需要编译命令奔跑。请确保工作流程已编译。"

我已经尝试从Windows Workflow Foundation (WF45) - Getting Started Tutorial下载源代码,以防我错过了一个步骤,但错误仍然存在。

在线阅读似乎需要编译嵌入式c#表达式的工作流,但据我所知,在使用VS2012和工作流设计器时默认会发生这种情况?我试图实现这里发现的CompileExpressions方法,但没有帮助。我确实读到在预发布版本中有一个问题,c#表达式导致了这个问题,但是VB项目可以工作。通过测试,我发现我正在遭受这种情况。VB教程运行得很好,但是c#版本却因为这个异常而失败。

此外,我敢说:这不是我同事的机器上的问题,所以我认为这是我机器上的配置问题…

更新,躲避解决办法:

所以,我已经设法解决了这个问题,尽管我对解决方案不满意,并希望听到是否有人有一个体面的原因发生这种情况。

我的解决办法是替换我的Microsoft.Common。在'Framework'v4.0.30319文件夹中的目标文件与我同事的相同文件的版本。这就解决了问题。

工作流基础4.5 '表达活动类型'CSharpValue '需要编译才能运行."

最初的Problem线程相当旧,但可能对您也有帮助。

我的动态活动也有同样的问题,并且发现文档是错误的:

这是产生上面错误的代码:

string path = @"myActivity.xaml";

            Activity activity = ActivityXamlServices.Load(path);

            IDictionary<string, object> dictionary = new Dictionary<string, object>
            {
                { "Arg", 1},
            };
            IDictionary<string, object> output = WorkflowInvoker.Invoke(activity, dictionary);

,这是工作代码:

string path = @"myActivity.xaml";

            ActivityXamlServicesSettings settings = new ActivityXamlServicesSettings
            {
                CompileExpressions = true
            };

            Activity activity = ActivityXamlServices.Load(path, settings);
            IDictionary<string, object> dictionary = new Dictionary<string, object>
            {
                { "ArgNumberToEcho", 2},
            };
            IDictionary<string, object> output = WorkflowInvoker.Invoke(activity, dictionary);

这可能会对某人有所帮助-对我有用的是,我在表达式窗口中为我的一个分配设置了换行符。移除了换行符,它开始工作了。

另一个导致此错误的原因是表达式的值中包含太多的'r'n。

如果你有一个像这样的Assign活动在Value部分

new myobject(){
     param1=val1,
     param2=val2,   
     param3=val3,
     param4=val4,
     param5=val5,    
     param6=val6,
}

改成:

new myobject(){param1=val1,param2=val2,param3=val3,param4=val4,param5=val5,param6=val6,}

现在按住大拇指,希望它能修复错误。