Visual Studio Project: How to include a reference for one configuration only?

20,574

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:

link

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>
Share:
20,574

Related videos on Youtube

Serge Wautier
Author by

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, 2022

Comments

  • Serge Wautier
    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
      nuiun over 14 years
      Why 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
      Serge Wautier over 14 years
      womp, very good question actually. (I don't distribute the 3rd party DLL. It's installed on some systems by the manufacturer).
  • Fredrik Mörk
    Fredrik Mörk over 14 years
    That 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
    Coincoin over 14 years
    Yeah 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
    awe about 13 years
    You 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
    Dan W over 5 years
    Just 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.