【问题标题】:Why does dotnet build and build in visual studio produce different output?为什么 dotnet build 和 build in Visual Studio 会产生不同的输出?
【发布时间】:2020-01-16 02:50:31
【问题描述】:

我正在构建一个生成 nuget 包的项目。 nuget 包的配置在我的 csproj 文件中。例如。我有

<GeneratePackageOnBuild>true</GeneratePackageOnBuild>

我还有想要包含在 nuget 包中的资产 为了包含它们,我在我的 csproj 文件中有这个

<ItemGroup>
  <_PackageFiles Include="$(OutputPath)\clidriver\**">
    <BuildAction>None</BuildAction>
    <PackagePath>\build\clidriver\</PackagePath>
  </_PackageFiles>
</ItemGroup>

当我从 Visual Studio 构建时,资产很好地包含在生成的 nuget 包中。 但是,当我使用 dotnet.exe 构建时,不包括资产。

为什么会有这种差异?

有没有什么技巧可以让 dotnet.exe 也包含我的资产?

【问题讨论】:

  • 你试过dotnet build而不是msbuild /t:Build吗?
  • 它应该像在 VS 中构建一样工作,请分享有关您用于运行 dotnet 构建的 .net sdk 版本、项目目标框架以及命令行参数内容的更多详细信息为了更好地解决问题:)

标签: .net visual-studio build nuget


【解决方案1】:

为什么会有这种差异?

在 VS 中构建调用 msbuild 来构建项目,dotnet build 也调用 msbuild 来构建针对 .net 核心的项目。因此,如果您设置相同的 siwtches,在大多数情况下,它们的构建和打包结果应该是相同的。

1.它在我的机器上运行良好,在 VS2017 中构建和使用.net core3.0 构建的 dotnet 具有相同的结果,它们都包含资产。所以这个问题可能与你的.net core sdk 版本有关。建议你安装.net core SDK 2.2 或更高版本,看看是否有帮助。 (VS2017 为 2.2.109,VS2019 为 2.2.402)

2.导致此问题的另一个原因可能是找不到您上面提到的资产。根据$(OutputPath)\clidriver\**,您在输出路径下有一个clidriver 文件夹,其中包含一些资产。

$(OutputPath) 的值可以随着您设置不同的配置而改变。在调试模式下构建项目(xx.csproj)时,应确保资产存在于ProjectFolder\bin\Debug\netcoreapp\clidriver 中,而在发布模式下,应确保资产存在于ProjectFolder\bin\release\netcoreapp\clidriver 中。

所以我想也许在 VS 中构建时,您处于调试模式,并且您将资产放在那里(bin\Debug\netcoreapp\clidriver),因此它包含 nuget 包中的资产。并且当使用带有配置发布的 dotnet 构建时,它不包含资产,因为在 bin\release\netcoreapp\clidriver 中找不到资产。请检查您是否遇到类似问题。

【讨论】:

  • 当 .NET Core 项目时,VS 是否调用 dotnet 来启动构建?还是它仍然调用 msbuild?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-08-17
  • 2022-12-19
  • 2018-09-26
  • 2016-03-21
相关资源
最近更新 更多