【问题标题】:How do I find out what needs Microsoft.VC90.CRT.Manifest from .NET client如何从 .NET 客户端找出需要 Microsoft.VC90.CRT.Manifest 的内容
【发布时间】:2018-07-06 16:39:02
【问题描述】:

我有一个 WPF 应用程序,它在我们软件的已发布版本中引用二进制文件。但是,它不会生成,因为它无法在运行时文件夹中找到 Microsoft.VC90.CRT.Manifest。我知道这是一个旧的 VC++ 2008 CRT 的东西。但是,我有两个问题:

[1] 我怎样才能找出清单文件需要什么,我想这里有一些依赖链在起作用?我直接引用的只是 .NET 程序集。

[2] 有没有一种方法可以安装 2008 CRT 的东西,这样我的项目就可以在不需要找到清单文件的情况下构建(即它被安装并在一个公共位置找到 - WinSxS?)?我假设我们应该分发此清单文件。

【问题讨论】:

  • 嗯,这不是您在构建时可能遇到的错误,因为除了复制它们之外,您不会对这些 DLL 做任何事情。当然,从运行你的程序来看,一定要将 F5 与 Build > Build 区分开来。作者可能忘记在 DLL 本身中嵌入清单,依赖于嵌入在原始 C++ EXE 文件中的清单。从技术上讲,您必须在自己的 EXE 的清单中复制清单条目。在这些二进制文件上使用 File > Open > File 是检查和复制/粘贴 RT_MANIFEST 节点的方法。
  • 谢谢。是的,我在尝试复制文件时将其视为错误:描述项目文件行抑制状态错误无法复制文件“C:\...\Bin\Microsoft.VC90.CRT.manifest”,因为找不到它。
  • 回到我的问题,我如何确定哪个 dll 正在“引用”这个清单文件?如果引用是正确的术语。我是否必须浏览所有潜在的二进制文件并查看 Manifest 条目?
  • 当然,为什么不呢。这是无用的知识,你知道他们中的一个人有一个坏的或缺失的清单,你不妨假设他们都有。在使用这些 DLL 的原始 EXE 上使用文件 > 打开 > 文件,以便您可以复制/粘贴清单文本。如果您没有此 EXE,请与这些 DLL 的所有者交谈,如果他修复它们肯定会更好。
  • 感谢您参与其中。您能否提供更多基本信息,我想我会很感激退后一步?首先,清单文件应该怎么做才能避免我的应用程序试图访问它的情况?我该怎么办?您在此讨论中引用了 EXE 文件,但显然我只引用 dll。 dll 是否应该包含此清单或这里发生了其他事情?我觉得真正的问题在于与我的代码相距两步的代码。

标签: visual-c++ manifest visual-c++-runtime


【解决方案1】:

好的,我可以为我的问题提供一些答案,即使它不是完整的答案。

为了弄清楚清单需要什么,我最终将构建输出级别设置为诊断,然后搜索日志。这揭示了链中最深和最高的依赖关系,而不是它们之间的引用。

...

1>  bin\x64\Debug\Microsoft.VC90.CRT.manifest
1>                  CopyLocal=true
1>                  FusionName=
1>                  HintPath=<path to the reference in my project that pulls in this file (indirectly)>
1>                  OriginalItemSpec=<path to the output folder>\Kitware.VTK.dll < The dll at the bottom of the chain that needs the manifest
1>                  ResolvedFrom=<path to the folder containing the referenced binaries>
1>                  SpecificVersion=False
1>                  Version=7.1.0.1009

从这里我可以看到 Kitware.VTK.dll 导致了 CopyLocalFiles 错误,以及哪个直接引用导致了这个错误。但是,我看不到导致这个错误的引用链。我将顶级引用(.dll)加载到 dotPeek 中,并使用程序集依赖图来检查这两个 dll 之间的引用链 - NB 这工作但不是最佳的,GUI 真的很难处理依赖关系图。

我现在需要弄清楚如何打破这个链条,或者我是否可以将清单嵌入到我们控制的程序集中。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-12-16
    • 2011-02-06
    • 2011-12-07
    • 2021-07-03
    相关资源
    最近更新 更多