我观察到unmanaged.dll文件有一个unmanaged.dll.manifest文件标记。在编辑器中打开这个文件时,它似乎是普通的XML链接到某些其他依赖托管?组件。这似乎是最近的变化......不记得早些时候看到它们。
<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>
答案 0 :(得分:4)
您所看到的被称为“Side-by-side assemblies”(SxS)。 Microsoft已将.NET并行机制扩展到非托管DLL,现在将其称为“平台程序集”。现在,DLL不是通过DLL名称执行链接,而是通过清单加载。 .NET GAC的等价物是文件夹\ windows \ WinSxS;这允许在一个系统上同时安装多个版本的DLL,并且不同的应用程序绑定到同一DLL的不同版本。它还包括.NET提供的重定向功能;这主要是清单所做的事情(允许重定向)。
清单中引用的DLL(例如Microsoft.VC90.DebugCRT)也是非托管的(即本机代码)
应用程序清单也可用于其他目的。我不知道细节,但回想一下XP中的主题选择也在清单中表示。