6

我正在阅读 WF45 的入门教程,遇到了一个其他人似乎经历过的问题,但与我遇到的方式不同。我希望其他人有我的解决方案。

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

“Expression Activity 类型‘CSharpValue`1’需要编译才能运行。请确保工作流已经编译。”

我已尝试从Windows Workflow Foundation (WF45) - 入门教程下载源代码,以防我错过了一个步骤,但错误仍然存​​在。

在线阅读似乎需要编译具有嵌入式 C# 表达式的工作流,但据我了解,在使用 VS2012 和工作流设计器时默认情况下会发生这种情况?我试图实现在这里找到的 CompileExpressions 方法,但这并没有帮助。我确实读到在预发布版本中存在一个问题,C# 表达式导致了这个问题,但 VB 项目工作正常。对此进行测试,我发现我正在遭受这种确切的情况。VB 教程运行良好,但 C# 版本因此异常而失败。

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

更新和闪避修复:

所以,我已经设法解决了这个问题,尽管我对解决方案不满意,并且很想听听是否有人有正当的理由发生这种情况。

我的解决方法是用我同事的同一文件版本替换\Framework\v4.0.30319文件夹中的Microsoft.Common.targets文件。这解决了这个问题。它还破坏了什么还有待观察......

4

3 回答 3

10

最初的问题线程已经很老了,但也可能对您有所帮助。

我的动态活动遇到了同样的问题,发现文档有误:

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

字符串路径 = @"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);

这是工作代码:

字符串路径 = @"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);
于 2013-03-27T15:39:36.077 回答
2

这可能对某人有所帮助 - 对我有用的是我在我的一个分配的表达式窗口中有换行符。删除换行符并开始工作。

于 2014-07-21T01:06:17.297 回答
0

此错误的另一个原因是表达式的值中有太多 \r\n。

因此,如果您在“值”部分有类似这样的分配活动

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,}

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

于 2014-10-24T08:59:06.630 回答