Visual Studio 2012 Web Publish不会复制文件

时间:2012-08-30 16:10:21

标签: asp.net asp.net-mvc visual-studio-2012 msbuild-wpp visual-studio-publish

我在VS 2012中有一个Web应用程序项目,当我使用Web发布工具时,它成功构建但不会将任何文件复制到发布目标(在本例中为文件系统)。

如果我查看构建输出,我可以看到所有内容都被正确复制到obj \ Release \ Package \ PackageTmp \但是我在构建输出中看到的只有:

  

4>完成建筑项目“{Project} .csproj”   4>删除现有文件...
  4>发布文件夹/ ...
  4> ==========构建:3成功,0失败,1最新,0跳过==========
  ==========发布:1成功,0失败,0跳过==========

即使它说发布成功,目标目录中也没有用于发布的文件。

我在多个项目中看到过这种情况,有时似乎解决方案/平台配置会导致此问题,但我无法找到确切原因。

有没有其他人看到过这种情况,或者对如何正常工作有所了解?

更新

我可能已找到解决方法。我刚刚再次发生这种情况,我正在搞乱发布设置。一旦我将设置选项卡上的所选配置更改为其他配置,然后返回到我想要使用的配置,我的所有文件再次开始发布。希望这可以在将来的其他项目中使用。

更新2:

我在Microsoft Connect上发布了一个错误,并从VS Web Developer团队的开发人员那里收到了回复。他说他们已经在内部版本中修复了这个问题,并将很快发布一个更新发布工具来解决这个问题。

更新3:

最近已使用Visual Studio 2012 Update 2修复此问题

31 个答案:

答案 0 :(得分:104)

同样的问题。解决方法是将发布设置从Release更改为Debug。重新发布,然后更改回Release ...

答案 1 :(得分:78)

这可能是由使用vs2012的RC创建的解决方案/项目引起的。几个月前发生在我身上,通过确保我的解决方案构建配置与我的项目配置相匹配来解决问题...

我最近在使用VS2012 Express for Web打开最初在vs2012RC中创建的解决方案时遇到了同样的问题。我完成了原始海报的建议,并解决了我的问题。

以下是引导我回答问题的主题:

connect.microsoft.com/VisualStudio/feedback/details/746321/publish-web-application-fails

上述对话的相关回应帮助了我:

  

微软于2012年6月13日中午12:00发布嗨安德鲁,

     

这是我们如何处理解决方案配置与错误的错误   项目配置。我们错误地认为他们会是   相同(例如,Solution的Release | x86将每个项目设置为   发布| x86也是如此),这导致我们使用错误的构建   发布文件的属性。

     

解决方法是进行解决方案配置和构建   配置匹配。此问题将在下一版本中修复   Visual Studio 2012。

     

谢谢,    - Jimmy Lewis SDET,Visual Web Developer团队

答案 2 :(得分:39)

更进一步。您有两个在创建发布配置文件时创建的文件。

  • NewProfile.pubxml
  • NewProfile.pubxml.user

当您在源控件的PublishProfile文件夹中打开包含这些文件的项目时,它只有.pubxml文件而不是.publxml.user文件,因此它会创建.publxml.user文件在您打开项目时即时。 当它在运行中创建新的.publxml.user时,xml看起来像:

<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
</Project>

创建新配置文件时,它会创建如下所示的xml:

<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
  <PropertyGroup>
    <LastUsedBuildConfiguration>Release</LastUsedBuildConfiguration>
    <LastUsedPlatform>Any CPU</LastUsedPlatform>
    <TimeStampOfAssociatedLegacyPublishXmlFile />
    <EncryptedPassword />
  </PropertyGroup>
</Project>

如果您使用<PropertyGroup>节点并将其放在.pubxml.user文件中,您的PublishProfiles将重新开始工作。

答案 3 :(得分:21)

一个简单的解决方法是删除您的发布配置文件并创建一个新的配置文件。

