I`m facing an error when trying to deploy an .NET API project to Azure using Azure App Service Deployment Center.
This is the error:
Project "D:homesiterepositoryApiCustom.Common.APICustom.Common.API.csproj" on node 1 (Restore target(s)).
D:homesiterepositoryApiCustom.Common.APICustom.Common.API.csproj : error MSB4242: SDK Resolver Failure: "The SDK resolver "Microsoft.DotNet.MSBuildSdkResolver" failed while attempting to resolve the SDK "Microsoft.NET.Sdk.Web". Exception: "System.IO.DirectoryNotFoundException: Could not find a part of the path 'D:Program Files (x86)dotnetsdk-manifests'.
D:homesiterepositoryApiCustom.Common.APICustom.Common.API.csproj : error MSB4242: at System.IO.__Error.WinIOError(Int32 errorCode, String maybeFullPath)
D:homesiterepositoryApiCustom.Common.APICustom.Common.API.csproj : error MSB4242: at System.IO.FileSystemEnumerableIterator`1.CommonInit()
D:homesiterepositoryApiCustom.Common.APICustom.Common.API.csproj : error MSB4242: at System.IO.FileSystemEnumerableIterator`1..ctor(String path, String originalUserPath, String searchPattern, SearchOption searchOption, SearchResultHandler`1 resultHandler, Boolean checkHost)
D:homesiterepositoryApiCustom.Common.APICustom.Common.API.csproj : error MSB4242: at System.IO.Directory.GetDirectories(String path)
D:homesiterepositoryApiCustom.Common.APICustom.Common.API.csproj : error MSB4242: at Microsoft.NET.Sdk.WorkloadManifestReader.SdkDirectoryWorkloadManifestProvider.FallbackForMissingManifest(String manifestId)
D:homesiterepositoryApiCustom.Common.APICustom.Common.API.csproj : error MSB4242: at Microsoft.NET.Sdk.WorkloadManifestReader.SdkDirectoryWorkloadManifestProvider.GetManifestDirectories()
D:homesiterepositoryApiCustom.Common.APICustom.Common.API.csproj : error MSB4242: at Microsoft.NET.Sdk.WorkloadManifestReader.SdkDirectoryWorkloadManifestProvider.<GetManifests>d__7.MoveNext()
D:homesiterepositoryApiCustom.Common.APICustom.Common.API.csproj : error MSB4242: at Microsoft.NET.Sdk.WorkloadManifestReader.WorkloadResolver.LoadManifestsFromProvider(IWorkloadManifestProvider manifestProvider)
D:homesiterepositoryApiCustom.Common.APICustom.Common.API.csproj : error MSB4242: at Microsoft.NET.Sdk.WorkloadManifestReader.WorkloadResolver.Create(IWorkloadManifestProvider manifestProvider, String dotnetRootPath, String sdkVersion, String userProfileDir)
D:homesiterepositoryApiCustom.Common.APICustom.Common.API.csproj : error MSB4242: at Microsoft.NET.Sdk.WorkloadMSBuildSdkResolver.CachingWorkloadResolver.Resolve(String sdkReferenceName, String dotnetRootPath, String sdkVersion, String userProfileDir)
D:homesiterepositoryApiCustom.Common.APICustom.Common.API.csproj : error MSB4242: at Microsoft.DotNet.MSBuildSdkResolver.DotNetMSBuildSdkResolver.Resolve(SdkReference sdkReference, SdkResolverContext context, SdkResultFactory factory)
D:homesiterepositoryApiCustom.Common.APICustom.Common.API.csproj : error MSB4242: at Microsoft.Build.BackEnd.SdkResolution.SdkResolverService.ResolveSdk(Int32 submissionId, SdkReference sdk, LoggingContext loggingContext, ElementLocation sdkReferenceLocation, String solutionPath, String projectPath, Boolean interactive, Boolean isRunningInVisualStudio)""
Done Building Project "D:homesiterepositoryApiCustom.Common.APICustom.Common.API.csproj" (Restore target(s)) -- FAILED.
Build FAILED.
What can I do to resolve this?
4
Answers
One of the workarounds is to use Azure pipelines.
REFERENCES: Deploy ASP.NET Core websites to Azure App Service with Azure Pipelines
I fix this by adding this global.json file on the root project folder
It might be different depending on your dotnet sdk version. But just don’t use version 6.
It seems that some planned migration happened to some of Azure App Service machines at around 14-15 May 2022 resulting in the folder
D:Program Files (x86)dotnetsdk-manifests
disappearing and causing anydotnet publish
or anymsbuild
call to fail, if it needs to resolve a .NET SDK reference in the project:Until this is fixed properly by the Azure team, the following workaround can be used:
Uploaded the
sdk-manifests
folder, with all the contents, from any machine which has the same version of the .NET SDK installed as the one required (used) by your publishing script (which can be set via global.json) to the FTP deployment root folder on Azure App Service, which isD:home
there, also referred to via the%HOME%
environment variable.Add the following command immediately before your "dotnet publish" or "msbuild" call:
set DOTNETSDK_WORKLOAD_MANIFEST_ROOTS=%HOME%sdk-manifests
It appears that SDK version 6.0.201 is the version which has the issue.
I was able to deploy after pinning the SDK version using the global-json file.
How to pin sdk version: https://learn.microsoft.com/en-us/dotnet/core/tools/global-json