Как потребовать x86 для цепочки зависимостей .NET при сборке

StackOverflow https://stackoverflow.com/questions/562756

Вопрос

У нас есть несколько проектов, которые используют p4.net, управляемая DLL, которая, в свою очередь, зависит от p4dn.dll, 32-разрядной неуправляемой DLL.Это вызывает проблемы в системах x64, поэтому мне приходилось заходить в каждый проект, использующий p4.net, и устанавливать тип процессора x86.

Если я правильно понимаю проблему, то когда .NET загружает exe-файл, он проверяет наличие манифеста, а если его нет, то делает то, что лучше всего подходит для типа процессора.Затем, когда он сталкивается с 32-битной dll, его рвет.

Я могу перейти к каждому проекту, использующему p4.net, и пометить его как 32-битный.Но у нас их довольно много.Кроме того, люди будут продолжать создавать новые и забудут установить 32-битную версию, а затем в будущем у нас снова возникнет эта проблема, когда кто-то еще попытается использовать ее на x64.

Мой вопрос таков:Есть ли способ заставить .NET автоматически загружать любое приложение, использующее p4dn.dll как 32-битное?В противном случае есть ли способ, чтобы IDE обнаружила это и не смогла выполнить сборку?

Или можно ли создать файл .manifest, который я могу поместить рядом с p4api или p4dn.dll, чтобы любые приложения, использующие их, автоматически запускались в 32-битной версии?

Это было полезно?

Решение

Если у вас нет другого выбора, вы можете использовать корфлаги как часть сценария автоматической сборки, чтобы пометить все библиотеки DLL .NET как x86 – corflags /32bit+ file.dll.Хотя я считаю, что правильное образование разработчиков — более адекватное решение.

Другие советы

CLR проверяет тип платформы, только если загружает сборку из GAC.Я предполагаю, что p4dn.dll находится в корневой папке приложения, поэтому я думаю, что вы ошибаетесь в своей логике.

Похоже, что p4dn.dll нельзя использовать, если он работает в режиме WoW64, а ваше приложение изначально работает в режиме x64.Я думаю, что лучший способ — скомпилировать весь ваш проект, ориентированный на платформу x86 (32).Или разбить его на части, чтобы вызывающая программа p4dn.dll всегда работала в режиме WoW64.

Кроме того, вам следует связаться с разработчиками p4net, чтобы добавить полную поддержку платформы x64.

Я не знаю способа сделать это автоматически.Я бы рекомендовал вам сделать следующее:

  • Обучайте своих разработчиков,
  • Добавьте эту тему в свою внутреннюю базу знаний и
  • Добавьте платформы x64 в свои тестовые среды.

Кроме того, вы можете подумать о написании надстройки VS, которая проверяет правильную целевую платформу.Но тогда может быть и динамическое создание COM-компонентов...

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top