none
C#のターゲットプラットフォームごとに参照アセンブリを変更させる方法 RRS feed

  • 質問

  • Visual C++ 2008のC++/CLIで開発した、アンマネージコードが含まれる.NET Framework用のDLLを開発しました。このDLLにはx86版とx64版の2種類あるのですが、これをVisual C# 2008プロジェクトの「参照設定→参照の追加」だとDLLのいずれかひとつしか登録できないため、このままではプラットフォームを切り替えるたびにアセンブリ参照の削除や追加を繰り返さなければいけません。

    コンパイルの対象となるプラットフォーム単位で、アセンブリの参照先を自動的に適切なものに切り替える方法はありませんでしょうか。
    2009年12月11日 11:03

回答

  • x86/x64ではなくx86/AnyCPUの切り替えテストではとりあえず出来ました。

    プロジェクトの参照情報はプロジェクトファイル(*.csproj)のItemGroup-Reference要素で定義されています。
    通常では設定変更できないのでプロジェクトファイルをXMLファイルとして直接書き換えてしまいます。

    このReference要素にはCondition属性をつけることが可能で、ビルドの構成やプラットフォームを条件に出来ます。
    x64にみ参照する場合は「Condition=" '$(Platform)' == 'x64' "」といった感じです。
    参照するdllはHintPath要素でパスが指定できるので、これを書き換えます。
    あとは同様にCondition属性が異なるReference要素を必要なだけ複製して設定してやりました。
    • 回答としてマーク Tank2005 2009年12月15日 7:03
    2009年12月11日 15:31

すべての返信

  • x86/x64ではなくx86/AnyCPUの切り替えテストではとりあえず出来ました。

    プロジェクトの参照情報はプロジェクトファイル(*.csproj)のItemGroup-Reference要素で定義されています。
    通常では設定変更できないのでプロジェクトファイルをXMLファイルとして直接書き換えてしまいます。

    このReference要素にはCondition属性をつけることが可能で、ビルドの構成やプラットフォームを条件に出来ます。
    x64にみ参照する場合は「Condition=" '$(Platform)' == 'x64' "」といった感じです。
    参照するdllはHintPath要素でパスが指定できるので、これを書き換えます。
    あとは同様にCondition属性が異なるReference要素を必要なだけ複製して設定してやりました。
    • 回答としてマーク Tank2005 2009年12月15日 7:03
    2009年12月11日 15:31
  • csprojの中身を直接書き換えてコンパイルしてみたところ、正常にプログラムが動くようになりました。アドバイスありがとうございました。
    2009年12月15日 7:03