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?

醉酒当歌 提交于 2019-11-26 10:23:24

问题


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 versions Debug and Release.

Is there a way to add these libraries as references to the project, but use the Release build (when I\'m building a release), and use the Debug build (when I\'m debugging)?


回答1:


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.




回答2:


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



回答3:


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




回答4:


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>


来源:https://stackoverflow.com/questions/5491253/visual-studio-2010-compiling-with-the-debug-or-release-version-of-third-party-li

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!