Msbuild 使用更新数据库运行web发布向导时Visual Studio 2015异常SqlScriptPreprocessSqlVariables

Msbuild 使用更新数据库运行web发布向导时Visual Studio 2015异常SqlScriptPreprocessSqlVariables,msbuild,visual-studio-2015,webdeploy,microsoft-web-deploy,Msbuild,Visual Studio 2015,Webdeploy,Microsoft Web Deploy,更新: 我在一个新的空VS2015 WebApplication项目中复制了相同的错误 向新的空SQL数据库添加了connectionString 已将sql脚本文件添加到解决方案并选择了发布。。。在发布向导中。 构建web部署包或web部署时,我将遇到相同的错误 原职: SqlScriptPreprocessSqlVariables任务意外失败。当我对选择了更新数据库的概要文件使用发布向导或MSBuild时,会发生这种情况。在新安装的机器上,仅使用VS2015更新1,并且在我们的构建服务器上,

更新: 我在一个新的空VS2015 WebApplication项目中复制了相同的错误

向新的空SQL数据库添加了connectionString 已将sql脚本文件添加到解决方案并选择了发布。。。在发布向导中。 构建web部署包或web部署时,我将遇到相同的错误

原职: SqlScriptPreprocessSqlVariables任务意外失败。当我对选择了更新数据库的概要文件使用发布向导或MSBuild时,会发生这种情况。在新安装的机器上,仅使用VS2015更新1,并且在我们的构建服务器上,使用Team Foundation server 2015构建代理。同样的发布配置文件也适用于我们的VS2013环境

System.TypeLoadException: Signature of the body and declaration in a method implementation do not match. 
Type:   'Microsoft.Web.Publishing.Tasks.SqlScriptPreprocessor.SqlCommandExecuter'.   
Assembly: 'Microsoft.Web.Publishing.Tasks, Version=14.0.0.0, Culture=neutral,    PublicKeyToken=b03f5f7f11d50a3a'. 
at Microsoft.Web.Publishing.Tasks.SqlScriptPreprocessor.SqlScriptPreprocessSqlVariables.Execute() 
at   Microsoft.Build.BackEnd.TaskExecutionHost.Microsoft.Build.BackEnd.ITaskExecutionHost.Execute() 
at Microsoft.Build.BackEnd.TaskBuilder.ExecuteInstantiatedTask>d__26.MoveNext()
这是相同的错误,但来自新生成系统中的生成代理。我在新代理上运行XAML build时遇到了相同的错误

##[error]C:\Program Files (x86)\MSBuild\Microsoft\VisualStudio\v14.0\Web\Deploy\Microsoft.Web.Publishing.MSDeploy.Common.targets(119,5): Error MSB4018: The "SqlScriptPreprocessSqlVariables" task failed unexpectedly.
##[error]System.TypeLoadException: Signature of the body and declaration in a method implementation do not match.  Type: 'Microsoft.Web.Publishing.Tasks.SqlScriptPreprocessor.SqlCommandExecuter'.  Assembly: 'Microsoft.Web.Publishing.Tasks, Version=14.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a'.
##[error]   at Microsoft.Web.Publishing.Tasks.SqlScriptPreprocessor.SqlScriptPreprocessSqlVariables.Execute()
##[error]   at Microsoft.Build.BackEnd.TaskExecutionHost.Microsoft.Build.BackEnd.ITaskExecutionHost.Execute()
##[error]   at Microsoft.Build.BackEnd.TaskBuilder.<ExecuteInstantiatedTask>d__26.MoveNext()

这就是我修复webdeploy打包问题的方法。这不是我推荐的解决方案,但它可以在我的机器和构建服务器上运行

找到文件Microsoft.Web.Publishing.MsDeploy.Common.targets

这是我的机器上的位置:

C:\Program Files (x86)\MSBuild\Microsoft\VisualStudio\v14.0\Web\Deploy\ Microsoft.Web.Publishing.MsDeploy.Common.targets
在第117行和前方,我注释掉了以下部分

<!--<SqlScriptPreprocessSqlVariables
UnsupportedKeywords="$(MsdeploySqlUnsupportedCommand)" CheckForUnsupportCommands="$(CheckSqlScriptForUnsupportedCommands)"
TreadSqlScriptUnsupportedCommandsAsWarning="$(TreadSqlScriptUnsupportedCommandsAsWarning)"
SqlScriptFile="%(_DatabasesToPackageForSQL.SourcePath)"
DestinationGroup="%(_DatabasesToPackageForSQL.DestinationGroup)"
ResolveIncludes="$(SqlScriptPreProcessResolveIncludes)"
BatchDelimiter="$(SqlScriptPreProcessBatchDelimiter)"
Condition="$(EnableSqlScriptVariableParameterize) And '%_DatabasesToPackageForSQL.SourcePath)' != '' And Exists('%(_DatabasesToPackageForSQL.SourcePath)')  ">
<Output TaskParameter="List" ItemName="_DatabasesToPackage_SqlVariables" />
</SqlScriptPreprocessSqlVariables>-->

我最近遇到了同样的问题,我通过安装最新版本的SQL Server数据工具并重新启动机器解决了这个问题。正如@JimAho所提到的,问题与安装的SQL Server数据工具版本有关。


别忘了重新启动机器。

仍然对这些解决方案不太满意,我做了一些研究,我能看到的最小侵入性方法就是在GAC中注册程序集

以管理员身份运行VS命令提示符 点击Windows开始 类型显影剂 右键单击VS 2017的开发者命令提示符 选择以管理员身份运行 运行以下命令将Enterpise替换为您的安装,例如Professional、BuildTools、Community:
您从哪里获得SqlScriptPreprocessSqlVariables任务的?您可以在本地构建项目而不是TFS构建吗?从日志中可以看出,您的问题似乎与您的项目有关,而不是与TFS有关。构建工作正常,但发布步骤给出了错误。我使用以下参数调用msbuild/p:DeployOnBuild=true/p:PublishProfile=Release.pubxml/p:WebPublishMethod=Package/p:PackageAssingFile=true/p:SkipInValidConfiguration=true@Cece-MSFT在web项目上运行发布向导时,我将收到错误。如果我取消选中“更新数据库”选项,它将起作用。这可能与您安装的SQL Server数据工具版本有关。您解决过这个问题吗?我确实解决了,但没有帮助。但是这些工具已经更新了,所以我会再试一次。
gacutil /i "C:\Program Files (x86)\Microsoft Visual Studio\2017\Enterprise\Common7\IDE\Extensions\Microsoft\SQLCommon\130\Microsoft.SqlServer.BatchParser.dll"