我有一个简单的.NET Core项目(控制台应用程序),我正在尝试编译和运行。 dotnet build
成功,但当我dotnet run
时出现以下错误:
λ dotnet run
Project RazorPrecompiler (.NETCoreApp,Version=v1.0) was previously compiled. Skipping compilation.
A fatal error was encountered. The library 'hostpolicy.dll' required to execute the application was not found in [path].
我的project.json看起来像这样:
{
"buildOptions": {
"warningsAsErrors": true
},
"dependencies": {
"Microsoft.AspNetCore.Razor": "1.0.0",
"Microsoft.NETCore.App": {
"type": "platform",
"version": "1.0.0"
}
},
"description": "Precompiles Razor views.",
"frameworks": {
"netcoreapp1.0": {
"imports": [ ]
}
},
"version": "1.2.0"
}
什么是hostpolicy.dll
,为什么会丢失?
答案 0 :(得分:21)
更新 dotnet core 2.0 :文件 appname.runtimeconfig.json (对于调试和发布配置)需要与 appname相同的路径。 DLL 强>
它包含:
{
"runtimeOptions": {
"tfm": "netcoreapp2.0",
"framework": {
"name": "Microsoft.NETCore.App",
"version": "2.0.0"
}
}
}
然后dotnet.exe exec "path/to/appname.dll" [appargs]
有效。
答案 1 :(得分:18)
此错误消息无效。 实际问题是缺少emitEntryPoint
属性:
"buildOptions": {
...
"emitEntryPoint": true
},
添加完成后,编译器会告诉您任何其他问题(例如缺少static void Main()
方法)。成功编译项目将导致dotnet run
可以执行的输出。
答案 2 :(得分:3)
我不确定为什么,但是在执行\ bin文件夹中的.exe文件时却遇到了问题,而\ obj文件夹中的.exe工作正常。
答案 3 :(得分:3)
如果我没记错的话,遇到问题的一种情况是:您有一个引用另一个应用程序项目(不是库)的集成项目。在这种情况下,dependentProject.runtimeconfig.json
将不会被复制到集成项目的输出文件夹中,并且您将无法运行dependentProject.exe
二进制文件,因为它将抛出The library hostpolicy.dll was not found.
。
为此有一个Github issue和一个workaround。
答案 4 :(得分:1)
这是在Visual Studio 2019预览版将.Net Core升级到最新预览版(特别是.Net Core 3.1.100-preview2-014569)时发生的。
重新安装/修复.Net Core 3.0.100为我解决了该问题。
答案 5 :(得分:1)
也许您不想执行“ Console .Net Core”项目,而不想执行“ Console .Net Framework”项目。它为我解决了问题...
答案 6 :(得分:1)
我在Dotnet Core 3.1 Console应用程序中遇到此问题。
如果要发布应用程序,请确保将目标运行时设置为目标计算机中已安装的特定运行时。
如果您设置为便携式,它将选择任何您认为合适的运行时(您可能没有安装)
答案 7 :(得分:1)
我的问题是我有 2 个 .NET Core App 项目,其中一个依赖另一个。 (这样我就可以从其他应用程序执行该应用程序) 但是 .NET Core 应用程序(使用默认配置) 需要<程序集名称>.runtimeconfig.json 文件 (获取一些启动配置) '默认不复制。
唯一对我有用的解决方案是添加到项目属性>构建事件(依赖项目的)这个命令:
COPY "$(SolutionDir)<dependency name>\$(OutDir)<dependency assymbly name>.runtimeconfig.json" "$(SolutionDir)$(ProjectName)\$(OutDir)" /Y
但是你也可以手动将
请注意,应该有一种更好、更通用的方法来自动为每个 .NET Core 应用项目执行此操作。
答案 8 :(得分:0)
对于我在Azure上使用ASP.NET Core 2.0,appname.deps.json就是这样做的。
答案 9 :(得分:0)
对我来说,问题在于版本不匹配。我安装了一个不同的“ .Net core SDK”版本,并且在.json文件中指定了一个不同的版本。
一旦我在.json文件中修改了版本,应用程序就会开始正常运行。
答案 10 :(得分:0)
在我的情况下,这是因为我正在为错误的目标发布自包含的应用程序。我的意图是在高山linux上运行,但是当我本应为libc
进行构建时,我正在为musl
进行构建。
失败的软件包是使用以下内容构建的:
dotnet publish --self-contained true --runtime linux-x64 --framework netcoreapp2.1 --output /app
更改RID:
dotnet publish --self-contained true --runtime linux-musl-x64 --framework netcoreapp2.1 --output /app
制作了功能包。请注意,RID从linux-x64
更改为linux-musl-x64
。如果我读过.NET Core RID Catalog page,这是可以避免的。
答案 11 :(得分:0)
对我来说,这是一个愚蠢的错误:我启动了错误的文件。
答案 12 :(得分:0)
.NET Core 3.0 WPF应用程序也有同样的问题,但我发现我的应用程序也无法在Visual Studio 2019中运行。
我在项目属性页(右键单击项目>属性)上发现Target框架设置为.NET Core 3.0。
我最近更新了VS 2019,该版本还安装了.NET Core 3.1,因此我在下拉列表中切换到该版本,然后它又重新工作了。
(我还必须更新我的快捷方式,使其指向netcoreapp3.1文件夹而不是以前的netcoreapp3.0文件夹。)
答案 13 :(得分:0)
推广voltrevo的评论作为答案,因为我认为这应该是该问题最常见的情况。构建解决方案时,有时可能会获得2个带有输出bin和obj的目录。 “ Bin”目录包含运行dotnet.exe命令所需的所有内容。只需从bin目录运行,一切应该很好。 :)
答案 14 :(得分:-2)
解决方案可能是以管理员身份执行cmd(至少对我来说是这样)。