Я пытаюсь запрограммировать пользовательский 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);
}