Visual Studio Project: How to include a reference for one configuration only?
Solution 1
Unload the project and open it as .XML
Locate the reference item tag and add a Condition attribute.
For instance:
<ItemGroup>
<Reference Include="System.Core">
<RequiredTargetFramework>3.5</RequiredTargetFramework>
</Reference>
<Reference Include="System.Data" />
<Reference Include="System.Drawing" />
<Reference Include="System.Xml" />
<Reference Include="MyUtilities.Debug"
Condition="'$(Configuration)'=='Debug'"/>
</ItemGroup>
Notice the last reference now has a condition.
Solution 2
I know this is an old post, but in case anyone else finds it before they find the answer, like I did, it's this: you need to use the "Choose" element in the project file:
You can define both conditional references and conditional compilation in one place, so you don't have to use #if's in your code.
It works in SharpDevelop, and since it's MS's documentation I assume it works in Visual Studio.
Solution 3
The following, in the csproj file references itemgroup works in vs 2008 for me:-
<Reference Include="DRLClasses, Version=1.0.0.0, Culture=neutral, processorArchitecture=MSIL" Condition=" '$(Configuration)' == 'Debug' ">
<SpecificVersion>False</SpecificVersion>
<HintPath>..\..\..\..\Visual Studio User Library\Debug\DRLClasses.dll</HintPath>
</Reference>
<Reference Include="DRLClasses, Version=1.0.0.0, Culture=neutral, processorArchitecture=MSIL" Condition=" '$(Configuration)' == 'Release' ">
<SpecificVersion>False</SpecificVersion>
<HintPath>..\..\..\..\Visual Studio User Library\Release\DRLClasses.dll</HintPath>
</Reference>
Related videos on Youtube
Serge Wautier
Self appointed Internationalization Specialist, author of appTranslator, which was once a great tool to translate the UI of your programs. No longer since I never took the necessary time to keep it up with recent frameworks... Currently managing a great team that develops and operates Talk2M: One of the largest OpenVPN setup worldwide (Yes sir!)
Updated on July 09, 2022Comments
-
Serge Wautier almost 2 years
Env.: VS2008 C# project
I need to build my app for use in 2 different environments. In one of those environments, I need to use a 3rd party DLL assembly.
I could isolate the code that uses this DLL using #if blocks. But how do I conditionally include the reference to the DLL in the CS project file?
Edit: womp has a good point in his comment. I turned into a separate question: Will the referenced DLL be loaded at all if it's never called? TIA,
-
nuiun over 14 yearsWhy wouldn't you just leave it in both, make the usage of the dll configuration based, and avoid complicating things? DLLs aren't loaded unless necessary. Are there licensing issues with the 3rd party dll?
-
Serge Wautier over 14 yearswomp, very good question actually. (I don't distribute the 3rd party DLL. It's installed on some systems by the manufacturer).
-
-
Fredrik Mörk over 14 yearsThat was my thought too, so I tried it. In my case that caused the reference to fail in all configuration (the system acted as if it could not find the assembly).
-
Coincoin over 14 yearsYeah the problem is, the IDE ignores things with conditions and in that case, it needs it for all kind of reason (intellisense, object browser...) so it will complain. Also, you will have to make the calls to that assembly conditional, else the compiler won't be able to find the assembly the code is refering to.
-
awe about 13 yearsYou can simplify this by just adding the
$(Configuration)
variable directly in the HintPath:<Reference Include="DRLClasses, Version=1.0.0.0, Culture=neutral, processorArchitecture=MSIL"> <SpecificVersion>False</SpecificVersion> <HintPath>..\..\..\..\Visual Studio User Library\$(Configuration)\DRLClasses.dll</HintPath> </Reference>
-
Dan W over 5 yearsJust to help others maybe: When using MSBuild in the CLI, use the /p flag (e.g:
/p:MYFLAG=true
) to set the variable within the XML.