当您右键单击解决方案并选择发布时,您有一个配置文件集。删除它并创建一个新的。

这将解决它。

从2010年到2012年,我遇到了这个问题

答案 4 :(得分:9)

我遇到了同样的错误,我将设置从发布更改为调试,问题已解决..

答案 5 :(得分:8)

我遇到了同样的问题,但是这个帖子中没有一个答案适合我。我的问题是有一个目录包含动态生成的(由我的应用程序)静态HTML文件。整个目录尚未发布。

找到了适用于我的解决方案here

  

我回过头来想到我应该记录的一个问题是我发布项目时没有上传某些文件类型。

     

有问题的文件类型是.pdf文件和.rtf。

     

发生这种情况的原因是因为这些文件扩展名无法识别为需要Visual Studio发布。幸运的是,这可以在Visual Studio中进行更改。

     

选择未复制的文件。在属性中,确保构建操作设置为内容

     

如果这不起作用,可以尝试以下方法。

     

项目菜单下,选择打包/发布网络并注意此下拉菜单:

     

enter image description here

     

尝试将此项更改为此项目文件夹中的所有文件。

答案 6 :(得分:7)

我尝试了所有这些解决方案,但这是每次都有效的解决方案。

我们只需将“发布方法:”从“文件系统”更改为“Web部署”,然后立即将其更改回“文件系统”。

答案 7 :(得分:7)

这是因为.pubxml.user包含要发布的必需信息,并且该文件不会(也不应该)包含在源代码管理中。要修复此VS错误,请将.pubxml.user文件中的信息复制到.pubxml文件中。相关的属性是:

<LastUsedBuildConfiguration>Release</LastUsedBuildConfiguration>
<LastUsedPlatform>Any CPU</LastUsedPlatform>

将它们放在.pubxml中,你应该好好去。

答案 8 :(得分:5)

我对几个项目有同样的问题。唯一受欢迎的似乎是网络项目。删除和重新创建配置文件只能解决一次问题。另外,比较生成的publishxml没有产生任何差异,因此它似乎与配置文件无关。

OP提到的来回改变构建问题的解决方案似乎是目前唯一可靠的解决方案。

答案 9 :(得分:4)

我们遇到了同样的问题。

我们只需将“发布方法:”从“文件系统”更改为“Web部署”,然后立即将其更改回“文件系统”。

答案 10 :(得分:4)

以下对我有用:

只需从Release&gt; Debug&gt; Release(或反之亦然)更改,然后发布。

无需删除,编辑,发布任何您不需要的内容。

答案 11 :(得分:4)

在检查发布输出,事件日志,打开和检查visual studio日志等之后,我在VS 2010上遇到了同样的问题然后我决定删除我认为最近更新的网络发布(通过添加/删除)到v1.0.30810.0。这解决了这个问题。

答案 12 :(得分:4)

我的问题是myproject.csproj文件的配置错误。 '_address-step1-stored.cshtml'文件未在发布时复制。 '无'改为'内容',现在没关系。 enter image description here

答案 13 :(得分:3)

带有磁盘发布目标的VS 2012 Pro存在同样的问题。项目用于正确发布但开始执行此问题时无法将文件复制到目标文件夹。

解决方案是编辑发布配置文件,将模式从Release(任何CPU)更改为调试,然后再更改为Release(任何CPU)。这样做会导致重写PublishProfiles \ projname.pubxml.user文件(如上所述)。看起来它在属性组节点下添加了LastUsedBuild,LastUsedPlatform和TimeStampOfAssociatedLegacyPublishXmlFile元素。发布完成后,它会添加另一个包含单个文件和发布时间的ItemGroup。

答案 14 :(得分:1)

这个动作对我来说很成功:

在“Properties&gt; PublishProfiles&gt; xxxx.pubxml”中杀死发布个人资料并重新设置。

答案 15 :(得分:1)

