2

Entity Framework 4.1 を参照するデータベース アプリケーションがあります。プロジェクトのプロパティ ウィンドウで、構成プラットフォームの選択オプションの両方が無効になっています。このアプリケーションを x64 システムだけに限定したくはありません。

また、同じソリューションに他のプロジェクトがいくつかあり、プラットフォームとして x86 オプションしか使用できません。

x64 システムを具体的にターゲットにできなかった理由がわかりません。PCでWindows 7 64ビットを実行しています。

特に x64 ベースのシステムをターゲットにする方法の手がかり。すべてのプロジェクトは .Net Framework 4 を参照しています。

「Any CPU」オプションのみを示すプロジェクトのスクリーンショット

ここに画像の説明を入力

編集 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].

ここで間違っているかもしれませんが、x64 形式ではないため、Autocad x64 が dll を拒否しているのではないかと強く疑っています。問題の根本はautocadにdllをロードしているためです。Web を検索したところ、AutoCAD は x32 および x64 タイプについて非常にうるさいことがわかりました。Autocad プラグインを開発するためのネイティブ開発環境AutoCAD.netは、x32 および x64 タイプで別々に利用することもできます。x32 で開発されたプラグインが x64 タイプの Autocad バージョンで実行されるとは思いません。そのため、Autocad プラグインのターゲット プラットフォームについて具体的に説明する必要があります。

4

1 に答える 1

2

構成マネージャーには、ターゲットプラットフォームとしてx64を選択できる新しい構成を作成するオプションがあります。

AutoCAD 2012に関しては、プラットフォームの種類について非常に厳格です。64ビットのAutoCAD2012は、「任意のCPU」およびx64を対象としたプラグインを受け入れますが、x86は受け入れません。これは、x64システムでx86アプリケーションを実行できるという慣習から少し外れています。すべてのプロジェクトをx64にターゲティングし、エラーなしでAutoCADにロードしました。

だから私の質問は解決されました。

于 2012-12-02T16:58:34.680 に答える