No puede validar ni ejecutar un flujo de trabajo en Windows Workflow Foundation que se creó mediante System.Activities.ActivityBuilder si contiene Visual Basic expresiones
Este artículo le ayuda a resolver el problema en el que no puede validar o ejecutar un flujo de trabajo en Windows Workflow Foundation (WCF) que se creó mediante el uso si contiene System.Activities.ActivityBuilder Visual Basic expresiones.
Versión del producto original: Windows Workflow Foundation
Número KB original: 2018455
Síntomas
Al validar o ejecutar un flujo de trabajo que se creó mediante una aplicación wcf de Microsoft, se produce la System.Activities.ActivityBuilder siguiente excepción:
Excepción no controlada: System.Activities.InvalidWorkflowException: se encontraron los siguientes errores al procesar el árbol de flujo de trabajo:
'DynamicActivity': la implementación privada de la actividad '1: DynamicActivity' tiene el siguiente error de validación: Error del compilador encontrado expresión de procesamiento "variable1. Name".
No se declara 'variable1'. Puede ser inaccesible debido a su nivel de protección.
Causa
Este problema se produce porque no incluye el atributo en el elemento raíz del archivo XAML al guardar un flujo de trabajo, como se muestra System.Activities.ActivityBuilder VisualBasic.Settings en el ejemplo siguiente:
<Activity x:Class="CustomActivity" xmlns="http://schemas.microsoft.com/netfx/2009/xaml/activities" xmlns:w="clr-namespace:WorkflowConsoleApplication1;assembly=WorkflowConsoleApplication1" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
<Sequence>
<Sequence.Variables>
<Variable x:TypeArguments="w:MyCustomType" Name="variable1" />
</Sequence.Variables>
<WriteLine Text="[variable1.Name]" />
</Sequence>
</Activity>
Este atributo es necesario para Visual Basic para resolver los tipos que se usan en la expresión en los ensamblados correspondientes.
Solución
Para resolver este problema, agrega manualmente los dos atributos siguientes al elemento raíz del archivo XAML.
xmlns:mva="clr-namespace:Microsoft.VisualBasic.Activities;assembly=System.Activities"
mva:VisualBasic.Settings="Assembly references and imported namespaces for internal implementation"
Después de agregar estos dos atributos, el flujo de trabajo que se muestra en la sección "Síntomas" aparece de la siguiente manera:
<Activity x:Class="CustomActivity" xmlns="http://schemas.microsoft.com/netfx/2009/xaml/activities" xmlns:w="clr-namespace:WorkflowConsoleApplication1;assembly=WorkflowConsoleApplication1" xmlns:x=http://schemas.microsoft.com/winfx/2006/xaml xmlns:mva="clr-namespace:Microsoft.VisualBasic.Activities;assembly=System.Activities" mva:VisualBasic.Settings="Assembly references and imported namespaces for internal implementation">
<Sequence>
<Sequence.Variables>
<Variable x:TypeArguments="w:MyCustomType" Name="variable1" />
</Sequence.Variables>
<WriteLine Text="[variable1.Name]" />
</Sequence>
</Activity>
Además, también puede crear una solución alternativa mediante programación. Para ello, agregue el siguiente código después de establecer builder.Implementation , como se muestra en el siguiente código de ejemplo:
VisualBasic.SetSettingsForImplementation(builder, new VisualBasicSettings()
{
ImportReferences =
{
new VisualBasicImportReference
{
Assembly = "ConsoleApplication1",
Import = "ConsoleApplication1",
},
}
});