dotnet publish-iis 在错误的地方寻找 web.config

dotnet publish-iis looking for web.config in wrong place

我无法正确地将 dotnet publish-iis 转换为 运行。

要发布我正在使用的项目:

dotnet publish ./src/RetailGuardian.Web/ -o ./code_drop/RetailGuardian.Web --runtime dnet452

并且我在 project.json:

中设置了发布后脚本
"scripts": {
    "postpublish": "dotnet publish-iis --publish-folder %publish:OutputPath% --framework %publish:FullTargetFramework%"
}

初始发布工作正常,并按预期将代码放置在 code_drop 目录中(这是我在 RC1 中部署的,并且工作正常)。但是,publish-iis 在尝试定位 web.config 时似乎不使用输出路径。这是 运行s:

时的输出
Configuring the following project for use with IIS: './code_drop/RetailGuardian.Web'
No web.config found. Creating './code_drop/RetailGuardian.Web\web.config'
Could not find a part of the path 'G:\Projects\retailguardian\src\RetailGuardian.Web\code_drop\RetailGuardian.Web\web.config'.
System.IO.DirectoryNotFoundException: Could not find a part of the path 'G:\Projects\retailguardian\src\RetailGuardian.Web\code_drop\RetailGuardian.Web\web.config'.
   at System.IO.Win32FileStream..ctor(String path, FileMode mode, FileAccess access, FileShare share, Int32 bufferSize, FileOptions options, FileStream parent)
   at System.IO.Win32FileSystem.Open(String fullPath, FileMode mode, FileAccess access, FileShare share, Int32
bufferSize, FileOptions options, FileStream parent)
   at System.IO.FileStream.Init(String path, FileMode mode, FileAccess access, FileShare share, Int32 bufferSize, FileOptions options)
   at Microsoft.AspNetCore.Server.IISIntegration.Tools.PublishIISCommand.Run()
   at Microsoft.AspNetCore.Server.IISIntegration.Tools.Program.<>c__DisplayClass0_0.<Main>b__0()
   at Microsoft.Extensions.CommandLineUtils.CommandLineApplication.Execute(String[] args)
   at Microsoft.AspNetCore.Server.IISIntegration.Tools.Program.Main(String[] args)
publish: Published to ./code_drop/RetailGuardian.Web
Published 1/1 projects successfully

因此它尝试使用源目录 G:\Projects\retailguardian\src\RetailGuardian.Web\code_drop\RetailGuardian.Web\web.config,而不是发布输出所在的 G:\Projects\retailguardian\code_drop\RetailGuardian.Web\web.config

(奇怪的是它还报告发布成功,即使发布后失败)

这似乎是一个错误,其中 dotnet 命令解析相对路径,然后更改当前目录以调用一个工具,该工具尝试再次解析路径,但现在它相对于不同的文件夹解析它,因此最终路径是不同的。感谢您报告此事 - 我在 cli 仓库中打开了一个问题:https://github.com/dotnet/cli/issues/3528

可能的解决方法:

  • 发布时使用绝对路径作为输出路径
  • 从项目文件夹发布

我遇到了这个问题,通过在 include -> publishOptions from project.json:

中添加 web.config 解决了这个问题
  "publishOptions": {
    "include": [
       ...
      "web.config"
    ]
  }

我的观察是,当您的终端意外关闭时,您的服务器没有正常关闭,就会发生这种情况。最简单的解决方案是启动您的应用程序并正确停止它,然后尝试执行发布命令。

执行以下命令序列:

dotnet start
ctrl + c
dotnet publish ..