Я использую WiX 3.5.1930 в Visual Studio 2010, ориентируясь на .NET Framework 3.5. (Позже еженедельные сборки WiX кажутся очень сломанными по отношению к их шаблону пользовательских действий, по крайней мере на данный момент. 1930 - это самая последняя сборка, которая, похоже, создает встроенный С# CA с рабочими ссылками.)
У меня есть две сборки пользовательских действий, написанные на С#. Один из них отлично работает. Другая ошибка со следующей ошибкой:
CustomActionnNameHere returned actual error code 1154 (note this may not be 100% accurate if translation happened inside sandbox)
Я сравнил файлы .csproj и .wixproj, и насколько я могу сказать, что различия являются подходящими (например, список включенных файлов .cs). Я изменил неработающие .wxs для вызова рабочего пользовательского действия вместо неработающего пользовательского действия, и он работает как epxected.
Что еще я могу посмотреть, чтобы заставить это работать?
Изменить: просто для того, чтобы быть полным 1154 относится к недопустимой DLL - net helpms переводит его (на английском языке) на "Один из файлов библиотеки, необходимых для запуска этого приложения, поврежден".
Второе редактирование: выполнялось перевернутое против dll (захватили копию из \windows\installer во время работы установщика), и он говорит, что все в порядке в dll. DLL имеет только пользовательский метод действий с "успешным возвратом", поэтому нет возможности проверить его, но он подтверждает, что DLL не повреждена.
Третье редактирование: Код в сломанном пользовательском действии следует:
using Microsoft.Deployment.WindowsInstaller;
namespace Framework.Installer.Database {
public class CustomActions {
[CustomAction]
public static ActionResult RunMigration(Session session) {
return ActionResult.Success;
}
}
}
Не так много. Соответствующие части .wxs выглядят следующим образом:
<InstallExecuteSequence>
<Custom Action="DotNetMigratorCustomActionPreviousUp" After="SetMigrationPropertiesPreviousUp"><![CDATA[(&Database = 3)]]></Custom>
</InstallExecuteSequence>
<Binary Id="DotNetMigratorCustomActionDll"
SourceFile="$(var.Framework.Installer.Database.CustomActions.TargetDir)\SoftwareAnswers.Framework.Installer.Database.CustomActions.dll" />
<CustomAction Id="DotNetMigratorCustomActionPreviousUp"
Return="check"
BinaryKey="DotNetMigratorCustomActionDll"
DllEntry="RunMigration"
Execute="deferred" />