Я новичок в создании приложений .NET, особенно смешанных приложений.
Недавно я создал набор (статических) библиотек для клиента на (неуправляемом) C++ (под MS Visual Studio 2010), поддерживающих как 32-битные, так и 64-битные компиляции, которые загружались некоторыми приложениями, и которые в целом были в порядке . (Внутри эта функциональность использует различные сторонние библиотеки, такие как OpenGL, boost, glm и т. д.)
Теперь он хотел бы также иметь возможность использовать некоторые функции, которые я предоставил в качестве пользовательского элемента управления в своем приложении C#.
Итак, я создал dll с поддержкой CLR, используя C++/CLI для создания классов-оболочек для моей функциональности, затем перешел к созданию пользовательского элемента управления WPF, который является общедоступным (и, следовательно, к нему можно получить доступ извне). 32 и 64 бит.
Затем для тестирования я создал простое приложение на C# (и оно действительно довольно простое, так как я новичок в C#, мой опыт — C/C++), которое может быть построено на 32 или 64 битах и может успешно загружать элемент управления из моей DLL. и делать то, что от него ожидается.
Проблема, с которой я теперь столкнулся, заключается в том, что он сказал, что хочет иметь возможность распространять только один исполняемый файл как «любой процессор», который затем должен загружать соответствующий код (т.е. 32- или 64-битный) в зависимости от того, где он запущен.
Итак, что я сделал, так это добавил конфигурацию «Любой ЦП» в тестовый проект С# и установил «целевую платформу» на вкладке «Сборка» на «Любой ЦП». Но теперь я не уверен в диспетчере конфигураций, какую платформу установить для других проектов (например, статические библиотеки C++, используемые dll смешанного режима C++/CLI). Поэтому для тестирования я оставил его на x64, но когда я его соберу, я получаю предупреждение:
Warning MSB3270: There was a mismatch between the processor architecture of the project being built "MSIL" and the processor architecture of the reference "(name of my 64 bit dll)", "AMD64". <br />
This mismatch may cause runtime failures. Please consider changing the targeted processor architecture of your project through the Configuration Manager so as to align the processor architectures between your project and references, or take a dependency on references with a processor architecture that matches the targeted processor architecture of your project.
Однако он работает нормально, хотя и выдает мне это предупреждение. Я получаю такое же предупреждение, когда устанавливаю для других своих проектов значение «Win32», просто упоминая вместо этого «x86», но в этом случае при запуске возникает исключение, говорящее: «В PresentationCore.dll произошло необработанное исключение типа« System.BadImageFormatException ». "
Так что мне нужно изменить его на? Как я могу заставить его загрузить исполняемый файл, а затем решить, какую DLL загрузить? Я действительно не уверен, как действовать и заставить его работать так, как меня просили.