Visual Studio 2010 Compiling with the Debug or Release version of third party library depending on if my project is being compiled Build or Release?

前端 未结 4 1153
盖世英雄少女心
盖世英雄少女心 2020-11-29 20:28

I\'ve downloaded a number of 3rd party libraries (dlls) now for Visual Studio 2010/C# and I\'ve noticed that in their distributions \\bin directory they usually have two ver

相关标签:
4条回答
  • 2020-11-29 20:56

    You can edit the csproj file manually set the Condition attribute on the ItemGroup containing the reference.

      <ItemGroup Condition="'$(Configuration)' == 'Debug'">
        <Reference Include="MyLib">
          <HintPath>..\..\Debug\MyLib.dll</HintPath>
        </Reference>
      </ItemGroup>
    
      <ItemGroup Condition="'$(Configuration)' == 'Release'">
        <Reference Include="MyLib">
          <HintPath>..\..\Release\MyLib.dll</HintPath>
        </Reference>
      </ItemGroup>
    

    See this article for a bit more information.

    0 讨论(0)
  • 2020-11-29 21:00

    The answer by WaffleSouffle is definitely the best if you use a Release- and a Debug-folder, as the original question states.

    There seems to be another option that is not so obvious because VS (VS2010) does not show it in the IntelliSense when editing the csproj-file.

    You can add the condition to the HintPath-element. Like this:

    <Reference Include="MyLib">      
          <HintPath Condition="'$(Configuration)'=='Release'">..\lib\MyLib.dll</HintPath>
          <HintPath Condition="'$(Configuration)'=='Debug'">..\lib\Debug\MyLib.dll</HintPath>
    </Reference>
    

    I found an article by Vivek Rathod describing the above approach at http://blog.vivekrathod.com/2013/03/conditionally-referencing-debug-and.html.

    I checked the XMS Schema file for the project file at: C:\Windows\Microsoft.NET\Framework\v4.0.30319\MSBuild\Microsoft.Build.Core.xsd and: C:\Windows\Microsoft.NET\Framework\v4.0.30319\MSBuild\Microsoft.Build.Commontypes.xsd

    I cannot see that Condition is a supported attribute for the HintPath-element, but it does seem to work.....

    EDIT 1: This does not make the reference show up twice in Visual Studio which is an issue with the accepted answer.

    EDIT 2: Actually, if you omit the HintPath alltogether Visual Studio will look in the projects output folder. So you can actually do this:

    <Reference Include="MyLib">        
         <!-- // Removed HintPath, VS looks for references in $(OutDir) --> 
    </Reference> 
    


    The search order is specified in the file Microsoft.Common.targets
    See: HintPath vs ReferencePath in Visual Studio

    0 讨论(0)
  • 2020-11-29 21:02
    <Reference Include="MyLib">
       <HintPath>..\lib\$(Configuration)\MyLib.dll</HintPath>
    </Reference>
    
    0 讨论(0)
  • 2020-11-29 21:16

    Yes, but probably not natively inside VS2010. You can edit the .csproj file and use Condition attributes to create the references to Release or Debug.

    <Reference Include="MyLib" Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
      <HintPath>..\lib\Debug\MyLib.dll</HintPath>
    </Reference>
    

    or

    <Reference Include="MyLib" Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
      <HintPath>..\lib\Release\MyLib.dll</HintPath>
    </Reference>
    
    0 讨论(0)
提交回复
热议问题