如何从.NET客户端找出需要Microsoft.VC90.CRT.Manifest的内容

时间:2018-07-06 16:39:02

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

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

[1]如何确定清单文件需要什么,我想这里有一个依赖链在起作用?我直接引用的都是.NET程序集。

[2]有什么方法可以安装2008 CRT东西,从而使我的项目无需定位清单文件(即在公共位置-WinSxS上安装并找到它)就可以构建?我假设我们不应该分发此清单文件。

1 个答案:

答案 0 :(得分:-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确实在依赖关系图上苦苦挣扎。 / em>

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