.net 为什么dotnetbuild和visualstudio中的build产生不同的输出?

.net 为什么dotnetbuild和visualstudio中的build产生不同的输出?,.net,visual-studio,build,nuget,.net,Visual Studio,Build,Nuget,我正在构建一个生成nuget包的项目。 nuget包的配置在我的csproj文件中。我有 <GeneratePackageOnBuild>true</GeneratePackageOnBuild> true 我也有我想要包含在nuget包中的资产 为了包括他们,我在csproj文件中有这个 <ItemGroup> <_PackageFiles Include="$(OutputPath)\clidriver\**"> <Bui

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

<GeneratePackageOnBuild>true</GeneratePackageOnBuild>
true
我也有我想要包含在nuget包中的资产 为了包括他们,我在csproj文件中有这个

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

没有一个
\生成\clidriver\
当我从VisualStudio构建时,资产很好地包含在生成的nuget包中。 但是,当我使用dotnet.exe构建时,不包括资产

为什么会有这种差异

有没有办法让dotnet.exe也包含我的资产

为什么会有这种差异

在VS中生成调用以生成项目,并调用msbuild以生成以.net core为目标的项目。因此,如果设置相同的siwtches,在大多数情况下,它们的构建和打包结果应该是相同的

1.它在我的机器上运行良好,在VS2017中构建和使用
的dotnet构建。net core3.0
具有相同的结果,它们都包括资产。因此,此问题可能与您的.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 build与configuration release一起使用时,它不包含资产,因为在
bin\release\netcoreapp\clidriver
中找不到这些资产。请检查您是否遇到类似问题。

您是否尝试了
msbuild/t:build
,而不是
dotnet build
?它的工作原理应该类似于在VS中构建,请共享有关运行dotnet build的.net sdk版本以及您的项目目标框架的更多详细信息,还有更好地解决问题的命令行参数的内容:)当它是.NET核心项目时,VS是否调用dotnet来启动构建?还是仍然调用msbuild?