5

Estoy creando una Biblioteca de actividades en Visual Studio 11 Beta (aunque he repetido todos mis pasos en VS2010 con el mismo resultado), apuntando al framework .NET 4.0.Cambiar de VB a C# en el Diseñador de flujo de trabajo

Cuando empecé a ingresar argumentos a través del Diseñador de flujo de trabajo, noté el mensaje "Introducir una expresión VB" en el cuadro Valor predeterminado. No estoy seguro de cómo cambiar el contexto del lenguaje de VB a C#.

para crear el proyecto, he seguido estos pasos:

  1. Ir a Archivo>Nueva y seleccione Proyecto ...

  2. En el Instalado>En la sección Plantillas de la ventana de diálogo Nuevo proyecto, seleccione Visual C#>flujo de trabajo>biblioteca de actividades

  3. Nombre del proyecto, como de costumbre, y haga clic en OK

Y eso es básicamente la misma. Me di cuenta de que el archivo predeterminado Activity1.xaml esperaba VB en los campos de valores predeterminados. He eliminado y luego seguí estos pasos para crear una nueva actividad:

  1. Haga clic derecho en el proyecto y seleccione Agregar >Nuevo elemento ...

  2. En el Agregar nuevo elemento ventana de diálogo, vaya a instalados>Visual C# Artículos>de flujo de trabajo>Actividad

  3. Nombre de la Actividad y haga clic en OK

Fue el mismo resultado, los campos de valor por defecto están esperando una expresión VB.

Cuando miro el código XAML, puedo ver claramente el espacio de nombres Microsoft.VisualBasic.Activities en la lista y un elemento VisualBasic.Settings, pero no estoy seguro de qué hacer para cambiarlo; cada vez que lo intento, solo termino arruinando las cosas. Aquí está el código XAML generado:

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

Respuesta

5

C# Expresiones

Anteriormente, todas las expresiones en los flujos de trabajo sólo pueden ser escritos en Visual básico. En .NET Framework 4.5 RC, las expresiones de Visual Basic son solo utilizadas para proyectos creados con Visual Basic. Proyectos de Visual C# ahora usan C# para expresiones. Un editor de expresiones de C# totalmente funcional es que proporciona funciones tales como resaltado de gramática y intellisense. Los proyectos de flujo de trabajo C# creados en versiones anteriores que usan usan expresiones de Visual Basic continuarán funcionando.

A partir de la versión Beta 1, las expresiones C# se validan en el momento del diseño. Los errores en Las expresiones C# se marcarán con un subrayado rojo ondulado.

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

5

Pude resolver el problema.

Primero, sin embargo, pude descubrir la causa raíz here. En pocas palabras, dice que VB.NET debe usarse en el Editor de expresiones incluso si el programa está en C#.

Por lo tanto, estaba un poco fastidiado por eso, pero decidí tomar otra grieta en el código XAML porque, al trabajar con los tutoriales de WF, definitivamente había una actividad en la que estaba trabajando que aceptaría Expressions Cª#. Abrí ese proyecto y revisé el código XAML.

Es entonces cuando me di cuenta de esta línea:

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

He buscado en la biblioteca de MSDN y encontré el documentation for the ExpressionActivityEditor class. Lo mejor que puedo decir es que esto es nuevo en .NET 4.5. En mi caso particular, no hay ninguna razón por la que no pueda orientar .NET 4.5 en mi proyecto, así que lo cambié. Una vez que se haya reabierto la solución, de inmediato, todos los cuadros y cuadros de texto del Expression Editor aceptarán C#. Para "comenzar de nuevo", eliminé el archivo de actividad en el que había estado trabajando y creé uno nuevo. Si alguien está interesado, aquí está el código XAML generado:

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

Por lo tanto, un poco diferente (para mí, de todos modos) pero puedo utilizar C# ahora, así que estoy feliz.

Cuestiones relacionadas