【问题标题】:Project fails to load due to missing SqlServer.targets file after upgrading to Visual Studio 2013升级到 Visual Studio 2013 后,由于缺少 SqlServer.targets 文件,项目无法加载
【发布时间】:2013-11-29 03:57:46
【问题描述】:

升级到 Visual Studio 2013 后,我发现在尝试打开解决方案时无法加载旧的 SQL 项目。显示的错误是:

未找到导入的项目“C:\Program Files (x86)\MSBuild\12.0\bin\SqlServer.targets”。确认声明中的路径正确,并且该文件存在于磁盘上。 C:\Some\Path\To\Project\Database.sqlproj

在我的.sqlproj 文件中,我有一行

<Import Project="$(MSBuildToolsPath)\SqlServer.targets" />

在 Visual Studio 2012 中解析为 C:\Windows\Microsoft.NET\Framework\v4.0.30319\SqlServer.targets,但在 Visual Studio 2013 中解析为 C:\Program Files (x86)\MSBuild\12.0\bin\SqlServer.targets。但是,SqlServer.targets 文件不在这些位置。

这可能是因为 MSBuild 成为 Visual Studio 的一部分,而不是它成为 .Net Framework 的一部分。

有谁知道如何解决这个问题并将这个项目迁移到 Visual Studio 2013?

【问题讨论】:

  • 临时解决方案是从尚未升级到 Visual Studio 2013 的计算机上复制缺少的 SqlServer.targets 并将其放置在 $(MSBuildToolsPath) 目录中(`C:\Program Files (x86) \MSBuild\12.0\bin` 在我的例子中)。还有比这更好的解决方案吗?
  • 我遇到了完全相同的问题。显式安装 Microsoft Build Tools Package(独立安装程序,独立于 VS 2013)并不能解决问题。我确实在您上面引用的 .NET Framework 文件夹中拥有该文件,并将其复制到新位置按预期工作。不知道为什么它不适合你。
  • 我有一个直接在VS 2013中创建的数据库项目,但是没有SqlServer.targets。相反,有 。手动更新目标可以解决您的问题吗?

标签: sql-server visual-studio msbuild visual-studio-2013


【解决方案1】:

我在尝试在 VS 2013 下构建 VS 2010 解决方案时遇到了同样的问题。解决方法是先将解决方案文件升级到 VS 2013。之后,它无需进一步修改即可工作。

【讨论】:

  • 你是如何将解决方案文件升级到 VS 2013 的?
【解决方案2】:

刚刚将SqlServer.targetsC:\Windows\Microsoft.NET\Framework\v3.5 复制到C:\Program Files (x86)\MSBuild\12.0\Bin,这很有帮助。 VS2013 现在可以打开旧项目了。

【讨论】:

  • 它可以打开旧项目,但无法构建并出现错误:CS2019: Invalid target type for /target: must specify 'exe', 'winexe', 'library', 'module', 'appcontainerexe' 或 'winmdobj'
  • 附带说明,我在从 Windows 7 升级到 10 时遇到了这个问题(尽管仍在使用 VS2012),并且此修复工作
  • 这条路径适用于 VS 2015 C:\Program Files (x86)\MSBuild\14.0\Bin
  • 从2017升级到2019,我不得不从C:\Program Files (x86)\Microsoft Visual Studio\2017\Professional\MSBuild\15.0\Bin复制到C:\Program Files (x86)\Microsoft Visual Studio\2019\Professional\MSBuild\Current\Bin
【解决方案3】:

从 Visual Studio 2008 升级到 2013 时,我遇到了类似的问题。 花了一段时间,但我不得不(再次)安装 VS 2013 的 SSDT,然后我创建了一个新的数据库项目来找出新的 sqlserver.targets 文件的相对路径。 应该是这样的:

  <Import Condition="'$(SQLDBExtensionsRefPath)' != ''" Project="$(SQLDBExtensionsRefPath)\Microsoft.Data.Tools.Schema.SqlTasks.targets" />
  <Import Condition="'$(SQLDBExtensionsRefPath)' == ''" Project="$(MSBuildExtensionsPath)\Microsoft\VisualStudio\v$(VisualStudioVersion)\SSDT\Microsoft.Data.Tools.Schema.SqlTasks.targets" />

