Пользовательские действия WIX, созданные для.Net Framework 4.0, не работают? Способы решить?
Мы использовали WIX 3.5 (сборка № 1811) и создали собственное действие, построенное с использованием Visual Studio 2008 и с целевой платформой как.Net 3.5. Раньше это прекрасно работало, пока мы не создали пользовательское действие с использованием Visual Studio 2010 и целевой платформы, как.Net 4.0.
WIX не может вызвать пользовательское действие, мы получаем следующую ошибку:
SFXCA: Extracting custom action to temporary directory: C:\Windows\Installer\MSI69BD.tmp-\
SFXCA: Binding to CLR version v2.0.50727
Calling custom action SomeCompany.SomeProduct.InstallerPlugin!SomeCompany.SomeProduct.InstallerPlugin.XYZProductCustomAction.ABCMethod
Error: could not load custom action class SomeCompany.SomeProduct.InstallerPlugin.XYZProductCustomAction from assembly: SomeCompany.SomeProduct.InstallerPlugin
System.BadImageFormatException: Could not load file or assembly 'SomeCompany.SomeProduct.InstallerPlugin' or one of its dependencies. This assembly is built by a runtime newer than the currently loaded runtime and cannot be loaded.
File name: 'SomeCompany.SomeProduct.InstallerPlugin'
at System.Reflection.Assembly._nLoad(AssemblyName fileName, String codeBase, Evidence assemblySecurity, Assembly locationHint, StackCrawlMark& stackMark, Boolean throwOnFileNotFound, Boolean forIntrospection)
at System.Reflection.Assembly.nLoad(AssemblyName fileName, String codeBase, Evidence assemblySecurity, Assembly locationHint, StackCrawlMark& stackMark, Boolean throwOnFileNotFound, Boolean forIntrospection)
at System.Reflection.Assembly.InternalLoad(AssemblyName assemblyRef, Evidence assemblySecurity, StackCrawlMark& stackMark, Boolean forIntrospection)
at System.Reflection.Assembly.InternalLoad(String assemblyString, Evidence assemblySecurity, StackCrawlMark& stackMark, Boolean forIntrospection)
at System.AppDomain.Load(String assemblyString)
at Microsoft.Deployment.WindowsInstaller.CustomActionProxy.GetCustomActionMethod(Session session, String assemblyName, String className, String methodName)
5 ответов
Ну, мы наконец решили проблему, мы должны были установить:
useLegacyV2RuntimeActivationPolicy="true"
and
have both versions specified:
<supportedRuntime version="v2.0.50727"/>
and
<supportedRuntime version="v4.0"/>
Если просто "<supportedRuntime version="v4.0"/>
указано, не работает. Так выглядит баг в WIX 3.5 Beta
Просто мои два цента:
В отличие от Ngm мне нужно было только добавить supportRuntime для.NET 4.0
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<startup useLegacyV2RuntimeActivationPolicy="true">
<supportedRuntime version="v4.0" />
</startup>
</configuration>
Важный:
- Не переименовывайте CustomAction.config
- Установите действие сборки CustomAction.config в Content, иначе оно не будет работать
Существует открытая ошибка, чтобы настроить элемент DTF supportsRuntime в его манифесте для поддержки NETFX 4.0. Эта ошибка еще не исправлена, поэтому вам все еще нужно сделать это самостоятельно.
Спасибо за этот хороший пост. Это решило мой запрос. В моем случае ошибка была, я переименовал файл конфигурации и теперь восстановил его к оригинальному.
В дополнение к решению от Ngm нам пришлось установить целевую среду библиотеки управляемых пользовательских действий обратно на.NET 2.0, чтобы все заработало.