有时,当我发布ASP.NET MVC应用程序并将文件复制到生产服务器时,我会收到404个错误。当我检查新发布的网站和旧网站之间的差异时,我发现有很多文件丢失了,包括App_global.asax.dll和App_global-asax.com.pidded。
这种情况在Visual Studio 2015及以前的版本中发生。以前的出版物是成功的,但这似乎是断断续续的。在构建过程中不会产生任何错误。通过MSBuild发布和通过Visual Studio发布似乎都存在相同的问题。总有一天,这个系统会构建得很好。有些日子,它不会。当我在发布之前删除包目录的内容时,这种情况似乎最常见。
一个简单的示例MSBuild命令。这是一个非常简单的单站点.csproj文件。
MSBuild.exe MyProject.csproj /p:DeployOnBuild=true;PublishProfile=Prod
发布配置文件:
<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<PropertyGroup>
<WebPublishMethod>FileSystem</WebPublishMethod>
<LastUsedBuildConfiguration>Release</LastUsedBuildConfiguration>
<LastUsedPlatform>Any CPU</LastUsedPlatform>
<LaunchSiteAfterPublish>False</LaunchSiteAfterPublish>
<ExcludeApp_Data>True</ExcludeApp_Data>
<publishUrl>C:packagesMyProject</publishUrl>
<DeleteExistingFiles>True</DeleteExistingFiles>
<PrecompileBeforePublish>True</PrecompileBeforePublish>
<EnableUpdateable>False</EnableUpdateable>
<DebugSymbols>False</DebugSymbols>
<WDPMergeOption>DonotMerge</WDPMergeOption>
</PropertyGroup>
</Project>
我在这个问题上浪费了很多时间,我不得不分享。
这是由于我的McAfee On-Access病毒扫描程序干扰了我的发布过程。禁用该服务(事实证明,我的公司允许我临时执行)完全解决了这个问题。
我认为当您将DeleteExistingFiles
设置为false
时,这个问题最不可能再次出现,因为AV扫描仪以前已经看到过这些文件。这只是一个理论。
注意这种行为。