quamotion / dotnet-packaging

Extensions for the .NET Core CLI which help packaging and publishing .NET Core applications
MIT License
627 stars 85 forks source link

System.InvalidOperationException: No instances of MSBuild could be detected #245

Open WenningQiu opened 6 months ago

WenningQiu commented 6 months ago

I am getting the following error when running "dotnet rpm" command:

C:\work\git\infra\frameworkccs>dotnet rpm Src\Tool\Framework.CCS.RegionStatus.Daemon\Framework.CCS.RegionStatus.Daemon.csproj --no-restore -r linux-x64 -f net6.0 -c Release -o LocalStaging
Unhandled exception. System.InvalidOperationException: No instances of MSBuild could be detected.
Try calling RegisterInstance or RegisterMSBuildPath to manually register one.
   at Microsoft.Build.Locator.MSBuildLocator.RegisterDefaults()
   at Dotnet.Packaging.PackagingRunner..ctor(String outputName, String msbuildTarget, String commandName) in /__w/1/s/dotnet-rpm/PackagingRunner.cs:line 29
   at Dotnet.Packaging.Program.Main(String[] args) in /__w/1/s/dotnet-rpm/Program.cs:line 7

What does that mean and how do I get around it? Thanks in advance for any suggestion.

I am on dotnet-rpm version 0.1.220.

atauenis commented 6 months ago

Which versions of .NET SDK are installed? dotnet --info

WenningQiu commented 6 months ago

.NET 8.

C:\work\git\infra\frameworkccs>dotnet --list-sdks
8.0.100 [C:\Program Files\dotnet\sdk]
WenningQiu commented 6 months ago

More information...

My local machine environment where I test different versions:

C:\work\git\infra\frameworkccs>dotnet --info
.NET SDK:
 Version:           8.0.100
 Commit:            57efcf1350
 Workload version:  8.0.100-manifests.8d38d0cc

Runtime Environment:
 OS Name:     Windows
 OS Version:  10.0.19044
 OS Platform: Windows
 RID:         win-x64
 Base Path:   C:\Program Files\dotnet\sdk\8.0.100\

.NET workloads installed:
 Workload version: 8.0.100-manifests.8d38d0cc
 [maui-windows]
   Installation Source: VS 17.8.34330.188
   Manifest Version:    8.0.3/8.0.100
   Manifest Path:       C:\Program Files\dotnet\sdk-manifests\8.0.100\microsoft.net.sdk.maui\8.0.3\WorkloadManifest.json
   Install Type:              Msi

 [maccatalyst]
   Installation Source: VS 17.8.34330.188
   Manifest Version:    17.0.8478/8.0.100
   Manifest Path:       C:\Program Files\dotnet\sdk-manifests\8.0.100\microsoft.net.sdk.maccatalyst\17.0.8478\WorkloadManifest.json
   Install Type:              Msi

 [ios]
   Installation Source: VS 17.8.34330.188
   Manifest Version:    17.0.8478/8.0.100
   Manifest Path:       C:\Program Files\dotnet\sdk-manifests\8.0.100\microsoft.net.sdk.ios\17.0.8478\WorkloadManifest.json
   Install Type:              Msi

 [android]
   Installation Source: VS 17.8.34330.188
   Manifest Version:    34.0.43/8.0.100
   Manifest Path:       C:\Program Files\dotnet\sdk-manifests\8.0.100\microsoft.net.sdk.android\34.0.43\WorkloadManifest.json
   Install Type:              Msi

Host:
  Version:      8.0.0
  Architecture: x64
  Commit:       5535e31a71

.NET SDKs installed:
  8.0.100 [C:\Program Files\dotnet\sdk]

.NET runtimes installed:
  Microsoft.AspNetCore.App 3.1.32 [C:\Program Files\dotnet\shared\Microsoft.AspNetCore.App]
  Microsoft.AspNetCore.App 5.0.17 [C:\Program Files\dotnet\shared\Microsoft.AspNetCore.App]
  Microsoft.AspNetCore.App 6.0.25 [C:\Program Files\dotnet\shared\Microsoft.AspNetCore.App]
  Microsoft.AspNetCore.App 6.0.26 [C:\Program Files\dotnet\shared\Microsoft.AspNetCore.App]
  Microsoft.AspNetCore.App 7.0.14 [C:\Program Files\dotnet\shared\Microsoft.AspNetCore.App]
  Microsoft.AspNetCore.App 8.0.0 [C:\Program Files\dotnet\shared\Microsoft.AspNetCore.App]
  Microsoft.NETCore.App 3.1.32 [C:\Program Files\dotnet\shared\Microsoft.NETCore.App]
  Microsoft.NETCore.App 5.0.17 [C:\Program Files\dotnet\shared\Microsoft.NETCore.App]
  Microsoft.NETCore.App 6.0.25 [C:\Program Files\dotnet\shared\Microsoft.NETCore.App]
  Microsoft.NETCore.App 6.0.26 [C:\Program Files\dotnet\shared\Microsoft.NETCore.App]
  Microsoft.NETCore.App 7.0.14 [C:\Program Files\dotnet\shared\Microsoft.NETCore.App]
  Microsoft.NETCore.App 8.0.0 [C:\Program Files\dotnet\shared\Microsoft.NETCore.App]
  Microsoft.WindowsDesktop.App 3.1.32 [C:\Program Files\dotnet\shared\Microsoft.WindowsDesktop.App]
  Microsoft.WindowsDesktop.App 5.0.17 [C:\Program Files\dotnet\shared\Microsoft.WindowsDesktop.App]
  Microsoft.WindowsDesktop.App 6.0.25 [C:\Program Files\dotnet\shared\Microsoft.WindowsDesktop.App]
  Microsoft.WindowsDesktop.App 7.0.14 [C:\Program Files\dotnet\shared\Microsoft.WindowsDesktop.App]
  Microsoft.WindowsDesktop.App 8.0.0 [C:\Program Files\dotnet\shared\Microsoft.WindowsDesktop.App]

