4

デバッグ/リリースビルドと32ビットおよび64ビットビルドを作成するために、アプリでいくつかの構成があります。32ビットと64ビットのビルドでは、異なるdll(つまり、x86でビルドしたものとx64でビルドしたもの)を参照する必要がありますが、参照はプロジェクトにとってグローバルであり、構成に依存しないようです。現在、32ビットから64ビットビルドに切り替えるとき(およびその逆の場合)は、常に参照を交換する必要があります。さまざまな構成に対してさまざまな参照を実現するための適切な方法は何ですか?

4

3 に答える 3

2

これは、プロジェクト ファイルを少し手動で操作することで実行できます。

まず、プロジェクトを右クリックし、Unload Projectをクリックする必要があります。次に、もう一度右クリックしてEdit [project name]を選択します。

エディターに読み込まれると、参照用のさまざまなエントリが表示されます。

<ItemGroup>
    <Reference Include="System.Xml" />
    <Reference Include="WindowsBase">
        <RequiredTargetFramework>3.0</RequiredTargetFramework>
    </Reference>
    <Reference Include="PresentationCore">
        <RequiredTargetFramework>3.0</RequiredTargetFramework>
    </Reference>
    <Reference Include="PresentationFramework">
        <RequiredTargetFramework>3.0</RequiredTargetFramework>
    </Reference>
    <Reference Include="Microsoft.Practices.ServiceLocation, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL">
        <SpecificVersion>False</SpecificVersion>
        <HintPath>..\Common\Lib\3rdParty\Prism\4.0\Desktop\Microsoft.Practices.ServiceLocation.dll</HintPath>
    </Reference>
</ItemGroup>

これらはItemGroupノード内にあることに注意してください。ちょっとした魔法を実行できます...ビルド構成が特定のビット数である場合にのみ使用されるように、式を ItemGroup に追加します。

<ItemGroup Condition="'$(Configuration)|$(Platform)' == 'Release|x86'">
    <!-- these are the references used when there is a Release x86 build -->
    <Reference Include="System.Xml" />
</ItemGroup>

UI からこれを行う方法はないため、これらの参照リストを手動で管理する必要があることに注意してください (たとえば、別の参照を追加する必要がある場合)。

また、これはハックではないことに注意してください... MSBuild の機能の1 つを利用しているだけです(VS がプロジェクトのビルドに使用します)。これらのItemGroupリストは、好きな式を使用して好きなだけ持つことができます。式がない場合は、常にビルドに含まれます。

于 2013-03-04T11:11:42.130 に答える
1

csproj の任意のセクションを構成および/またはプラットフォームで条件付きにすることができるため、参照を別のセクション内に配置できます。VS は再構築が必要かどうかを確認できないため、変更がなくても毎回再構築が強制されると思います。問題にはならないかもしれませんが、コンパイル時間が長くなります。

例えば

<ItemGroup Condition=" '$(Platform)' == 'x86' " >
    <Reference ...86bit DLL... >
</ItemGroup>
<ItemGroup Condition=" '$(Platform)' == 'x64' " >
    <Reference ...64bit DLL... >
</ItemGroup>

署名に何も変更がない場合は、代わりに参照のヒントパスを条件付きにすることもできると思いますが、思い出せません。

于 2013-03-04T11:05:58.603 に答える
0

ランタイムアセンブリバインディングの使用を検討してください

http://msdn.microsoft.com/en-us/library/twy1dw1e.aspx

これにより、アセンブリがセットアップに基づいてバインディングで定義されたものに置き換えられます。

于 2013-03-04T11:14:56.387 に答える