添加预部署脚本后Visual Studio编译失败,报04094错误
SSDT编译错误04094:PredeployItem参数无法接受多个项
解决方案
检查并清理重复的PreDeploy项定义
打开你的sqlproj文件,全局搜索<PreDeploy Include,确保只存在一条指向PreDeployment\PreDeployment.sql的Include语句。如果发现重复条目,删除多余的即可。强制PreDeploy项去重
如果无法找到重复定义的位置,可以修改PreDeploy的ItemGroup配置,添加去重逻辑:<ItemGroup> <PreDeploy Include="PreDeployment\PreDeployment.sql" /> <!-- 去重处理 --> <PreDeploy Remove="@(PreDeploy)" /> <PreDeploy Include="@(PreDeploy->Distinct())" /> </ItemGroup>修改Task参数为单一项取值
若上述方法无效,直接修改SqlScriptDependenciesTask的PredeployItem参数,强制仅传递集合中的第一个项:<SqlScriptDependenciesTask PostdeployItem="@(PostDeploy->'%(FullPath)')" PredeployItem="$([System.Linq.Enumerable]::FirstOrDefault(@(PreDeploy->'%(FullPath)')))" BuildExtensionConfiguration="@(BuildExtensionConfiguration)" DeploymentExtensionConfiguration="@(DeploymentExtensionConfiguration)" SqlCmdVariables="@(SqlCmdVariables)">
错误原因
从错误信息中的重复路径可以看出,你的PreDeploy项集合中存在两个完全相同的脚本路径。而SqlScriptDependenciesTask的PredeployItem参数被设计为仅接受单个Microsoft.Build.Framework.ITaskItem对象,当使用@(PreDeploy->'%(FullPath)')时,多个项会被拼接成分号分隔的字符串,不符合参数的类型要求,从而触发04094错误。
之前PostDeploy脚本正常工作,是因为PostDeploy项集合中仅包含单个条目,生成的是单个路径,符合参数的类型限制。
内容的提问来源于stack exchange,提问作者Gav Cheal
相关产品推荐
相关产品推荐

