环境:VS2008 C#项目
我需要构建我的应用程序以在两个不同的环境中使用。在其中一个环境中,我需要使用第三方DLL程序集。
我可以使用#if块来隔离使用此DLL的代码。但是如何有条件地包含CS项目文件中对DLL的引用?
编辑:womp在他的评论中提出了一个很好的观点。我已经将其变成一个单独的问题:如果从未调用该引用的DLL,它是否会被加载? TIA,
环境:VS2008 C#项目
我需要构建我的应用程序以在两个不同的环境中使用。在其中一个环境中,我需要使用第三方DLL程序集。
我可以使用#if块来隔离使用此DLL的代码。但是如何有条件地包含CS项目文件中对DLL的引用?
编辑:womp在他的评论中提出了一个很好的观点。我已经将其变成一个单独的问题:如果从未调用该引用的DLL,它是否会被加载? TIA,
卸载该项目并以 .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>
注意最后一个引用现在有一个条件。
/p:MYFLAG=true
)来设置XML中的变量。 - Dan W我知道这是一个旧的帖子,但如果有人在找答案之前像我一样找到了它,那么就需要使用项目文件中的“选择”元素:
您可以在一个地方定义条件引用和条件编译,因此您不必在代码中使用#if。
它适用于SharpDevelop,并且由于这是微软的文档,我认为它也适用于Visual Studio。
<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>
$(Configuration)
变量添加到 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>
- awe<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