.net 为什么dotnetbuild和visualstudio中的build产生不同的输出?
我正在构建一个生成nuget包的项目。 nuget包的配置在我的csproj文件中。我有.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
<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?