首页 文章

Visual Studio 2012 Web Publish不会复制文件

提问于
浏览
227

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

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

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

尽管它表示发布成功,但目标目录中没有用于发布的文件 .

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

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

UPDATE:

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

UPDATE 2:

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

UPDATE 3:

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

29 回答

  • 4

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

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

  • 5

    请按照以下步骤解决:

    Build > Publish > Profile > New
    

    创建新配置文件并使用与现有配置文件相同的设置对其进行配置 .

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

  • 0

    在这里我们遇到了同样的问题 .

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

  • 9

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

    • 在VS工具栏中选择某个配置,例如发布和任何CPU . 运行该项目 .

    • 然后在解决方案资源管理器中右键单击相关解决方案,选择“发布” . 创建新的发布配置文件或使用给定的配置文件,但始终确保在设置中选择相同的配置(例如,Release和Any CPU),就像上次运行项目之前一样 .

    • 另外在我的情况下它是 necessary to delete the OBJ 文件夹,因为这里我上次失败尝试发布的设置卡住了,但我重新启动了VS并删除了所有发布配置文件 .

  • 1

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

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

  • 4

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

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

    这将解决它 .

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

  • 8

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

    所以,我已经排除了发布时无法复制的文件 .

  • 0

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

    马特

  • 1

    第一:

    • 内置版本配置 .

    • 在项目属性 - >页面中,选择包/发布Web下的所有文件和文件夹 .

    • 重建解决方案(清洁解决方案后) .

    • 现在发布 .

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

  • 39

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

    在“Properties> PublishProfiles> xxxx.pubxml”中杀死发布配置文件并再次重新设置 .

  • 21

    我在解决方案中有一个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,蹩脚的笔记本电脑 .

  • 7

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

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

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

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

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

    希望它会帮助你们 .

  • 0

    最简单的是,

    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!
    
  • 0

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

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

    把它们放在你的.pubxml中你应该很高兴 .

  • 0

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

  • 0

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

    在我的解决方法上,我找到了一个解决方案 .

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

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

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

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

  • 0

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

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

    我回过头来看一个问题,我认为应该记录的是我发布项目时没有上传某些文件类型 . 有问题的文件类型是.pdf文件和.rtf . 发生这种情况的原因是因为这些文件扩展名无法识别为需要Visual Studio发布 . 幸运的是,这可以在Visual Studio中更改 . 选择未复制的文件 . 在Properties中,确保将Build Action设置为Content . 如果这不起作用,可以尝试以下方法 . 在项目菜单下选择打包/发布Web并注意此下拉列表:尝试将此更改为此项目文件夹中的所有文件 .

  • 4

    因为它比我通过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)中调用它,但它也可以很容易地连接到后期构建事件 .

  • 3

    以下对我有用:

    只需从Release> Debug> Release(或反之亦然)进行更改,然后发布 .

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

  • 104

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

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

  • 0

    我的问题是myproject.csproj文件的配置错误 . '_address-step1-stored.cshtml'文件未在发布时复制 . 'None'改为'Content',现在没关系 .

  • -1

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

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

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

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

    来自的相关回应上面的对话帮助了我:

    微软于2012年6月13日中午12:00发布您好Andrew,这是我们如何处理解决方案配置与项目配置的错误 . 我们错误地认为它们是相同的(例如,Solution的Release | x86也会将每个项目设置为Release | x86),这导致我们使用错误的构建属性来发布文件 . 解决方法是使解决方案配置和构建配置匹配 . 此问题将在Visual Studio 2012的下一个版本中修复 . 谢谢, - Jimmy Lewis SDET,Visual Web Developer团队

  • 1

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

  • 0

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

    • 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将再次开始工作 .

  • -2

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

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

  • 1

    检查当前项目是否已使用相同的类名和不同的页面名称创建了后备副本(类名将继承复制的文件) . 最终会混淆编译器!

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

  • 78

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

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

    我比较了这些项目,发现了一个差异 . The solution was to change this

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

    to this

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

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

    (对不起排长队,但我找不到更好的方法来浓缩它们 . )

  • 7

    我遇到过这个问题,Visual Studio生成的 Service Reference 文件在整个路径长度方面变得太长了 .

    通过使用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 应替换为服务 endpoints url .

  • 4

    我有同样的错误,我从 release to debug 更改设置,问题解决了..

相关问题