I have a .NET Framework 4.6.1 (upgrading to 4.6.2 doesn't solve it) project that uses DacServices to deploy my database's SSDT on a Docker container.
This eventually uses the following code:
using (var fileStream = new FileStream(dacpacPath, FileMode.Open, FileAccess.Read))
using (var dbPackage = DacPackage.Load(fileStream, DacSchemaModelStorageType.Memory, FileAccess.Read))
{
return dbServices.GenerateDeployScript(dbPackage, targetDbName, dbDeployOptions);
}
This line fails with the following error:
System.MissingMethodException
HResult=0x80131513
Message=Method not found: 'Void Microsoft.SqlServer.TransactSql.ScriptDom.SqlScriptGeneratorOptions.set_AllowExternalLibraryPaths(Boolean)'.
Source=Microsoft.Data.Tools.Schema.Sql
StackTrace:
at Microsoft.Data.Tools.Schema.Sql.Deployment.SqlDeploymentPlanGenerator.ScriptGeneratorFacade..ctor(DeploymentContext context, Func`1 getTargetDboUserSecurityId)
at Microsoft.Data.Tools.Schema.Sql.Deployment.SqlDeploymentPlanGenerator.OnInitialize(SqlDeployment engine)
at Microsoft.Data.Tools.Schema.Sql.Deployment.SqlDeployment.InitializePlanGeneratator()
at Microsoft.Data.Tools.Schema.Sql.Deployment.SqlDeployment.CreateController(Action`1 msgHandler)
at Microsoft.SqlServer.Dac.DacServices.CreateController(SqlDeployment deploymentEngine, ErrorManager errorManager)
at Microsoft.SqlServer.Dac.DacServices.<>c__DisplayClass30.<CreateDeploymentArtifactGenerationOperation>b__2e(Object operation, CancellationToken token)
at Microsoft.SqlServer.Dac.Operation.Microsoft.SqlServer.Dac.IOperation.Run(OperationContext context)
at Microsoft.SqlServer.Dac.ReportMessageOperation.Microsoft.SqlServer.Dac.IOperation.Run(OperationContext context)
at Microsoft.SqlServer.Dac.OperationExtension.Execute(IOperation operation, DacLoggingContext loggingContext, CancellationToken cancellationToken)
at Microsoft.SqlServer.Dac.DacServices.GenerateDeployScript(DacPackage package, String targetDatabaseName, DacDeployOptions options, Nullable`1 cancellationToken)
at Payoneer.ServicesInfra.TestingUtils.DbSsdtDeployer.SsdtHelper.CreateSsdtDeployScript(String dacpacPath, String targetDbName, DacDeployOptions dbDeployOptions, DacServices dbServices) in...
This somehow passes on the build server and someone else's machine, so it's likely a version mismatch, but of what, and how?
Help appreciated.