2016-02-04 3 views
1

Я пытаюсь запрограммировать пользовательский DeploymentPlanExecutor с использованием Microsoft DacFx 3.0, но OnExecute -Method никогда не вызывается.DacFx DeploymentPlanExecutor OnExecute не называется

  • Если я использую идентичный DeploymentPlanModifier вместо OnExecute() называется, как и ожидалось.
  • Независимо от того, добавляю ли я Исполнителя, Модификатор или и то, и другое, ЦАП фактически успешно развертывается в базе данных.
  • ИСПОЛНИТЕЛЬ, кажется, признается во время развертывания, поскольку OnApplyDeploymentConfiguration() называется

К сожалению, я не смог найти примеры, которые используют DeploymentPlanExecutor (только примеры с DeploymentPlanModifier) и документацию DacFx не помогает вообще.

Мой вопрос: почему OnExecute() в DeploymentPlanExecutor не называется и как я могу это исправить?

Код для моего DeploymentPlanExecutor и 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! 
     } 
    } 
} 

код вызова развертывания (должен быть в различной комплектации):

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); 
} 

ответ

2

Проблема заключалась в том, что вы должны явно скажите DacFx, чтобы использовать Executors. Модификаторы по умолчанию включены.

dacDeployOptions.RunDeploymentPlanExecutors = true;

Смежные вопросы