.NET core 3 API,在 Mac 上使用 Visual Studio Code 开发:如何在 IIS 上部署和配置?

Posted

技术标签:

【中文标题】.NET core 3 API,在 Mac 上使用 Visual Studio Code 开发:如何在 IIS 上部署和配置?【英文标题】:.NET core 3 API, develop on Mac with Visual Studio Code: how deploy and configure on IIS? 【发布时间】:2020-04-07 16:21:09 【问题描述】:

我在 Mac 上使用 Visual Studio Code 开发了一个带有 .Net Core 3 的 Web API,没有问题。 我用命令发布: dotnet publish -c release

但我无法在 IIS 上部署: 发布命令不会生成任何“web.config”文件,所以我使用我在网上找到的这个配置(可能是针对 Core 2.0 的?):

<?xml version="1.0" encoding="utf-8"?>
<configuration>
  <location path="." inheritInChildApplications="false">
    <system.webServer>
      <handlers>
        <add name="aspNetCore" path="*" verb="*" modules="AspNetCoreModuleV2" resourceType="Unspecified" />
      </handlers>
      <aspNetCore processPath="dotnet"
                  arguments=".\thenameofmydll.dll"
                  stdoutLogEnabled="false"
                  stdoutLogFile=".\logs\stdout"
                  hostingModel="inprocess" />
    </system.webServer>
  </location>
</configuration>

我的“program.cs”:

public class Program
    
        public static void Main(string[] args)
        
            CreateHostBuilder(args).Build().Run();

        

         public static IHostBuilder CreateHostBuilder(string[] args) =>
           Host.CreateDefaultBuilder(args)
                .ConfigureWebHostDefaults(webBuilder =>
                
                    webBuilder.UseStartup<Startup>();
                ); 
    

我的问题:

“program.cs”是否可以与 IIS 一起使用?

“web.config”是否正确?

我在网上找到了几个示例,但所有这些都是部分或不完整的......如果我要求以前问过的东西,很抱歉,但我找不到 .Net Core 3 的完整示例

谢谢!

【问题讨论】:

无法重现您所说的内容。 web.config 即使在 macOS 上也会生成。 【参考方案1】:

根据asp.net core document:

如果省略 -r 参数,则会为您当前的平台创建一个可执行文件。

我建议您可以尝试在命令中设置运行时版本,然后重试。它将添加 web.config 文件。

dotnet publish
 -c Release
 -f netcoreapp3.1 
-r win-x64 

此外,任何具有目标平台特定平台依赖项的 NuGet 包都将复制到发布文件夹。

【讨论】:

【参考方案2】:

有 Microsoft documentations 可用于 IIS 中的 .Net CORE 3.x 应用程序部署。 简而言之,首先您需要在 IIS 服务器中为 .Net core 3.x 安装 Hosting bundle。 然后,您可以将应用程序发布为自包含应用程序或依赖于框架的应用程序。您可以在设置发布设置时选择此选项。

你的 web.config 应该是这样的

<configuration>
   <location path="." inheritInChildApplications="false">
     <system.webServer>
       <handlers>
         <add name="aspNetCore" path="*" verb="*" modules="AspNetCoreModuleV2" 
         resourceType="Unspecified" />
       </handlers>
       <aspNetCore processPath=".\<app name>.exe" 
       stdoutLogEnabled="false" stdoutLogFile=".\logs\stdout" hostingModel="inprocess" 
       />
    </system.webServer>
  </location>
</configuration>

【讨论】:

以上是关于.NET core 3 API,在 Mac 上使用 Visual Studio Code 开发:如何在 IIS 上部署和配置?的主要内容,如果未能解决你的问题,请参考以下文章

ASP.NET Core 3.1 Angular Web App 在 Windows 上构建和运行,但在 Mac OSX 和 Docker 上失败

使用 Visual Studio for Mac 使用 SpecFlow 进行 .NET Core 集成测试

ASP.NET Core api 项目 3.1 在 IIS 上发布

翻译在Mac上使用VSCode创建你的第一个Asp.Net Core应用

从 .NET Core 2.2 迁移到 3.1 后,EF Core 随机抓取 API 请求上的用户表

工具篇在Mac上开发.Net Core需要的工具