gpt4 book ai didi

visual-studio-2012 - SQL 数据库项目 : build different scripts depending on build configuration

转载 作者:行者123 更新时间:2023-12-04 19:10:55 25 4
gpt4 key购买 nike

我要解决的问题是根据构建配置构建不同的脚本。

假设我们有两个 SQL Server 实例:

  • 连接链接服务器的企业版
  • 用于离线开发和单元测试的 LocalDb 版本

  • 当 LocalDB 用本地表替换这些 View 时,企业版具有链接服务器的 View 。

    这些链接服务器 View 和本地表具有相同的名称和字段集。
    因此默认情况下它们不包含在构建中(构建操作 = 无)。
    相反,它们包含在项目文件的 BeforeBuild Target 中的构建中。
    <Target Name="BeforeBuild">

    <ItemGroup Condition=" '$(Configuration)' == 'LocalDb'">
    <Build Include="Local_Tables\*.sql" />
    </ItemGroup>

    <ItemGroup Condition=" '$(Configuration)' != 'LocalDb' ">
    <Build Include="Linked_Server_Views\*.sql" />
    </ItemGroup>

    </Target>

    但问题是 Visual Studio 缓存了 DB 模型,如果我们首先为 LocalDb 构建项目,然后尝试为企业配置构建项目 - Visual Studio 输出错误:

    错误:SQL71508:模型已经有一个同名的元素

    如果要关闭和打开解决方案或卸载项目并重新加载项目,Visual Studio 将重新创建 dbmdl 文件,并且正在构建企业配置而不会出错。

    所以我的假设是,如果我刷新 dbmdl 缓存,我将获得平滑的构建而不会出错。

    当您在 Visual Studio 2012 中打开或重新加载 SQL Server 数据库项目时,它会创建一个扩展名为 dbmdl 的文件,这是一个反序列化和缓存的 db 模型,如 here 所述。 .

    在重新创建 dbmdl 文件时,Visual Studio 输出以下内容:
    Deserializing the project state for project 'MyProject.sqlproj'...
    Detecting file changes for project 'MyProject.sqlproj'...
    Deserialization has been completed for project 'MyProject.sqlproj'.

    如何强制 Visual Studio 在不重新加载项目且不更改项目 xml 文件的情况下刷新 dbmdl 缓存?

    有没有办法刷新 dbmdl 缓存,将命令放入项目 xml 文件的 BeforeBuild 或 AfterBuild 目标中?

    或者整个解决问题的方法是错误的,还有另一种方法可以根据构建配置构建不同的脚本?

    最佳答案

    在使用复合项目时,您可能还有另一种可能的选择。杰米·汤普森 (Jamie Thompson) 在这里发表了关于他们的博客:http://sqlblog.com/blogs/jamie_thomson/archive/2013/03/10/deployment-of-client-specific-database-code-using-ssdt.aspx

    这将允许您构建一个主项目并使用特定于环境的代码将附加项目联系起来。您可以通过在发布脚本中进行一些检查来部署适当的一个。

    关于visual-studio-2012 - SQL 数据库项目 : build different scripts depending on build configuration,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15117258/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com