MsDeploy 与 DbDacFx 提供程序和数据库参考

MsDeploy with DbDacFx provider and Database reference

我们正在使用 DbDacFx 提供程序来同步我们的生产机器。 我们的解决方案中有 ssdt 数据库项目,我们随网站一起部署。 A.sqlproj 引用了 master.dacpac 和另一个数据库项目的 dacpac,比如 X.dacpac。

所有 dacpac 都在同一部署位置。

当我们尝试部署 A.dacpac 时,出现如下错误:

信息:将包部署到数据库:出错。错误:无法解析对来自名为 'X.dacpac' 的源的外部元素的引用,因为未加载此类源。错误:无法解析对来自名为 'master.dacpac' 的源的外部元素的引用,因为未加载此类源。 .....above errors repeated multiple times..... 在远程计算机上处​​理请求时发生错误。错误:调用的目标抛出了异常。 ---> System.Exception:未找到成员 'ClassName'。 at System.Runtime.Serialization.SerializationInfo.GetElement(String name, Type& foundType) at System.Runtime.Serialization.SerializationInfo.GetString(String name) at System.Exception..ctor(SerializationInfo info, StreamingContext context) --- 内部异常堆栈跟踪结束 -- - 在 System.RuntimeMethodHandle._SerializationInvoke(对象目标、SignatureStruct& declaringTypeSig、SerializationInfo 信息、StreamingContext 上下文)在 System.Runtime.Serialization.ObjectManager.CompleteISerializableObject(对象对象、SerializationInfo 信息、StreamingContext 上下文)在 System.Runtime.Serialization.ObjectManager.FixupSpecialObject(ObjectHolder 持有者)在 System.Runtime.Serialization.ObjectManager.DoFixups() at System.Runtime.Serialization.Formatters.Binary.ObjectReader.Deserialize(HeaderHandler handler, __BinaryParser serParser, Boolean fCheck, Boolean isCrossAppDomain, IMethodCallMessage methodCallMessage) at System.Runtime.Serialization.Formatters.Binary.BinaryFormatter.Deserialize(Stream serializationStream, HeaderHandler handler, Boolean fCheck, Boolean isCrossAppDomain, IMethodCallMessage methodCallMessage) 在 System.Runtime.Serialization.Formatters.Binary.BinaryFormatter.Deserialize(Stream serializationStream, HeaderHandler handler, Boolean fCheck, IMethodCallMessage methodCallMessage) 在 Microsoft.Web.Deployment.Base64EncodingHelper.DeserializeHelper(BinaryFormatter formatter, Byte[] buffer) 在 Microsoft.Web.Deployment.Base64EncodingHelper.Deserialize(String str, Exception& handledException) 在 Microsoft.Web.Deployment.SerializationHelper.Deserialize(String str) 在 Microsoft.Web.Deployment.SqlDacPacProvider.ProcessExeOutput() 在 Microsoft.Web.Deployment.SqlDacPacProvider.RunExecutableAsync(String exeName, String arguments, Int32 waitInterval, Int32 retryAttempts) 在 Microsoft.Web.Deployment.SqlDacPacProvider.Add(DeploymentObject source, Boolean whatIf) Microsoft.Web.Deployment.DeploymentObject.Add(DeploymentObject source, DeploymentSyncContext syncContext) 在 Microsoft.Web.Deployment.DeploymentSyncContext.HandleAdd(DeploymentObject destObject, DeploymentObject sourceObject) 在 Microsoft.Web.Deployment.DeploymentSyncContext.SyncChildren(DeploymentObject dest, DeploymentObject source)在 Microsoft.Web.Deployment.DeploymentSyncContext.SyncChildrenOrder(DeploymentObject dest, DeploymentObject source) 在 Microsoft.Web.Deployment.DeploymentSyncContext.ProcessSync(DeploymentObject destinationObject, DeploymentObject sourceObject) 在 Microsoft.Web.Deployment.DeploymentObject.SyncToInternal(DeploymentObject destObject, DeploymentSyncOptions syncOptions , PayloadTable payloadTable, ContentRootTable contentRootTable, Nullable1 syncPassId) at Microsoft.Web.Deployment.DeploymentAgent.HandleSync(DeploymentAgentAsyncData asyncData, Nullable1 passId) 错误:未找到成员 'ClassName'。在 System.Runtime.Serialization.SerializationInfo.GetElement(字符串名称,类型和找到的类型)在 System.Runtime.Serialization.SerializationInfo.GetString(字符串名称)在 System.Exception..ctor(SerializationInfo 信息,StreamingContext 上下文)错误计数:1.

需要知道我们如何克服这些问题。 谢谢 亚田.

运行 部署的机器上是否存在引用的 dacpac?

如果他们这样做,最简单的方法是将 dacpac 复制到与您正在部署的 dacpac 相同的文件夹中,因为将检查同一目录,如果失败,则包含原始 dacpac 的原始路径。

这仍然是一个痛苦。 我们计划通过 runCommand 提供程序编写 sqlpackage.exe 文件命令的脚本并实现自动化!! 关闭问题。 谢谢