У меня есть установщик WiX и проект Custom Actions. Я добавил библиотеку С# в качестве ссылки на проект пользовательского действия. Эта dll C# использует DllImport для одной dll C++. При установке получаю ошибку: не удается загрузить DLL mycpp.dll
: указанный модуль не найден. Я добавил mycpp.dll
в проект CA и попытался использовать свойства: встроенный ресурс, скопировать в выходной каталог - но безрезультатно. Как заставить программу установки найти mycpp.dll
?
Дополнительное действие WIX: использовать dllimport
Ответы (1)
У меня была эта проблема раньше. Прочитав файлы MSBuild для wix, я в конце концов нашел свойство, которое используется в качестве списка для dll, необходимых в самораспаковывающемся пакете, содержащем dll настраиваемого действия.
в wix.ca.targets (в папке sdk) есть свойство CustomActionContents, которое используется при запуске makefxca.
Вот комментарий для этого набора целей msbuild, которые упаковывают вашу DLL-библиотеку с настраиваемыми действиями.
<!--
==================================================================================================
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.
==================================================================================================
-->
а также
<!--
Items to include in the CA package:
- Reference assemblies marked CopyLocal
- Project items of type Content
- Additional items in the CustomActionContents property
-->
Таким образом, похоже, что вы можете пометить свою ссылку на mycpp.dll как локальную копию, и она будет автоматически выбрана, или вы можете добавить новое свойство в свой проект настраиваемого действия (возможно, отредактируйте csproj и добавьте свойство), которое содержит путь к dll, и он будет подобран.