'发布失败'但构建成功了吗?

问题描述 投票:43回答:18

使用Visual Studio 2008时,当我“发布网站”时,应用程序正确构建,但随后我收到“发布失败”消息:

有什么可能的原因,我该如何预防呢?

asp.net visual-studio visual-studio-2008 publish
18个回答
16
投票

你可以试试这个:

  1. 对Web应用程序执行预编译。
  2. 清除目标目录(IIS或物理文件文件夹中的虚拟目录)并将(Web应用程序的)所有文件部署到目标目录中。

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

Source link

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


0
投票

在我的例子中,我发布到映射网络驱动器中的目录,但是输出面板/窗口指示该位置不存在。路径是正确的,驱动器是完全可访问的。当我使用...按钮重新设置要在Visual Studio中发布的路径时,问题自行解决。


0
投票

和我一起很简单 - dist文件夹被锁定了。我通过解锁器解锁它并恢复发布。


0
投票

为此提出了许多解决方案。我认为他们过分复杂了这个问题。我发现以下内容对我有用:

  1. 在解决方案中找到obj(Release或Debug)文件夹
  2. 在Release或Debug文件夹中,删除'AspnetCompileMerge'文件夹的CONTENTS

现在尝试发布。


0
投票

我有几个在web.config中注册的用户控件,并在.ascx文件头中有一个ClassName。对于普通版本,一切正常,但是通过发布,这些类名称不再被识别。在某些时候,我发现错误不在我的常规代码文件中,而是在临时目录中的副本中用于发布。

我打开了“发布时预编译”(可在“设置”>“文件发布选项”下找到)。关闭该选项对我有用。


0
投票

我对VS2017的网站项目也有同样的问题。构建工作,但发布给了我一个错误:Error CS0012: The type 'System.Net.Http.HttpMessageHandler' is defined in an assembly that is not referenced. You must add a reference to assembly 'System.Net.Http, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a'.我所有的项目都已经引用了System.Net.Http所以它真的很混乱。

要修复它,我必须将System.Net.Http.dll复制到我的网站项目/ bin文件夹中,以便发布可以找到它并将其复制到我的Web主机。我通过查看另一个项目的引用(类库),然后查看System.Net.Http.dll属性,并查看路径(C:\ Program Files(x86)\ Reference Assemblies \ Microsoft \找到了System.Net.Http.dll Framework.NetFramework \ V4.6 \ System.Net.Http.dll)。


0
投票

我知道我迟到但我认为它应该用于正在搜索此查询的人。

只需卸载所有nuget包,然后清理并重建解决方案,现在点击发布,确定它有效,你会看到发布开始并正常工作


0
投票

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

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

我的解决方案是针对x86,但我认为在Git Merge期间,该项目的配置文件已切换到任何CPU。在为项目创建x86配置文件并使其与发布目标和活动解决方案配置的目标匹配后,我能够再次成功发布。


-1
投票

导致我的问题的原因有点不同,但与上述一些原因有相似之处。

我设法删除了给定应用程序的本地副本,并进行了GIT硬重置以从相关存储库中获取最新信息。这反过来消灭了web.config文件(由于各种原因未存储在GIT存储库中)。

这导致各种NuGet包的配置信息“丢失”(因为它存储在web.config中)。

幸运的是,我已经“备份”了web.config,所以一旦我发现它不存在(迁移失败,因为我无法连接到数据库),我就能够替换它。

在修复web.config之后再次尝试发布,一切都运行良好。


-1
投票

如果在发布Web对话框中选择“删除发布前的所有现有文件”,请确保以管理员权限启动Visual Studio。右键单击Visual Studio,然后单击以管理员身份运行。希望这可以帮助。


53
投票

我遇到过同样的问题。梦魇来识别问题,因为日志和输出显示没有错误或失败。我只是得到“Build:39 succeeded”和“Publish:1 failed”。

我通过系统地一次删除所有NuGet包(并删除引用它的代码)解决了这个问题,直到我找到了有问题的包。

这需要很长时间!

但是,对我来说,答案是Microsoft.Net.Compilers。

不知道我是如何在我的项目中得到的那样,但是一旦我删除了那个包,一切都会再次发布。

编辑 - 对于它的价值,这个问题发生在VS 2008,2012和2015上,但不会发生在2017年。


9
投票

有时这是因为您需要以管理员身份运行VS才能写入目标目录。

检查输出消息,它们应该可以帮助您解决问题


4
投票

我不得不将项目复制到C:\a\而不是发布。我怀疑长路有问题。奇怪,但为我工作。


3
投票

结论是:尝试另一个VS版本,看看是否这样做。

这是为我做的事情。

我有VS 2013 Pro和Visual Studio 2015社区。我有点使用一个或另一个来处理我的MVC项目,一切都很好。然后所有突然的VS 2013都无法发布虽然它会建立得很好。除了一些愚蠢之外没有错误......所有路径都没有返回代码......

因此,当我在VS 2017中打开它时 - 它发布了同样的项目就好了。我怀疑是一个编译问题 - 因为这是它失败的阶段。

希望能帮助您节省一些时间。


3
投票

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

正如@SimonGoldstone指出的那样,问题是由“Microsoft.Net.Compilers”软件包引起的。默认情况下,在创建新的Web应用程序时,会将包添加到解决方案中。默认版本1.0.0不会引入任何问题。我能够继续测试最新版本直到2.4.0并且一切正常,但从2.6.0开始就是这一切。如果严格要求更新,我建议更新上述软件包直到版本2.4.0。在做了一些研究后,似乎在2.4.0之后的版本中引入了一些错误,并且从长远来看并没有修复。但奇怪的是,这个问题如何被包含在Nuget中而没有基本的质量控制检查点。


1
投票

检查Project BIn目录。必须有您的页面或控件的DLL。必须在发布期间重新创建。所以将其排除或删除它


1
投票

我今天遇到了同样的问题,这是由于我打开图像文件夹以查找图像时创建的Thumbs.db文件。我删除了文件并成功部署了项目。希望这可以帮助处于相同情况的其他人。


1
投票

确保在发布之前清空目标文件夹(手动)。有时vs cant删除会导致发布失败的文件

© www.soinside.com 2019 - 2024. All rights reserved.