Ориентация на платформу x64 с Entity Framework 4.1 в Visual Studio 2010

У меня есть приложение базы данных, которое ссылается на Entity Framework 4.1. В окне свойств проекта отключены параметры выбора Конфигурация и Платформа. Я не хочу нацеливать это приложение только на системы x64.

Также в том же решении есть несколько других проектов, и в качестве платформы для них доступен только вариант x86.

Я не понимаю, почему я не мог специально ориентироваться на системы x64. У меня на компьютере работает 64-разрядная версия Windows 7.

Любые подсказки, как ориентироваться конкретно на системы на базе x64. Все проекты ссылаются на .Net Framework 4.

Снимок экрана проекта, показывающий только вариант «Любой процессор».

введите описание изображения здесь

Редактировать 1. Зачем нужно настраивать таргетинг на системы x64.

Собственно, разрабатываемые мной dll придется загружать в системы Autocad x64. Но когда я пытаюсь загрузить dll в Autocad, он отклоняет dll со следующей ошибкой

NETLOAD Cannot load assembly. Error details: System.BadImageFormatException: 
Could not load file or assembly 
'file:///D:\RailwayProjects\RelayAnalysis_New\RelayAnalysis_Autocad\bin\Debug\Gl
obalArea.dll' or one of its dependencies. An attempt was made to load a program 
with an incorrect format.
File name: 
'file:///D:\RailwayProjects\RelayAnalysis_New\RelayAnalysis_Autocad\bin\Debug\Gl
obalArea.dll'
   at System.Reflection.RuntimeAssembly._nLoad(AssemblyName fileName, String 
codeBase, Evidence assemblySecurity, RuntimeAssembly locationHint, 
StackCrawlMark& stackMark, Boolean throwOnFileNotFound, Boolean 
forIntrospection, Boolean suppressSecurityChecks)
   at System.Reflection.RuntimeAssembly.InternalLoadAssemblyName(AssemblyName 
assemblyRef, Evidence assemblySecurity, StackCrawlMark& stackMark, Boolean 
forIntrospection, Boolean suppressSecurityChecks)
   at System.Reflection.RuntimeAssembly.InternalLoadFrom(String assemblyFile, 
Evidence securityEvidence, Byte[] hashValue, AssemblyHashAlgorithm 
hashAlgorithm, Boolean forIntrospection, Boolean suppressSecurityChecks, 
StackCrawlMark& stackMark)
   at System.Reflection.Assembly.LoadFrom(String assemblyFile)
   at Autodesk.AutoCAD.Runtime.ExtensionLoader.Load(String fileName)
   at loadmgd()
WRN: Assembly binding logging is turned OFF.
To enable assembly bind failure logging, set the registry value 
[HKLM\Software\Microsoft\Fusion!EnableLog] (DWORD) to 1.
Note: There is some performance penalty associated with assembly bind failure 
logging.
To turn this feature off, remove the registry value 
[HKLM\Software\Microsoft\Fusion!EnableLog].

У меня есть сильное подозрение, что Autocad x64 отклоняет dll, потому что она не в формате x64, хотя я могу ошибаться здесь. Итак, теперь я расширяю сферу своего вопроса, чтобы включить AutoCAD, поскольку корень проблемы заключается в загрузке dll в autocad. Я поискал в Интернете и обнаружил, что AutoCAD очень требователен к типам x32 и x64. Собственная среда разработки AutoCAD.net для разработки подключаемых модулей Autocad также доступна отдельно для типов x32 и x64, и я не думаю, что подключаемые модули, разработанные с использованием x32, будут работать в версиях Autocad типа x64 и наоборот. наоборот. Итак, мне нужно уточнить целевую платформу для плагинов Autocad.


person Jatin    schedule 01.12.2012    source источник
comment
Почему вы хотите это сделать? Если ваша сборка не зависит от платформы (как и EntityFramework, поскольку это чистый IL), она может работать как в 64-битных, так и в 32-битных процессах. Поскольку IL компилируется во время выполнения, когда код выполняется впервые, он ведет себя так, как если бы он был написан для этой платформы. Опять же, мне интересно, что вы купите, установив платформу на x64.   -  person Pawel    schedule 01.12.2012
comment
Я отредактировал вопрос, чтобы указать причину, по которой я конкретно говорю о платформе таргетинга.   -  person Jatin    schedule 02.12.2012


Ответы (1)


В Configuration Manager есть возможность создать новую конфигурацию, в которой мы можем выбрать x64 в качестве целевой платформы.

Что касается AutoCAD 2012, он очень строго относится к типу платформы. 64-разрядная версия AutoCAD 2012 принимает подключаемые модули, ориентированные на «Любой ЦП» и x64, но не на x86. Это немного отличается от соглашения, согласно которому мы можем запускать приложения x86 в системах x64. Я нацелил все свои проекты на x64 и без ошибок загрузил их в AutoCAD.

Итак, мой вопрос решен.

person Jatin    schedule 02.12.2012
comment
Это связано с тем, что в Windows 64-битные процессоры могут эмулировать 32-битные процессоры (так называемая Windows в Windows), но 32-битные процессоры, очевидно, не могут эмулировать 64-битные процессоры. Поэтому вы можете запускать 32-битные приложения на 64-битных процессорах. Любой процессор работает для чистого IL, поскольку он компилируется во время выполнения в зависимости от того, какую архитектуру вы используете. Если у вас есть PInvoke или смешанный код (собственный и управляемый) в одной сборке, вам необходимо скомпилировать его для конкретной платформы. - person Pawel; 03.12.2012