Как требовать x86 вверх по цепочке зависимостей.NET при сборке
У нас есть несколько проектов, в которых используется 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 ответа
Если у вас нет другого выбора, вы можете использовать corflags как часть сценария автоматической сборки, чтобы пометить все библиотеки.NET как x86 - corflags /32bit+ file.dll
, Хотя я считаю, что правильное обучение разработчиков является более адекватным решением.
CLR проверяет тип платформы только в том случае, если загружает сборку из GAC. Я думаю, что p4dn.dll содержится в корневой папке приложения, поэтому я думаю, что вы ошибаетесь в своей логике.
Кажется, что p4dn.dll нельзя использовать, когда он работает в режиме WoW64, а ваше приложение работает в режиме x64. Я думаю, что лучший способ - это скомпилировать весь ваш проект на платформе x86 (32). Или разбейте его на части, чтобы вызывающий p4dn.dll всегда работал в режиме WoW64.
Кроме того, вы должны связаться с разработчиками p4net, чтобы добавить полную поддержку платформы x64.
Я не знаю ни одного способа сделать это автоматически. Я бы порекомендовал вам сделать следующее:
- Обучите своих разработчиков,
- Добавьте эту тему в свою внутреннюю базу знаний и
- Добавьте платформы x64 в свои тестовые среды
Кроме того, вы можете написать надстройку VS, которая проверяет правильность целевой платформы. Но тогда может быть динамическое создание компонентов COM, тоже...