5

Tworzę bibliotekę aktywności w Visual Studio 11 Beta (mimo, że powtórzyłem wszystkie moje kroki w VS2010 z tym samym wynikiem), kierując na framework .NET 4.0.Przełącz się z VB na C# w projektancie przepływu pracy

Po rozpoczęciu wprowadzania argumentów za pośrednictwem projektanta przepływu pracy, zauważyłem komunikat "Wpisz wiadomość VB Expression" w polu Wartość domyślna. Nie wiem, jak zmienić kontekst językowy z VB na C#.

Aby utworzyć projekt, I następnie kroki:

  1. Idź do pliku>New i wybierz Project ...

  2. W Zainstalowane>Szablony sekcja okna dialogowego Nowy projekt, wybierz Visual C#>Workflow>Biblioteka aktywny

  3. Nazwa projektu, jak zwykle, i kliknij OK

i to właściwie wszystko. Zauważyłem wtedy, że domyślny plik Activity1.xaml oczekiwał VB w polach wartości domyślnych. Usunąłem go, a następnie następuje kroki, aby utworzyć nowe działanie:

  1. prawym przyciskiem myszy na projekt i wybrać Dodaj>New Item ...

  2. W Dodaj nowy element okno dialogowe, przejdź do Zainstalowane>visual C# elementów>Workflow>działalności

  3. Nazwij aktywność i kliknij OK

To był ten sam wynik, pola Wartość domyślna oczekują wyrażeniu VB.

Kiedy patrzę na kod XAML, wyraźnie widzę wymieniony obszar nazw Microsoft.VisualBasic.Activities i element VisualBasic.Settings, ale nie jestem pewien, co zrobić, aby to zmienić; za każdym razem, kiedy próbuję, po prostu sypiemy. Oto kod XAML generowane:

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

Odpowiedz

5

C# Expressions

Wcześniej wszystkie wyrażenia w obiegach pracy może być zapisany tylko w Visual Basic. W .NET Framework 4.5 RC, wyrażenia Visual Basic są tylko używane do projektów utworzonych przy użyciu Visual Basic. Projekty Visual C# teraz używają C# do wyrażeń. W pełni funkcjonalny edytor wyrażeń C# to pod warunkiem, że funkcje takie jak podświetlanie gramatyki i intellisense. Projekty przepływu pracy C# utworzone w poprzednich wersjach, które używają wyrażeń Visual Basic będą nadal działać.

Od wersji Beta 1 wyrażenia C# są sprawdzane podczas projektowania. Błędy w wyrażeniach C# zostaną oznaczone czerwoną falistą podkreśleniem.

Więcej: What's New in Windows Workflow Foundation in .NET 4.5

5

byłem w stanie dowiedzieć się problem.

Najpierw jednak udało mi się odkryć przyczynę główną here. Mówiąc krótko, VB.NET musi być użyty w edytorze wyrażeń, nawet jeśli program jest w C#.

Tak, trochę mnie to bawiło, ale zdecydowałem się zrobić kolejny krok w kodzie XAML, ponieważ podczas pracy z samouczkami WF było zdecydowanie działanie, nad którym pracowałem w projektancie, który akceptowałby wyrażenia w języku C#. Otworzyłem ten projekt i przeszedłem kod XAML.

To wtedy zauważyłem tę linię:

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

Szukałem bibliotekę MSDN i znaleźć documentation for the ExpressionActivityEditor class. Jak najlepiej mogę powiedzieć, jest to nowość w .NET 4.5. W moim konkretnym przypadku nie ma żadnego powodu, dla którego nie mogę kierować programu .NET 4.5 do mojego projektu, więc go zmieniłem. Po ponownym otwarciu rozwiązania wszystkie pola i pola tekstowe Edytora wyrażeń akceptują od razu C#. Aby "zacząć od nowa", usunąłem plik aktywności, nad którym pracowałem i utworzyłem nowy. Jeśli ktoś jest zainteresowany, oto, że wygenerowany kod XAML:

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

Więc trochę inna (dla mnie, tak czy inaczej), ale można użyć C# teraz, więc jestem zadowolony.

Powiązane problemy