Import
を複数のC#プロジェクトにするカスタムMSBuildスクリプトを作成しています。スクリプトは、Platform
プロパティに基づいてコピーするいくつかのプロパティ、参照、およびファイルを追加して、最終出力がネイティブバイナリのセットを活用できるようにします。言い換えれば、適切なネイティブ・バイナリのセットとそのプラットフォームに基づく関連データを選択します。サポートされていないプラットフォームでエラーを発生させる
私は現在、このような何かをやっている:プロジェクトが(例えば、任意のCPUなど)未サポートのプラットフォームで構築されている場合
<PropertyGroup Condition="'$(Platform)' == 'x86'">
<bin1>..\..\lib\mybinaries\x86\bin1.dll</bin1>
<bin2>..\..\lib\mybinaries\x86\bin2.dll</bin2>
</PropertyGroup>
<PropertyGroup Condition="'$(Platform)' == 'x64'">
<bin1>..\..\lib\mybinaries\x64\bin1.dll</bin1>
<bin2>..\..\lib\mybinaries\x64\bin2.dll</bin2>
</PropertyGroup>
<ItemGroup>
<Reference Include="bin2.dll">
<SpecificVersion>False</SpecificVersion>
<HintPath>$(bin2)</HintPath>
<Private>True</Private>
</Reference>
</ItemGroup>
<ItemGroup>
<None Include="$(bin1)">
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
</None>
</ItemGroup>
、私はビルドはエラーが発生します。これどうやってするの?
ビルドターゲットの外でエラーを発生させる方法があるか調べましたが、見つけられませんでした。私が見つけたとしても、開発者がどうにかしてサポートされていないプラットフォームを選んだら、どうなるのか心配です。
BeforeBuild
ターゲットをオーバーライドすることはできますが、このファイルをインポートするC#プロジェクトがそのターゲット自体をオーバーライドすると、これが壊れてしまいます(Visual Studioなどでプロジェクトを開くことが拒否される可能性があります)。 (Import
と<Target Name="BeforeBuild">
の順番に応じて、自分自身をオーバーライドします)。その場合、エラーは発生しません。これはかなり壊れやすく、堅牢ではありません。
これをどのようにしてユーザーが壊れにくいようにすることができますか?あるいは、条件付きでバイナリを含めることができる、まったく異なる代替アプローチがありますか?
だたぶん、あなたは 'のようなもの<ターゲット名= "MyPlatformCheck" BeforeTargets = "ビルド"/>'を探していますか?これはビルド前に実行され、組み込みのmsbuild機能とカスタム名を使用するので、オーバーライドするのが難しくなります。たとえば、より良いターゲットを使用することができます。 'PrepareBuild'かどうかはわかりませんが、私は頭の上からそれらを知らないのです。 – stijn
@stijnビルドを行うことが可能であるかどうかはわかりませんでした。それを答えにすることができれば、私はそれを受け入れます。 – jpmc26