Подтвердить что ты не робот

Пользовательские действия WIX, созданные для .NET Framework 4.0, не работают? Способы решения?

Мы использовали WIX 3.5 (Build Number 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)
4b9b3361

Ответ 1

Ну, наконец, мы решили проблему, нам пришлось установить:

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​​p >

Ответ 2

Только мои два цента:

В отличие от Ngm мне нужно было добавить поддерживаемый режим Runtime для .NET 4.0

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
  <startup useLegacyV2RuntimeActivationPolicy="true">
    <supportedRuntime version="v4.0" />
  </startup>
</configuration>

Важно:

  • Не переименовывать CustomAction.config
  • Установите CustomAction.config. Создайте действие для содержимого, иначе он не будет работать.

Ответ 3

Существует ошибка, позволяющая настроить поддерживаемый DTF элемент Runtime в манифесте для поддержки NETFX 4.0. Эта ошибка еще не исправлена, поэтому вам все равно нужно сделать это самостоятельно.

Ответ 4

В дополнение к решению от Ngm нам пришлось установить целевую структуру управляемой пользовательской библиотеки классов действий обратно на .NET 2.0, чтобы заставить все работать.

Ответ 5

Спасибо за хороший пост. Он решил мой запрос. В моем случае была ошибка, я переименовал конфигурационный файл и теперь восстановил его до оригинала.