【问题标题】:MsDeploy with DbDacFx provider and Database referenceMsDeploy 与 DbDacFx 提供程序和数据库参考
【发布时间】:2015-10-09 18:42:16
【问题描述】:

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

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

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

信息:将包部署到数据库:错误。错误:无法解析来自名为“X.dacpac”的源对外部元素的引用,因为没有加载此类源。错误:无法解析来自名为“master.dacpac”的源对外部元素的引用,因为没有加载此类源。 ......上述错误重复多次......在远程计算机上处​​理请求时发生错误。错误:调用的目标已引发异常。 ---> System.Exception:找不到成员“ClassName”。在 System.Runtime.Serialization.SerializationInfo.GetElement(String name, Type&foundType) 在 System.Runtime.Serialization.SerializationInfo.GetString(String name) 在 System.Exception..ctor(SerializationInfo info, StreamingContext context) --- 结束内部异常堆栈跟踪---在 System.Runtime.Serialization.ObjectManager.CompleteISerializableObject(Object obj, SerializationInfo info, StreamingContext context) 在 System.Runtime._SerializationInvoke(Object target, SignatureStruct& declaringTypeSig, SerializationInfo info, StreamingContext context) 在 System.Runtime .Serialization.ObjectManager.FixupSpecialObject(ObjectHolder holder) at System.Runtime.Serialization.ObjectManager.DoFixups() at System.Runtime.Serialization.Formatters.Binary.ObjectReader.Deserialize(HeaderHandler handler, __BinaryParser serParser, Boolean fCheck, Boolean isCrossAppDomain, IMethodCallMessage methodCallMessage) 在 System.Runtime.Serialization.Formatters.Binary.BinaryF ormatter.Deserialize(Stream serializationStream, HeaderHandler handler, Boolean fCheck, Boolean isCrossAppDomain, IMethodCallMessage methodCallMessage) at 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 ct 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) at Microsoft.Web.Deployment.DeploymentSyncContext.ProcessSync(DeploymentObject destinationObject, DeploymentObject sourceObject) at Microsoft.Web.Deployment.DeploymentObject.SyncToInternal(DeploymentObject destObject, DeploymentSyncOptions syncOptions, PayloadTable payloadTable, ContentRootTable contentRootTable, Nullable@987654321 @1 passId) 错误:找不到成员“ClassName”。在 System.Runtime.Serialization.SerializationInfo.GetElement(String name, Type&foundType) 在 System.Runtime.Serialization.SerializationInfo.GetString(String name) 在 System.Exception..ctor(SerializationInfo info, StreamingContext context) 错误计数:1。

需要知道如何克服这些问题。 谢谢 亚丁。

【问题讨论】:

  • 此外,这里有一些警告警告:没有提供文件供参考 X.dacpac;部署可能会失败。创建包时,原始引用文件位于 C:\BUILDS\9\DEV\.....\SHAREDASSEMBLIES\X.DACPAC。警告:没有为参考 master.dacpac 提供文件;部署可能会失败。创建包时,原始引用文件位于 C:\BUILDS\9\DEV\...\SHAREDASSEMBLIES\MASTER.DACPAC。这些警告是由 MsDeploy 在使用包提供程序和清单时发出的...

标签: database reference msdeploy dacpac


【解决方案1】:

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

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

【讨论】:

  • 是的,所有的 dacpac 确实一起存在于同一个文件夹中。但是,当部署期间出现时,dacpac 参考正在从构建它们的共享文件夹中寻找 dacpacs!
  • 原始路径保存在dacpac中,但是如果没有找到本地文件夹,应该使用本地文件夹,你有一个奇怪的工作目录吗?
  • 这里是所有过程: 1> 我们使用清单文件作为源和包提供者作为目标来构建部署包。该软件包具有 dacpac 和网站内容。 2> 使用远程 MS 部署代理将包部署到服务器 3> 如果我们使用 SqlPackage.exe 文件,我们可以部署 dacpac,并且所有包都在同一个文件夹中。 4> 在清单文件中,我们使用 dbDacFx 提供程序将主数据库 dacpac 添加到包中。 5> 引用的 dacpacs 添加了 filePath 提供程序。
【解决方案2】:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-06-30
    • 1970-01-01
    • 2018-05-28
    • 2012-08-24
    • 1970-01-01
    • 1970-01-01
    • 2020-07-06
    相关资源
    最近更新 更多