5

.NET 4.0フレームワークを対象として、Visual Studio 11ベータ版でアクティビティライブラリを作成しています(ただし、VS2010ですべての手順を繰り返して同じ結果になりました)。

ワークフローデザイナを介して引数を入力し始めたとき、[デフォルト値]ボックスに[ VB式を入力してください]というメッセージが表示されていることに気付きました。言語コンテキストをVBからC#に変更する方法がわかりません。

プロジェクトを作成するために、私は次の手順に従いました。

  1. [ファイル] >[新規]に移動し、[プロジェクト...]を選択します。

  2. [新しいプロジェクト]ダイアログウィンドウの[インストール済み]>[テンプレート]セクションで、[ Visual C] > [ワークフロー] >[アクティビティライブラリ]を選択します

  3. 通常どおりプロジェクトに名前を付け、[ OK ]をクリックします

そしてそれは基本的にそれです。Activity1.xamlそのとき、デフォルトファイルがデフォルト値フィールドにVBを期待していることに気づきました。それを削除してから、次の手順に従って新しいアクティビティを作成しました。

  1. プロジェクトを右クリックして、[追加] >[新しいアイテム... ]を選択します。

  2. [新しいアイテムの追加]ダイアログウィンドウで、[インストール済み] > [ Visual C#アイテム] >[ワークフロー] >[アクティビティ]に移動します

  3. アクティビティに名前を付けて、[OK]をクリックします

同じ結果でした。デフォルト値フィールドはVB式を期待しています。

XAMLコードを見るMicrosoft.VisualBasic.Activitiesと、リストされている名前空間とVisualBasic.Settings要素がはっきりとわかりますが、それを変更するために何をすべきかわかりません。私が試みるたびに、私はただ物事を台無しにしてしまいます。生成されるXAMLコードは次のとおりです。

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

2 に答える 2

6

私は問題を理解することができました。

とはいえ、まずはここで根本原因を突き止めることができました。簡単に言えば、プログラムが C# であっても、Expression Editor で VB.NET を使用する必要があるということです。

それで、私はそれについてちょっとがっかりしましたが、WF チュートリアルを進める中で、C# の式を受け入れるデザイナーで作業していたアクティビティが間違いなくあったため、XAML コードをもう一度クラックすることにしました。そのプロジェクトを開き、XAML コードを確認しました。

そのとき、次の行に気付きました。

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

MSDN ライブラリを検索したところ、ExpressionActivityEditor クラスのドキュメントが見つかりました。私が知る限り、これは .NET 4.5 の新機能です。私の特定のケースでは、プロジェクトで .NET 4.5 をターゲットにできない理由はないので、変更しました。ソリューションを再度開くと、すぐに式エディターのすべてのテキスト フィールドとボックスで C# が使用できるようになります。「一からやり直す」ために、今まで取り組んできた活動ファイルを削除し、新たに作成しました。興味のある方は、生成された 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>

かなり違いますが (とにかく私にとっては)、C# を使用できるようになったので満足しています。

于 2012-05-31T19:47:50.233 に答える
5

C# 式

以前は、ワークフロー内のすべての式は Visual Basic でしか記述できませんでした。.NET Framework 4.5 RCでは、Visual Basic 式は、Visual Basic を使用して作成されたプロジェクトにのみ使用されます。Visual C# プロジェクトでは、式に C# が使用されるようになりました。文法の強調表示やインテリセンスなどの機能を備えた、完全に機能する C# 式エディターが提供されます。以前のバージョンで作成され、Visual Basic 式を使用する C# ワークフロー プロジェクトは引き続き機能します。

Beta 1 の時点で、C# 式は設計時に検証されます。C# 式のエラーは、赤い波線の下線でマークされます。

詳細: .NET 4.5 の Windows Workflow Foundation の新機能

于 2012-06-01T01:43:58.270 に答える