2010-07-22 2 views
30

Я пытаюсь организовать свое рабочее пространство и хочу, чтобы мои промежуточные объекты помещались в папку ..\build\obj по отношению к моему файлу .csproj. Поэтому я ставлю:Как настроить каталог промежуточного вывода в C#?

<IntermediateOutputPath>..\build\obj\Debug</IntermediateOutputPath>

в файле .csproj. Промежуточные объекты теперь помещаются в это место, когда решение построено, но проблема в том, что каталог каталога obj все еще создается в каталоге, в котором находится файл .csproj (что-то похожее на действие obj\Debug\TempPE), когда решение открыто. Для чего этот каталог и как его можно переместить?

+3

Я только что перешел на C# от C++ и получили очень привыкли к тому, мое рабочее пространство построено очень конкретным способом. Я хотел бы сохранить ту же структуру рабочего пространства в C#. – blachniet

+1

дубликат http://stackoverflow.com/questions/815056/move-intermediates-directory-on-c-projects-in-visual-studio – CharlesB

+0

Способ, которым определенные системы управления версиями «enterpriseisey» затрудняют работу с -версии в папке с версией. Помимо этого, я никогда не заботился о том, чтобы объекты сборки смешивались с моим исходным деревом. –

ответ

25

Вы можете попробовать сделать это (не забывайте, что есть Debug и Release раздел, который будет использоваться в зависимости от того, какой тип телосложения вы ориентируетесь):

<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' "> 
    ... 
    <BaseIntermediateOutputPath>..\build\obj</BaseIntermediateOutputPath> 
    <IntermediateOutputPath>$(BaseIntermediateOutputPath)$(Configuration)\</IntermediateOutputPath> 
</PropertyGroup> 
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' "> 
    ... 
    <BaseIntermediateOutputPath>..\build\obj</BaseIntermediateOutputPath> 
    <IntermediateOutputPath>$(BaseIntermediateOutputPath)$(Configuration)\</IntermediateOutputPath> 
</PropertyGroup> 
+5

Я пробовал это. Каталог obj \ все еще создается в том же каталоге, что и файл .csproj. Когда я создаю, промежуточные объекты попадают в каталог, указанный в файле .csproj, но по какой-то причине этот каталог obj \ все еще создается в каталоге .csproj. – blachniet

+4

@blachniet - Visual Studio создает каталог obj. Это раздражает, но если вы не используете VS и просто используете MSBuild из командной строки, он отлично работает. Я понятия не имею, почему Microsoft думает, что мы хотим поместить вывод сборки в наше исходное дерево. –

1

Я использовал:

<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' "> 
<PlatformTarget>AnyCPU</PlatformTarget> 
<DebugSymbols>true</DebugSymbols> 
<DebugType>full</DebugType> 
<Optimize>false</Optimize> 
<OutputPath>$(OBJDIR)\$(SolutionName)\bin\$(Configuration)\</OutputPath> 
<BaseIntermediateOutputPath>$(OBJDIR)\$(SolutionName)\obj\$(Configuration)\</BaseIntermediateOutputPath> 
<IntermediateOutputPath>$(BaseIntermediateOutputPath)\</IntermediateOutputPath> 
<DefineConstants>DEBUG;TRACE</DefineConstants> 
<ErrorReport>prompt</ErrorReport> 
<WarningLevel>4</WarningLevel> 

(в VS11 Beta, FWIW) и она отлично работает.

OBJDIR на моих точках станка е: \ BuildOutput

+0

Я считаю, что вся цель 'BaseIntermediateOutputPath' заключается в том, чтобы * не * включать' $ (Конфигурация) 'в этот момент (т. Е. Это имя,« база ... »). Вы должны использовать 'IntermediateOutputPath', чтобы включить эту часть. Кроме того, обратите внимание, что, как и у вас, вы создаете повторение двух обратных косых черт в конце вашего 'IntermediateOutputPath'. –

7

ли это, как Microsoft:

<PropertyGroup> 
    <IntermediateOutputPath Condition=" '$(PlatformName)' == 'AnyCPU' ">$(BaseIntermediateOutputPath)$(Configuration)\</IntermediateOutputPath> 
    <IntermediateOutputPath Condition=" '$(PlatformName)' != 'AnyCPU' ">$(BaseIntermediateOutputPath)$(PlatformName)\$(Configuration)\</IntermediateOutputPath> 
    </PropertyGroup> 
Смежные вопросы