如何在C#中配置中间输出目录?

bla*_*iet 32 .net c# visual-studio-2008

我正在尝试组织我的工作区,并希望将我的中间对象放在与..\build\obj.csproj文件相关的文件夹中.所以我说:

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

在.csproj文件中.现在,在构建解决方案时,中间对象被放置在该位置,但问题是在打开解决方案时,仍然会在.csproj文件所在的目录中创建一个obj目录(产生效果obj).这个目录是什么,以及如何重新定位它?

Dar*_*rov 29

您可以尝试执行此操作(不要忘记将根据您要定位的构建类型使用调试和发布部分):

<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>
Run Code Online (Sandbox Code Playgroud)

  • 我试过这个.仍在与.csproj文件相同的目录中生成obj \目录.当我构建时,中间件转到.csproj文件指定的目录,但由于某种原因,这个obj \目录仍然在.csproj文件目录中生成. (5认同)
  • @blachniet - Visual Studio创建该obj目录.它很烦人,但是如果你不使用VS而只是从命令行使用MSBuild,它可以正常工作.我不知道为什么微软认为我们想把构建输出放到我们的源代码树中. (4认同)

Bra*_* Ds 9

像微软这样做:

  <PropertyGroup>
    <IntermediateOutputPath Condition=" '$(PlatformName)' == 'AnyCPU' ">$(BaseIntermediateOutputPath)$(Configuration)\</IntermediateOutputPath>
    <IntermediateOutputPath Condition=" '$(PlatformName)' != 'AnyCPU' ">$(BaseIntermediateOutputPath)$(PlatformName)\$(Configuration)\</IntermediateOutputPath>
  </PropertyGroup>
Run Code Online (Sandbox Code Playgroud)


小智 5

根据这篇文章Directory.Build.props,可以在包含项目文件的文件夹中创建一个名为 的文件.csproj。为了重新定位obj文件夹,我们可以添加

<BaseOutputPath>..\Build</BaseOutputPath>
Run Code Online (Sandbox Code Playgroud)

到项目文件PropertyGroup中的部分.csproj,并写入

<?xml version="1.0"?>
<Project>
    <PropertyGroup>
        <BaseIntermediateOutputPath>..\Intermediate\obj</BaseIntermediateOutputPath>
        <IntermediateOutputPath>$(BaseIntermediateOutputPath)\$(Configuration)</IntermediateOutputPath>
        <!--The following is the default configuration for "MSBuildProjectExtensionsPath"-->
        <!--<MSBuildProjectExtensionsPath>$(BaseIntermediateOutputPath)</MSBuildProjectExtensionsPath>-->
    </PropertyGroup>
</Project>
Run Code Online (Sandbox Code Playgroud)

Directory.Build.props文件。