Visual Studio 项目:如何仅包含一种配置的参考?
Posted
技术标签:
【中文标题】Visual Studio 项目:如何仅包含一种配置的参考?【英文标题】:Visual Studio Project: How to include a reference for one configuration only? 【发布时间】:2010-12-02 09:35:28 【问题描述】:环境:VS2008 C# 项目
我需要构建我的应用程序以在 2 个不同的环境中使用。在其中一种环境中,我需要使用第 3 方 DLL 程序集。
我可以使用#if 块隔离使用此 DLL 的代码。但是如何有条件地在 CS 项目文件中包含对 DLL 的引用呢?
编辑:womp 在他的评论中有一个很好的观点。我变成了separate question:如果引用的 DLL 从不被调用,它会被加载吗? TIA,
【问题讨论】:
你为什么不把它放在两者中,基于 dll 配置的使用,避免复杂化呢?除非必要,否则不会加载 DLL。第三方 dll 是否存在许可问题? womp,非常好的问题。 (我不分发第 3 方 DLL。它由制造商安装在某些系统上)。 【参考方案1】:卸载项目并以 .XML 格式打开
找到引用项标签并添加条件属性。
例如:
<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>
注意最后一个引用现在有一个条件。
【讨论】:
这也是我的想法,所以我尝试了一下。在我的情况下,导致所有配置中的引用都失败(系统表现得好像找不到程序集)。 是的,问题是,IDE 会忽略有条件的东西,在这种情况下,它出于各种原因(智能感知、对象浏览器......)都需要它,所以它会抱怨。此外,您必须有条件地对该程序集进行调用,否则编译器将无法找到代码所引用的程序集。 也许只是为了帮助其他人:在 CLI 中使用 MSBuild 时,使用 /p 标志(例如:/p:MYFLAG=true
)在 XML 中设置变量。【参考方案2】:
我知道这是一篇旧帖子,但如果其他人在找到答案之前找到它,就像我一样,那就是:您需要在项目文件中使用“Choose”元素:
link
您可以在一处同时定义条件引用和条件编译,因此您不必在代码中使用#if。
它可以在 SharpDevelop 中使用,由于它是 MS 的文档,我认为它可以在 Visual Studio 中使用。
【讨论】:
【参考方案3】:以下,在 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>
【讨论】:
您可以通过直接在 HintPath 中添加$(Configuration)
变量来简化此操作:<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>
【参考方案4】:
受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
【讨论】:
以上是关于Visual Studio 项目:如何仅包含一种配置的参考?的主要内容,如果未能解决你的问题,请参考以下文章
如何限制部署后脚本在 Visual Studio 数据库项目中仅运行一次
在 Visual Studio 项目中创建包含文件夹和 Lib 文件夹
如何在 Visual Studio 代码中仅搜索特定文件类型?
如何仅为调试构建运行 Visual Studio 构建后事件