为了它的价值,我最终放弃了与Web Deploy的斗争,让它做我想做的事情(复制可部署的文件,没有别的),所以我在PowerShell中编写脚本,我真的很高兴结果。它比我通过MSBuild / Web Publish尝试的任何东西都快 ,大概是因为那些方法仍在做我不需要的事情。

这里是要点(literally):

function copy-deployable-web-files($proj_path, $deploy_dir) {
  # copy files where Build Action = "Content" 
  $proj_dir = split-path -parent $proj_path
  [xml]$xml = get-content $proj_path
  $xml.Project.ItemGroup | % { $_.Content } | % { $_.Include } | ? { $_ } | % {
    $from = "$proj_dir\$_"
    $to = split-path -parent "$deploy_dir\$_"
    if (!(test-path $to)) { md $to }
    cp $from $to
  }

  # copy everything in bin
  cp "$proj_dir\bin" $deploy_dir -recurse
}

在我的情况下,我在CI环境(TeamCity)中调用它,但它也很容易被挂钩到构建后事件中。

答案 16 :(得分:1)

我发现我可以通过将目标位置从obj / [release | stage | ..]更改为完全解决方案文件夹之外的新路径来解决此问题,例如c:\ deployment。似乎VS 2012在发布过程中感到困惑,可能会放弃某个地方。

马特

答案 17 :(得分:1)

最近VS 2013中的一个MVC项目遇到了同样的问题,我在其中导入了Umbraco CMS。我无法发表。上面的答案有所帮助,虽然我需要一段时间来弄清楚我在VS中应该做些什么。它需要一些研究,例如在MS博客上找出来。我试着说这很简单:

  • 在VS工具栏中选择某个配置,例如发布和任何CPU。运行项目。
  • 然后在解决方案资源管理器中右键单击相关解决方案,选择“发布”。创建新的发布配置文件或使用给定的配置文件,但始终确保在设置中选择相同的配置(例如,Release和Any CPU),就像上次运行项目之前一样。
  • 此外,在我的情况下,需要删除OBJ 文件夹,因为此处我上次尝试发布的不成功设置卡住了,但我重新启动了VS并删除了所有发布配置文件。

答案 18 :(得分:0)

尝试退出Visual Studio,删除PublishProfiles目录中的相关pubxml.user文件,重新启动VS并发布。在VS 2019上工作。

答案 19 :(得分:0)

已修复-提供的各种解决方案对我来说都行不通。 VS Community 2017,Windows Server 2012 R2 对我有用的是为用户更改TEMP和TMP环境变量,然后重新启动系统并再次部署(重新启动VS还不够)。这些临时变量是VS临时发布的位置。

enter image description here

enter image description here

enter image description here

更改临时变量后重新启动Visual Studio无法解决问题,必须重新启动系统。

答案 20 :(得分:0)

请按照以下步骤解决:

Build > Publish > Profile > New

创建新的个人资料,并使用与现有个人资料相同的设置对其进行配置。

该项目现在将正确发布。这通常是由于在较新版本的Visual Studio中创建的另一台计算机的源控制发布配置文件而发生的。

答案 21 :(得分:0)

我已多次发布该网站。但是有一天,当我修改了一些aspx文件然后尝试发布网站时,它导致了一个空的已发布文件夹。

在我的解决方法上,我找到了解决方案。

  1. 发布向导会在发布时反映任何错误,但不会将任何文件复制到目标文件夹。

  2. 要查找生成错误的文件,只需将网站文件夹内容复制到新文件夹,然后使用该网站启动visual studio。

  3. 现在,当您尝试发布时,它将为您提供包含错误的文件名。

  4. 只需纠正原始网站文件夹中的错误并尝试发布,它就会像以前一样工作。

答案 22 :(得分:0)

我遇到了同样的问题。上述解决方案均不适合我。

  

因此,我已经排除了在发布时无法复制的文件。

答案 23 :(得分:0)

我遇到过这个问题,Visual Studio生成的服务参考文件在整体路径长度方面变得太长。

