从模式比较选项中,我取消了所有对象类型:
它仍然向我展示了 Schema 对象的差异:
我滚动浏览了常规选项的大列表,但似乎都没有这样做:
从模式比较选项中,我取消了所有对象类型:
它仍然向我展示了 Schema 对象的差异:
我滚动浏览了常规选项的大列表,但似乎都没有这样做:
我破解了它。如果保存比较,则可以将其添加到文件中:
<PropertyElementName>
<Name>Microsoft.Data.Tools.Schema.Sql.SchemaModel.SqlSchema</Name>
<Value>ExcludedType</Value>
</PropertyElementName>
当你打开它时,你会看到它在哪里。此设置不在 UI 中,但显然受支持。
在进行模式合并之前,您可以通过将以下内容作为 exe 运行来在代码中设置排除模式。下面的代码需要将 Microsoft.SqlServer.DacFx nuget 包添加到您的项目中。它需要 2 个参数,一个是 .scmp 文件路径,第二个是逗号分隔的要排除的模式字符串。它将覆盖提供的 .scmp 并排除您提供的模式名称。
它实质上是在 .scmp 文件中添加 XML 部分,这相当于取消选中 UI 上的对象并保存文件。(持续偏好)
如果您希望在部署期间不合并一个架构,则此 exe 执行可以是您的 VSTS (VSO) 发布管道中的一项任务。
using System;
using System.Linq;
using System.Collections.Generic;
using Microsoft.SqlServer.Dac.Compare;
namespace DatabaseSchemaMergeHelper
{
/// <summary>
/// Iterates through a supplied schema compare file and excludes objects belonging to a supplied list of schema
/// </summary>
class Program
{
/// <summary>
/// first argument is the scmp file to update, second argument is comma separated list of schemas to exclude
/// </summary>
/// <param name="args"></param>
static void Main(string[] args)
{
if (args.Length == 0) return;
var scmpFilePath = args[0];
var listOfSchemasToExclude = args[1].Split(',').ToList();
// load comparison from Schema Compare (.scmp) file
var comparison = new SchemaComparison(scmpFilePath);
var comparisonResult = comparison.Compare();
// find changes pertaining to objects belonging to the supplied schema exclusion list
var listOfDifferencesToExclude = new List<SchemaDifference>();
// add those objects to a list
foreach (SchemaDifference difference in comparisonResult.Differences)
{
if (difference.TargetObject != null &&
difference.TargetObject.Name != null &&
difference.TargetObject.Name.HasName &&
listOfSchemasToExclude.Contains(difference.TargetObject.Name.Parts[0], StringComparer.OrdinalIgnoreCase))
{
listOfDifferencesToExclude.Add(difference);
}
}
// add the needed exclusions to the .scmp file
foreach (var diff in listOfDifferencesToExclude)
{
if (diff.SourceObject != null)
{
var SourceExclusionObject = new SchemaComparisonExcludedObjectId(diff.SourceObject.ObjectType, diff.SourceObject.Name,
diff.Parent?.SourceObject.ObjectType, diff.Parent?.SourceObject.Name);
comparison.ExcludedSourceObjects.Add(SourceExclusionObject);
}
var TargetExclusionObject = new SchemaComparisonExcludedObjectId(diff.TargetObject.ObjectType, diff.TargetObject.Name,
diff.Parent?.TargetObject.ObjectType, diff.Parent?.TargetObject.Name);
comparison.ExcludedTargetObjects.Add(TargetExclusionObject);
}
// save the file, overwrites the existing scmp.
comparison.SaveToFile(scmpFilePath, true);
}
}
}
右键单击顶层节点(添加、更改、删除),您可以选择“全部排除”以取消选中该类型的所有元素。这至少会很快让你进入一个一切都没有被检查的状态。