0

사용자 지정 활동이 정의 된 솔루션이 있으며 디자이너와 함께 작업을 진행했습니다 (아래 참조). 세 가지 프로젝트가 있습니다. 하나는 사용자 지정 활동 용이고 다른 하나는 사용자 지정 활동을위한 디자이너 용이고 다른 하나는 실제로 사용자 지정 활동 (간단한 콘솔 응용 프로그램)을 실행하기위한 것입니다.VS2010 사용자 지정 활동 디자이너가 사용되지 않음

내 사용자 지정 활동을 사용하는 합성 작업을 만들 때 VS 디자이너가 내 사용자 지정 디자이너를 사용하지 않습니다. Designer 어셈블리에 * .Design.dll 이름이 지정되어 있고 콘솔 응용 프로그램의 bin 디렉토리로 복사되었지만 사용자 정의 디자이너를 선택하지 않는 이유를 알 수 없습니다. 어떤 아이디어? 아래는 모든 필요한 부분에 대한 코드입니다.

내 사용자 활동

namespace WorkflowSampler.Activities 
{ 
    using System.Activities; 
    using System.Diagnostics; 

    public class SampleVarChanger : NativeActivity 
    { 
     private InArgument<int> expressionToEvaluate; 

     private Variable<int> counter; 

     public Variable<int> Counter 
     { 
      get 
      { 
       return this.counter ?? (this.counter = new Variable<int>()); 
      } 

      set 
      { 
       this.counter = value; 
      } 
     } 

     public InArgument<int> ExpressionToEvaluate 
     { 
      get 
      { 
       return this.expressionToEvaluate ?? (this.expressionToEvaluate = new InArgument<int>()); 
      } 

      set 
      { 
       this.expressionToEvaluate = value; 
      } 
     } 

     protected override void CacheMetadata(NativeActivityMetadata metadata) 
     { 
      metadata.AddImplementationVariable(this.Counter); 

      var exprToEvalRuntimeArg = new RuntimeArgument("ExpressionToEvaluate", typeof(int), ArgumentDirection.In); 
      metadata.Bind(this.ExpressionToEvaluate, exprToEvalRuntimeArg); 
      metadata.AddArgument(exprToEvalRuntimeArg); 
     } 

     protected override void Execute(NativeActivityContext context) 
     { 
      Debug.WriteLine(string.Format("Counter Variable Value: {0}", this.Counter.Get(context))); 
     } 
    } 
} 
내 사용자 정의 활동의 디자이너 (XAML 부)

<sap:ActivityDesigner x:Class="WorkflowSampler.Activities.Design.SampleVarChangerDesigner" 
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
    xmlns:sap="clr-namespace:System.Activities.Presentation;assembly=System.Activities.Presentation" 
    xmlns:sapv="clr-namespace:System.Activities.Presentation.View;assembly=System.Activities.Presentation" 
         xmlns:sapc="clr-namespace:System.Activities.Presentation.Converters;assembly=System.Activities.Presentation"> 
    <sap:ActivityDesigner.Resources> 
     <ResourceDictionary> 
      <sapc:ArgumentToExpressionConverter x:Key="ArgumentToExpressionConverter" /> 
     </ResourceDictionary> 
    </sap:ActivityDesigner.Resources> 
    <Grid Margin="10, 0, 0, 0"> 
     <Grid.RowDefinitions> 
      <RowDefinition Height="25" /> 
      <RowDefinition Height="25" /> 
     </Grid.RowDefinitions> 
     <Grid.ColumnDefinitions> 
      <ColumnDefinition Width="200" /> 
      <ColumnDefinition Width="200" /> 
     </Grid.ColumnDefinitions> 

     <TextBlock Text="Variable Name:" VerticalAlignment="Center" Grid.Row="0" Grid.Column="0" /> 
     <TextBox Name="VariableName" VerticalContentAlignment="Center" Grid.Row="0" Grid.Column="1" TextChanged="OnVariableNameChanged" /> 

     <TextBlock Text="Expression Using Variable:" VerticalAlignment="Center" Grid.Row="1" Grid.Column="0" /> 
     <sapv:ExpressionTextBox Name="ExpressionUsingVariable" VerticalContentAlignment="Center" Expression="{Binding Path=ModelItem.ExpressionToEvaluate, Converter={StaticResource ResourceKey=ArgumentToExpressionConverter}, ConverterParameter=In, Mode=TwoWay}" OwnerActivity="ModelItem" Grid.Row="1" Grid.Column="1" /> 
    </Grid> 
</sap:ActivityDesigner> 

내 사용자 정의 활동의 디자이너 (파트 뒤에 코드)

namespace WorkflowSampler.Activities.Design 
{ 
    using System.Activities; 
    // Interaction logic for SampleVarChangerDesigner.xaml 
    public partial class SampleVarChangerDesigner 
    { 
     public SampleVarChangerDesigner() 
     { 
      InitializeComponent(); 
     } 
     private void OnVariableNameChanged(object sender, TextChangedEventArgs e) 
     { 
      this.ModelItem.Properties["Counter"].SetValue(new Variable<int>(this.VariableName.Text)); 
     } 
    } 
} 

IRegisterMetadata 인터페이스 필수 들어 VS 디자이너 지원 내가 ... 내가 내가 MSBuild를을 작성했다 않았다 그래서 뭐, 활동 프로젝트의 DLL을 복사 설계 프로젝트를 할 필요를 파악

namespace WorkflowSampler.Activities.Design 
{ 
    using System.Activities.Presentation.Metadata; 
    using System.ComponentModel; 
    /// <summary> 
    /// Registers the activity designer metadata. 
    /// </summary> 
    public class RegisterMetadata : IRegisterMetadata 
    { 
     public void Register() 
     { 
      AttributeTableBuilder builder = new AttributeTableBuilder(); 
      builder.AddCustomAttributes(typeof(SampleVarChanger), new DesignerAttribute(typeof(SampleVarChangerDesigner))); 
      MetadataStore.AddAttributeTable(builder.CreateTable()); 
     } 
    } 
} 

답변

2

post 빌드 이벤트를 사용하여 디자인 라이브러리를 활동의 디버그 폴더로 복사합니다. 이제 VS가 그것을 집어 들게됩니다.

+0

Visual Studio의 출력이 0이되어 어떤 일이 발생하는지 알 수 없으므로 실망 스럽지만 # $ % # @ $ IN입니다. – Aaron

+1

한 가지 방법은 실제로 [obj] 폴더를 삭제하여 VS가 보유하고있는 캐시 된 항목을 지우고 디자이너가 실제로 사용되지 못하게하는 것입니다. 나는 그것이 작동하는 방식 때문에 WF 문제를 진단 할 때 거의 정보가 없다는 데 동의합니다. 커스텀 디자이너 경험은 확실히 VS에서 업데이트를 사용할 수 있습니다. – ajawad987

+0

나는 여러 번 여기에 귀하의 게시물을 가로 질러오고 나서 그것을 알아낼 수있었습니다. 분명히해야 할 일이 여러 개 있었고 포스트 빌드 이벤트는 그 중 하나였습니다. 그들은 정말로이 물건을 더 똑 바르게 만들어야합니다. – Aaron

관련 문제