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