DeploymentPlanExecutor
Microsoft の DacFx 3.0 を使用してカスタムをプログラムしようとしていますが、 OnExecute
-Method が呼び出されません。
DeploymentPlanModifier
代わりに同一のものを使用するOnExecute()
と、期待どおりに呼び出されます。- Executor、Modifier、またはその両方を追加するかどうかに関係なく、DAC は実際にデータベースに正常にデプロイされます。
- Executor
OnApplyDeploymentConfiguration()
が呼び出されるため、Deployment 中に認識されるようです
残念ながら、を使用する例を見つけることができず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);
}