Настройка нацелена как на x86, так и на x64? - PullRequest
18 голосов
/ 15 апреля 2009

У меня есть программа, которая требует как x64, так и x86 dll (она выясняет, какие из них ей нужны во время выполнения), но при попытке создать установку выдает:

Файл AlphaVSS.WinXP.x64.dll, нацеленный на AMD64, не совместим с целевой платформой проекта x86
. Файл AlphaVSS.Win2003.x64.dll, нацеленный на AMD64, не совместим с целевой платформой проекта x86
. Файл AlphaVSS.Win2008.x64.dll, нацеленный на AMD64, не совместим с целевой платформой проекта x86

.

Как я могу настроить свою установку на обе платформы, как это делает моя программа?

Ответы [ 4 ]

11 голосов
/ 16 апреля 2009

MSI, созданный проектом установки (в Visual Studio), может одновременно работать только с одной платформой. Ваш вариант - сделать 2 MSI, объединить их и создать загрузочную ленту с пользовательской настройкой, которая будет выбирать между ними. Есть некоторые сторонние продукты, такие как Advanced Installer , например, которые могут сделать это для вас.

5 голосов
/ 05 июля 2011

Я тоже столкнулся с этим и написал в блоге о моем решении:

  • удалить файл с помощью deflate.exe, назвав его с другим расширением (например, .x64)
  • добавить его в основной проект в виде файла содержимого
  • добавить проект настраиваемого действия в ваше решение
  • добавить настраиваемое действие в установочные проекты. «Установить» настраиваемые действия.
  • накачать файл внутри пользовательских действий. Метод установки, используя
  • System.IO.Compression.DeflateStream (см. Код выше)
  • немного потанцуйте вокруг вашего стола, по коридору и пройдите столько коллег, сколько вы хотите раздражать:)

Файл deflate.exe можно загрузить из репозитория в коде Google.

1 голос
/ 15 апреля 2009

.Net имеет опцию «Любой процессор». Заманчиво думать об этом как о «общей» опции, которая будет использовать только меньшие возможности x86, но на самом деле она позволяет JIT-компилятору на каждой машине выбирать соответствующий тип процессора для этой машины.

Единственный раз, когда вы не должны его использовать, это если вы знаете, что у вас есть зависимости или требования, которые не подходят ни для одной архитектуры, ни для другой. Например: вы знаете, что вам нужен лот оперативной памяти, у вас есть зависимость от 32-битного собственного dll или вы хотите предварительно скомпилировать приложение.

Здесь есть опасность, потому что у вас есть зависимая от платформы dll-зависимость. Но у вас есть dll для обоих типов, и кажется, что вы знаете, как выбрать правильный во время выполнения. Так подойдет ли вам опция «Любой процессор»?

0 голосов
/ 21 декабря 2011
  1. Откройте проект развертывания.
  2. В обозревателе решений выберите проект развертывания.
  3. В окне «Свойства» выберите свойство TargetPlatform.
  4. Выберите Itanium для 64-разрядной платформы Intel Itanium или x64 для любой другой 64-разрядной платформы (например, наборы инструкций AMD64 и EM64T).
  5. Во время установки возникает ошибка, и установка будет остановлена, если целевой компьютер не совместим с указанной платформой.
...