为什么在Visual Studio中构建和构建dotnet会产生不同的输出?

时间:2019-09-14 15:42:31

标签: .net visual-studio build nuget

我正在构建一个产生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也包含我的资产?

1 个答案:

答案 0 :(得分:0)

  

为什么会有这种区别?

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

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

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

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

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