служба Windows с 32-битными и 64-битными библиотеками - PullRequest
1 голос
/ 04 декабря 2009

У нас есть служба Windows, которая использует библиотеки DLL, созданные из множества различных проектов .NET. Один из этих проектов имеет зависимость от DLL, которая была скомпилирована на 32-битной машине.

Мы только что перевели службу Windows на 64-битную машину. По умолчанию .NET-проекты пытаются работать как 64-битная сборка (потому что они выполняются на 64-битной машине). Тем не менее, я могу заставить отдельные проекты работать как 32-битная сборка, указав в качестве цели платформы значение «x86», а не «любой процессор».

Мой вопрос: все ли проекты .NET нужно принудительно запускать как 32-битную сборку? Можно ли запускать 32-битные и 64-битные сборки вместе?

Ответы [ 2 ]

1 голос
/ 04 декабря 2009

Я думаю, что пока вы не используете собственные модули или что-то еще, вы, вероятно, в порядке, хотя в вашем коде все еще могут быть ошибки, если вы принимаете размер указателя и т. Д. В любом месте.

"Если у вас 100% безопасный код управляемого типа, тогда вы действительно можете просто скопировать его на 64-битную платформу и успешно запустить под 64-битным CLR."

http://www.hanselman.com/blog/CommentView.aspx?guid=4099df2d-ef01-4f70-a7f7-829eabc36afc

0 голосов
/ 04 декабря 2009

Если на неуправляемых библиотеках нет небезопасного кода и / или ссылок, вы можете безопасно скомпилировать все с целевым Любым ЦП.

В результате компиляция становится независимой от процессора - итоговый IL - JIT - компилируется CLR на целевой машине, какой бы она ни была.

Если блок представляет собой 64-битный блок, он будет скомпилирован 64-битным CLR в набор 64-битных инструкций и будет успешно работать в собственном 64-битном режиме

...