项目构建在错误的,看似随机的目录中寻找文件

时间:2014-04-25 22:33:28

标签: build visual-studio-2013 sql-server-data-tools

我在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检测到我的解决方案,项目和/或文件的外部更改后,可能会出现此问题,然后按我的方向重新加载它们;但这不是我(重新)通过重点实验证实的假设,而是我在工作过程中产生的怀疑。

有没有其他人遇到过这个问题并找到了压扁它的方法?

3 个答案:

答案 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,右键单击它并选择这样的选项。

enter image description here

这解决了构建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.SqlTask​​s.targets”中打开目标文件,然后编辑定义。顺便说一下,如果有人试试这个,请告诉我结果。谢谢!