5

我有一个嵌入了以下清单的程序集:

<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0">
  <dependency>
    <dependentAssembly>
      <assemblyIdentity type="win32" name="Microsoft.VC80.CRT" version="8.0.50608.0" processorArchitecture="x86" publicKeyToken="1fc8b3b9a1e18e3b"></assemblyIdentity>
    </dependentAssembly>
  </dependency>
</assembly>

在我的一台机器上,这个程序集不起作用(程序集无法加载)。在依赖walker中打开它会给我以下错误消息:

Error: The Side-by-Side configuration information for "SomeAssembly.dll" contains errors. This application has failed to start because the application configuration is incorrect. Reinstalling the application may fix this problem (14001).

相同的程序集在另一台机器上运行良好,并且依赖 walker 没有错误。

据我所知,问题是由于第一台机器缺少某种依赖项(例如 MSVCR 可再发行组件),但是我已经检查过了,Microsoft Visual C++ 2005 Redistributable 在两台机器上都安装得很好。

我该如何弄清楚缺少的依赖项是什么?

我唯一注意到的是工作机器上的 WinSxS 目录有一个附加条目:

x86_Microsoft.VC80.ATL_1fc8b3b9a1e18e3b_8.0.50727.4053_x-ww_473666fd
4

3 回答 3

2

排序!

有人好心地向我指出,Dependency Walker 中提到的“SomeAssembly.dll”实际上与我在 Dependency Walker 中打开的 dll 不同!(哎呀!)

查看此程序集的清单,我可以看到问题是由于 Microsoft.VC80.CRT v8.0.50727.4053 是针对目标的,但在这台机器上不存在。(通过安全更新安装)。

于 2009-09-14T10:28:32.347 回答
2

在解决了同样的问题之后,我注意到应用于开发 Visual Studio 安装的更新可能会解决一些目标机器更新:

Visual Studio 更新

例如,上面突出显示的更新解决了这个特定问题。

于 2011-02-17T15:49:28.840 回答
2

我建议您不要在程序集中包含“清单文件”,而不是并排转发。特别是因为您无法确定要安装软件的 PC 是否已更新到清单中包含的版本。

您可以将项目属性“Linker\Manifest File\Generate Manifest”设置为“No”来禁用它。

我希望这会有所帮助。祝你好运

于 2011-06-29T09:11:57.507 回答