プラットフォームターゲットがx86に設定されていない場合、どのようにコンパイラエラーを生成できますか?プラットフォームターゲットがx86でない場合コンパイラエラーを生成します
動機づけ:特定のメソッドは、32ビットのCOM DLLを動的にロードします。プロジェクトが "x64"または "Any CPU"用に構築され、64ビット環境で実行されている場合、COMオブジェクトの自然なロードは実行時に失敗します。私はコンパイル時のチェックを行い、これが起こり得ないことを確認します。
これは、32ビットを必要とするソースファイル内に完全にカプセル化されたプロジェクト設定の安全性チェックを目的としています。だから私は、プロジェクト設定で条件付きコンパイルシンボルを定義する必要がある解決策(例えばthisなど)を受け入れることができません。あなたがこれを行うにはロスリン診断分析器を書き込むことができます
#if PLATFORM_X86
#error Target platform needs to be x86!
#endif
これはXYの問題のようです。 COM +(DCOM)を介して専用のサーバープロセスでCOMコンポーネントをホストすることをお勧めします。こうすることで、コンポーネントの周りに 'dllhost'プロセスが起動し、呼び出しをマーシャリングします。これらはクロスプロセスコールなので、C#プロジェクトのビット数はそれ以上重要ではありません。 –
@FrédéricHamidiそれを提案してくれてありがとう。これは私が避けたかったものです。これを64ビットで実行する利点はありません。 –
[ここ](http://www.hanselman.com/blog/BackToBasics32bitAnd64bitConfusionAroundX86AndX64AndTheNETFrameworkAndCLR.aspx)の説明に従って、IntPtr.Sizeを評価することができます。 –