Visual Studio 2012 Web发布不会复制文件


229

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

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

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

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

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

有没有其他人看到这种情况发生或对如何使其正常工作有想法?

更新:

我可能已经找到了解决方法。我只是再次发生了这种情况,并且在搞乱发布设置。一旦将“设置”选项卡上选择的“配置”更改为另一种配置,然后又返回到该配置,我想使用所有文件开始重新发布。希望将来可以在其他项目中使用。

更新2:

我在Microsoft Connect上发布了一个错误,并在VS Web开发人员团队中得到了开发人员的回音。他说,他们已经在内部版本中解决了此问题,并将尽快发布发布工具的更新,以解决此问题。

更新3:

最近,Visual Studio 2012 Update 2已修复此问题。


1
真奇怪 如果看到发布文件夹/ ...,它将正常运行。我建议您检查一下路径。确保您在寻找正确的位置。
maxisam

14
这在Windows 8和Visual Studio 2012上发生在我身上。可能是VS 2012中的错误。:/
T.Ho

3
我有同样的问题。删除并重新创建发布配置文件对我来说很成功。
Tommy Jakobsen 2012年

3
删除和重新创建配置文件对我来说很成功。
Michael Wells

3
在Visual Studio Update 2和Update 3中均未解决此问题。请检查“接受的答案”之后的最受欢迎的答案(这不是解决方案)。只需编辑配置文件,然后-在“设置”选项卡中,从列表中选择正确的配置(如果发行版是不错的选择,请选择调试,保存,然后再次编辑并选择发行版)。保存并发布。
firepol

Answers:


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还将每个项目都设置为Release | x86),这导致我们使用错误的生成属性来发布文件。

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

谢谢-Visual Web Developer团队Jimmy Lewis SDET


8
我在一个新的Visual Studio 2012项目上会出现此问题。过去它是通过FTP发布的,但是现在,当我尝试发布时,它的功能与上面完全相同-它假装成功,说什么也不做。它确实将输出构建到obj目录,但实际上从未将其复制到服务器。更改配置技巧确实可以解决问题。
克里斯·莫斯基尼

12
嘿! 它仍然在SP2中崩溃了!

6
我只是遇到了同样的问题,并意识到这是因为发布设置默认为“任何CPU”,但是我的解决方案却设置为“ x86”。将发布中的设置更改为x86可解决此问题。
山姆

以上解决方案都不适合我。删除配置文件并重新创建,更改配置并返回,重新启动VS,重新生成所有文件等。我在应用程序中创建了一个新视图。在那里。我能看到它。当我在本地运行时,将显示。当我发布时,它不存在。我有更新
Robert

对我唯一有效的方法是从项目中删除视图,然后再次添加。似乎使IDE意识到这里有些新东西。因此,无论VS跟踪哪里的项目,都可能涉及加法和减法。
罗伯特

104

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


是的!这是个好答案。就我而言,我不使用默认的“发布”或“调试”配置文件,而是使用“ DEV”,“ STAGE”和“ LIVE”。我已经看到,例如对于STAGE,在通过TFS下载我的解决方案的同事计算机上,配置文件被错误地设置为“发布”(所有其他配置文件都相同)。因此,我只需要更正它,然后将其指向“ STAGE”(其他则为DEV / LIVE)。出版工作。谢谢。
firepol

像魅力一样工作。这个应该是公认的答案。
AycanYaşıt2014年

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


5
+1在我看来。如果您打开两个文件并在创建新的配置文件后将它们进行比较,则这会稍微容易一些。我还发现,如果在团队中工作,则两个文件都需要检入源代码管理。
Deano

@Deano签入任何* .user文件的问题是您不再具有进行单个(本地)项目自定义的能力。用户文件的重点是允许各个团队成员拥有自己的本地设置。
戴夫·里德尔

除了将“ .pubxml.user”文件添加到源代码控制中,还有其他解决方案吗?
Ubikuity

我们不会将* .user文件提交到源代码管理中,但是,顺便说一句,我们不使用Visual Studio中的发布配置文件,因为我们的持续集成服务器和构建过程可以管理所有这些…
Brett Rigby,2014年

21

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

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

这将解决它。

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


这对我有用,我要做的是删除本地计算机中的配置文件并重新创建它们。这不会影响其他开发机器。
Jean Jimenez

我遇到了这个问题,将项目从vs2013切换到vs2012,这完全解决了问题
NikiUsefi 2015年

