Есть еще одно решение, которое предполагает небольшое редактирование вашего кода. Это описано в ответе от Милана Гардиана до этого вопроса .
В основном это включает в себя написание собственного обработчика ссылок на сборку, чтобы определить, какую сборку загружать во время выполнения, при условии, что у вас есть доступ к обеим (32- и 64-разрядным) версиям сборки. Я только что реализовал это решение сам, и оно работает как шарм.
Моя ситуация такова:
Я занимаюсь разработкой программы .NET, ориентированной на «Любой процессор» в 64-битной Windows 7. Я добавил ссылку на 32-разрядную сборку и установил для параметра «Копировать локально» значение false. Я использую события после сборки, чтобы скопировать 32- и 64-битную сборку в выходную папку, и я обязательно даю 32-битной сборке другое имя, чем в справочной. Это связано с тем, что я хочу заставить свой пользовательский распознаватель сборок включиться и сделать свое дело из-за того, что распознаватель сборок по умолчанию .NET не может разрешить ссылку. Во время выполнения правильная сборка загружается, а во время компиляции я не получаю ошибок. Следует отметить, что у меня не было времени, чтобы на самом деле подтвердить, что это сейчас работает на 32-битных ОС, но я не вижу причин, почему это не должно работать.