Other architectures found:
  x86   [C:\Program Files (x86)\dotnet]
    registered at [HKLM\SOFTWARE\dotnet\Setup\InstalledVersions\x86\InstallLocation]

Environment variables:
  Not set

global.json file:
  Not found

Learn more:
  https://aka.ms/dotnet/info

Download .NET:
  https://aka.ms/dotnet/download
WenningQiu commented 6 months ago

I am making progress after some debugging and test:

  1. I have to remove .NET 5 runtime on my machine in order for dotnet-rpm to use the .NET 6 version.
  2. Then I have to install .NET 6 SDK to get past "No instances of MSBuild could be detected" error.
WenningQiu commented 6 months ago

Now I am seeing following errors on one of our build machines:

[exec] Starting 'dotnet (rpm d:\Jenkins\workspace\24.2.0.0.0-ACPx-FrameworkCCS-DSM\Src\Tool\Framework.CCS.RegionStatus.Daemon\Framework.CCS.RegionStatus.Daemon.csproj -r linux-x64 -f net6.0 -c Release -o d:\Jenkins\workspace\24.2.0.0.0-ACPx-FrameworkCCS-DSM\LocalStaging)' in 'd:\Jenkins\workspace\24.2.0.0.0-ACPx-FrameworkCCS-DSM\SCM'
                 [exec] dotnet rpm (0.1.220+3f7bd3c61a)
                 [exec] MSBuild version 17.8.3+195e7f5a3 for .NET
                 [exec]   Framework.CCS.RegionStatus.Daemon -> d:\Jenkins\workspace\24.2.0.0.0-ACPx-FrameworkCCS-DSM\Src\Tool\Framework.CCS.RegionStatus.Daemon\bin\Release\net6.0\linux-x64\CSG.Framework.CCS.RegionStatus.Daemon.dll
                 [exec]   Framework.CCS.RegionStatus.Daemon -> d:\Jenkins\workspace\24.2.0.0.0-ACPx-FrameworkCCS-DSM\Src\Tool\Framework.CCS.RegionStatus.Daemon\bin\Release\net6.0\linux-x64\publish\
                 [exec]   Creating RPM package d:\Jenkins\workspace\24.2.0.0.0-ACPx-FrameworkCCS-DSM\LocalStaging\CSG.Framework.CCS.RegionStatus.Daemon.24.2.0.19.linux-x64.rpm
                 [exec] D:\Cache\.nuget\packages\packaging.targets\0.1.189\build\Packaging.Targets.targets(92,5): error MSB4018: The "RpmTask" task failed unexpectedly. [d:\Jenkins\workspace\24.2.0.0.0-ACPx-FrameworkCCS-DSM\Src\Tool\Framework.CCS.RegionStatus.Daemon\Framework.CCS.RegionStatus.Daemon.csproj]
                 [exec] D:\Cache\.nuget\packages\packaging.targets\0.1.189\build\Packaging.Targets.targets(92,5): error MSB4018: System.ArgumentException: Specified preset is not supported [d:\Jenkins\workspace\24.2.0.0.0-ACPx-FrameworkCCS-DSM\Src\Tool\Framework.CCS.RegionStatus.Daemon\Framework.CCS.RegionStatus.Daemon.csproj]
                 [exec] D:\Cache\.nuget\packages\packaging.targets\0.1.189\build\Packaging.Targets.targets(92,5): error MSB4018:    at Packaging.Targets.IO.XZOutputStream.Write(Byte[] buffer, Int32 offset, Int32 count) [d:\Jenkins\workspace\24.2.0.0.0-ACPx-FrameworkCCS-DSM\Src\Tool\Framework.CCS.RegionStatus.Daemon\Framework.CCS.RegionStatus.Daemon.csproj]
                 [exec] D:\Cache\.nuget\packages\packaging.targets\0.1.189\build\Packaging.Targets.targets(92,5): error MSB4018:    at System.IO.Stream.CopyTo(Stream destination, Int32 bufferSize) [d:\Jenkins\workspace\24.2.0.0.0-ACPx-FrameworkCCS-DSM\Src\Tool\Framework.CCS.RegionStatus.Daemon\Framework.CCS.RegionStatus.Daemon.csproj]
                 [exec] D:\Cache\.nuget\packages\packaging.targets\0.1.189\build\Packaging.Targets.targets(92,5): error MSB4018:    at Packaging.Targets.Rpm.RpmPackageCreator.CreatePackage(List`1 archiveEntries, Stream payloadStream, String name, String version, String arch, String release, Boolean createUser, String userName, Boolean installService, String serviceName, String vendor, String description, String url, String prefix, String preInstallScript, String postInstallScript, String preRemoveScript, String postRemoveScript, IEnumerable`1 additionalDependencies, Action`1 additionalMetadata, IPackageSigner signer, Stream targetStream, Boolean includeVersionInName, Boolean payloadIsCompressed) [d:\Jenkins\workspace\24.2.0.0.0-ACPx-FrameworkCCS-DSM\Src\Tool\Framework.CCS.RegionStatus.Daemon\Framework.CCS.RegionStatus.Daemon.csproj]
                 [exec] D:\Cache\.nuget\packages\packaging.targets\0.1.189\build\Packaging.Targets.targets(92,5): error MSB4018:    at Packaging.Targets.Rpm.RpmPackageCreator.CreatePackage(List`1 archiveEntries, Stream payloadStream, String name, String version, String arch, String release, Boolean createUser, String userName, Boolean installService, String serviceName, String vendor, String description, String url, String prefix, String preInstallScript, String postInstallScript, String preRemoveScript, String postRemoveScript, IEnumerable`1 additionalDependencies, Action`1 additionalMetadata, PgpPrivateKey privateKey, Stream targetStream) [d:\Jenkins\workspace\24.2.0.0.0-ACPx-FrameworkCCS-DSM\Src\Tool\Framework.CCS.RegionStatus.Daemon\Framework.CCS.RegionStatus.Daemon.csproj]
                 [exec] D:\Cache\.nuget\packages\packaging.targets\0.1.189\build\Packaging.Targets.targets(92,5): error MSB4018:    at Packaging.Targets.RpmTask.Execute() [d:\Jenkins\workspace\24.2.0.0.0-ACPx-FrameworkCCS-DSM\Src\Tool\Framework.CCS.RegionStatus.Daemon\Framework.CCS.RegionStatus.Daemon.csproj]
                 [exec] D:\Cache\.nuget\packages\packaging.targets\0.1.189\build\Packaging.Targets.targets(92,5): error MSB4018:    at Microsoft.Build.BackEnd.TaskExecutionHost.Microsoft.Build.BackEnd.ITaskExecutionHost.Execute() [d:\Jenkins\workspace\24.2.0.0.0-ACPx-FrameworkCCS-DSM\Src\Tool\Framework.CCS.RegionStatus.Daemon\Framework.CCS.RegionStatus.Daemon.csproj]
                 [exec] D:\Cache\.nuget\packages\packaging.targets\0.1.189\build\Packaging.Targets.targets(92,5): error MSB4018:    at Microsoft.Build.BackEnd.TaskBuilder.ExecuteInstantiatedTask(ITaskExecutionHost taskExecutionHost, TaskLoggingContext taskLoggingContext, TaskHost taskHost, ItemBucket bucket, TaskExecutionMode howToExecuteTask) [d:\Jenkins\workspace\24.2.0.0.0-ACPx-FrameworkCCS-DSM\Src\Tool\Framework.CCS.RegionStatus.Daemon\Framework.CCS.RegionStatus.Daemon.csproj]
                 [exec] d:\Jenkins\workspace\24.2.0.0.0-ACPx-FrameworkCCS-DSM\SCM\FrameworkCCS.build(45,8):
                 [exec] External Program Failed: dotnet (return code was 1)
