2016-10-11 1 views
0

J'ai un programme d'installation WiX et des actions personnalisées. J'ai ajouté la bibliothèque C# comme référence au projet d'action personnalisée. Cette DLL C# utilise DllImport vers une DLL C++. Lors de l'installation, je reçois erreur: impossible de charger la DLL mycpp.dll: module spécifié introuvable. J'ai ajouté mycpp.dll au projet CA et essayé d'utiliser les propriétés: ressource intégrée, copier dans le répertoire de sortie - mais pas de résultat. Comment puis-je faire trouver mon installateur mycpp.dll?Action personnalisée WIX: utiliser dllimport

Répondre

1

J'ai déjà eu ce problème. Après avoir lu les fichiers MSBuild pour wix, j'ai finalement trouvé une propriété qui est utilisée comme une liste pour les DLL nécessaires dans le package auto-extractible qui contient la dll d'action personnalisée. Dans wix.ca.targets (dans le dossier sdk), il existe une propriété appelée CustomActionContents utilisée lors de l'exécution de makesfxca.

Voici le commentaire pour cet ensemble de cibles msbuild qui empaquetent votre dll d'action personnalisée.

<!-- 
================================================================================================== 
PackCustomAction 

Creates an MSI managed custom action package that includes the custom action assembly, 
local assembly dependencies, and project content files. 

[IN] 
@(IntermediateAssembly) - Managed custom action assembly. 
@(Content) - Project items of type Content will be included in the package. 
$(CustomActionContents) - Optional space-delimited list of additional files to include. 

[OUT] 
$(IntermediateOutputPath)$(TargetCAFileName) - Managed custom action package with unmanaged stub. 
================================================================================================== 
--> 

et

<!-- 
Items to include in the CA package: 
- Reference assemblies marked CopyLocal 
- Project items of type Content 
- Additional items in the CustomActionContents property 
--> 

Il semble donc que vous pouvez marquer votre référence à la mycpp.dll comme copie locale et il sera automatiquement pris ou vous pouvez ajouter une nouvelle propriété dans votre action personnalisée projet (probablement modifier le csproj et ajouter la propriété) qui contient le chemin de la DLL et il sera ramassé.