Как требовать x86 вверх по цепочке зависимостей .NET при сборке - PullRequest
3 голосов
/ 18 февраля 2009

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

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

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

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

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

Ответы [ 3 ]

2 голосов
/ 19 февраля 2009

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

1 голос
/ 18 февраля 2009

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

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

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

0 голосов
/ 18 февраля 2009

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

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

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

...