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

时间:2016-06-12 11:19:25

标签: asp.net-core iis-8

我无法让dotnet publish-iis正确运行。

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

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

我在project.json中设置了一个postpublish脚本:

"scripts": {
    "postpublish": "dotnet publish-iis --publish-folder %publish:OutputPath% --framework %publish:FullTargetFramework%"
}

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

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

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

3 个答案:

答案 0 :(得分:6)

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

可能的解决方法:

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

答案 1 :(得分:0)

我遇到了这个问题并通过在include - &gt;中添加web.config解决了这个问题。来自project.json的publishOptions:

  "publishOptions": {
    "include": [
       ...
      "web.config"
    ]
  }

答案 2 :(得分:0)

我的观察是,这发生在您的终端意外关闭且服务器无法正常关闭时。最简单的解决方案是启动应用程序并正确停止它,然后尝试执行publish命令。

执行以下命令序列:

dotnet start
ctrl + c
dotnet publish ..