我正在为WF45工作Getting Started Tutorial并遇到了一个看起来像其他人经历过的问题,但与我遇到的问题不一样。我希望其他人能为我找到解决方案。
当我完成教程时,一切都很好,直到我必须从工作流主机运行它。此时,工作流的实例化失败并返回以下消息。
“表达式活动类型'CSharpValue`1'需要编译 为了运行。请确保已编译工作流程。“
我尝试从Windows Workflow Foundation (WF45) - Getting Started Tutorial下载源代码,以防我错过了一个步骤,但错误仍然存在。
在线阅读似乎需要编译带有嵌入式C#表达式的工作流,但据我所知,这在使用VS2012和工作流设计器时会默认发生?我试图实现找到here的CompileExpressions方法,但这没有帮助。我确实读过在预发布版本中存在一个问题,其中C#表达式导致了这个问题,但VB项目仍然有效。测试这个,我看到我正在遭受这种确切的情况。 VB教程运行正常,但C#版本因此异常而失败。
此外,我敢提一下:这不是我同事的机器上的问题,所以我认为这是我机器上的配置问题......
更新&躲闪修复:
所以,我已经设法解决了这个问题,虽然我对解决方案不满意,并且很想知道是否有人有这样的理由发生这种情况。
我的修复是用我同事的同一文件版本替换 \ Framework \ v4.0.30319 文件夹中的 Microsoft.Common.targets 文件。这解决了这个问题。它还有什么破坏还有待观察......
答案 0 :(得分:9)
最初的问题主题很老了,但也许你的发现也很有帮助。
我的动态活动遇到了同样的问题,发现文档错误了:
这是产生上述错误的代码:
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);
答案 1 :(得分:1)
这可能对某些人有所帮助 - 对我有用的是我在“表达式”窗口中为我的一个Assigns设置了换行符。删除换行符并开始工作。
答案 2 :(得分:0)
此错误的另一个原因是表达式中值\ r \ n中的\ r \ n太多。
因此,如果您为“值”部分设置了具有类似内容的Assign活动
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,}
现在握住两个拇指并希望它能解决错误。