unmanaged.dll.manifest文件的用途是什么?

时间:2008-12-08 07:54:39

标签: c# assemblies unmanaged

我观察到unmanaged.dll文件有一个unmanaged.dll.manifest文件标记。在编辑器中打开这个文件时,它似乎是普通的XML链接到某些其他依赖托管?组件。这似乎是最近的变化......不记得早些时候看到它们。

  • 为什么需要这些文件? (如果我不得不猜测,那就是加载依赖的托管程序集和/或CLR)
  • 这些文件包含哪些其他有用信息?它们是否包含任何依赖非托管dll的链接(这将是不错的)

<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0">
  <trustInfo xmlns="urn:schemas-microsoft-com:asm.v3">
    <security>
      <requestedPrivileges>
        <requestedExecutionLevel level="asInvoker" uiAccess="false"></requestedExecutionLevel>
      </requestedPrivileges>
    </security>
  </trustInfo>
  <dependency>
    <dependentAssembly>
      <assemblyIdentity type="win32" name="Microsoft.VC90.DebugCRT" version="9.0.21022.8" processorArchitecture="x86" publicKeyToken="1fc8b3b9a1e18e3b"></assemblyIdentity>
    </dependentAssembly>
  </dependency>
  <dependency>
    <dependentAssembly>
      <assemblyIdentity type="win32" name="Microsoft.VC90.DebugMFC" version="9.0.21022.8" processorArchitecture="x86" publicKeyToken="1fc8b3b9a1e18e3b"></assemblyIdentity>
    </dependentAssembly>
  </dependency>
</assembly>

1 个答案:

答案 0 :(得分:4)

您所看到的被称为“Side-by-side assemblies”(SxS)。 Microsoft已将.NET并行机制扩展到非托管DLL,现在将其称为“平台程序集”。现在,DLL不是通过DLL名称执行链接,而是通过清单加载。 .NET GAC的等价物是文件夹\ windows \ WinSxS;这允许在一个系统上同时安装多个版本的DLL,并且不同的应用程序绑定到同一DLL的不同版本。它还包括.NET提供的重定向功能;这主要是清单所做的事情(允许重定向)。

清单中引用的DLL(例如Microsoft.VC90.DebugCRT)也是非托管的(即本机代码)

应用程序清单也可用于其他目的。我不知道细节,但回想一下XP中的主题选择也在清单中表示。