.csproj multiple hint paths for an assembly
c#, csproj, msbuild, visual-studio-2010
Solution
I found a hacky solution that works for my case, where the parent directory is guaranteed to be different somewhere up the tree:
<Choose>
<When Condition="Exists('$(MSBuildProjectDirectory)\..\..\example')">
<ItemGroup>
<Reference Include="Assembly ...">
<HintPath>..\..\csharp\bin\assembly.dll</HintPath>
</Reference>
</ItemGroup>
</When>
<Otherwise>
<ItemGroup>
<Reference Include="Assembly ...">
<HintPath>..\..\..\..\..\foo\sdk\csharp\bin\assembly.dll</HintPath>
</Reference>
</ItemGroup>
</Otherwise>
</Choose>
Problem
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.