Если на моем ноутбуке x64 установить целевой платформу x86, некоторые типы WPF не будут загружаться должным образом - PullRequest
2 голосов
/ 12 октября 2010

У меня машина x64 под управлением Windows 7 64 бит. Кажется, у меня очень странная ситуация с начала недели.

Если я создаю и запускаю приложение WPF с целевым назначением платформы x86, я получаю исключение MissingMethodException при попытке создать сетку:

var g = new Grid();

Однако создание StackPanel работает нормально:

var s = new StackPanel();

Если я переключу целевую платформу на x64 или AnyCpu, оба кода будут работать нормально. Я думал о поврежденной сборке в фреймворке, но она выглядит определенно странно ... Есть идеи?

Обновление:

Я общался с людьми из команды WPF внутри Microsoft. Однако у них не было времени посмотреть на мою машину, чтобы понять, что случилось. Тем временем мне пришлось переустанавливать свою машину, чтобы продолжать работать должным образом. Спасибо за вашу помощь. Я думаю, что проблема была связана с функциональностью WOW64, но трудно быть более точным. Я обновлю этот вопрос, если найду больше информации.

Ответы [ 2 ]

4 голосов
/ 20 октября 2010

Установка целевой платформы на x86 приведет к тому, что ваше приложение будет вызывать версии x86 на неуправляемых сборках и работать в режиме WOW64.См. эту статью о целевой платформе и эту страницу MSDN на WOW64 .Если вы отслеживаете статический конструктор Grid в Reflector , похоже, что некоторый код инициализации потока вызывает внешнюю неуправляемую функцию «RuntimeHelpers.PrepareConstrainedRegions ()», которая может вызывать проблему (StackPanel не вызывает этот код).За этим стоит немало предположений, но вы можете попробовать запустить Центр обновления Windows, чтобы убедиться, что у вас есть те же обновления, что и у вашего коллеги, и убедиться, что у вас также есть все обновления VS / .NET.

В конечном счете, если вы не вызываете неуправляемые dll сторонних производителей из своего кода, которые доступны только в виде сборок x86, вам, вероятно, следует оставить целевой объект платформы как Любой ЦП, чтобы он работал на платформе x86 и x64.

И наконец, если после запуска обновления Windows вы все еще видите проблему, по возможности обновите также компьютер вашего коллеги и посмотрите, возникнет ли проблема.Если это так, это может быть ошибка в слое WOW64, и было бы хорошо подать отчет об ошибке в Microsoft .

4 голосов
/ 15 октября 2010

У меня также есть эта конфигурация, и у меня не возникло проблем с созданием приложения x86, использующего Grid.

Я бы удалил версию .NET Framework, которую вы используете (похоже на .NET4.0) и переустановите его. Чтобы быть точным, вы также можете удалить Visual Studio 2010 и переустановить его (хотя это, вероятно, излишне).

Проблема должна существовать только на машине, на которой вы работаете... иначе были бы мобы, вилы и прочее ... направлялись в Редмонд, Вашингтон.:-) Вы можете попробовать создать пример проекта на другом компьютере ... просто для вашего здравого смысла.: -)

Обновление

Я просто хотел добавить, что System.Windows.Controls.Grid находится в сборке PresentationFramework.Может быть интересно взглянуть на то, где этот файл хранится на вашем компьютере ... чтобы увидеть, заметили ли вы что-нибудь.Решение все еще, вероятно, переустанавливается ... но, эй, больше информации всегда лучше.

Для .NET 4.0 сборка PresentationFramework находится по адресу: C: \ Windows \ Microsoft.NET \ assembly \ GAC_MSIL \ PresentationFramework \v4.0_4.0.0.0__31bf3856ad364e35

Для .NET 3.0 / 3.5 сборка PresentationFramework находится по адресу: C: \ Program Files \ Reference Assemblies \ Microsoft \ Framework \ v3.0

...