2008-09-18 7 views
1

Je voudrais compiler une DLL sous Visual Studio 2008 qui dépend de msvcr90.dll en tant qu'assemblage privé (essentiellement je vais vider cette DLL dans le même répertoire que mon application) sans avoir besoin d'un fichier manifeste externe.Comment compiler une DLL qui ne nécessite pas de fichier manifeste externe?

J'ai suivi les étapes décrites dans la section http://msdn.microsoft.com/en-us/library/ms235291.aspx « Déploiement Visual C++ DLLs bibliothèque que les assemblées privées » mais au lieu d'utiliser un fichier manifest externe ( Microsoft.VC90.CRT.manifest) Je voudrais l'incorporer dans les DLL en quelque sorte.

Si j'incorpore Microsoft.VC90.CRT.manifest dans msvcr90.dll ou que la DLL le charge et supprime le fichier manifeste externe, LoadLibrary() échoue.

Le problème est lorsque vous incorporez le manifeste dans une DLL, il intègre en fait ce qui suit:

<?xml version="1.0" encoding="UTF-8" standalone="yes"?> 
<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"> 
     </requestedPrivileges> 
    </security> 
    </trustInfo> 
    <dependency> 
    <dependentAssembly> 
     <assemblyIdentity type="win32" name="Microsoft.VC90.DebugCRT" version="9.0.21022.8" processorArchitecture="x86" publicKeyToken="1fc8b3b9a1e18e3b"> 
    </dependentAssembly> 
    </dependency> 
</assembly>

Je pense que le < dependentAssembly> ligne est ce qui cause à mourir si le fichier manifeste est manquant. Des idées?

Répondre

1

Ajoutez ce qui suit aux définitions de préprocesseur:

_CRT_NOFORCE_MANIFEST 
Questions connexes