我需要在使用 WIX 安装数据库时部署 dacpac。为此,我考虑使用必要的开关运行 SQLPackage.exe 命令,因此我使用二进制标记嵌入了必要的 exe 和 dll,如下所示
<Binary Id="Microsoft.Data.Tools.Schema.Sql.dll" SourceFile="..\DeployDBs\DAC\Microsoft.Data.Tools.Schema.Sql.dll"/>
<Binary Id="Microsoft.Data.Tools.Schema.Tasks.Sql.11.dll" SourceFile="..\DeployDBs\DAC\Microsoft.Data.Tools.Schema.Tasks.Sql.11.dll"/>
<Binary Id="Microsoft.Data.Tools.Schema.Utilities.Sql.11.dll" SourceFile="..\DeployDBs\DAC\Microsoft.Data.Tools.Schema.Utilities.Sql.11.dll"/>
<Binary Id="Microsoft.Data.Tools.Utilities.dll" SourceFile="..\DeployDBs\DAC\Microsoft.Data.Tools.Utilities.dll"/>
<Binary Id="Microsoft.SqlServer.Dac.dll" SourceFile="..\DeployDBs\DAC\Microsoft.SqlServer.Dac.dll"/>
<Binary Id="SqlPackage" SourceFile="..\DeployDBs\DAC\SqlPackage.exe"/>
<Binary Id="SqlPackage.exe.config" SourceFile="..\DeployDBs\DAC\SqlPackage.exe.config"/>
并使用自定义操作调用 SqlPackage.exe,如下所示
<CustomAction Id="DeployMyDb" BinaryKey="SqlPackage"
ExeCommand="/a:publish /sf:"MyDacpac.dacpac" /tsn:localhost /tdn:MyDb"
Execute="immediate" />
自定义操作是在“InstallFinalize”之后运行的序列,如下所示
<InstallExecuteSequence>
<Custom Action="DeployMyDb" After="InstallFinalize"/>
</InstallExecuteSequence>
</Product>
部署 dacpac 时(即运行自定义操作),它会为程序集“Microsoft.Data.Tools.Utilities”抛出“FileNotFoundException”,该程序集是嵌入式二进制文件之一。
请就运行此 exe 所需完成的缺失步骤或添加事项提供建议。