在C#Windows应用程序中,我们有一台同时运行的SQL Express 2012数据库服务器。
我们使用DACPAC通过DacServices对象从应用程序内部升级和部署新数据库。
即:DacServices.Deploy
我们当前正在使用Microsoft.SqlServices.Dac.dll版本12.0.3021.1。那似乎是我能找到的最新消息。
在SSMS中手动运行dacpac可以正常工作。直到最近,整个应用程序的运行情况都很好。现在,当尝试通过C#应用程序进行部署时,会出现以下异常:
{Microsoft.Data.Tools.Schema.Sql.Deployment.DeploymentFailedException: 内部错误。具有类型的数据库平台服务 Microsoft.Data.Tools.Schema.Sql.Sql110DatabaseSchemaProvider不是 有效。您必须确保服务已加载,或者您必须提供 有效数据库平台服务的完整类型名称。 -> Microsoft.Data.Tools.Schema.Extensibility.ExtensibilityException: 内部错误。在 Microsoft.Data.Tools.Schema.Extensibility.ExtensionTypeLoader.InstantiateDatabaseSchemaProvider(String databaseSchemaProviderType) Microsoft.Data.Tools.Schema.Extensibility.ExtensionManager.UpdateExtensions() 在 Microsoft.Data.Tools.Schema.Extensibility.ExtensionManager..ctor(字符串 databaseSchemaProviderType) Microsoft.Data.Tools.Schema.Extensibility.ExtensionManager。<> c__DisplayClass3.b__2() 在System.Lazy
1.CreateValue() --- End of stack trace from previous location where exception was thrown --- at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw() at System.Lazy
1.get_Value()在 Microsoft.Data.Tools.Schema.Extensibility.ExtensionManager.GetExtensionManager(String dsp) Microsoft.Data.Tools.Schema.Sql.Deployment.SqlDeployment.CreateExtensionManagerFromModel(SqlPackage 包)-内部异常堆栈跟踪的结尾-在 Microsoft.Data.Tools.Schema.Sql.Deployment.SqlDeployment.CreateExtensionManagerFromModel(SqlPackage 包装) Microsoft.Data.Tools.Schema.Sql.Deployment.SqlDeploymentEndpointPackage.OnInit(ErrorManager 错误,字符串targetDBName)位于 Microsoft.Data.Tools.Schema.Sql.Deployment.SqlDeployment..ctor(SqlDeploymentConstructor 构造函数) Microsoft.Data.Tools.Schema.Sql.Deployment.SqlDeploymentConstructor.ConstructServiceImplementation() 在 Microsoft.SqlServer.Dac.DacServices.CreatePackageToDatabaseDeployment(String connectionString,IPackageSource packageSource,字符串 targetDatabaseName,DacDeployOptions选项,ErrorManager errorManager) Microsoft.SqlServer.Dac.DeployOperation。<> c__DisplayClass3。<> c__DisplayClass5.b__1() 在Microsoft.Data.Tools.Schema.Sql.Dac.OperationLogger.Capture(操作 行动) Microsoft.SqlServer.Dac.DeployOperation。<> c__DisplayClass3.b__0(Object 操作,请参见CancellationToken令牌) Microsoft.SqlServer.Dac.Operation.Microsoft.SqlServer.Dac.IOperation.Run(OperationContext 上下文) Microsoft.SqlServer.Dac.ReportMessageOperation.Microsoft.SqlServer.Dac.IOperation.Run(OperationContext 上下文) Microsoft.SqlServer.Dac.OperationExtension.CompositeOperation.Microsoft.SqlServer.Dac.IOperation.Run(OperationContext 上下文) Microsoft.SqlServer.Dac.OperationExtension.CompositeOperation.Microsoft.SqlServer.Dac.IOperation.Run(OperationContext 上下文) Microsoft.SqlServer.Dac.DeployOperation.Microsoft.SqlServer.Dac.IOperation.Run(OperationContext 上下文)}
Microsoft的NUGET实际上具有版本12 dll的较低版本,我看不到将其更新为较大版本以尝试获得最新版本的位置。 (同时在NUGET上降级到Microsoft最新的dac dll也无法解决问题)
我怀疑Windows更新已通过并破坏了我们的开发版本,但无法证明这一点,也找不到任何信息。有人有见识吗?