Visual Studio 在C#项目中完全更改obj文件夹位置

3vpjnl9f  于 2023-06-30  发布在  C#
关注(0)|答案(2)|浏览(260)

MSBuild很奇怪
我已经尝试了this和另一个答案,我还尝试了this one
在那之后,我在.csproj文件中更改了<IntermediateOutputPath><BaseIntermediateOutputPath><OutputPath>,但是...
它一直在旧的obj文件夹中创建这个奇怪的东西(我不使用nuget)

project.assets.json
project.nuget.cache
project.packagespec.json
...

我已经了解到Visual Studio遗留工作流会导致这种行为,但是否存在任何解决方法?
我当前的.csproj文件:

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

  <PropertyGroup>
    <OutputType>Exe</OutputType>
    <TargetFramework>netcoreapp3.1</TargetFramework>
    <StartupObject>Program</StartupObject>
    <IntermediateOutputPath>..\..\obj\</IntermediateOutputPath>
    <BaseIntermediateOutputPath>..\..\obj\</BaseIntermediateOutputPath>
    <OutputPath>..\..\bin\Build\</OutputPath>
  </PropertyGroup>
  
  <ItemGroup>
    <ProjectReference Include="foo\dependency.csproj" />
  </ItemGroup>

</Project>
djp7away

djp7away1#

通过在项目的根目录中创建Directory.Build.props文件来解决:

<Project>
    <PropertyGroup>
        <MSBUildProjectExtensionsPath>..\..\obj\</MSBUildProjectExtensionsPath>
    </PropertyGroup>
</Project>

非常肮脏和不明显的微软式黑客
找到here

有没有好的.NET编译器的Windows没有穿透你自己?

h6my8fg2

h6my8fg22#

我需要类似的东西。在同一个目录中有两个.csproj文件,但目标框架不同,如果没有我在其中一个.csproj文件中所做的更改,就会失败。
项目可以有MSBuildProjectExtensionsPath,但必须在导入SDK之前定义。

<?xml version="1.0" encoding="utf-8"?>

<Project>
  <!-- Implicit top import required explicitly to change build output path -->
  <PropertyGroup>
    <MSBuildProjectExtensionsPath>legacy</MSBuildProjectExtensionsPath>
    <BaseIntermediateOutputPath>$(MSBuildProjectExtensionsPath)\obj</BaseIntermediateOutputPath>
    <OutputPath Condition="'$(Configuration)' != ''">$(MSBuildProjectExtensionsPath)\bin\$(Configuration)</OutputPath>
  </PropertyGroup>
  <Import Project="Sdk.props" Sdk="Microsoft.NET.Sdk" />

  ...

  <!-- Implicit top import required explicitly to change build output path -->
  <Import Project="Sdk.targets" Sdk="Microsoft.NET.Sdk" />
</Project>

dotnet SDK构建需要所有更改(不仅仅是属性MSBuildProjectExtensionsPath),否则project.assets.json文件的项目之间会发生交叉授粉,导致构建失败。
我不能使用Directory.Build.props文件,因为这会影响我的两个项目文件(它们需要分开保存)。
请注意,如果有人试图在他们自己的Directory.Build.props中覆盖这些变量,那么这可能不满足用例,因此您必须为其他用例扩展此解决方案并进行测试。

相关问题