Reputation: 7355
In visual studio when you add a reference to an existing project in your solution in the .csproj file it ends up like so:
<ProjectReference Include="..\TestProject2\TestProject2.csproj">
<Project>{15EC8369-B0C5-4F71-A366-19042F450A2D}</Project>
<Name>TestProject2</Name>
</ProjectReference>
If I add a reference to an assembly DLL via EnvDTE:
var p = _project as VsProject;
p.References.Add(<path to assembly DLL>);
it ends like this:
<Reference Include="TestProject2.csproj">
<HintPath>..\TestProject2\bin\Debug\TestProject2.csproj.dll</HintPath>
</Reference>
This is not so great because if I switch to a Release build it will still reference the debug assembly. Another problem is that I have to build the referenced assembly before I can add it as a reference. With Visual Studio UI I can add a reference to an unbuilt project.
Is it possible via the EnvDTE API to add a project reference?
I know I can manipulate the .csproj file as an XML document and do whatever I want, but since I started on the path on EnvDTE I would prefer to stick to it.
Upvotes: 2
Views: 7231
Reputation: 31
What worked for me is to formulate references this way:
<Reference
Include="MyDll"
Condition=" '$(Configuration)|$(Platform)' == 'Debug|x86' ">
<HintPath>..\..\somePath\Debug\myDll.dll</HintPath>
</Reference>
<Reference
Include="MyDll"
Condition=" '$(Configuration)|$(Platform)' == 'Release|x86' ">
<HintPath>..\..\somePath\Release\myDll.dll</HintPath>
</Reference>
This way, the release build references release dependency, and debug build references Debug. Of course, x86/x64 can also be handled if necessary. This was for a 32-bit app.
Upvotes: 0
Reputation: 28386
It looks like the References interface has an AddProject method which handles project-to-project refrences.
Upvotes: 6