Nie można zweryfikować ani uruchomić przepływu pracy w programie Windows Workflow Foundation, który został utworzony przy użyciu elementu System.Activities.ActivityBuilder, jeśli zawiera on wyrażenia Języka Visual Basic
Ten artykuł pomaga rozwiązać problem polegający na tym, że nie można zweryfikować ani uruchomić przepływu pracy w programie Windows Workflow Foundation (WCF), który został utworzony przy użyciu polecenia System.Activities.ActivityBuilder
, jeśli zawiera wyrażenia języka Visual Basic.
Oryginalna wersja produktu: Windows Workflow Foundation
Oryginalny numer KB: 2018455
Symptomy
Po zweryfikowaniu lub wykonaniu przepływu pracy, który został utworzony przy użyciu System.Activities.ActivityBuilder
w aplikacji Microsoft WCF, zgłaszany jest następujący wyjątek:
Nieobsługiwany wyjątek: System.Activities.InvalidWorkflowException: Podczas przetwarzania drzewa przepływu pracy wystąpiły następujące błędy:
"DynamicActivity": Prywatna implementacja działania "1: DynamicActivity" ma następujący błąd weryfikacji: Napotkano błędy kompilatora przetwarzania wyrażenia "variable1. Nazwa".
Wartość "variable1" nie jest zadeklarowana. Może być niedostępny ze względu na poziom ochrony.
Przyczyna
Ten problem występuje, ponieważ System.Activities.ActivityBuilder
nie uwzględnia VisualBasic.Settings
atrybutu w elemencie głównym pliku XAML podczas zapisywania przepływu pracy, jak pokazano w poniższym przykładzie:
<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>
Ten atrybut jest wymagany w przypadku wyrażeń języka Visual Basic do rozpoznawania typów używanych w wyrażeniu do odpowiednich zestawów.
Rozwiązanie
Aby rozwiązać ten problem, ręcznie dodaj następujące dwa atrybuty do elementu głównego pliku XAML.
xmlns:mva="clr-namespace:Microsoft.VisualBasic.Activities;assembly=System.Activities"
mva:VisualBasic.Settings="Assembly references and imported namespaces for internal implementation"
Po dodaniu tych dwóch atrybutów przepływ pracy wyświetlany w sekcji "Objawy" jest wyświetlany w następujący sposób:
<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>
Ponadto można również utworzyć obejście programowe. Aby to zrobić, dodaj następujący kod po ustawieniu builder.Implementation
polecenia , jak pokazano w poniższym przykładowym kodzie:
VisualBasic.SetSettingsForImplementation(builder, new VisualBasicSettings()
{
ImportReferences =
{
new VisualBasicImportReference
{
Assembly = "ConsoleApplication1",
Import = "ConsoleApplication1",
},
}
});
Opinia
https://aka.ms/ContentUserFeedback.
Dostępne już wkrótce: W 2024 r. będziemy stopniowo wycofywać zgłoszenia z serwisu GitHub jako mechanizm przesyłania opinii na temat zawartości i zastępować go nowym systemem opinii. Aby uzyskać więcej informacji, sprawdź:Prześlij i wyświetl opinię dla