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

时间:2011-11-14 11:21:09

标签: asp.net visual-studio visual-studio-2008 publish

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

enter image description here

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

20 个答案:

答案 0 :(得分:52)

我有同样的问题。梦魇来识别问题,因为日志和输出显示没有错误或失败。我只是得到了#34; Build:39成功了#34;和"发布:1失败"。

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

这需要很长时间!

但是,我的答案是 Microsoft.Net.Compilers

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

修改 - 对于它的价值,此问题发生在VS 2008,2012和2015上,但在2017年发生。

答案 1 :(得分:16)

你可以试试这个:

  
      
  1. 对Web应用程序执行预编译。

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

  4.         

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

Source link

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

答案 2 :(得分:9)

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

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

答案 3 :(得分:4)

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

答案 4 :(得分:3)

结论是:尝试另一个VS版本,看看是否可以。

这是为我做的。

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

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

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

答案 5 :(得分:3)

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

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

答案 6 :(得分:1)

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

答案 7 :(得分:1)

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

答案 8 :(得分:1)

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

答案 9 :(得分:0)

删除发布配置文件并创建另一个。为我工作

答案 10 :(得分:0)

如果有人更改了项目文件和相关框架的版本。然后发生了这种类型的问题。

请到 "C:\Program Files (x86)\Microsoft Visual Studio\2019\Professional\MSBuild\Microsoft\VisualStudio\v16.0\Web" 位置进行 Visual Studio 发布和构建设置 -> 编辑 -> 注释所有文件部分的强制复制。

enter image description here

答案 11 :(得分:0)

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

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

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

答案 12 :(得分:0)

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

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

答案 13 :(得分: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)。

答案 14 :(得分:0)

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

我启用了“发布时预编译”(位于“设置”>“文件发布选项”下)。关闭该选项对我有用。

答案 15 :(得分:0)

为此提出了许多解决方案。我认为他们使问题变得更加复杂。 我发现以下对我有用:

  1. 在您的解决方案中找到obj(发布或调试)文件夹
  2. 在Release或Debug文件夹中,删除“ AspnetCompileMerge”文件夹的内容

现在尝试发布。

答案 16 :(得分:0)

对我来说很简单-dist文件夹已锁定。我用解锁器将其解锁,然后恢复发布。

答案 17 :(得分:0)

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

答案 18 :(得分:-1)

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

答案 19 :(得分:-1)

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

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

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

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

修复了web.config后,再次尝试发布,一切正常。