我知道可能会引发此错误的原因有多种,但我没有发现任何搜索似乎适用于这种情况。
我有一个 SSIS 包无法构建并出现错误:
Attempt to parse the expression "Replace(@[$Project::RootDirectory] + "\\files\\in",
"\\\\","\\")" failed and returned error code 0xC00470A6.
The expression cannot be parsed.
It might contain invalid elements or it might not be well-formed.
There may also be an out-of-memory error.
但是,我可以打开构建失败的表达式并单击“评估表达式”,没有任何问题。效果很好。
这是 Visual Studio 2017,该公司正在将其与生产包一起使用,因此无法选择升级版本。
我已经尝试了所有我能想到的方法来减轻错误,但它仍然存在。
我应该提到的另一点是随后出现的错误:
The variable "$Project::RootDirectory" was not found in the Variables collection.
The variable might not exist in the correct scope.
并且该包是从 SQL 包存储中导出以进行修改的
如果构建似乎试图在幕后执行相同的评估并且由于某种原因出现问题,我该如何解决该错误?
并且该包是从 SQL 包存储中导出以进行修改的
这是你确凿无疑的证据。可能吧。
包和项目变量仅对项目部署模型包有效。 SSIS 包存储和各种其他名称暗示了旧版包部署模型,通常存储在磁盘上,但也可能存储在 msdb 上。
假设您确实下载了部署单元(一个 .ispac 文件),它是 SSIS 项目的独立项目文件。它具有重新创建项目所需的一切:清单文件、包、project.params 文件以及可选的任何项目级连接管理器。
您遇到的是您打开的SSIS项目找不到对项目参数的引用
$Project::RootDirectory
您是如何走到这一步的,未知。解决方案可能取决于我们如何达到这一点,但我首先添加一个项目参数 RootDirectory
那么你的表达式至少会被解析。如果值为空,这就是它的样子
如果这能解决问题,那么问题就在于将其部署回其所属位置。 project.params 文件需要传输包,否则执行将失败,可能会出现类似的错误,因为执行引擎不会引用项目参数。