我有一个包含多个(6)数据库项目的解决方案,这些项目从Visual Studio数据库(.dbproj)项目转换为SQL Server数据工具(.sqlproj)项目。在Visual Studio 2013中,我可以成功构建每个数据库并将其一次发布到本地SQL Server实例一个。
在Visual Studio 2010中,我能够部署解决方案,而后者又构建并部署了所有数据库。在Visual Studio 2013中,部署解决方案无效,即使所有项目都设置为为活动配置构建和部署。
如何从Visual Studio 2013构建和部署所有数据库?
答案 0 :(得分:0)
如果这些数据库以某种方式相关并作为数据库引用引用,那么它们将作为一个连接的解决方案一起构建和部署。请考虑以下两种情况:
场景1: 您有一个包含四个数据库[A,B,C,D]的解决方案。 [A]参考[B,D]。 [D]参考[C]。如果您使用数据库引用将它们添加为已连接的数据库并尝试部署A,则将构建和部署所有这些数据库。
场景2: 您有一个包含四个数据库[A,B,C,D]的解决方案。 [A]参考[B,D]。如果使用数据库引用将它们添加为已连接的数据库并尝试部署A,则只会构建和部署[A,B,D]。 [C]是解决方案中的孤立项目(实际上它不应该在该解决方案中),并且解决方案不会构建或部署它。
答案 1 :(得分:0)
我知道可能会迟到,但是......
我们使用这种方式:
根据需要调整现有sqlproj中的数据库引用。
只需创建另一个项目(种类为“lalala_Deploy”),并使用Database location
==“Same database
”添加所有项目作为参考。
部署“部署”项目。
因此,您的项目将根据其数据库引用进行构建,然后部署到单个DB。
upd 28.03.2017 17:37: 2013年,我们使用cdm和msbuild命令行并发布配置文件。 以下是这些代码:
CMD示例:
%WINDIR%\Microsoft.NET\Framework64\v4.0.30319\MSBuild.exe .\ProjectName\ProjectName.sqlproj /t:Build;Publish /p:Configuration=Release /p:SqlPublishProfilePath=ProjectName_local.publish.xml /consoleloggerparameters:Summary /verbosity:normal /l:FileLogger,Microsoft.Build.Engine;logfile=OmniUS_Build.log;append=false
这是发布配置文件示例:
"<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="12.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<PropertyGroup>
<IncludeCompositeObjects>False</IncludeCompositeObjects>
<TargetDatabaseName>ProjectName</TargetDatabaseName>
<DeployScriptFileName>ProjectName.publish.sql</DeployScriptFileName>
<TargetConnectionString>Data Source=.\SQL2014;Integrated Security=True;Pooling=False</TargetConnectionString>
<ScriptDatabaseOptions>True</ScriptDatabaseOptions>
<BlockOnPossibleDataLoss>False</BlockOnPossibleDataLoss>
<IncludeTransactionalScripts>False</IncludeTransactionalScripts>
<CreateNewDatabase>True</CreateNewDatabase>
<DropObjectsNotInSource>False</DropObjectsNotInSource>
<AllowDropBlockingAssemblies>True</AllowDropBlockingAssemblies>
<GenerateSmartDefaults>True</GenerateSmartDefaults>
<IgnoreFillFactor>False</IgnoreFillFactor>
<IgnoreFilegroupPlacement>False</IgnoreFilegroupPlacement>
<IgnorePermissions>True</IgnorePermissions>
<IgnoreObjectPlacementOnPartitionScheme>False</IgnoreObjectPlacementOnPartitionScheme>
<IgnoreRoleMembership>True</IgnoreRoleMembership>
<BlockWhenDriftDetected>False</BlockWhenDriftDetected>
<RegisterDataTierApplication>False</RegisterDataTierApplication>
<DisableAndReenableDdlTriggers>False</DisableAndReenableDdlTriggers>
<IgnoreIndexPadding>False</IgnoreIndexPadding>
<IgnoreKeywordCasing>True</IgnoreKeywordCasing>
</PropertyGroup>
<ItemGroup>
<SqlCmdVariable Include="N_Period">
<Value>201410</Value>
</SqlCmdVariable>
</ItemGroup>
</Project>"
在cdm示例中,我留下了1个字符串,但是对于你来说,你必须为每个项目添加。发布配置文件mast为所有项目分开,因为它们包含数据库名称。