arb*_*bus 4 build project .net-core
为了保持存储库干净并与输出和构建文件分开,我们更改了项目文件中的相应路径。
对于 Net Framework 项目,指定IntermediateOutputPath会将 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。使用BaseIntermediateOutputPath - 也无济于事。
只是想知道是否有人可以建议如何移动整个 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>
Run Code Online (Sandbox Code Playgroud)
BaseIntermediateOutputPath 也可以,但需要很早就设置才能生效。
最简单的方法是将其添加到Directory.Build.props文件中:
<Project>
<PropertyGroup>
<BaseIntermediateOutputPath>$(MSBuildThisFileDirectory)..\shared-obj\$(MSBuildProjectName)\</BaseIntermediateOutputPath>
</PropertyGroup>
</Project>
Run Code Online (Sandbox Code Playgroud)
如果您想直接在 csproj 文件中指定它,则不能使用<Project Sdk="表示法,因为需要在应用 SDK 的部分内容之前设置该属性。但是,它在使用显式 SDK 导入和正确排序时有效:
<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>
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
407 次 |
| 最近记录: |