似乎最近每晚RC2版本的更新改变了程序启动的方式。自更新以来,我现在在运行以下命令时出现错误。
// "commands": {
// "web": "Microsoft.AspNet.Server.Kestrel --server.urls http://localhost:1287"
// }
dnx --watch web
'Microsoft.AspNet.Server.Kestrel' does not contain a 'Program' type suitable for an entry point Stopped listening.
Startup.cs编译并具有以下方法。
public class Startup
{
public void ConfigureServices(IServiceCollection services, IHostingEnvironment env)
{ ... }
public void Configure(IApplicationBuilder app, IApplicationLifetime lifetime)
{ ... }
}
需要做些什么才能让程序启动最新的nightly版本?
以下是重现此问题的示例。 https://github.com/roydukkey/moist/tree/stackoverflow-34615917
sdk:v1.0.0-rc2-16357
答案 0 :(得分:2)
在aspnet/Hosting#521中,删除了多个入口点。
以前我们有多个Web应用程序入口点,包括托管(
Microsoft.AspNet.Hosting
),服务器(例如Microsoft.AspNet.Server.Kestrel
)和应用程序本身(例如Startup.cs
)。我们已经删除了Hosting和服务器中的入口点,因此唯一的入口点是来自应用程序。这需要更新project.json
,包括在emitEntryPoint
下将compilationOptions
设置为true,并将commands
设置为指向启动程序集。 aspnet/Announcements#131
要解决此问题,commands
设置需要指向程序集,而不是列出以前有效的服务器配置。此外,需要启用emitEntryPoint
设置。这两个设置均来自project.json
。
"compilationOptions": {
"emitEntryPoint": true
},
"commands": {
- "web": "Microsoft.AspNet.Server.Kestrel"
+ "web": "Web"
}
特定服务器配置现在位于hosting.json
。以下只是一个示例配置。
{
"server": "Microsoft.AspNet.Server.Kestrel",
"server.urls": "http://localhost:1234"
}
请参阅roydukkey/moist/tree/stackoverflow-34615917以查看整个问题的工作流程。
答案 1 :(得分:0)
您需要添加一个static
类,其中包含静态Main
方法。从那里,你需要托管它。如下所示:
public class Program
{
public static void Main(string[] args)
{
var configuration = WebApplicationConfiguration.GetDefault(args);
var application = new WebApplicationBuilder()
.UseApplicationBasePath(Directory.GetCurrentDirectory())
.UseConfiguration(configuration)
.UseStartup<Startup>()
.Build();
application.Run();
}
}
不确定是否是强制性的,但您可能还需要在project.json
中使用以下内容:
"compilationOptions": {
"emitEntryPoint": true
}
完整版:
{
"version": "1.0.0",
"compilationOptions": {
"emitEntryPoint": true
},
"dependencies": {
"Microsoft.AspNet.Server.Kestrel": "1.0.0-rc2-*",
"Microsoft.AspNet.Hosting": "1.0.0-rc2-*"
},
"frameworks": {
"dnx451": {},
"dnxcore50": {}
}
}