缺少Microsoft.Data.Tools.Schema.Sql.UnitTesting。再次

时间:2017-06-17 11:02:27

标签: asp.net-mvc build-error vs-unit-testing-framework visual-studio-2017 sql-server-unit-testing

这个bug已经很老了,但到目前为止MS还没有解决它。

我有一个VS2015解决方案(许多项目,主要是ASP.NET一个),我在VS 2017中打开了它。

这是我在尝试构建它时看到的内容:

所以,我想,好吧,有些引用破坏,我进入Project References,删除了那两个(... Sql.UnitTesting和... Tools.Components),并试图将它们添加回来。我看到了什么?当然,这个:

版本错误,其 15.1.0.0 而不是之前的 15.0.0.0 (对于这两个DLL)。很重要,你说,但它仍然没有编译:

它告诉我版本不匹配,我必须在web.config文件中创建一些程序集绑定。 我做了,首先是手动,然后按照建议双击警告。 没有任何改变。我仍然无法获得我的项目构建。

以前的SO问题(Automatic reference to Microsoft.Data.Tools.Schema.Sql.UnitTestingWhere is the Microsoft.VisualStudio.TestTools.UnitTesting namespace on VS2010?)没有多大帮助,我无法删除SSDT组件,因为它完全打破了Web项目的加载。我的项目不是任何类型的SQL测试项目。它只是一个常规的ASP.NET 4 Web应用程序。

我该怎么做才能解决这个问题?

3 个答案:

答案 0 :(得分:2)

我搜索了该项目的文件,发现了这个:

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

然后我搜索了PC Microsoft.Data.Tools.Schema.Sql.UnitTesting.targets,我发现了一些有趣的结果(可点击):

所以,我以前的工作室VS2015有v14版本的文件,引用的版本也是14版本,这很好。

但根据文件内容,新的VS2017引用了15.0.0.0

但是应该包含这些文件的实际文件夹有15.1.0.0个版本!而web.config文件中的绑定重定向由于某种原因不起作用。

我从这里看到两个解决方案,更改Microsoft.Data.Tools.Schema.Sql.UnitTesting.targets文件以使其包含15.1.0.0版本,或将15.1.0.0替换为15.0.0.0版本。我现在会和前人一起去。很快就会更新。

更新

它仍然没有帮助。没有构建错误,但项目构建失败。

我还尝试从项目文件中删除这两个XML行,它有点工作。不太确定,因为它现在表现得更加奇怪。

它在somemethod(out Ticket ticket);(新的C#7功能)的一行上给了我一个奇怪的“丢失','”错误,这很好并且没有任何错误,错误本身消失了在我看到它之后1秒钟,但是当我将它切换回C#6方式时,它最终都没有问题。我现在试着运行这个项目。

更新

是的,就像我想的那样,亲爱的微软。现在它给了我这个:

因此,我还有一些变化需要完成手动升级从vs2015到vs2017的简单webapp。

答案 1 :(得分:1)

在测试项目文件中,删除以下代码:

<Import Project="$(SQLDBExtensionsRefPath)\Microsoft.Data.Tools.Schema.Sql.UnitTesting.targets" Condition="'$(SQLDBExtensionsRefPath)' != ''" />
  <Import Project="$(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v$(VisualStudioVersion)\SSDT\Microsoft.Data.Tools.Schema.Sql.UnitTesting.targets" Condition="'$(SQLDBExtensionsRefPath)' == ''" />
<PropertyGroup>
    <SsdtUnitTestVersion>2.0</SsdtUnitTestVersion>
</PropertyGroup>

并替换为:

<ItemGroup Condition="$(VisualStudioVersion) == '15.0'">
    <Reference Include="Microsoft.Data.Tools.Schema.Sql, Version=13.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL">
      <HintPath>$(SSDTPath)\Microsoft.Data.Tools.Schema.Sql.dll</HintPath>
      <Private>True</Private>
    </Reference>
    <Reference Include="Microsoft.Data.Tools.Schema.Sql.UnitTesting, Version=15.1.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL">
      <HintPath>$(SSDTUnitTestPath)\Microsoft.Data.Tools.Schema.Sql.UnitTesting.dll</HintPath>
      <Private>True</Private>
    </Reference>
    <Reference Include="Microsoft.Data.Tools.Schema.Sql.UnitTestingAdapter, Version=15.1.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL">
      <HintPath>$(SSDTUnitTestPath)\Microsoft.Data.Tools.Schema.Sql.UnitTestingAdapter.dll</HintPath>
      <Private>True</Private>
    </Reference>
  </ItemGroup>
<PropertyGroup>
    <SsdtUnitTestVersion>3.1</SsdtUnitTestVersion>
  </PropertyGroup>
 <Import Project="$(SQLDBExtensionsRefPath)\Microsoft.Data.Tools.Schema.Sql.UnitTesting.targets" Condition="$(VisualStudioVersion) != '15.0' And '$(SQLDBExtensionsRefPath)' != ''" />
  <Import Project="$(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v$(VisualStudioVersion)\SSDT\Microsoft.Data.Tools.Schema.Sql.UnitTesting.targets" Condition="$(VisualStudioVersion) != '15.0' And '$(SQLDBExtensionsRefPath)' == ''" />

这是根据官方的Microsoft开发人员社区帮助线程here

尽管对我来说这没用。必须在ssdt版本周围添加属性组标签。您可能要根据项目配置保留或删除它。

答案 2 :(得分:1)

enter image description here

选择“否”,“身份和路径”将自动解决。

enter image description here