“发布失败”,但是构建成功了?

58

当我在使用Visual Studio 2008时,尝试"发布网站"时,应用程序能够正确构建,但随后出现"发布失败"的错误消息:

在此输入图片描述

可能导致这种情况的原因有哪些,如何避免?


@yytg - 你需要什么样的信息?我没有收到任何警告。构建成功了,为什么发布会失败呢? - Curtis
2
@curt:输出窗口日志可能会提供一些更多所需的信息。此外,请检查此链接:http://bytes.com/topic/asp-net/answers/595252-publish-failed - NaveenBhat
嗨@Knvn,这解决了我的问题。我不知道我可以检查那个。我编译的文件夹没有正确的权限。请创建一个答案,我会标记它 :) - Curtis
对我来说,当我尝试使用“Delete Existing Files = true”选项发布服务时,服务目录中包含一个我一直在使用的文件。所以我关闭了该文件,然后服务成功发布了。 - Alex34758
在我的情况下(VS 2017),当“发布失败”消息弹出后,输出窗口立即清除。我几乎没有时间截屏。 - Alex34758
已经过去了10年,我们在最新的VS上仍然存在同样的问题。难以置信。 - Can Poyrazoğlu
25个回答

67

我遇到了相同的问题,因为日志和输出没有显示任何错误或失败,所以很难确定问题所在。我通过逐个删除所有NuGet包(并删除引用它的代码)的方式,最终找出了有问题的那个。

这需要很长时间!

然而,对我来说答案是 Microsoft.Net.Compilers

不知道我是怎么把它加入到项目中的,但是一旦我删除了该包,所有内容都可以正常发布。

编辑 - 值得一提的是,这个问题在VS 2008、2012和2015上发生,但在2017上不会发生。


11
我的问题也是如此,谢谢。我必须先移除 _CodeDom.Providers.DotNetCompilerPlatform_,因为它依赖于 _Net.Compilers_。 - Mackan
3
就我所知,如果我使用 Microsoft.Net.Compilers 的 2.4 版本,我的发布会成功。但如果升级到其他版本,则无法进行发布。 - Dan
1
这对我解决了问题,如果你有同样的问题,那么值得尝试。然而,现在我会注意是否包含这些程序集,并且我已经注意到,有时项目会包含它们而没有任何发布问题。(不同版本?构建设置?我不知道为什么有时会导致发布失败。) - Roger Hill
1
哇!移除Microsoft.Net.Compilers解决了我的问题!我想在采取困难的方法之前尝试一下,结果就是这样。我很想知道为什么-以后得研究一下。 - Steve
1
这对我有用,即使我没有进一步识别和单独定位有问题的软件包。我删除了整个软件包文件夹,然后选择发布而不是手动重建解决方案,结果它起作用了。 - Harold_Finch
显示剩余3条评论

18
您可以尝试以下方法:
  1. 对Web应用程序进行预编译。

  2. 清除目标目录(在IIS中为虚拟目录,或者是物理文件夹),并将所有文件(Web应用程序的文件)部署到目标目录。

您可以在输出窗口中检查发布网站操作失败的阶段。例如,在第一阶段,如果有些错误只会在预编译时发生,那么这将导致第一阶段失败。或者有时目标目录配置有误,例如IIS虚拟目录未设置为正确的ASP.NET版本,或者某些旧文件被锁定,无法清除。大多数情况下,发布失败是由IIS端的配置问题引起的,例如身份验证设置....

来源链接

您可以通过按 Ctrl+W, O 来打开输出窗口。


我不得不完全删除源文件夹并从git重新克隆。一旦我这样做了,部署就可以正常工作,没有警告或错误! - Owen

11

有时候你需要以管理员身份运行VS才能够写入目标目录。

请检查输出消息,它们应该能够帮助你解决问题。


这是对我起作用的方法,只需右键单击 VS,以管理员身份运行,然后打开刚刚打开的 VS 中的项目。 - RedNet

6

