Visual c++ 如何从.NET客户端找到需要Microsoft.VC90.CRT.Manifest的内容

Visual c++ 如何从.NET客户端找到需要Microsoft.VC90.CRT.Manifest的内容,visual-c++,manifest,visual-c++-runtime,Visual C++,Manifest,Visual C++ Runtime,我有一个WPF应用程序,它引用了我们软件发布版本中的二进制文件。但是,它不会生成,因为它无法在运行时文件夹中找到Microsoft.VC90.CRT.Manifest。我知道这是一个旧的VC++2008 CRT的东西。不过,我有两个问题: [1] 我想这里有一个依赖链在起作用,我怎样才能找到需要清单文件的内容呢?所有我直接引用的都是.NET程序集 [2] 有没有一种方法可以安装2008 CRT的东西,这样我的项目就可以构建,而不需要定位清单文件(即,它可以安装在一个公共位置-WinSxS?)?我

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

[1] 我想这里有一个依赖链在起作用,我怎样才能找到需要清单文件的内容呢?所有我直接引用的都是.NET程序集


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

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

为了弄清楚清单需要什么,我最终将构建输出级别设置为diagnostic,然后搜索日志。这揭示了链中最深和最高的依赖性,但没有揭示它们之间的引用

1>bin\x64\Debug\Microsoft.VC90.CRT.manifest
1> CopyLocal=true
1> 融合名称=
1> HintPath=
1> OriginalItemSpec=\Kitware.VTK.dll<需要清单的链底部的dll
1> 决议=
1> SpecificVersion=False
1> 版本=7.1.0.1009
从这一点上,我可以看出Kitware.VTK.dll导致了CopyLocalFiles错误,哪些直接引用导致了这个错误。但是,我看不到导致这种情况的参考链。我将顶层引用(即.dll)加载到dotPeek中,并使用程序集依赖关系图来检查这两个dll之间的引用链-注意,这是可行的,但不是最佳的,GUI确实与依赖关系图有矛盾


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

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