Visual Studio Mac: 不支持在别处输出obj/bin文件夹?

Visual Studio Mac: Output obj / bin folder elsewhere not supported?

我有一个多项目解决方案,希望将所有生成的 in/obj 工件放在另一个文件夹中。

我尝试设置:

<Project Sdk="Microsoft.NET.Sdk">

  <PropertyGroup>
    <TargetFramework>netstandard2.0</TargetFramework>
  </PropertyGroup>

  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
    <DebugType>portable</DebugType>
    <OutputPath>..\Bin\Core\Debug\</OutputPath>
    <IntermediateOutputPath>..\Bin\Core\obj\</IntermediateOutputPath>
  </PropertyGroup>
  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
    <OutputPath>..\Bin\Core\Release\</OutputPath>
    <IntermediateOutputPath>..\Bin\Core\obj\</IntermediateOutputPath>
  </PropertyGroup>
  <ItemGroup>
    <Compile Include="Library.fs" />
  </ItemGroup>

</Project>

但是:

  1. obj 文件夹仍然在原始位置重新创建。是 也在所需的位置,但 EMPTY。
  2. "restore packages"触发器“1”并没有把它们放在想要的位置
  3. 构建项目时,会填充 obj 文件夹。

这是版本:

Visual Studio Community 2017 for Mac Version 7.3.2 (build 12) Runtime: Mono 5.4.1.7 (2017-06/e66d9abbb27) (64-bit)

NuGet Versión: 4.3.1.4445

.NET Core Runtime: /usr/local/share/dotnet/dotnet Versión de tiempo de ejecución: 2.0.0 SDK: /usr/local/share/dotnet/sdk/2.0.0/Sdks Versión del SDK: 2.0.0 SDK de MSBuild: /Library/Frameworks/Mono.framework/Versions/5.4.1/lib/mono/msbuild/15.0/bin/Sdks

此问题并非 Visual Studio 或 Mac 所特有。如果您从命令行使用 dotnet,则会发生相同的行为。

使用 Visual Studio for Mac 和 dotnet CLI,obj 目录在还原 NuGet 包时在项目目录中创建,并且仅包含还原生成的文件:

  • MyProject.csproj.nuget.cache
  • MyProject.csproj.nuget.g.targets
  • MyProject.csproj.nuget.g.props
  • project.assets.json

构建文件在 ../Bin/Core/Debug 和 ../Bin/Core/obj 目录中创建。

您可以通过设置 BaseIntermediateOutputPath 获得您想要的行为。但是在项目文件本身中设置它会导致 problems.

最简单的解决方案是在解决方案目录中创建一个 Directory.Build.props 文件并在其中设置 BaseIntermediateOutputPath 属性。

<Project>
  <PropertyGroup>
    <BaseIntermediateOutputPath>..\Bin\Core\obj\</BaseIntermediateOutputPath>
  </PropertyGroup>
</Project>

然后生成的 NuGet 还原文件将创建在您想要的目录中。

Visual Studio for Mac 似乎仍然想在项目打开时在项目中创建一个空的 obj 目录,但在恢复或构建后没有文件。