我不得不将项目复制到 C:\a\,然后再发布。我怀疑路径太长会有问题。奇怪的是,这对我起作用了。


1
我在Windows 10上仍然遇到这个问题...该消息在“Web发布活动”窗口中显示了一次。有关文件路径大于260个字符的内容,与https://msdn.microsoft.com/en-us/library/windows/desktop/aa365247(v=vs.85).aspx#maxpath相匹配。但是自那以后我已经尝试过多次发布,而且没有再出现该消息。 - Stephen
谢谢,我成功地将项目从共享驱动器复制到本地文件夹后,已经发布了应用程序。我使用的是VS 2022。 - ln29st

4
结论是:尝试使用另一个版本的VS,看看是否可行。
以下是我做出的某些更改。
我拥有VS 2013专业版和Visual Studio 2015社区版。 我通常使用其中之一来处理我的MVC项目,一切都很好。 然后突然间,虽然它可以正常构建,但VS 2013不能发布。 除了一些愚蠢的... 代码未从所有路径返回...之外,没有其他错误。
所以当我在VS 2017中打开它时,它可以成功发布相同的项目。 我怀疑是编译问题-因为这是它会失败的阶段。
希望这能帮助你节省一些时间。

1
谢谢Alexey Shevelyov。你给了我一个想法。我的项目是在VS2017中创建的,我试图从VS2013发布它,所以它会抛出错误,当我尝试使用VS2017时,它可以工作。 - Dharmendra Prajapati

3

不确定这是否发生在不同版本的Visual Studio中,但至少在2015专业版中,当我们尝试使用Packages Manager从解决方案更新所有Nuget软件包时,问题就会出现。

正如@SimonGoldstone指出的那样,该问题是由软件包"Microsoft.Net.Compilers"引起的。默认情况下,在创建新Web应用程序时,该软件包会添加到解决方案中。默认版本1.0.0不会引入任何问题。我能够一直测试最新版本直到2.4.0,一切都很好,但从2.6.0开始就有问题了。如果必须进行更新,我建议将上述软件包更新到版本2.4.0。经过一些研究,似乎比2.4.0更高版本的一些错误被引入并且长期未被修复。然而,有趣的是,这个问题是如何被包含在Nuget中没有基本质量控制检查的。


2
此外,版本2.4.0之前似乎依赖于Microsoft.CodeDom.Providers.DotNetCompilerPlatform,而2.4.0及以后的版本不再依赖。 - Mark Meyerovich

3

有许多针对此问题的解决方案。我认为它们过于复杂化了这个问题。

以下是我发现适用的方法:

  1. 找到您解决方案中的obj(Release或Debug)文件夹
  2. 在Release或Debug文件夹内删除 'AspnetCompileMerge' 文件夹的所有内容

现在尝试发布。


2
试过了,不起作用。甚至删除了整个 obj 文件夹。 - Harold_Finch

3

在发布之前,请确保手动清空目标文件夹。有时候,Visual Studio无法删除某个文件,这会导致发布失败。


2

尝试重建后,我的解决方案中的其他项目能够正确发布,并将我的发布位置更改为C:驱动器(本地连接),而不是推送到映射的网络驱动器。但我仍然遇到了一个问题,唯一的错误输出如下:

"最初的回答"

========== Build: 5 succeeded, 0 failed, 0 up-to-date, 0 skipped ==========
========== Publish: 0 succeeded, 1 failed, 0 skipped ==========

我的解决方案是针对x86的,但我认为在Git合并过程中,该项目的配置文件被切换到了任意CPU。创建一个x86的配置文件,并确保它与发布目标和当前解决方案配置的目标匹配,我就能够成功地再次发布了。"最初的回答"

1
我今天遇到了同样的问题,原因是当我打开我的图片文件夹查找图片时,创建了Thumbs.db文件。我删除了该文件,项目成功部署。希望这能帮助其他遇到同样情况的人。

我从sln文件夹中删除了一张图片,但它在VS中显示。我从VS中删除了一张图片,然后发布成功了。 - leyla azari

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接