Visual Studio项目:如何仅为一个配置包含引用?

时间:2009-09-29 16:54:19

标签: c# visual-studio configuration msbuild reference

环境:VS2008 C#项目

我需要构建我的应用程序,以便在2种不同的环境中使用。在其中一个环境中,我需要使用第三方DLL程序集。

我可以使用#if块来隔离使用此DLL的代码。但是,如何有条件地在CS项目文件中包含对DLL的引用?

编辑:womp在他的评论中有一个很好的观点。我变成了separate question:如果从未调用引用的DLL,它是否会被加载? TIA,

4 个答案:

答案 0 :(得分:24)

卸载项目并将其打开为.XML

找到引用项标记并添加Condition属性。

例如:

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

请注意,最后一个引用现在有一个条件。

答案 1 :(得分:2)

我知道这是一篇旧帖子,但是如果其他人在找到答案之前找到答案,就像我一样,就是这样:你需要在项目文件中使用“Choose”元素:

link

您可以在一个地方定义条件引用和条件编译,因此您不必在代码中使用#if。

它适用于SharpDevelop,因为它是MS的文档,我认为它适用于Visual Studio。

答案 2 :(得分:1)

以下,在csproj文件中引用itemgroup对我来说在vs 2008中工作: -

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

答案 3 :(得分:0)

受问答shown here的启发,您可以在要有条件运行的零件周围添加<Choose><When Condition>命令。例如:

<Choose>
  <When Condition="$(USEDLL) == true">

    <ItemGroup>
    <EmbeddedResource Include="test.dll">
    <LogicalName>test.dll</LogicalName>
    </EmbeddedResource>
    </ItemGroup>

  </When>
</Choose>

然后在CLI中,只需使用MSBuild中的/p属性,如下所示:

MSBuild "C:\myproject\myproject.sln" /p:USEDLL=true

...或者如果您不需要DLL,只需:

MSBuild "C:\myproject\myproject.sln" /p:USEDLL=false