5

Ich erstelle eine Activity Library in Visual Studio 11 Beta (obwohl ich alle meine Schritte in VS2010 mit dem gleichen Ergebnis wiederholt habe) und auf das .NET 4.0 Framework abzielt.In Workflow Designer von VB zu C# wechseln

Als ich anfing, Argumente über den Workflow Designer einzugeben, bemerkte ich die "Geben Sie eine VB-Ausdruck" Nachricht im Feld Standardwert ein. Ich bin mir nicht sicher, wie man den Sprachkontext von VB zu C# ändert.

das Projekt zu erstellen, ich diese Schritte befolgt:

  1. Zum Datei>New und Projekt wählen ...

  2. Im installiert>Vorlagen Abschnitt des Dialogfelds Neues Projekt, wählen Sie Visual C#>Workflow->Aktivität Bibliothek

  3. Nennen Sie das Projekt, wie üblich, und klicken Sie auf OK

Und das ist im Grunde ist es. Ich bemerkte dann, dass die Standard-Activity1.xaml-Datei VB in den Standardwerten-Feldern erwartete. Ich löschte es und folgte dann vor, um eine neue Aktivität zu erstellen:

  1. Rechtsklick auf dem Projekt und wählen Sie hinzufügen>Neue Artikel ...

  2. Im Neuen Elemente hinzufügen Dialogfenster, navigieren Sie zu installiert>Visual C# Artikel>Workflow->Aktivität

  3. die Aktivität
  4. Name und klicken Sie auf OK

Es ist das gleiche Ergebnis war, werden die Standardwertfelder ein VB Ausdruck erwartet.

Wenn ich den XAML-Code anschaue, kann ich klar den Microsoft.VisualBasic.Activities Namensraum und ein VisualBasic.Settings Element sehen, aber ich bin nicht sicher, was ich tun soll, um es zu ändern; Jedes Mal, wenn ich es versuche, werde ich am Ende alles vermasseln. Hier ist der XAML-Code, der generiert wird:

<Activity mc:Ignorable="sads sap" x:Class="THINKImport.CustomerAddOrderAdd" 
xmlns="http://schemas.microsoft.com/netfx/2009/xaml/activities" 
xmlns:local="clr-namespace:THINKImport.THINKWebReference" 
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
xmlns:mva="clr-namespace:Microsoft.VisualBasic.Activities;assembly=System.Activities" 
xmlns:s="clr-namespace:System;assembly=System.Core" 
xmlns:s1="clr-namespace:System;assembly=System" 
xmlns:s2="clr-namespace:System;assembly=System.ServiceModel" 
xmlns:s3="clr-namespace:System;assembly=mscorlib" 
xmlns:sads="http://schemas.microsoft.com/netfx/2010/xaml/activities/debugger" 
xmlns:sap="http://schemas.microsoft.com/netfx/2009/xaml/activities/presentation" 
xmlns:t="clr-namespace:THINKImport" 
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"> 
<x:Members> 
    <x:Property Name="user_login_data" Type="InArgument(local:user_login_data)" /> 
    <!--Removed the other properties for brevity--> 
    </x:Members> 
    <sap:VirtualizedContainerService.HintSize>440,440</sap:VirtualizedContainerService.HintSize> 
    <mva:VisualBasic.Settings>Assembly references and imported namespaces for internal implementation</mva:VisualBasic.Settings> 
</Activity> 

Antwort

5

C# Expressions

Zuvor alle Ausdrücke in Workflows können nur in Visual Basic geschrieben werden. In .NET Framework 4.5 RC, Visual Basic Ausdrücke sind nur für Projekte mit Visual Basic erstellt. Visual C# -Projekte verwenden jetzt verwenden C# für Ausdrücke. Ein voll funktionsfähiges C# -Expressions-Editor ist zur Verfügung gestellt, welche Fähigkeiten wie Grammatik-Hervorhebung und Intellisense. C# -Workflow-Projekte, die in früheren Versionen erstellt wurden und die Visual Basic-Ausdrücke verwenden, funktionieren weiterhin.

Ab Beta 1 werden C# -Ausdrücke zur Entwurfszeit validiert. Fehler in C# -Ausdrücke werden mit einer roten wellenförmigen Unterstreichung markiert.

Mehr: What's New in Windows Workflow Foundation in .NET 4.5

5

Ich war in der Lage, das Problem herauszufinden.

