Welcome to ShenZhenJia Knowledge Sharing Community for programmer and developer-Open, Learning and Share
menu search
person
Welcome To Ask or Share your Answers For Others

Categories

I'm packaging example code for an SDK distribution. In the distribution, the relative path from code to the SDK assemblies is different from the build machine. For example:

Distribution

csharp/bin/assembly.dll
example/ex1/ex1.csproj

Build Machine

foo/sdk/csharp/bin/assembly.dll
bar/baz/quux/ex1/ex1.csproj

Assume that I can't move anything. Is there a way I can instruct ex1.csproj to look in both

../../csharp/bin/ and ../../../../foo/sdk/csharp/bin/ for assembly.dll?

In C++ I'd put the dependency path in a standalone property sheet and distribute a different version with the SDK. But C# doesn't have property sheets, and I don't want to maintain two versions of the full project.

I've seen this question which states that I can't use multiple <HintPath> tags, so I'm looking for another way to approximate the same behavior.

See Question&Answers more detail:os

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
thumb_up_alt 0 like thumb_down_alt 0 dislike
639 views
Welcome To Ask or Share your Answers For Others

1 Answer

The simplest way since only ONE HintPath can be used is to use the all-so-nice Condition attribute like this:

<Reference Include="TheAssembly">
    <HintPath Condition="Exists('..MyAssemblyPath')">..MyAssemblyPathTheAssembly.dll</HintPath>
    <HintPath Condition="Exists('....MyAssemblyPath')">....MyAssemblyPathTheAssembly.dll</HintPath>
    <HintPath Condition="Exists('......MyAssemblyPath')">......MyAssemblyPathTheAssembly.dll</HintPath>
    <HintPath Condition="Exists('........MyAssemblyPath')">........MyAssemblyPathTheAssembly.dll</HintPath>
    <HintPath Condition="Exists('..........MyAssemblyPath')">..........MyAssemblyPathTheAssembly.dll</HintPath>
    <HintPath Condition="Exists('............MyAssemblyPath')">............MyAssemblyPathTheAssembly.dll</HintPath>
    <HintPath Condition="Exists('..............MyAssemblyPath')">..............MyAssemblyPathTheAssembly.dll</HintPath>
    etc...
</Reference>

So the answer to the question would be this:

<Reference Include="assembly">
    <HintPath Condition="Exists('....csharpin')">....csharpinassembly.dll</HintPath>
    <HintPath Condition="Exists('........foosdkcsharpin')">........foosdkcsharpinassembly.dll</HintPath>
</Reference>

If multiple conditions matches, the last one will be used.


与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
thumb_up_alt 0 like thumb_down_alt 0 dislike
Welcome to ShenZhenJia Knowledge Sharing Community for programmer and developer-Open, Learning and Share
...