在 SxS 清单文件中有一个空文件元素是否有意义

Does it make sense to have a empty file element in a SxS manifest file

我当前的项目依赖于使用 side by side manifests 的 COM 组件。提供给我的清单包含 file 元素,没有任何 comClass 子元素,例如:

<file name="fred.dll">
</file>

这有意义吗?可以安全地删除这些吗?一些额外的上下文清单在过去是自动生成的。据推测,给定的空条目在传递中引起了问题,有人向我解释说,如果一个进程依赖于两个不同的 COM 组件,这两个组件都有一个包含相同空 file 元素的清单,就会发生奇怪的事情。此外,在空元素中命名的 dll 是不包含任何 COM 对象的纯 C dll。

我查看了 Microsoft 提供的可用 documentation, and the xsd,告诉我空 file 元素在语法上是正确的。但是,如果将 file 元素添加到不描述任何 COM 对象的清单中是否有意义,我还没有找到问题的答案。

the dll's are straight C dll's

这正在迅速进入 makes-no-sense 领域。如果将 DLL 部署到与 dependentAssembly 的 <assemblyIdentity> 名称同名的 sub-directory 中,技术上仍然有用。 OS 不会在 sub-directories 中查找 DLL,除非清单告知这样做。 side-by-side 在 WinSxS 缓存中部署的替代方法,使用本地部署。请注意,子目录名称很重要,它必须与 assemblyIdentity 元素的 "name" 属性匹配,这是识别用法的最佳方式。

Jochen Kalmbach 在 this blog post 中举了一个这种明显使用的例子。在 Microsoft 将 CRT 部署到 WinSxS(VS2005 和 VS2008)的日子里很有用,该功能导致 wide-spread 混乱。请注意嵌套 Microsoft.VC90.CRT.manifest 文件中的 <file> 元素。

这种用法是否与您发现的匹配是无法猜测的。在 SO 问题中隐藏细节非常奇怪。找出是否有必要的最简单方法是删除它,然后看看有什么影响。我们无法帮助您做到这一点。