Sie können einen Workflow in Windows Workflow Foundation, der mithilfe von System.Activities.ActivityBuilder erstellt wurde, nicht überprüfen oder ausführen, wenn er Visual Basic Ausdrücke enthält.

Dieser Artikel hilft Ihnen, das Problem zu beheben, bei dem Sie einen Workflow in Windows Workflow Foundation (WCF) nicht überprüfen oder ausführen können, der mithilfe von Visual Basic Ausdrücken erstellt System.Activities.ActivityBuilder wurde.

Ursprüngliche Produktversion:   Windows Workflow Foundation
Ursprüngliche KB-Nummer:   2018455

Problembeschreibung

Wenn Sie einen Workflow überprüfen oder ausführen, der mithilfe System.Activities.ActivityBuilder einer Microsoft WCF-Anwendung erstellt wurde, wird die folgende Ausnahme ausgelöst:

Unbehandelte Ausnahme: System.Activities.InvalidWorkflowException: Beim Verarbeiten der Workflowstruktur sind die folgenden Fehler aufgetreten:
"DynamicActivity": Die private Implementierung der Aktivität "1: DynamicActivity" weist den folgenden Überprüfungsfehler auf: Compilerfehler, bei denen der Verarbeitungsausdruck "Variable1" aufgetreten ist. Name".
'variable1' wird nicht deklariert. Aufgrund der Schutzebene kann nicht darauf zugegriffen werden.

Ursache

Dieses Problem tritt auf, da System.Activities.ActivityBuilder das VisualBasic.Settings Stammelement der XAML-Datei beim Speichern eines Workflows kein Attribut enthält, wie im folgenden Beispiel gezeigt:

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

Dieses Attribut ist für Visual Basic Ausdrücke erforderlich, um die Typen, die im Ausdruck verwendet werden, in die entsprechenden Assemblys aufzulösen.

Lösung

Um dieses Problem zu beheben, fügen Sie dem Stammelement der XAML-Datei manuell die folgenden beiden Attribute hinzu.

 xmlns:mva="clr-namespace:Microsoft.VisualBasic.Activities;assembly=System.Activities"  
 mva:VisualBasic.Settings="Assembly references and imported namespaces for internal implementation"

Nachdem Sie diese beiden Attribute hinzugefügt haben, wird der workflow, der im Abschnitt "Symptome" angezeigt wird, wie folgt angezeigt:

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

Darüber hinaus können Sie auch eine programmgesteuerte Problemumgehung erstellen. Fügen Sie dazu den folgenden Code nach dem Festlegen builder.Implementation hinzu, wie im folgenden Beispielcode dargestellt:

VisualBasic.SetSettingsForImplementation(builder, new VisualBasicSettings()
{
    ImportReferences =
    {
        new VisualBasicImportReference
        {
           Assembly = "ConsoleApplication1",
           Import = "ConsoleApplication1",
        },
    }
});