Build DotnetCore项目IntermediateOutputPath在解决方案目录中保留一些文件

Build DotnetCore项目IntermediateOutputPath在解决方案目录中保留一些文件,build,.net-core,project,Build,.net Core,Project,为了保持存储库干净并与输出和构建文件分离,我们更改了项目文件中的相应路径 对于Net Framework项目,指定中间输出路径将obj目录重定向到相应的文件夹 对于Net Core项目(3.0),使用此属性是不够的。尽管Debug、Release文件夹确实被重定向,但是仍然会创建obj文件夹,其中包含一些文件,例如 project.assets.json、.csproj.nuget.cache、.csproj.nuget.dgspec.json、.csproj.nuget.g.props、.cs

为了保持存储库干净并与输出和构建文件分离,我们更改了项目文件中的相应路径

对于Net Framework项目,指定中间输出路径将obj目录重定向到相应的文件夹

对于Net Core项目(3.0),使用此属性是不够的。尽管Debug、Release文件夹确实被重定向,但是仍然会创建obj文件夹,其中包含一些文件,例如 project.assets.json、.csproj.nuget.cache、.csproj.nuget.dgspec.json、.csproj.nuget.g.props、.csproj.nuget.g.targets。 使用BaseMediateOutput路径也没有帮助

只是想知道是否有人可以建议如何移动整个obj目录? 谢谢

Martin建议的解决方案对于Net Core项目非常有效

<Project>
  <PropertyGroup>
    <BuildDIrectory>C:\Temp\Build\$(Configuration)</BuildDIrectory>
    <RelativePath>some arelative path which depends on location of corresponding project withing the solution</RelativePath>

    <BaseIntermediateOutputPath>$(BuildDIrectory)\obj\$(RelativePath)\$(AssemblyName)\</BaseIntermediateOutputPath>
    <OutputPath>$(BuildDIrectory)\out\$(RelativePath)\$(AssemblyName)\</OutputPath>
    <DocumentationFile>$(BuildDIrectory)\Documentation\$(RelativePath)\$(AssemblyName).xml</DocumentationFile>
  </PropertyGroup>

  <Import Project="Sdk.props" Sdk="Microsoft.NET.Sdk" />

  <PropertyGroup>
    <TargetFramework>netcoreapp3.0</TargetFramework>
  </PropertyGroup>

  <Import Project="Sdk.targets" Sdk="Microsoft.NET.Sdk" />

  ...
  </Project>

C:\Temp\Build\$(配置)
一些相对路径取决于解决方案中相应项目的位置
$(BuildDIrectory)\obj\$(RelativePath)\$(AssemblyName)\
$(BuildDIrectory)\out\$(RelativePath)\$(AssemblyName)\
$(BuildDIrectory)\Documentation\$(RelativePath)\$(AssemblyName).xml
netcoreapp3.0
...

baseIntermediateOutput路径也可以工作,但需要很早设置它才能生效

最简单的方法是将其添加到
目录.Build.props
文件:

<Project>
  <PropertyGroup>
    <BaseIntermediateOutputPath>$(MSBuildThisFileDirectory)..\shared-obj\$(MSBuildProjectName)\</BaseIntermediateOutputPath>
  </PropertyGroup>
</Project>

$(MSBuildThisFileDirectory)\共享对象\$(MSBuildProjectName)\

如果要直接在csproj文件中指定,则不能使用
谢谢Martin!第二部分与项目属性是一个很好的解决方案。我试着对你的答案进行投票,但由于我的声誉不到15,所以被记录下来,但没有被考虑到:(如果解决方案对你有用,请把答案标记为“接受的(复选标记图标)。欢迎到StAccExoLo:):亲爱的马丁,stackoverflow用户采用这种方法后,我遇到了一些奇怪的问题——其中一个Nuget包丢失了。由于其他包显示在Dependencies/Packages(依赖项/包)下,但其中一个不是,因此此包有一些特定的内容。我可以在输出中看到它已成功安装。但是它现在在列表中,如果我尝试使用在该包中定义的类,它们就不会被识别。但是如果我将.csproj文件更改为标准文件。。。Nuget出现在Solutoin资源管理器中,类被识别。知道为什么会发生,以及如何修复吗?谢谢,Arbus可能会提出一个新问题,并提供更详细的描述(csproj内容)
<Project>

  <PropertyGroup>
    <BaseIntermediateOutputPath>..\shared-obj\myprojA\</BaseIntermediateOutputPath>
  </PropertyGroup>

  <Import Project="Sdk.props" Sdk="Microsoft.NET.Sdk" />

  <PropertyGroup>
    <TargetFramework>netcoreapp3.0</TargetFramework>
    <OutputType>Exe</OutputType>
  </PropertyGroup>

  <Import Project="Sdk.targets" Sdk="Microsoft.NET.Sdk" />

</Project>