这对我有用。我使用以下步骤来重建我的(文件系统)发布配置文件:stackoverflow.com/a/20616521/381082
DeveloperDan

9

我遇到了同样的错误,我将设置从发行版更改为调试,问题得以解决。


8

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

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

我回想了一个问题,以为我应该记录一下,就是在发布项目时某些文件类型没有上传。

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

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

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

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

在“ 项目”菜单下,选择“ 打包/发布网站”,然后注意此下拉列表:

在此处输入图片说明

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


这对于我的情况是有用的-仅发布一些文件时。
AndrewRalon

这仅起作用是因为文件未正确包含在项目中。请参阅以下答案以获取根本原因和解决方案:stackoverflow.com/a/40721544/3520070
AndrewRalon

波纹管是什么意思?
Tomas Kubes

7

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

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

将它们放在您的.pubxml中,您应该会很好。


7

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

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


是的,这也是最终对我有效的方法(尝试了上述所有其他建议)。vs2010
Karen

5

我在几个项目中都遇到了同样的问题。唯一受到打击的似乎是Web项目。删除和重新创建配置文件只能解决一次该问题。另外,比较生成的publishxml不会产生任何差异,因此它似乎根本与配置文件无关。

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


同样的解决方法也是我唯一的解决方法。要澄清,请执行以下步骤:构建>发布。选择左侧的设置标签。将构建配置更改为其他任何内容。您会看到“发布配置文件”名称旁边现在有一个星号(*),这表明该错误已被阻止。将构建配置更改回您想要的。照常进行发布。固定。
克里斯·

4

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


2
我们遇到了这个问题,似乎与“ 我的项目”下PublishProfiles文件夹中的pubxml.user文件有关-我的机器具有要发布的机器生成文件列表,即使文档说此文件仅适用于我特定的设置(因此不会放置在源代码管理中)。我能够发布好了。我的同事复制了我们的源代码,因此无法发布-生成他的pubxml.user文件时,没有列出文件。我们已经卸载了更新的Web发布,一切恢复正常。
尼克(Nick)

4

在这里,我们有同样的问题。

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


这应该在顶部
JoeBrockhaus

现在,此问题已通过Visual Studio 2012 Update 3
KoalaBear 2014年

4

以下为我工作:

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

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


4

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


就是这样!该项目有许多文件已签入源代码管理,但None在.csproj文件中被标记为文件,或者在项目中完全丢失(有但不是“已使用”)!这充分解释了为什么在本地运行始终有效,而发布却从未如此。:D
AndrewRalon

3

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

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


1

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

在“属性> PublishProfiles> xxxx.pubxml”中杀死发布配置文件,然后重新设置。


1

为了它的价值,我最终放弃了与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)中称呼它,但是它也很容易与构建后事件挂钩。


1

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

马特


1

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

  • 在VS工具栏中选择某种配置,例如Release和Any CPU。运行项目。
  • 然后,在有问题的解决方案上的解决方案资源管理器中右键单击,选择“发布”。创建一个新的发布配置文件或使用给定的配置文件,但始终要确保在设置中选择与上次运行该项目之前相同的配置(例如Release和Any CPU)。
  • 另外,在我的情况下,有必要删除OBJ文件夹,因为在这里,尽管我重新启动了VS并删除了所有发布配置文件,但我上次尝试发布失败的设置被卡住了。

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


0

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

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


0

我终于找到了答案。以上所有解决方案均不适用于我。

我所做的是,我将项目移动到驱动器c中,将项目文件夹更改为更短的文件,并使其蓬勃发布。

之所以失败,是因为我的项目名称/层次结构过长。

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

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

希望对您有帮助。


0

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

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


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" />

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

(很长的行很抱歉,但是我找不到更好的方法来压缩它们。)


我正在遇到一个或两个文件似乎被忽略并且没有发布到服务器的情况,但是,我的.vbproj文件已经包含了您建议的两个<Import>元素
bkwdesign 2015年

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 应该用服务端点网址替换。



0

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

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

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

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

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

  4. 只需更正原始网站文件夹中的错误,然后尝试发布即可,它可以像以前一样工作。


0

请按照以下步骤解决:

Build > Publish > Profile > New

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

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


0

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

在此处输入图片说明

在此处输入图片说明

在此处输入图片说明

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


-1

第一:

  • 内置发布配置。
  • 在“项目属性”->“页面”中,选择“打包/发布Web”下的“所有文件和文件夹”。
  • 重建解决方案(在清洁解决方案之后)。
  • 现在发布。

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


-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!
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.