ASP.NET MVC发布不会覆盖cshtml文件

6
我一直都很顺利地发布我的网站,但今天我注意到它无法用新版本覆盖现有的.cshtml Razor文件。我发布后查看文件夹,发现文件仍然过时。如果我删除文件然后再次发布,它会将新版本放在那里。但如果该文件已经存在,则不会覆盖它,导致我的生产网站过时。我尝试了选项“在发布前删除文件”,但遇到了访问错误,无法删除文件夹。我尝试删除整个文件夹,但这样会丢失我的.svn文件夹,它就无法识别版本控制。
有没有办法强制执行发布命令以使用最新版本覆盖我的.cshtml文件?(注意:dll文件可以成功覆盖)

如果您在生产服务器上有 .SVN 文件夹,那么肯定是做错了什么。也许您考虑将已发布的网站移动到另一个文件夹? - Sergey Kudriavtsev
你是如何发布的?是使用Visual Studio中的Web Deploy设置吗? - Chris Foster
发布项目,我在 VS 中右键单击项目并选择“使用文件系统”进行发布。 - user441058
在cshtml文件的“生成操作”中设置了什么?应该是“内容”。另外,我们正在谈论哪个MVC/VS版本? - Tomas Voracek
@Thomas。是的,构建操作是“content”,如果文件不存在,则会发布该文件。我使用的是VS 2010 MVC 3。 - user441058
2个回答

5
你是否将“复制到输出目录”设置为“始终复制”?我也使用“生成操作=内容”。

3

似乎文件设置了只读属性,因此无法被覆盖。检查VS输出窗口是否有错误提示。

建议:尽量不要将生成的文件(包括发布文件夹)包含在源代码控制中。版本控制工具通常会锁定它们正在处理的文件。

在测试/生产服务器上保留 .svn 文件也不是一个好主意。


当我右键单击.cshtml文件并选择属性时,只读复选框未被选中。此外,为什么在服务器上放置.svn文件不是一个好主意?服务器是远程服务器,复制/粘贴文件非常麻烦。但是,通过远程连接到服务器并右键单击它可以获取最新更新的文件,这很容易。 - user441058
".svn文件只是版本控制系统文件,绝对不属于项目,特别是目标服务器。它们还会带来安全风险。" - Tomas Voracek
@user441058:SVN 不是为发布而设计的,在许多情况下,您可能会遇到文件访问方面的巨大问题。很可能您的问题就是属于这种情况。 - Sergey Kudriavtsev
谢谢。好的,我会在另一天看看非svn选项。现在我的服务器有崩溃的倾向,因为发布选项忽略了我的cshtml文件(但不是其他文件)。 - user441058

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