.csproj アセンブリの複数のヒントパス 質問する

.csproj アセンブリの複数のヒントパス 質問する

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>

複数の条件が一致する場合は、最後の条件が使用されます。

おすすめ記事