我有一个WPF应用程序,该应用程序在我们软件的发行版本中引用了二进制文件。但是,它不会生成,因为它无法在运行时文件夹中找到Microsoft.VC90.CRT.Manifest。我知道这是旧的VC ++ 2008 CRT。但是,我有两个问题:
[1]如何确定清单文件需要什么,我想这里有一个依赖链在起作用?我直接引用的都是.NET程序集。
[2]有什么方法可以安装2008 CRT东西,从而使我的项目无需定位清单文件(即在公共位置-WinSxS上安装并找到它)就可以构建?我假设我们不应该不分发此清单文件。
答案 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>
我现在需要弄清楚如何中断此链,或者是否可以将清单嵌入到我们控制的程序集中。