Visual studio 2017 无法加载文件或程序集';Microsoft.SqlServer.BatchParser,版本=13.100.0.0

Visual studio 2017 无法加载文件或程序集';Microsoft.SqlServer.BatchParser,版本=13.100.0.0,visual-studio-2017,tfsbuild,Visual Studio 2017,Tfsbuild,我正在尝试运行TFS 2018的内部版本。我们还在TFS构建服务器(即Windows Server 2016)上安装了SQL Server 2016。Visual Studio将于2017年推出。第一个解决方案文件产生以下错误,我不知道从何处引用此文件: 2019-01-22T20:35:26.8607312Z包: 2019-01-22T20:35:26.8608029Z调用Web Deploy生成具有以下设置的包: 2019-01-22T20:35:26.8608667Z$(本地化版本)是10

我正在尝试运行TFS 2018的内部版本。我们还在TFS构建服务器(即Windows Server 2016)上安装了SQL Server 2016。Visual Studio将于2017年推出。第一个解决方案文件产生以下错误,我不知道从何处引用此文件:

2019-01-22T20:35:26.8607312Z包:
2019-01-22T20:35:26.8608029Z调用Web Deploy生成具有以下设置的包:
2019-01-22T20:35:26.8608667Z$(本地化版本)是10
2019-01-22T20:35:26.8609527Z$(目的地版本)是10
2019-01-22T20:35:26.8610846Z$(UseIis)是真的
2019-01-22T20:35:26.8612479Z$(IisUrl)是
2019-01-22T20:35:26.8614266Z$(包括设置)为假
2019-01-22T20:35:26.8615630Z$(_DeploymentUseIis)为假
2019-01-22T20:35:26.8617245Z$(目的地)为假
2019-01-22T20:35:26.8666548Z生成部署文件:
2019-01-22T20:35:26.8684620Z为Web部署包/发布生成源清单文件…
2019-01-22T20:35:27.0589951Z Visual Studio将于2017年推出##[错误]C:\Program Files(x86)\Microsoft Visual Studio\2017\Professional\MSBuild\Microsoft\VisualStudio\v15.0\Web\Deploy\Microsoft.Web.Publishing.MSDeploy.Common.targets(119,5):错误MSB4018:“SQLScriptPrepreprocessSqlVariables”任务意外失败。
System.IO.FileNotFoundException:无法加载文件或程序集“Microsoft.SqlServer.BatchParser,Version=13.100.0.0,Culture=neutral,PublicKeyToken=89845DCD80CC91”或其依赖项之一。系统找不到指定的文件。
文件名:“Microsoft.SqlServer.BatchParser,版本=13.100.0.0,区域性=neutral,PublicKeyToken=89845dcd8080cc91”
位于Microsoft.Web.Publishing.Tasks.SqlScriptPreprocessor.SqlScriptPrepreprocessSqlVariables.Execute()
位于Microsoft.Build.BackEnd.TaskExecutionHost.Microsoft.Build.BackEnd.ItaskeExecutionHost.Execute()
在Microsoft.Build.BackEnd.TaskBuilder.d_u26.MoveNext()

警告:程序集绑定日志记录已关闭。
要启用程序集绑定失败日志记录,请将注册表值[HKLM\Software\Microsoft\Fusion!EnableLog](DWORD)设置为1。
注意:程序集绑定失败日志记录会带来一些性能损失。
要关闭此功能,请删除注册表值[HKLM\Software\Microsoft\Fusion!EnableLog]。

找到了桌面生成的解决方法。未尝试TFS团队生成

使用gacutil注册随Visual Studio 2017安装的Microsoft.SqlServer.BatchParser v2015.130.1601.5,即使请求v13.100.0.0,显然也满足生成任务SqlScriptPreprocessSqlVariables

在:

或类似问题:

"C:\Program Files (x86)\Microsoft SDKs\Windows\v10.0A\bin\NETFX 4.6.2 Tools\gacutil.exe" /i Microsoft.SqlServer.BatchParser.dll
或类似。

发现与所述相同

我的情况:

  • Visual Studio 2017构建工具(无IDE)
  • Microsoft.SqlServer.BatchParser版本=13.100.0.0未在中注册 全局程序集缓存。两者都不是13.0.0.0
  • VS生成工具不包括Microsoft.SqlServer.BatchParser.dll。引用的路径适用于VS Enterprise,不适用于生成工具:
    C:\Program Files(x86)\Microsoft Visual Studio\2017\Enterprise\Common7\IDE\Extensions\Microsoft\SQLCommon\130
    C:\ProgramFiles(x86)\Microsoft Visual Studio\2017\BuildTools下没有类似的路径
  • 我检查了构建工具的安装。说SQL Server数据工具是在数据存储和处理工作负载下安装的
我的解决方案:

  • 根据建议,我下载并安装了SQL Server数据工具,然后重新启动
  • 已在全局程序集缓存中注册Microsoft.SqlServer.BatchParser Version=13.0.0.0
  • 然后,根据讨论中的解决方法(上面的developercommunity),我为MSBuild添加了一个绑定重定向(在
    C:\ProgramFiles(x86)\Microsoft Visual Studio\2017\BuildTools\MSBuild\15.0\BinMSBuild.exe.config中
    -请参见下文)
  • 固定的


您能否在本地构建相同的解决方案?是的,我可以。但是TFS构建定义一直在失败。Visual Studio计算机是Windows Server 2008 R2。因此,您在本地计算机上有该程序集,但在生成服务器上没有。看看这个,看看是否有帮助。。。不,我在Visual Studio计算机上没有该程序集。我有Microsoft.SqlServer.BatchParser.dll,版本=14.0.3026.27。它将使用该版本。如果您查看app.config中的运行时部分,您可能会看到一个程序集绑定,它基本上说“当请求使用版本Y时,使用此程序集的版本X”。您只需要确保该程序集在生成服务器上也可用。您可以安装包含该程序集的软件,也可以在应用程序中专门包含DLL,方法是在项目中创建文件夹,将DLL复制到其中,然后将项目引用更改为指向DLL的该副本,而不是仅使用全局缓存。
"C:\Program Files (x86)\Microsoft SDKs\Windows\v10.0A\bin\NETFX 4.6.2 Tools\gacutil.exe" /i Microsoft.SqlServer.BatchParser.dll
<!-- Workaround for errorMSB4018: The "SqlScriptPreprocessSqlVariables" task failed unexpectedly.
System.IO.FileNotFoundException: Could not load file or assembly 'Microsoft.SqlServer.BatchParser, Version=13.100.0.0, Culture=neutral, PublicKeyToken=89845dcd8080cc91' or one of its dependencies. The system cannot find the file specified. -->
<dependentAssembly>
    <assemblyIdentity name="Microsoft.SqlServer.BatchParser" culture="neutral" publicKeyToken="89845dcd8080cc91" />
    <bindingRedirect oldVersion="0.0.0.0-99.9.9.9" newVersion="13.0.0.0"/>
</dependentAssembly>