SDK 配布用のサンプル コードをパッケージ化しています。配布では、コードから SDK アセンブリへの相対パスがビルド マシンと異なります。例:
分布
csharp/bin/assembly.dll
example/ex1/ex1.csproj
マシンを構築する
foo/sdk/csharp/bin/assembly.dll
bar/baz/quux/ex1/ex1.csproj
何も動かせないと仮定します。ex1.csproj
両方を見るように指示する方法はありますか?
../../csharp/bin/
そして ../../../../foo/sdk/csharp/bin/
のためにassembly.dll
?
C++ では、依存パスをスタンドアロンのプロパティ シートに配置し、SDK で別のバージョンを配布します。しかし、C# にはプロパティ シートがないため、完全なプロジェクトの 2 つのバージョンを維持したくありません。
私は見たこの質問複数のタグを使用できないと記載されている<HintPath>
ため、同じ動作を近似する別の方法を探しています。
ベストアンサー1
使用できる HintPath は 1 つだけなので、最も簡単な方法は、次のように非常に便利な Condition 属性を使用することです。
<Reference Include="TheAssembly">
<HintPath Condition="Exists('..\My\Assembly\Path')">..\My\Assembly\Path\TheAssembly.dll</HintPath>
<HintPath Condition="Exists('..\..\My\Assembly\Path')">..\..\My\Assembly\Path\TheAssembly.dll</HintPath>
<HintPath Condition="Exists('..\..\..\My\Assembly\Path')">..\..\..\My\Assembly\Path\TheAssembly.dll</HintPath>
<HintPath Condition="Exists('..\..\..\..\My\Assembly\Path')">..\..\..\..\My\Assembly\Path\TheAssembly.dll</HintPath>
<HintPath Condition="Exists('..\..\..\..\..\My\Assembly\Path')">..\..\..\..\..\My\Assembly\Path\TheAssembly.dll</HintPath>
<HintPath Condition="Exists('..\..\..\..\..\..\My\Assembly\Path')">..\..\..\..\..\..\My\Assembly\Path\TheAssembly.dll</HintPath>
<HintPath Condition="Exists('..\..\..\..\..\..\..\My\Assembly\Path')">..\..\..\..\..\..\..\My\Assembly\Path\TheAssembly.dll</HintPath>
etc...
</Reference>
したがって、質問に対する答えは次のようになります。
<Reference Include="assembly">
<HintPath Condition="Exists('..\..\csharp\bin')">..\..\csharp\bin\assembly.dll</HintPath>
<HintPath Condition="Exists('..\..\..\..\foo\sdk\csharp\bin')">..\..\..\..\foo\sdk\csharp\bin\assembly.dll</HintPath>
</Reference>
複数の条件が一致する場合は、最後の条件が使用されます。