2016-02-04 1 views
1

J'essaie de programmer un DeploymentPlanExecutor personnalisé en utilisant Microsoft DofFx 3.0 mais le OnExecute -Method n'est jamais appelé.DacFx DeploymentPlanExecutor OnExecute pas appelé

  • Si j'utilise un lieu DeploymentPlanModifier identique, OnExecute() est appelé comme prévu.
  • Peu importe que j'ajoute l'Executor, le Modificateur ou les deux, le DAC est effectivement déployé avec succès dans la base de données.
  • Le Exécuteur semble être reconnu lors du déploiement depuis OnApplyDeploymentConfiguration() est appelé

Malheureusement je n'étais pas en mesure de trouver des exemples qui utilisent un DeploymentPlanExecutor (exemples seulement avec DeploymentPlanModifier) et la documentation de DacFx ne contribue pas du tout.

Ma question est, pourquoi est OnExecute() dans le DeploymentPlanExecutor pas appelé et comment puis-je résoudre ce problème?

Le code pour mon DeploymentPlanExecutor et DeploymentPlanExecutor:

using System.Collections.Generic; 
using Microsoft.SqlServer.Dac.Deployment; 

namespace DacTest 
{ 
    // The executor that does not work as expected 
    [ExportDeploymentPlanExecutor(ContributorId, "1.0.0.0")] 
    public class Executor : DeploymentPlanExecutor 
    { 
     public const string ContributorId = "DacTest.Executor"; 

     protected override void OnApplyDeploymentConfiguration(DeploymentContributorContext context, ICollection<DeploymentContributorConfigurationStream> configurationStreams) 
     { 
      // Called 
     } 

     protected override void OnEstablishDeploymentConfiguration(DeploymentContributorConfigurationSetup setup) 
     { 
      // Not called 
     } 

     protected override void OnExecute(DeploymentPlanContributorContext context) 
     { 
      // Not called! 
     } 
    } 

    // The modifier that does work as expected 
    [ExportDeploymentPlanModifier(ContributorId, "1.0.0.0")] 
    public class Modifier : DeploymentPlanModifier 
    { 
     public const string ContributorId = "DacTest.Modifier"; 

     protected override void OnApplyDeploymentConfiguration(DeploymentContributorContext context, ICollection<DeploymentContributorConfigurationStream> configurationStreams) 
     { 
      // Called 
     } 

     protected override void OnEstablishDeploymentConfiguration(DeploymentContributorConfigurationSetup setup) 
     { 
      // Not called 
     } 

     protected override void OnExecute(DeploymentPlanContributorContext context) 
     { 
      // Called! 
     } 
    } 
} 

Le code appelant le déploiement (doit être dans un autre assemblage):

using (DacPackage dacpac = DacPackage.Load(@"C:\Temp\dac.dacpac")) 
{ 
    DacDeployOptions dacDeployOptions = new DacDeployOptions(); 
    dacDeployOptions.AdditionalDeploymentContributors = Executor.ContributorId; // + ";" + Modifier.ContributorId; 

    DacServices dacServices = new DacServices(connectionString); 
    dacServices.Deploy(dacpac, databaseName, true, dacDeployOptions); 
} 

Répondre

2

Le problème était, que vous devez explicitement Dites à DacFx d'utiliser Executors. Les modificateurs sont activés par défaut cependant.

dacDeployOptions.RunDeploymentPlanExecutors = true;