数据层应用程序 - 后期部署

AR_*_*AR_ 3 sql-server visual-studio data-tier-applications

这是一件很简单的事情,甚至在这里问我是否让我感到愚蠢,但由于我长期坚持这一点,我会在这里问.我正在开发visual studio中的数据层应用程序.我有常见的东西,如表,存储过程和一些后期部署数据.默认情况下,数据层应用程序随附Scripts/Post-Deployment文件夹.在这个文件夹中有一个名为Script.PostDeployment.sql的文件.为了更有条理,我在Post-Deployment中创建文件夹作为StaticData和TestData.我创建数据的插入语句位于这些文件夹中.所以,基于这个结构,我将以下代码添加到我的Script.PostDeployment.sql:

    /*
Post-Deployment Script Template                         
--------------------------------------------------------------------------------------
 This file contains SQL statements that will be appended to the build script.       
 Use SQLCMD syntax to include a file in the post-deployment script.         
 Example:      :r .\myfile.sql                              
 Use SQLCMD syntax to reference a variable in the post-deployment script.       
 Example:      :setvar TableName MyTable                            
               SELECT * FROM [$(TableName)]                 
--------------------------------------------------------------------------------------
*/

:r .\StaticData\States.sql
:r .\TestData\Logins.sql
Run Code Online (Sandbox Code Playgroud)

问题是上面的代码不起作用.对于某些starnge原因,deploy命令只是忽略路径并在Scripts/Post-Deployment中查找States.sql和Logins.sql,而不是在相应的子文件夹中查找.其他人遇到过类似的东西?非常简单的问题,但带我永远解决这个问题.我尽力解释,但提出问题,我可以尝试让事情更清楚.谢谢!

小智 6

我看了你的示例代码.当我尝试重现这一点时,我在Visual Studio 2010中使用了SQL 2008数据库项目,但是您的项目是数据层应用程序,这是非常不同的; 当我切换到使用数据层应用程序时,我能够重现您所看到的内容.

数据层应用程序生成包含对象定义的DAC包,并且还包含用户定义的脚本,如部署前和部署脚本.现在,我不是100%肯定(我以前没有使用过DAC封装,所以我的观点和研究基于此),但我猜测DAC封装的文件结构不支持子Script\Post-deployment文件夹下的文件夹; 我假设它内部有一个非常严格的文件夹结构.因此,DACCompiler似乎只是在部署后脚本中从文件引用中去掉文件名,而忽略了目录路径.

有数据层应用程序的白皮书这里.它是一个关于向包中添加部署后脚本的部分,在该部分中是一些最佳实践,包括以下内容:

•在解决方案资源管理器中工作时,建议您在Script.PostDeployment.sql脚本文件中包含所有部署后命令.这是因为DAC包中只包含一个部署后文件.换句话说,您不应该创建多个文件.

现在,从技术上讲,这就是:r命令的作用,但您可能会发现将命令直接嵌入到文件中更容易.

这也可能只是DACCompiler设计中的一个错误.

以下是我建议你做的事情:

  • 就目前而言,最简单的事情 - 我相信 - 只是将脚本直接移到Post-Deployment文件夹下; 给他们唯一的描述性名称,以弥补没有子目录.
  • 或者,如果您确实要保留子目录,请在项目中添加预构建命令; 让它在构建开始之前将脚本从子目录复制到部署后目录(您需要确保脚本具有唯一的文件名)
  • 如果您认为这是一个错误或应该存在的功能,请访问
    http://connect.microsoft.com/SQLServer 并建议产品团队
    在该产品的未来版本中解决该问题.这是提出这些建议的好地方,因为反馈给产品团队,整个用户社区可以投票反馈以增加其重量,产品团队可以通过反馈信息与您沟通.

而且,当然,你可以坚持下去,看看其他人是否有不同的答案,如果有,那就太好了!但我猜是否还有其他人没有回复,那么可能没有一个; 我当然在挖掘中找不到任何东西.

我希望总的来说这些信息很有帮助.我希望我能给你一个方法让它现在工作,但我认为你最好的选择是在当前设计的限制范围内工作并将反馈发布到Connect.

祝好运.