2013-03-25 27 views
4

我在VS2012上創建了一個C#項目,我希望輸出文件夾只包含.exe/.dll文件,並且在構建項目時創建的任何其他文件都將轉到中間文件夾。如何確保只有* .exe或* .dll文件進入輸出文件夾,並且其他任何構建文件都會進入中間文件夾VS2012?

我有一個屬性表,定義中間位置。

<?xml version="1.0" encoding="utf-8"?> 
<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> 

    <PropertyGroup> 
    <BUILD_ROOT>f:\test</BUILD_ROOT> 
    <BUILD_INTERMEDIATE>f:\test</BUILD_INTERMEDIATE> 
    </PropertyGroup> 

    <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' "> 
    <IntermediateOutputPath>$(BUILD_INTERMEDIATE)\inter\debug\</IntermediateOutputPath> 
    <BaseIntermediateOutputPath >$(IntermediateOutputPath)</BaseIntermediateOutputPath > 
    </PropertyGroup> 

    <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' "> 
    <IntermediateOutputPath>$(BUILD_INTERMEDIATE)\inter\Release\</IntermediateOutputPath> 
    <BaseIntermediateOutputPath >$(IntermediateOutputPath)</BaseIntermediateOutputPath > 
    </PropertyGroup> 

</Project> 

我進口這個屬性表到我的項目文件manuallly

<?xml version="1.0" encoding="utf-8"?> 
<Project ToolsVersion="4.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> 
    <Import Project="$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props" Condition="Exists('$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props')" /> 
    <Import Project="$(MSBuildProjectDirectory)\PropertySheet.props" /> 

當我生成項目,它創造了產出和中間單獨的文件夾。中間文件夾包含所有中間文件以及pdb文件。但它也包含了exe文件。

但是我面對的問題是,輸出文件夾也包含大部分在中間文件夾中的文件。如pdb,exe,配置等

任何人都可以請解釋我應該這樣做,只有.exe文件將在輸出文件夾和任何其他生成時間文件將只停留在中間文件夾?

回答

2

您應該改爲創建一個額外的「dist」文件夾(或類似文件夾),並在構建後將exe和dll文件複製到該文件夾​​。有許多MSBuild屬性和目標可以將文件放置在輸出文件夾中,並嘗試更改此行爲可能會破壞功能。

此外,如果您指定BaseIntermediateOutputPath那麼您不應指定IntermediateOutputPath。在上述屬性的情況下,您似乎試圖使用此:

<BaseIntermediateOutputPath>$(BUILD_INTERMEDIATE)\inter\</BaseIntermediateOutputPath> 
+0

感謝這個想法。實際上,我將一個大型項目從VS2005轉換爲VS 2012.在VS2005上,我確實設置了單獨的中間並輸出文件夾,只有EXE和DLL用於轉到輸出文件夾。您的建議將解決我的問題,但我仍然有問題,什麼是VS2012的變化,導致所有的構建文件轉到中間和輸出文件夾?? – Shahed 2013-03-25 18:19:18

+1

@Shahed這裏沒有簡單的答案。標記爲「複製到輸出文件夾」的文件將出現在您的輸出目錄中,以及許多通常被認爲是最終構建輸出的一部分的文件(例如,pdb和配置文件)。 – 2013-03-25 18:27:35

1

如果我這樣做,我會創建一個bat文件作爲後期構建腳本運行,以移動任何非dll和exe文件。

+0

同意。下面是我通常執行後構建bat的方法(';'表示新行,因爲我無法在註釋中格式化它,但實際上並不在命令行腳本中):if $(ConfigurationName)== Release exit 0; cd $(ProjectDir); 「$(ProjectDir)」postBuild.bat; – tnw 2013-03-25 18:08:11

+1

感謝這個想法。實際上,我正在將一個大項目從VS2005轉換爲VS 2012.而在VS2005上,我確實設置了單獨的中間和輸出文件夾,只有exe和dll用於輸出文件夾。您的建議將解決我的問題問題,但我仍然有這樣的問題:VS2012的變化是什麼導致所有的構建文件都進入中間文件夾和輸出文件夾? – Shahed 2013-03-25 18:17:47

+0

@Shahed,瞭解。我討厭提供一個不能回答你的問題的答案,但提出了另一種方法。我討厭別人這樣做,我自己做了> _ <希望你能解決這個問題 – JeremyK 2013-03-25 18:45:36

相關問題