MSBuild nuget RestoreOutputPath 如何让它工作?
MSBuild nuget RestoreOutputPath how to make it work?
新的 msbuild csproj 格式已经集成了 nuget 命令。可以在项目文件中使用 <RestoreOutputPath>obj\profile7</RestoreOutputPath>
命令更改恢复项目资产的默认路径。
但是如果我将 <RestoreOutputPath>obj\profile7</RestoreOutputPath>
添加到 csproj 文件后续命令
dotnet restore myproj.sln
dotnet build myproj.sln
产生构建错误
obj\project.assets.json' not found. Run a NuGet package restore to generate this file.
如何告诉 MSBuild 在构建命令期间从此 obj\Profile7
路径获取 nuget 资产?
恢复输出路径需要与MSBuildProjectExtensionsPath
相同,这样nuget生成的props和targets文件将被通用props和targets导入。以及 BaseIntermediateOutputPath
将默认构成 ProjectAssetsFile
.
的路径
至少对于 NuGet 导入,重要的是 MSBuildProjectExtensionsPath
或 BaseIntermediateOutputPath
在导入 SDK props 文件之前设置 。
解决所有这些问题的最简单方法是在项目的早期设置 BaseIntermediateOutputPath
,以便所有组件都将其值作为默认基本路径 - 这实际上是重定向 obj
去别的地方。
这与 <Project SDK="...">
语法冲突,因为无法在 SDK 的 props 文件之前设置属性。要解决此问题,可以像这样更改项目:
<Project>
<!-- This needs to be set before Sdk.props -->
<PropertyGroup>
<BaseIntermediateOutputPath>obj\SomeSubDir\</BaseIntermediateOutputPath>
</PropertyGroup>
<Import Project="Sdk.props" Sdk="Microsoft.NET.Sdk" />
<PropertyGroup>
<OutputType>Exe</OutputType>
<TargetFramework>netcoreapp1.1</TargetFramework>
</PropertyGroup>
<!-- other content -->
<Import Project="Sdk.targets" Sdk="Microsoft.NET.Sdk" />
</Project>
另一种方法是创建一个 Directory.Build.props
文件,该文件将足够早地自动导入,但这会将值应用于目录中的所有项目,并剥夺了为每个项目指定值的能力。
新的 msbuild csproj 格式已经集成了 nuget 命令。可以在项目文件中使用 <RestoreOutputPath>obj\profile7</RestoreOutputPath>
命令更改恢复项目资产的默认路径。
但是如果我将 <RestoreOutputPath>obj\profile7</RestoreOutputPath>
添加到 csproj 文件后续命令
dotnet restore myproj.sln
dotnet build myproj.sln
产生构建错误
obj\project.assets.json' not found. Run a NuGet package restore to generate this file.
如何告诉 MSBuild 在构建命令期间从此 obj\Profile7
路径获取 nuget 资产?
恢复输出路径需要与MSBuildProjectExtensionsPath
相同,这样nuget生成的props和targets文件将被通用props和targets导入。以及 BaseIntermediateOutputPath
将默认构成 ProjectAssetsFile
.
至少对于 NuGet 导入,重要的是 MSBuildProjectExtensionsPath
或 BaseIntermediateOutputPath
在导入 SDK props 文件之前设置 。
解决所有这些问题的最简单方法是在项目的早期设置 BaseIntermediateOutputPath
,以便所有组件都将其值作为默认基本路径 - 这实际上是重定向 obj
去别的地方。
这与 <Project SDK="...">
语法冲突,因为无法在 SDK 的 props 文件之前设置属性。要解决此问题,可以像这样更改项目:
<Project>
<!-- This needs to be set before Sdk.props -->
<PropertyGroup>
<BaseIntermediateOutputPath>obj\SomeSubDir\</BaseIntermediateOutputPath>
</PropertyGroup>
<Import Project="Sdk.props" Sdk="Microsoft.NET.Sdk" />
<PropertyGroup>
<OutputType>Exe</OutputType>
<TargetFramework>netcoreapp1.1</TargetFramework>
</PropertyGroup>
<!-- other content -->
<Import Project="Sdk.targets" Sdk="Microsoft.NET.Sdk" />
</Project>
另一种方法是创建一个 Directory.Build.props
文件,该文件将足够早地自动导入,但这会将值应用于目录中的所有项目,并剥夺了为每个项目指定值的能力。