2013-08-05 167 views
0

我希望通過C#visual studio項目添加新的構建配置。我希望它像調試構建配置,但有一個區別。即使調試配置發生變化,我也希望它始終與調試配置類似。visual studio,構建配置:如何構建基於另一個構建配置

我該怎麼做?

+0

哪個visual studio版本? – stijn

+0

微軟的Visual Studio 2012專業版 更新11.0.60315.01 2 的Microsoft .NET Framework版本 4.5.50709 安裝的版本:專業 的Visual C#2012 04938-004-0033001-02995 的Microsoft Visual C#2012 –

回答

1

下面是使用不同預處理器定義的示例。您將不得不手動編輯項目文件。我建議你在VS自己做這個,因爲它有語法高亮和自動完成。 在正常的csproj文件,爲Debug|AnyCPU配置的屬性等被定義本(1):

<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' "> 
    <PlatformTarget>AnyCPU</PlatformTarget> 
    <DebugType>pdbonly</DebugType> 
    <Optimize>false</Optimize> 
    <OutputPath>bin\Debug\</OutputPath> 
    <DefineConstants>DEBUG;TRACE</DefineConstants> 
    <ErrorReport>prompt</ErrorReport> 
    <WarningLevel>4</WarningLevel> 
</PropertyGroup> 

說你想重用一切,除了DefineConstants,你剛纔定義的公共屬性創建一個單獨的項目文件debug.props,把它放在同一目錄下的項目文件:

<?xml version="1.0" encoding="utf-8"?> 
<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> 
    <PropertyGroup> 
    <PlatformTarget>AnyCPU</PlatformTarget> 
    <DebugSymbols>true</DebugSymbols> 
    <DebugType>full</DebugType> 
    <Optimize>false</Optimize> 
    <OutputPath>bin\Debug\</OutputPath> 
    <ErrorReport>prompt</ErrorReport> 
    <WarningLevel>4</WarningLevel> 
    </PropertyGroup> 
</Project> 

然後,它只是一個調整的主要項目文件導入的共同文件,並設置基礎上配置一些不同的價值觀的問題。這是由與此更換(1)完成:

<Import Project="$(MsBuildThisFileDirectory)\debug.props" 
    Condition="'$(Configuration)'=='Debug' Or '$(Configuration)'=='MyDebug'" /> 
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' "> 
    <DefineConstants>DEBUG</DefineConstants> 
</PropertyGroup> 
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'MyDebug|AnyCPU' "> 
    <DefineConstants>TRACE;DEBUG</DefineConstants> 
</PropertyGroup> 

應該很清楚這是什麼一樣:它導入該文件與公共屬性(如果配置是Debug或MyDebug)將針對DefineConstants不同的值取決於使用哪個配置。由於現在有一個用於配置的PropertyGroup == MyDebug,VS會自動重新調整它,所以在配置管理器中,您現在可以選擇MyDebug作爲配置。一旦你這樣做,它會影響這樣的代碼:

#if TRACE //is now only defined for MyDebug config, not for Debug 
Console.WriteLine("hello there"); 
#endif