Visual studio 为什么SqlPackage脚本操作和VisualStudio生成脚本会产生不同的结果?

Visual studio 为什么SqlPackage脚本操作和VisualStudio生成脚本会产生不同的结果?,visual-studio,sql-server-data-tools,sqlpackage,Visual Studio,Sql Server Data Tools,Sqlpackage,我们有一个Visual Studio数据库项目,该项目具有一个发布配置文件,根据我是使用Visual Studio的“生成脚本”选项还是命令行中的SQL包生成不同的更改脚本: VisualStudio创建一个10455KB的文件。 SqlPackage使用以下命令创建8835kb文件:SqlPackage/a:Script/sf:pub.dacpac/pr:pub.profile.xml 关于如何观察VS用于生成脚本的命令行,有什么建议吗?当两个进程都使用以下发布配置文件时,有什么区别吗 <

我们有一个Visual Studio数据库项目,该项目具有一个发布配置文件,根据我是使用Visual Studio的“生成脚本”选项还是命令行中的SQL包生成不同的更改脚本:

VisualStudio创建一个10455KB的文件。 SqlPackage使用以下命令创建8835kb文件:SqlPackage/a:Script/sf:pub.dacpac/pr:pub.profile.xml 关于如何观察VS用于生成脚本的命令行,有什么建议吗?当两个进程都使用以下发布配置文件时,有什么区别吗

<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="14.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
  <PropertyGroup>
    <IncludeCompositeObjects>True</IncludeCompositeObjects>
    <TargetDatabaseName>nrc_gateway</TargetDatabaseName>
    <DeployScriptFileName>clm_model.publish.sql</DeployScriptFileName>
    <BlockOnPossibleDataLoss>False</BlockOnPossibleDataLoss>
    <ScriptDatabaseCompatibility>True</ScriptDatabaseCompatibility>
    <ProfileVersionNumber>1</ProfileVersionNumber>
    <DropDmlTriggersNotInSource>False</DropDmlTriggersNotInSource>
    <DropIndexesNotInSource>False</DropIndexesNotInSource>
    <TargetConnectionString>Data Source=.;Integrated Security=True;Persist Security Info=False;Pooling=False;MultipleActiveResultSets=False;Connect Timeout=60;Encrypt=False;TrustServerCertificate=True</TargetConnectionString>
    <AllowIncompatiblePlatform>True</AllowIncompatiblePlatform>
    <DropConstraintsNotInSource>False</DropConstraintsNotInSource>
    <DropExtendedPropertiesNotInSource>False</DropExtendedPropertiesNotInSource>
    <VerifyDeployment>False</VerifyDeployment>
    <BlockWhenDriftDetected>False</BlockWhenDriftDetected>
    <RegisterDataTierApplication>False</RegisterDataTierApplication>
    <IncludeTransactionalScripts>True</IncludeTransactionalScripts>
    <ExcludeUsers>True</ExcludeUsers>
    <ExcludeDatabaseRoles>False</ExcludeDatabaseRoles>
    <DropObjectsNotInSource>False</DropObjectsNotInSource>
    <DoNotDropAggregates>False</DoNotDropAggregates>
    <DoNotDropApplicationRoles>False</DoNotDropApplicationRoles>
    <DoNotDropAssemblies>False</DoNotDropAssemblies>
    <DoNotDropAsymmetricKeys>False</DoNotDropAsymmetricKeys>
    <DropPermissionsNotInSource>False</DropPermissionsNotInSource>
    <GenerateSmartDefaults>True</GenerateSmartDefaults>
    <ScriptNewConstraintValidation>True</ScriptNewConstraintValidation>
  </PropertyGroup>
</Project>

VisualStudio不使用CLI生成脚本,因此没有观察交互的选项。它甚至不使用公共的Microsoft.SqlServer.Dac API—它对提供此功能的程序集具有内部可见的访问权限

我可能会首先验证SqlPackage.exe的版本和SSDT的版本是否相同。较旧版本的SqlPackage.exe可能没有编写一些较新的数据库选项的脚本,例如,数据库范围的配置设置

VS的SqlPackage副本保存在此处:

c:\program files (x86)\Microsoft Visual Studio 14.0\Common7\IDE\Extensions\Microsoft\SqlDB\DAC\140
请注意,最终的140文件夹实际上可能是130甚至120,这取决于安装的特定SSDT版本

大多数人从以下Sql Server目录运行SqlPackage.exe:

C:\Program Files (x86)\Microsoft SQL Server\140\DAC\bin
请再次注意,140可以是130甚至120,这取决于安装的DacFramework.msi的特定版本


但是,无论您的SqlPackage.exe位于何处,请检查其文件版本是否与Visual Studio的副本相匹配。

文件中有什么不同?像windiff这样的人是怎么想的?