使用svcutil.exe重新生成服务引用缩短它们,删除所有原始服务引用文件。

svcutil可以像这样调用:

"C:\Program Files (x86)\Microsoft SDKs\Windows\v8.0A\bin\NETFX 4.0 Tools\SvcUtil.exe" /language:CS http://myservice /namespace:*,My.Namespace

My.Namespace应替换为生成的服务代理中的现有命名空间(通常位于Reference.cs文件中),以避免编译错误。

http://myservice应替换为服务端点网址。

答案 24 :(得分:0)

上述解决方案均不适合我。

但是我注意到在我们的主要解决方案中我们的五个ASP.NET MVC项目中,有四个将部署包放在正确的位置,而一个将它放在obj \ Debug下。

我比较了这些项目并发现了一个差异。 解决方案是改变

<Import
    Project="$(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v10.0\WebApplications\Microsoft.WebApplication.targets" />

到此

<Import
  Project="$(VSToolsPath)\WebApplications\Microsoft.WebApplication.targets"
  Condition="'$(VSToolsPath)' != ''" />
<Import
  Project="$(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v10.0\WebApplications\Microsoft.WebApplication.targets"
  Condition="false" />

完成此更改后,所有五个项目都将其部署包放在正确的位置。

(对不起,我找不到更好的方法来浓缩它们。)

答案 25 :(得分:0)

检查当前项目是否已使用相同的类名和不同的页面名称制作了副本(类名将继承复制的文件)。最终会让编译器感到困惑!!!

CodeFile =“Consolidated.aspx.vb”Inherits =“Consolidated

答案 26 :(得分:0)

我终于找到了自己的答案。所有上述解决方案对我都不起作用。

我所做的是我将项目移动到c将项目文件夹更改为更短的内容并繁荣发布..

我失败的原因是我有很长的项目名称/ heirarchy。

C:\ Users \ user \ Desktop \ Compliance Management System \ ComplianceIssueManagementSystem \ ComplianceIssueManagementSystem

我曾想过这个,因为有时当我提取rar文件时,它说名称/路径太长了。我认为它将与visual studio 2012发布相同。它确实!

希望它会帮助你们。

答案 27 :(得分:0)

在Visual Studio 2012中,在版本之间切换仍会导致问题。

我们添加了一个预构建事件来删除obj文件夹:del /s /f /q $(ProjectDir)\obj并解决了发布问题。清洁有时会起作用,但并非总是如此。

答案 28 :(得分:0)

我在解决方案中有一个Web应用程序和其他几个引用的项目。我以前多次使用单个“发布”配置成功部署。对于过去遗漏的项目,我将项目配置从调试更改为发布。下次我尝试部署时,我遇到了这些症状,Publish刚刚悄然失败 - 它没有做任何事情并说它成功了:

1>------ Build started: Project: Project, Configuration: DeployProduction Any CPU ------
1>  
2>Publishing folder /...
========== Build: 1 succeeded, 0 failed, 9 up-to-date, 0 skipped ==========
========== Publish: 1 succeeded, 0 failed, 0 skipped ==========

恢复它的唯一方法是清除发布配置文件,关闭Visual Studio以强制它保存删除,重新打开它,并从头开始重新创建发布配置文件。一旦我这样做,我可以再次发布。

Win8 VS2012,糟糕的笔记本电脑。

答案 29 :(得分:-1)

第一:

  • 内置版本配置。
  • 在项目属性中 - &gt;页面选择下的所有文件和文件夹 打包/发布网站。
  • 重建解决方案(在清洁解决方案之后)。
  • 现在发布。

在发布时重新检查你选择了什么。
这应该做到这一点。它对我有用!:)

答案 30 :(得分:-2)

最简单的是,

   1. select the file(s) that are not being copied,
   2. Press <F4> to get the properties window
   3. Make the "Build Action" property "compile" or "content" depending on what it is.
   4. Now this particular file will be included!