2008-12-08 69 views
2

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

  • 为什么需要这些文件? (如果我不得不猜测,它将加载相关的托管程序集和/或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> 

回答

3

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

在清单(例如Microsoft.VC90.DebugCRT)所指的DLL是也非托管(即本机代码)

应用程序清单用于其他目的,以及。我不知道细节,但回想一下,清单中还指出了XP中主题的选择。