MTeichlerRche commented 6 days ago

I could at least solve the "Preset not supported" error by going back all the way to version 0.1.70. I just jumped back 10 version at a time until the error went away, so I have no idea on which version the error was introduced, and I don't frankly care, I just care about the .deb package.

Edit: Celebrated too early, turns out that the package has unmet dependencies. But it doesn't say which.

atauenis commented 6 days ago

"Preset not supported" error

Try completely uninstall .NET and .NET SDK with everything, purge all its configuration files and registry entries, and then install back (also complete OS reinstall may be useful, if there is something broken by a buggy update previously installed). I'm using latest dotnet-packaging, and all is working on all machines where I'm doing my development process. Seems that this is .NET SDK-caused error, so, the old well default tip for every Microsoft product may be useful.

turns out that the package has unmet dependencies. But it doesn't say which.

It is bug of older versions of dotnet-packaging, which are producing packages for now obsolete versions of distributions. Every Linux distro update the libicu-** package gets renamed somewhy, and all packages became broken. I've fixed it in my app's csproj by adding a long list with 52-80 versions of it, which should be enough for near years. Also libssl package name were changed at some time (OpenSSL 1.1 -> 3.0), so need to keep both versions in dependency list. This is handled in latest dotnet-package versions, but it's better to handle it by your csproj.