2009-09-29 78 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中有效。

相關問題