我正在尝试在.NET Core
上托管Kestrel
的{{1}}应用程序。我似乎收到以下错误消息:
IIS
MISC
System.IO.FileNotFoundException: 'Could not load file or assembly 'Microsoft.AspNetCore.Server.IISIntegration, Version=2.1.1.0, Culture=neutral, PublicKeyToken=adb9793829ddae60'. The system cannot find the file specified.'
程序
class Address {
public string ProtocolType { get; set; } = "http";
public string Host { get; set; }
public long Port { get; set; }
public static Address Default = new Address { Host = "localhost", Port = 9300, ProtocolType = "http" };
}
static class AddressExtensions {
public static string ToUrl(this Address @this) {
return $"{@this.ProtocolType}//{@this.Host}:{@this.Port}";
}
}
启动
public class Program {
public static void Main(string[] args) {
CreateWebHostBuilder(args).Build().Start();
}
public static IWebHostBuilder CreateWebHostBuilder(string[] args) {
var builder=WebHost.CreateDefaultBuilder(args); //crashes here !!
builder.UseStartup("Startup");
var url = Address.Default.ToUrl();
builder.UseKestrel().UseUrls(url);
return builder;
}
}
为什么它尝试将其托管在public class Startup {
public void ConfigureServices(IServiceCollection services) {
services.AddMvcCore();
}
public void Configure(IApplicationBuilder app) {
app.Map("/http", x => x.UseMvc());
app.Map("/ws", x => {
});
app.UseMvc();
}
}
上?我必须指定我没有IIS
文件。它不是通过launchSettings.json
模板创建的。要在.NET Core App
之外运行,是否需要手动执行该操作?
如何使该服务器正常工作并在IIS
之外运行?
答案 0 :(得分:1)
首先,launchSettings.json
仅用于开发。部署应用程序后,它不会发布也不会使用。
第二,CreateDefaultBuilder()
除其他外,还添加了IIS集成服务。但是,这并不意味着您此时必须在IIS中托管。当然,您不应该因为包含IIS集成而收到错误消息,但您不是在IIS中托管。如果我不得不冒险猜测的话,我想您正在运行与服务器上安装的运行时不同的.NET Core SDK版本。确保两者彼此对齐。
如果您想完全摆脱IIS集成,则需要停止使用CreateDefaultBuilder
并手动执行操作,当然要减去IIS集成。您可以view the source来查看该方法在做什么。