2009-09-29 70 views
19

Env .: VS2008 C#项目Visual Studio项目:如何仅为一个配置包含参考?

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

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

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

+2

为什么你不把它放在两个地方,使基于dll配置的使用,并避免复杂的事情?除非必要,否则DLL不会被加载。第三方DLL是否存在许可问题? – womp 2009-09-29 16:59:38

+0

womp,其实很好的问题。 (我不分发第三方DLL,它由制造商安装在某些系统上)。 – 2009-10-01 12:37:11

回答

24

卸载该项目并将其作为.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> 

通知最后引用现在有一个条件。

+2

这也是我的想法,所以我试了一下。在我的情况下,导致引用在所有配置中失败(系统表现为无法找到程序集)。 – 2009-09-29 17:25:00

+2

是的问题是,IDE忽略条件的东西,在这种情况下,它需要它的各种原因(intellisense,对象浏览器...),所以它会抱怨。此外,您必须有条件地调用该程序集,否则编译器将无法找到代码所引用的程序集。 – Coincoin 2009-09-29 17:32:52

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

您可以直接在HintPath中添加'$(Configuration)'变量来简化该操作: ' False .. \ .. \ .. \ .. \ Visual Studio User Library \ $(Configuration)\ DRLClasses.dll ' – awe 2011-02-28 11:32:12

2

我知道这是旧的文章,但如果任何人发现它,他们找到答案之前,像我做到了,那就是:你需要使用“选择”元素在项目文件:

link

您可以在一个地方同时定义条件引用和条件编译,所以你不必使用#如果在你的代码中。

它在SharpDevelop中工作,并且由于它是MS的文档,我假定它在Visual Studio中有效。

相关问题