数据层应用程序PostDeployment.sql中的MSBuild和sqlcmd变量 前言

数据层应用程序PostDeployment.sql中的MSBuild和sqlcmd变量 前言,deployment,msbuild,data-tier-applications,Deployment,Msbuild,Data Tier Applications,我使用数据层应用程序项目和SQL CLR数据库项目来管理应用程序的数据库部分。 我有3台不同的机器(适用于本地、dev/ci/qa和prepod/prod部署环境),其中应安装数据库部件。 在部署后脚本中,我创建CLR存储过程(带有程序集)、登录名和用户。 根据配置的不同,登录名和用户应该不同 问题 我使用变量有问题。以下是我尝试过的部署后脚本 GO IF '$(DeploymentConfiguration)' = 'Debug' BEGIN :r .\AddLoginsUsersRo

我使用数据层应用程序项目和SQL CLR数据库项目来管理应用程序的数据库部分。
我有3台不同的机器(适用于本地、dev/ci/qa和prepod/prod部署环境),其中应安装数据库部件。
在部署后脚本中,我创建CLR存储过程(带有程序集)、登录名和用户。
根据配置的不同,登录名和用户应该不同

问题 我使用变量有问题。以下是我尝试过的部署后脚本

GO
IF '$(DeploymentConfiguration)' = 'Debug'
BEGIN
    :r .\AddLoginsUsersRolesDev.sql
END
ELSE
BEGIN
    :r .\AddLoginsUsersRolesProd.sql
END
GO
....
ALTER DATABASE QProduction SET TRUSTWORTHY ON
GO
CREATE ASSEMBLY QProcedures from '[$(MSBuildProjectDir)]\Q.Core.Database.dll' WITH PERMISSION_SET = SAFE
GO
....

下面是我如何添加登录名、用户(AddLoginsUsersRolesDev.sql):

对于PostDeployment.sql操作为PostDeploy,SQLCMD模式为on,对于include scripts操作未在生成中。
部署失败,出现“SQL执行错误:发生致命错误。找不到变量MSBuildProjectDirectory”。
据我所知,在数据库项目中,我可以为此使用Database.sqlcmdvars。 我应该如何解决这个问题

使现代化 我补充说

<SqlCommandVariablesFile>Database.sqlcmdvars</SqlCommandVariablesFile>
<ItemGroup>
  <SqlCommandVariableOverride Include="databasename=$(TargetDatabase)" />
</ItemGroup>  
<PropertyGroup>
 <databasename>Q</databasename>
 <SetVariables>
  <Variable Name="databasename" Value="Q" />
 </SetVariables>
</PropertyGroup>  
Database.sqlcmdvars
到.dbproj文件并创建Database.sqlcmdvars:

<SqlCommandVariables xmlns="urn:Microsoft.VisualStudio.Data.Schema.Package.SqlCmdVars">
  <Version>1.0</Version>
  <Properties>
    <Property>
      <PropertyName>databasename</PropertyName>
      <PropertyValue>Q</PropertyValue>
    </Property>
  </Properties>
</SqlCommandVariables>

1
数据库名
Q
这不管用

我补充说

<SqlCommandVariablesFile>Database.sqlcmdvars</SqlCommandVariablesFile>
<ItemGroup>
  <SqlCommandVariableOverride Include="databasename=$(TargetDatabase)" />
</ItemGroup>  
<PropertyGroup>
 <databasename>Q</databasename>
 <SetVariables>
  <Variable Name="databasename" Value="Q" />
 </SetVariables>
</PropertyGroup>  

这也不行

我补充说

<SqlCommandVariablesFile>Database.sqlcmdvars</SqlCommandVariablesFile>
<ItemGroup>
  <SqlCommandVariableOverride Include="databasename=$(TargetDatabase)" />
</ItemGroup>  
<PropertyGroup>
 <databasename>Q</databasename>
 <SetVariables>
  <Variable Name="databasename" Value="Q" />
 </SetVariables>
</PropertyGroup>  

Q
这也不起作用(我在某个地方读到,可能的MSBuild变量应该与sqlcmd one同名)

我已将导入SqlTasks.targets项目移到PostBuildEvent部分之前。
之前:

<PropertyGroup>
 <PostBuildEvent/>
</PropertyGroup>
<Import Project="$(MSBuildExtensionsPath)\Microsoft\VisualStudio\v10.0\TeamData\Microsoft.Data.Schema.SqlTasks.targets" /> 

之后:

<Import Project="$(MSBuildExtensionsPath)\Microsoft\VisualStudio\v10.0\TeamData\Microsoft.Data.Schema.SqlTasks.targets" />
<PropertyGroup>
 <PostBuildEvent/>
</PropertyGroup>  

这也不行


谢谢。

看起来sqlcmdvars是。至少它们被标记为“不适用于”dacpac。

看起来像SQLCMDVAR。至少它们标记为dacpac“不适用”