Zunächst konnte ich jedoch die Ursache here entdecken. Kurz gesagt, VB.NET muss im Ausdruckseditor verwendet werden, selbst wenn das Programm in C# ist.

Also, ich war ein bisschen bumsig darüber, aber ich entschied mich für einen weiteren Crack am XAML-Code, weil ich in den WF-Tutorials definitiv eine Aktivität ausführte, an der ich im Designer arbeitete, die Expressions akzeptierte in C#. Ich öffnete das Projekt und ging den XAML-Code durch.

Es ist dann, dass ich diese Zeile bemerkt:

<sap2010:ExpressionActivityEditor.ExpressionActivityEditor>C#</sap2010:ExpressionActivityEditor.ExpressionActivityEditor> 

ich die MSDN-Bibliothek durchsucht und die documentation for the ExpressionActivityEditor class gefunden. Soweit ich das beurteilen kann, ist dies für .NET 4.5 neu. In meinem speziellen Fall gibt es keinen Grund, warum ich .NET 4.5 in meinem Projekt nicht anvisieren kann, also habe ich es geändert. Sobald die Lösung wieder geöffnet wurde, akzeptierten alle Textfelder und Felder des Ausdruckseditors C#. Um "neu zu starten" löschte ich die Aktivitätsdatei, an der ich gearbeitet hatte, und erstellte eine neue. Wenn jemand interessiert, hier ist das erzeugte XAML-Code:

<Activity mc:Ignorable="sap sap2010 sads" x:Class="THINKImport.CustomerAddOrderAdd" 
     xmlns="http://schemas.microsoft.com/netfx/2009/xaml/activities" 
     xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
     xmlns:sads="http://schemas.microsoft.com/netfx/2010/xaml/activities/debugger" 
     xmlns:sap="http://schemas.microsoft.com/netfx/2009/xaml/activities/presentation" 
     xmlns:sap2010="http://schemas.microsoft.com/netfx/2010/xaml/activities/presentation" 
     xmlns:sco="clr-namespace:System.Collections.ObjectModel;assembly=mscorlib" 
     xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
     xmlns:THINKWebReference="clr-namespace:THINKImport.THINKWebReference"> 
    <x:Members> 
    <x:Property Name="user_login_data" Type="InArgument(THINKWebReference:user_login_data)"> 
    <x:Property.Attributes> 
     <RequiredArgumentAttribute /> 
     </x:Property.Attributes> 
    </x:Property> 
    <x:Property Name="customer_data" Type="InArgument(THINKWebReference:customer_data)" /> 
    <!--Remainder of Properties removed for brevity--> 
    </x:Members> 
    <sap2010:ExpressionActivityEditor.ExpressionActivityEditor>C#</sap2010:ExpressionActivityEditor.ExpressionActivityEditor> 
    <TextExpression.NamespacesForImplementation> 
    <sco:Collection x:TypeArguments="x:String"> 
     <x:String>System</x:String> 
     <x:String>System.Collections.Generic</x:String> 
     <x:String>System.Data</x:String> 
     <x:String>System.Linq</x:String> 
     <x:String>System.Text</x:String> 
    </sco:Collection> 
    </TextExpression.NamespacesForImplementation> 
    <TextExpression.ReferencesForImplementation> 
    <sco:Collection x:TypeArguments="AssemblyReference"> 
     <AssemblyReference>mscorlib</AssemblyReference> 
     <AssemblyReference>System</AssemblyReference> 
     <AssemblyReference>System.Core</AssemblyReference> 
     <AssemblyReference>System.Data</AssemblyReference> 
     <AssemblyReference>System.ServiceModel</AssemblyReference> 
     <AssemblyReference>System.Xml</AssemblyReference> 
    </sco:Collection> 
    </TextExpression.ReferencesForImplementation> 
    <sap2010:WorkflowViewState.IdRef> 
    THINKImport.CustomerAddOrderAdd_1 
    </sap2010:WorkflowViewState.IdRef> 
    <sap2010:WorkflowViewState.ViewStateManager> 
    <sap2010:ViewStateManager> 
     <sap2010:ViewStateData Id="THINKImport.CustomerAddOrderAdd_1" sap:VirtualizedContainerService.HintSize="440,440" /> 
    </sap2010:ViewStateManager> 
    </sap2010:WorkflowViewState.ViewStateManager> 
</Activity> 

also schon etwas anders aus (mir, sowieso), aber ich kann jetzt C# verwenden, also bin ich glücklich.