232

我在 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 开发团队的一位开发人员的回复。他说他们已经在内部构建中解决了这个问题,并将很快发布发布工具的更新来解决这个问题。

更新 3:

这最近已通过 Visual Studio 2012 Update 2 修复

4

31 回答 31

105

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

于 2012-09-12T17:07:04.843 回答
78

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

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

这是引导我找到答案的线索:

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

上述对话中对我有帮助的相关回应是:

Microsoft 于 2012 年 6 月 13 日下午 12:00 发布

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

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

谢谢, - Jimmy Lewis SDET,视觉 Web 开发团队

于 2012-09-20T02:22:10.697 回答
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 将再次开始工作。

于 2012-09-24T13:51:50.560 回答
21

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

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

这将解决它。

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

于 2013-02-13T15:44:40.773 回答
9

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

于 2012-11-19T11:59:07.827 回答
8

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

在这里找到了对我有用的解决方案:

不久前我遇到的一个问题是,我认为我应该记录的一个问题是,当我发布我的项目时,某些文件类型没有被上传。

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

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

选择未复制的文件。在Properties中确保Build Action设置为Content

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

Project菜单下选择Package/Publish Web 并注意这个下拉菜单:

在此处输入图像描述

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

于 2013-01-28T17:10:29.133 回答
7

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

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

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

于 2013-02-15T17:18:59.437 回答
7

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

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

于 2013-10-19T03:06:52.330 回答
5

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

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

于 2012-09-08T06:30:53.237 回答
4

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

于 2012-09-05T09:08:47.083 回答
4

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

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

于 2012-12-20T07:58:44.980 回答
4

以下对我有用:

只需从 Release>Debug>Release 更改(反之亦然)然后发布。

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

于 2013-05-17T10:43:46.047 回答
4

我的问题是 myproject.csproj 文件的配置错误。'_address-step1-stored.cshtml' 文件在发布时未复制。“无”更改为“内容”,现在可以了。 在此处输入图像描述

于 2016-11-21T13:37:51.417 回答
3

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

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

于 2012-12-10T18:29:54.393 回答
2

对于它的价值,我最终放弃了与 Web Deploy 的斗争,以让它做我想做的事情(复制可部署文件而不是其他任何东西),所以我在 PowerShell 中编写了它的脚本,并且对结果非常满意。它比我通过 MSBuild/Web Publish 尝试的任何方法都快得多,大概是因为这些方法仍在做我不需要的事情。

这是要点(字面意思):

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)中调用它,但它也可以很容易地连接到构建后事件中。

于 2014-03-13T14:13:36.923 回答
1

这个动作对我来说是成功的:

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

于 2013-01-25T03:33:51.233 回答
1

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

马特

于 2014-03-18T10:20:19.720 回答
1

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

  • 在 VS 工具栏中选择某个配置,例如 Release 和 Any CPU。运行项目。
  • 然后在解决方案资源管理器中右键单击相关解决方案,选择发布。创建一个新的发布配置文件或使用给定的配置文件,但始终确保在设置中选择相同的配置(例如发布和任何 CPU),就像您上次运行项目之前一样。
  • 此外,在我的情况下,有必要删除 OBJ文件夹,因为在这里我上次尝试发布失败的设置卡住了,尽管我重新启动了 VS 并删除了所有发布配置文件。
于 2015-05-27T17:49:42.970 回答
0

我在解决方案中有一个包含其他几个引用项目的 Web 应用程序。过去,我已经多次使用单个发布配置成功部署。对于过去错过的项目,我将项目配置从调试更改为发布。下次我尝试部署时,我得到了这些症状,发布只是悄悄地失败了——它什么也不做,说它成功了:

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,蹩脚的笔记本电脑。

于 2013-01-10T12:27:54.200 回答
0

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

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

于 2013-03-21T10:11:06.617 回答
0

我终于自己找到了答案。以上所有解决方案都不适合我。

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

它失败的原因是我的项目名称/层次结构很长。

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

我想到了这一点,因为有时当我提取 rar 文件时,它说名称/路径太长。我认为它将与 Visual Studio 2012 发布相同。确实如此!

希望它会帮助你们。

于 2013-11-06T12:44:49.773 回答
0

检查您当前的项目是否已经使用相同的类名和不同的页面名进行了备份(类名将继承复制的文件)。最终这会使编译器感到困惑!!!

CodeFile="Consolidated.aspx.vb" Inherits="Consolidated

于 2013-12-21T07:16:40.537 回答
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" />

在我进行此更改后,所有五个项目都将它们的部署包放在了正确的位置。

(对不起,长线,但我找不到更好的方法来压缩它们。)

于 2014-06-30T15:28:04.100 回答
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应替换为服务端点 url。

于 2014-09-05T01:58:30.560 回答
0

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

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

于 2015-04-02T05:22:36.063 回答
0

我曾多次发布该网站。但是有一天我修改了一些 aspx 文件,然后尝试发布网站,结果是一个空的已发布文件夹。

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

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

  2. 要找出生成错误的文件,只需将网站文件夹内容复制到新文件夹并使用该网站启动 Visual Studio。

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

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

于 2016-04-18T05:15:59.123 回答
0

请按照以下步骤解决:

Build > Publish > Profile > New

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

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

于 2016-12-07T11:08:57.007 回答
0

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

在此处输入图像描述

在此处输入图像描述

在此处输入图像描述

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

于 2019-12-06T04:08:04.397 回答
0

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

于 2020-07-02T11:08:19.250 回答
-1

第一的:

  • 构建发布配置。
  • 在 Project Properties-> page 中选择 Package/Publish Web 下的所有文件和文件夹。
  • 重建解决方案(清洁解决方案后)。
  • 现在发布。

在发布时重新检查您选择的内容。
这应该这样做。它对我有用!:)

于 2016-07-24T04:49:33.930 回答
-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!
于 2014-01-26T09:21:15.303 回答