我发现修复此错误的最大障碍是试图理解提供的错误消息(BC2014:值 'database' 对于选项 'target' 无效)

希望这会有所帮助!

【讨论】:

  • 将 SqlServer.targets 移动到 C:\Program Files (x86)\MSBuild\12.0\Bin 后出现错误:CS2019:/target 的目标类型无效:必须指定“exe” 、“winexe”、“库”、“模块”、“appcontainerexe”或“winmdobj”。但是,我将上面的两行添加到sqlproj文件中,并且能够成功构建。
  • 这为我解决了(以及将 SqlServer.targets 复制到正确的位置)
【解决方案4】:

这些解决方案中的几个导致的错误

我在 Vladimir Dronov 的回答下方发布了一个关于 Chris Torng 描述的致命构建错误的具体问题 (C# VS 2013 Error 02019: Invalid target type for /target: must specify 'exe', 'winexe', 'library', 'module', 'appcontainerexe' or 'winmdobj' CSC):

错误 1 ​​02019:/target 的目标类型无效:必须指定 'exe'、'winexe'、'library'、'module'、'appcontainerexe' 或 'winmdobj' CSC


修复

按照本论坛的建议,我能够在 VS2013 Community Edition 中摆脱与 SQL Server 开发工具兼容性问题相关的错误:

https://connect.microsoft.com/SQLServer/feedbackdetail/view/979839

bsclifton 于 2014 年 11 月 15 日上午 7:18 发布

社区 2013 版也有这个问题;转到工具-> 扩展和更新并更新“用于数据库工具的 Microsoft SQL Server 更新”解决了这个问题:)

如果这对您不起作用,我建议您查看该论坛,因为它提供了一些其他关于如何解决问题的想法

【讨论】:

    【解决方案5】:

    解决方案一:

    如果项目是 .csproj 文件,则应检查 Visual Studio 是否在升级时也生成了 .sqlproj 文件。如果是这种情况,您可以将其添加到解决方案中。

    解决方案 2:

    您可以尝试更改 .sqlproj 文件中的以下行:

    <Import Project="$(MSBuildToolsPath)\SqlServer.targets" />
    

    <Import Project="$(MSBuildBinPath)\SqlServer.targets" />
    

    【讨论】:

      【解决方案6】:

      我遇到了同样的问题,我是这样解决的: 只需在“C:\Windows\Microsoft.NET\Framework\v4.0.30319”上创建一个名为“SQLServer.targets”的文件,其内容如下:

      <Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
      
          <PropertyGroup>
                 <SqlClrTargetsFullPath>$(MSBuildExtensionsPath)\Microsoft\VisualStudio\v10.0\TeamData\Microsoft.Data.Schema.SqlClr.targets</SqlClrTargetsFullPath>
          </PropertyGroup>
      
          <Import Project="$(SqlClrTargetsFullPath)" Condition="Exists('$(SqlClrTargetsFullPath)')"/>
      </Project>
      

      祝你好运。

      【讨论】:

        【解决方案7】:

        在 Windows 10 中打开旧项目时也会发生这种情况

        在 Windows 10 上的 Visual Studio 2010 中打开旧的 SQL Server CLR 程序集时,我遇到了同样的问题(未找到 SqlServer.targets),与最初用于编写程序集的版本相同

        确认同一个项目在 Windows 7 计算机上的 Visual Studio 2010 中可以正常打开。

        解决方案

        注意错误信息。在我的情况下是:

        未找到导入的项目“C:\Windows\Microsoft.NET\Framework\v4.0.30319\SqlServer.targets”。确认声明中的路径正确,并且该文件存在于磁盘上。

        只需将 SqlServer.targets 从 Vladimir Dronov 的答案“C:\Windows\Microsoft.NET\Framework\v3.5\SqlServer.targets”中指示的位置复制到错误消息中指示的目录。

        在我的例子中是“C:\Windows\Microsoft.NET\Framework\v4.0.30319\”。

        【讨论】:

          猜你喜欢
          • 2021-10-30
          • 1970-01-01
          • 2018-01-10
          • 2013-11-20
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2014-01-18
          相关资源
          最近更新 更多