我在VS2013中有几个SSDT项目,发现自己越来越被一个令人讨厌的构建问题所打断,我的在线搜索没有得到答案。
通常这些SSDT项目按预期构建。然而,最近出现了一个看似随机的构建问题,只影响了一个或多个SSDT项目 - 在我的解决方案中没有~50个C#项目:SSDT无法找到项目'文件,因为它在其他项目中查找'目录
例如,这是由此问题阻碍的SSDT构建的输出,然后是同一个SSDT项目的构建,问题已清除(只需关闭并重新打开Visual Studio ...或者重新启动我的机器时这不起作用 - 即没有代码更改):
构建失败
------ Build started: Project: MyOrg.SomeSolution.Database, Configuration: Debug Any CPU ------
C:\SCC\SomeSolution\trunk\Database\Source\Scripts\Script.PostDeployment.sql(25,4): Error: SQL72001: The included file SomeTable.data.sql (C:\SCC\SomeSolution\TRUNK\COMPONENTS\SOMECATEGORY\FOO\FOO.UNIT.TESTS\SCRIPTS\SOMETABLE.DATA.SQL) does not exist.
Done building project "MyOrg.SomeSolution.Database.sqlproj" -- FAILED.
Build FAILED.
========== Build: 0 succeeded or up-to-date, 1 failed, 0 skipped ==========
Build Summary
-------------
00:00.506 - Failed - Debug Any CPU - Database\Source\MyOrg.SomeSolution.Database.sqlproj
Total build time: 00:56.948
========== Build: 0 succeeded or up-to-date, 1 failed, 52 skipped, Completed at 4/24/2014 3:12:01 PM ==========
Publish cannot begin until your project is ready to build. Try again after resolving any errors in the project.
成功构建
------ Build started: Project: MyOrg.SomeSolution.Database, Configuration: Debug Any CPU ------
MyOrg.SomeSolution.Database -> C:\SCC\SomeSolution\trunk\Database\Build\Scripts\MyOrg.SomeSolution.Database.dll
MyOrg.SomeSolution.Database -> C:\SCC\SomeSolution\trunk\Database\Build\Scripts\MyOrg.SomeSolution.Database.dacpac
C:\SCC\SomeSolution\trunk\Database\Build\PostBuild.bat
Generating publish script for database '_TheDatabase_' on server 'localhost'.
Successfully generated script to file C:\SCC\SomeSolution\trunk\Database\Build\Scripts\MyOrg.SomeSolution.Database.sql.
========== Build: 1 succeeded or up-to-date, 0 failed, 0 skipped ==========
Build Summary
-------------
00:10.928 - Success - Debug Any CPU - Database\Source\MyOrg.SomeSolution.Database.sqlproj
Total build time: 00:00.000
========== : 1 succeeded or up-to-date, 0 failed, 52 skipped, Completed at 4/24/2014 3:16:11 PM ==========
虽然上面的构建输出是在发布的上下文中,但是当发布问题时,独立于发布的构建会产生相同的结果。
最后,我感觉在Visual Studio检测到我的解决方案,项目和/或文件的外部更改后,可能会出现此问题,然后按我的方向重新加载它们;但这不是我(重新)通过重点实验证实的假设,而是我在工作过程中产生的怀疑。
有没有其他人遇到过这个问题并找到了压扁它的方法?
答案 0 :(得分:2)
以下是SSDT forum post that @KevinCunnane cited中现在提出的解决方案:
<Target Name="SqlBuild"
Inputs="@(SqlBuildInputItem->'%(FullPath)')"
Outputs="@(SqlBuildOutputItem)"
DependsOnTargets="$(SqlBuildDependsOn)">
<SqlBuildTask
PostdeployItem="@(PostDeploy->'%(FullPath)')"
PredeployItem="@(PreDeploy->'%(FullPath)')"
RefactorLog="@(RefactorLog->'%(FullPath)')"
SqlTarget="@(SqlTarget)"
这些更改将在"C:\Program Files (x86)\MSBuild\Microsoft\VisualStudio\v12.0\SSDT\Microsoft.Data.Tools.Schema.SqlTasks.targets"
中进行,并将在本月晚些时候计划的下一个SSDT版本中进行。
我的第一次构建与更改成功,但是......我的第一次构建与SSDT论坛中之前建议的修复一样:我今天将击败现在提出的修复并报告回来。
答案 1 :(得分:2)
在你提问几年之后,我在VS2015社区遇到了同样的问题。
我的项目设置是: SQL Server 2014; .Net framework 4.6.1
经过几个小时的努力,我发现了
更改
:r。\ path \ folder \ script.sql
进入
:r .. \\ path \\ folder \\ script.sql
以及你需要在postdeployment执行脚本上启用CMDMODE,右键单击它并选择这样的选项。
这解决了构建SQL数据库项目的问题。
答案 2 :(得分:1)
是的,其他人遇到了这个问题,看起来是一个可能的解决方案。见this post on the SSDT forum。以下是相关信息,包括修复建议:
当实际代码需要绝对路径时,我们的目标文件传入前/后构建脚本的相对路径。在我们的下一个版本中(希望在6月左右),目标文件将SqlScriptDependenciesTask定义为
<SqlScriptDependenciesTask
PostdeployItem="@(PostDeploy->'%(FullPath)')"
PredeployItem="@(PreDeploy->'%(FullPath)')"
BuildExtensionConfiguration="@(BuildExtensionConfiguration)"
DeploymentExtensionConfiguration="@(DeploymentExtensionConfiguration)"
SqlCmdVariables="@(SqlCmdVariables)">
有了这个,我们将按照预期将完整路径传递给任务。如果有人想尝试此解决方案,只需在“C:\ Program Files(x86)\ MSBuild \ Microsoft \ VisualStudio \ v12.0 \ SSDT \ Microsoft.Data.Tools.Schema.SqlTasks.targets”中打开目标文件,然后编辑定义。顺便说一下,如果有人试试这个,请告诉我结果。谢谢!