0

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

[1] 如何找出需要清单文件的内容,我认为这里有一些依赖链在起作用?我直接引用的只是 .NET 程序集。

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

4

1 回答 1

-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 之间的引用链 -注意这有效但不是最佳的,并且 GUI 确实在依赖关系图上挣扎。

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

于 2018-07-23T14:44:44.133 回答