当我在使用Visual Studio 2008时,尝试"发布网站"时,应用程序能够正确构建,但随后出现"发布失败"的错误消息:
可能导致这种情况的原因有哪些,如何避免?
当我在使用Visual Studio 2008时,尝试"发布网站"时,应用程序能够正确构建,但随后出现"发布失败"的错误消息:
可能导致这种情况的原因有哪些,如何避免?
我遇到了相同的问题,因为日志和输出没有显示任何错误或失败,所以很难确定问题所在。我通过逐个删除所有NuGet包(并删除引用它的代码)的方式,最终找出了有问题的那个。
这需要很长时间!
然而,对我来说答案是 Microsoft.Net.Compilers。
不知道我是怎么把它加入到项目中的,但是一旦我删除了该包,所有内容都可以正常发布。
编辑 - 值得一提的是,这个问题在VS 2008、2012和2015上发生,但在2017上不会发生。
对Web应用程序进行预编译。
清除目标目录(在IIS中为虚拟目录,或者是物理文件夹),并将所有文件(Web应用程序的文件)部署到目标目录。
您可以在输出窗口中检查发布网站操作失败的阶段。例如,在第一阶段,如果有些错误只会在预编译时发生,那么这将导致第一阶段失败。或者有时目标目录配置有误,例如IIS虚拟目录未设置为正确的ASP.NET版本,或者某些旧文件被锁定,无法清除。大多数情况下,发布失败是由IIS端的配置问题引起的,例如身份验证设置....
您可以通过按 Ctrl+W, O 来打开输出窗口。
有时候你需要以管理员身份运行VS才能够写入目标目录。
请检查输出消息,它们应该能够帮助你解决问题。
我不得不将项目复制到 C:\a\
,然后再发布。我怀疑路径太长会有问题。奇怪的是,这对我起作用了。
不确定这是否发生在不同版本的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中没有基本质量控制检查的。
有许多针对此问题的解决方案。我认为它们过于复杂化了这个问题。
以下是我发现适用的方法:
现在尝试发布。
在发布之前,请确保手动清空目标文件夹。有时候,Visual Studio无法删除某个文件,这会导致发布失败。
尝试重建后,我的解决方案中的其他项目能够正确发布,并将我的发布位置更改为C:驱动器(本地连接),而不是推送到映射的网络驱动器。但我仍然遇到了一个问题,唯一的错误输出如下:
"最初的回答"
========== Build: 5 succeeded, 0 failed, 0 up-to-date, 0 skipped ==========
========== Publish: 0 succeeded, 1 failed, 0 skipped ==========