环境:VS2008 C#项目
我需要构建我的应用程序,以便在2种不同的环境中使用。在其中一个环境中,我需要使用第三方DLL程序集。
我可以使用#if块来隔离使用此DLL的代码。但是,如何有条件地在CS项目文件中包含对DLL的引用?
编辑:womp在他的评论中有一个很好的观点。我变成了separate question:如果从未调用引用的DLL,它是否会被加载? TIA,
答案 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”元素:
您可以在一个地方定义条件引用和条件编译,因此您不必在代码中使用#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