Build DotnetCore项目IntermediateOutputPath在解决方案目录中保留一些文件
为了保持存储库干净并与输出和构建文件分离,我们更改了项目文件中的相应路径 对于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项目非常有效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
<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>