我去通过Visual Studio 2017中的“发布”屏幕使用Azure发布asp.net核心Web应用程序。我使用了所有默认值,但是我的应用程序使用迁移功能,因此我不得不告诉它在发布配置文件中运行它们
当我尝试访问该网站时,我得到:
由于发生内部服务器错误,因此无法显示该页面。
我觉得我需要对连接字符串和ASPNETCORE_ENVIRONMENT变量进行一些操作。
我仍然拥有在创建新的asp.net核心Web应用程序时获得的默认appsettings.json和appsettings.Development.json。 appsettings.json指向我的本地开发数据库,而appsettings.Development.json则指向发布配置文件中的azure数据库。
还是发布配置文件会自动处理连接字符串,而我不需要执行上述任何操作?
答案 0 :(得分:21)
默认情况下,ASP.NET Core 2.2应用程序配置为使用新的In Process托管模型。直到2018年12月某个时候,该功能才在所有地区的Azure上提供。他们提到了here。
目前的解决方案是在Web应用程序的.csproj文件顶部添加以下内容:
<PropertyGroup>
<AspNetCoreModuleName>AspNetCoreModule</AspNetCoreModuleName>
<AspNetCoreHostingModel>OutOfProcess</AspNetCoreHostingModel>
</PropertyGroup>
答案 1 :(得分:1)
答案 2 :(得分:1)
一种简单的解决方案是将azure-db连接字符串放在appsettings.json
中,而不是appsettings.Development.json
中。
在VS2017中运行默认生成的asp.net核心应用程序时,您可以在Properties文件夹中找到launchSettings.Json
文件,其中包含将在本地运行的配置文件。
在那里,在个人资料部分下,您可以看到ASPNETCORE_ENVIRONMENT
属性设置为 Development 。
"WebApp": {
"commandName": "Project",
"launchBrowser": true,
"applicationUrl": "http://localhost:5000",
"environmentVariables": {
"ASPNETCORE_ENVIRONMENT": "Development"
}
}
这意味着,如果在appsettings.Development.json中定义本地数据库连接字符串,则在本地运行时将使用其连接字符串。
如果您未定义ASPNETCORE_ENVIRONMENT
属性,则运行时将仅使用appsettings.json值(运行时会将ASPNETCORE_ENVIRONMENT
设置为 Production 作为默认值,但如果您没有定义任何appsettings.Production.json
,那么只会使用appSettings.json
中的值。)
因此,在运行Azure Web App时,如果将azure-db连接字符串放在ASPNETCORE_ENVIRONMENT
中,则根本不需要指定appsettings.json
。
答案 3 :(得分:0)
我将AspNet Core 3.0网站部署到Azure,并收到HTTP 500服务器错误。
这是在web.config中:
<system.webServer> <handlers> <add name="aspNetCore" path="*" verb="*" modules="AspNetCoreModuleV2" resourceType="Unspecified" /> </handlers> <aspNetCore processPath="dotnet" arguments=".\BedtimeWeb.dll" stdoutLogEnabled="false" stdoutLogFile=".\logs\stdout" hostingModel="InProcess" /> </system.webServer>
我将 AspNetCoreModuleV2 更改为 AspNetCoreModule ,然后错误变为HTTP 502.3。
然后我删除了 hostingModel =“ InProcess” 属性,然后该网站开始正常运行。