CreateAppHost 任务意外失败。 MSB4018

问题描述 投票:0回答:11

当我尝试构建 ASP.NET Core 项目时,我继续在 Visual Studio 2019 中收到此错误消息。 当我第二次构建它时,错误消失了。

有谁知道这个错误意味着什么以及如何消除它?

谢谢!

<CreateAppHost AppHostSourcePath="$(AppHostSourcePath)"
                   AppHostDestinationPath="$(AppHostIntermediatePath)"
                   AppBinaryName="$(AssemblyName)$(TargetExt)"
                   IntermediateAssembly="@(IntermediateAssembly->'%(FullPath)')"
                   WindowsGraphicalUserInterface="$(_UseWindowsGraphicalUserInterface)"
                   Retries="$(CopyRetryCount)"
                   RetryDelayMilliseconds="$(CopyRetryDelayMilliseconds)"
                   />

visual-studio asp.net-core visual-studio-2019
11个回答
7
投票

尝试使用“以管理员身份”选项运行 Visual Studio。

完成构建所需的某些文件可能需要管理员权限才能访问它们。通常运行的 Visual Studio 没有足够的权限来访问它们


4
投票

我也有类似的问题。我的 ASP.NET Core 应用程序的错误消息是

error MSB4018: The "CreateAppHost" task failed unexpectedly.
error MSB4018: System.MissingMethodException: Method not found: 'Void Microsoft.NET.HostModel.AppHost.HostWriter.CreateAppHost(...

我将问题追溯到环境变量

MSBuildSDKsPath
,它指向较旧的 SDK 版本。使用
export MSBuildSDKsPath=
取消设置变量后,问题得到解决。或者,将变量设置为最新的 SDK 也可以:
export MSBuildSDKsPath=C:\Program Files\dotnet\sdk\6.0.100-rc.2.21505.57\Sdks
(仅作为示例)。

我不记得为什么我首先设置该变量,并且删除它似乎也没有什么坏处,我只是删除了它。看来一般来说,只是没有必要。


3
投票

如果仍然有此问题,请停止病毒和威胁防护 -> 实时防护,解决问题。

编辑 从控制台使用 dotnet 构建


3
投票

我注意到我的错误还指出: System.UnauthorizedAccessException:访问路径 '...\obj\Release etcoreapp3.1 pphost.exe'被拒绝。

删除 obj 文件夹并重建解决方案为我解决了问题。 谢谢。


1
投票

对我来说修复的是删除所有

bin
out
文件夹。

这是由于使用 VSCode 作为管理员造成的。显然,在我使用 VSCode 作为管理员构建解决方案后,有些问题导致了这个问题。


1
投票

对于在 dotnet core 中运行的应用程序,触发命令

dotnet clean
来清理所有二进制文件。然后 dotnet build 就可以了!


0
投票

它发生在docker上的

dotnet build
(dotnet-sdk-3.1,dist:CentOS 8.1)。

日志:

/usr/lib64/dotnet/sdk/3.1.111/Sdks/Microsoft.NET.Sdk/targets/Microsoft.NET.Sdk.targets(393,5): error MSB4018: The "CreateAppHost" task failed unexpectedly. [<PathToCsproj>.csproj]
 System.IO.IOException: The process cannot access the file '/<PathToCsprojDir>/obj/Debug/netcoreapp3.1/<AssemblyName>' because it is being used by another process. [<PathToCsproj>.csproj]
    at System.IO.FileStream.Init(FileMode mode, FileShare share, String originalPath) in /_/src/System.Private.CoreLib/shared/System/IO/FileStream.Unix.cs:line 86 [<PathToCsproj>.csproj]
    at System.IO.FileStream..ctor(String path, FileMode mode, FileAccess access, FileShare share, Int32 bufferSize, FileOptions options) in /_/src/System.Private.CoreLib/shared/System/IO/FileStream.cs:line 244 [<PathToCsproj>.csproj]
    at System.IO.FileSystem.CopyFile(String sourceFullPath, String destFullPath, Boolean overwrite) in /_/src/System.IO.FileSystem/src/System/IO/FileSystem.Unix.cs:line 25 [<PathToCsproj>.csproj]
    at System.IO.File.Copy(String sourceFileName, String destFileName, Boolean overwrite) in /_/src/System.IO.FileSystem/src/System/IO/File.cs:line 77 [<PathToCsproj>.csproj]
    at Microsoft.NET.HostModel.AppHost.BinaryUtils.CopyFile(String sourcePath, String destinationPath) [<PathToCsproj>.csproj]
    at Microsoft.NET.HostModel.AppHost.HostWriter.CreateAppHost(String appHostSourceFilePath, String appHostDestinationFilePath, String appBinaryFilePath, Boolean windowsGraphicalUserInterface, String assemblyToCopyResorcesFrom) [<PathToCsproj>.csproj]
    at Microsoft.NET.Build.Tasks.CreateAppHost.ExecuteCore() [<PathToCsproj>.csproj]
    at Microsoft.NET.Build.Tasks.TaskBase.Execute() [<PathToCsproj>.csproj]
    at Microsoft.Build.BackEnd.TaskExecutionHost.Microsoft.Build.BackEnd.ITaskExecutionHost.Execute() [<PathToCsproj>.csproj]
    at Microsoft.Build.BackEnd.TaskBuilder.ExecuteInstantiatedTask(ITaskExecutionHost taskExecutionHost, TaskLoggingContext taskLoggingContext, TaskHost taskHost, ItemBucket bucket, TaskExecutionMode howToExecuteTask) [<PathToCsproj>.csproj]

解决方案:

添加

CopyRetryCount
环境变量。 之后,它会发出警告。

export CopyRetryCount=100
dotnet build --verbosity quiet -c Debug

致谢:

这个答案可能偏离主题,但它有类似的信息。 这个问题有参数来解决我的问题,这非常有帮助。谢谢你。


0
投票

这种情况偶尔会发生。显然,VS有时会失去访问Obj文件中某些文件的权限。 对于这个问题有太多可能的解决方案:

  1. 关闭VS并以管理员身份重新启动,以便再次授予权限

  1. 关闭 VS > 删除项目 Obj 文件夹 > 打开 VS > 重建项目(如果 VS 没有自动执行)

0
投票

我在共享目录中运行代码,将文件夹移出共享目录并再次运行 dotnet 解决了错误。


0
投票

就我而言,文件夹路径太长。我只是将我的项目转移到一个短路径目录,即

D:/MyProject1
并且它可以工作。


-2
投票

由于系统下载了多个sdk版本。

将其从 c:/

中删除

然后它会删除错误

© www.soinside.com 2019 - 2024. All rights reserved.