从Visual Studio 2019在Kestrel下运行.NET 5 API会忽略launchSettings.json applicationUrl设置

x7rlezfr  于 2023-05-18  发布在  .NET
关注(0)|答案(2)|浏览(174)

我们有一个“只在我的机器上”的问题,没有人能弄清楚。
我们有一个.NET 5 API,我们在Kestrel下运行,用于开发目的。在运行Visual Studio中的API的每个其他开发虚拟机上,将获取launchSettings.json中的值并在正确的端口上启动。但是,在有问题的虚拟机上,它仅在默认的5000/5001端口上启动。
这是launchSettings.json文件的条目。

"profiles": {
    "My.Api": {
        "commandName": "Project",
        "environmentVariables": {
            "LogStorageAccountConnectionString": "UseDevelopmentStorage=true",
            "ASPNETCORE_ENVIRONMENT": "Development"
        },
        "applicationUrl": "https://localhost:7001;http://localhost:7000"
    }
}

我知道有一种方法可以告诉dotnet run显式忽略launchSettings.json,但在Visual Studio中找不到触发该行为的设置。
我们还认为这可能是文件夹上的权限问题,因为它们有点奇怪,所以我们将我们的repo克隆到一个新文件夹中,并再次设置API以在本地运行。它仍然运行在5000/5001上。
我们都被难倒了。有什么想法吗

kqlmhetl

kqlmhetl1#

我在Kestrel下用Visual Studio运行.NET 5 API(以及Blazor项目)时也遇到了同样的问题。然而,对我来说,它来得很突然--我成功地运行了几个星期的项目,然后有一天它开始拒绝遵守launchSettings.json,并继续在默认的5000/5001上运行。
我通过将Visual Studio从16.8.3升级到16.8.4来解决这个问题。然而,由于我最初在16.8.3上没有遇到问题,我怀疑问题不是关于Visual Studio版本的。我想我原来的安装以某种方式损坏了,升级只是修复了损坏。
顺便说一句,当我使用dotnet run从命令行运行项目时,我的launchSetting.json很荣幸。我还可以使用一种变通方法,方法是在Program.cs中设置端口

public static IHostBuilder CreateHostBuilder(string[] args) =>
        Host.CreateDefaultBuilder(args)
            .ConfigureWebHostDefaults(webBuilder =>
            {
                webBuilder.UseStartup<Startup>();
                webBuilder.UseUrls("https://localhost:6000");
            });
vfwfrxfs

vfwfrxfs2#

我们在Visual Studio 2022中的.NET 5和.NET 6也遇到了这个问题,唯一有效的方法是在launchSettings.jsonenvironmentVariables部分设置(显然没有文档)变量Urls。换句话说:

"profiles": {
    "My.Api": {
        "commandName": "Project",
        "environmentVariables": {
            "LogStorageAccountConnectionString": "UseDevelopmentStorage=true",
            "ASPNETCORE_ENVIRONMENT": "Development",
            "Urls": "https://localhost:7001;http://localhost:7000"
        }
    }
}

遗憾的是VS的“LaunchProfiles”对话框并没有选择这个值,也不允许你设置它,但是手动编辑launchSettings.json并不是一件很痛苦的事情。
更新
我们发现这个问题是由于我们在Startup.cs的ConfigureContainer方法中使用了Autofac和以下内容:

builder.RegisterInstance(configuration.ConfigurationRoot)
    .As<IConfiguration>().SingleInstance();

其中,configuration是我们的自定义配置提供程序,ConfigurationRoot的类型是IConfigurationRoot
我们不太确定为什么要添加这一行,所以我们删除了它,一切似乎都正常工作,包括传递--urls参数。

相关问题