Vad*_*oda 5 msbuild database-project msbuild-target visual-studio-2012 sql-server-data-tools
我想解决的问题是根据构建配置构建不同的脚本.
假设我们有两个SQL Server实例:
当LocalDB使用本地表替换这些视图时,企业版具有链接服务器的视图.
这些链接服务器视图和本地表具有相同的名称和字段集.因此默认情况下它们不包含在构建中(Build Action = None).相反,它们包含在项目文件的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缓存数据库模型,如果我们首先为LocalDb构建项目,然后尝试构建企业配置项目 - Visual Studio输出错误:
错误:SQL71508:模型已经有一个具有相同名称的元素
如果要关闭并打开解决方案或卸载项目和重新加载项目,Visual Studio将重新创建dbmdl文件,并且正在构建企业配置而不会出现错误.
所以我的假设是,如果我刷新dbmdl缓存,我将得到平滑的构建,没有错误.
当您打开或在Visual Studio 2012重装SQL Server数据库的项目,它将创建一个具有扩展名的文件dbmdl,这是作为描述的反序列化和缓存数据库模型在这里.
在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'.
如何在没有项目重新加载且不更改项目xml文件的情况下强制Visual Studio刷新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
这将允许您构建一个主项目,并将其他项目与特定于环境的代码联系起来。您可以通过在发布脚本中进行一些检查来部署适当的版本。
| 归档时间: | 
 | 
| 查看次数: | 4510 次 | 
| 最近记录: |