ChatGPT解决这个技术问题 Extra ChatGPT

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

更新 3:

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

这很奇怪。如果您看到 Publishing folder /... ,它应该可以正常工作。我建议你检查你的路径。确保您正在寻找正确的位置。
这发生在我使用 Visual Studio 2012 的 Windows 8 上。我刚刚创建了一个新的发布配置文件,它可以工作!可能是VS 2012中的一个错误。:/
我有同样的问题。删除和重新创建发布配置文件对我有用。
删除和重新创建配置文件对我有用。
这在 Visual Studio 更新 2 和更新 3 中都没有得到修复。在“接受的答案”之后检查最流行的答案(这不是解决方案)。只需编辑配置文件并 - 在“设置”选项卡中 - 从列表中选择正确的配置(如果发布是好的配置,请选择调试,保存,然后再次编辑并选择发布)。保存并发布。

P
Philippe

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


是的!这是一个很好的答案。就我而言,我不使用默认的“Release”或“Debug”配置文件,而是使用“DEV”、“STAGE”和“LIVE”。我已经看到,例如对于 STAGE,在通过 TFS 下载我的解决方案的同事计算机上,配置文件被错误地设置为“发布”(所有其他配置文件都相同)。所以我只需要更正它并将其指向“STAGE”(或其他的 DEV / LIVE)。发布工作。谢谢你。
像魅力一样工作。这应该是公认的答案。
D
Dave Riedl

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

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

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

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

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

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


我在一个新的 Visual Studio 2012 项目中出现了这个问题。过去它通过 FTP 发布,但现在当我尝试发布时,它完全按照上面的方式发布 - 它假装成功,但什么也不推送。它确实将输出构建到 obj 目录,但它从未真正将其复制到服务器。更改配置技巧确实可以解决它。
嘿!它仍然在 SP2 中坏了!
我刚刚遇到了同样的问题,并意识到这是因为发布设置默认为“任何 CPU”,但我的解决方案设置为“x86”。将 Publish to x86 中的设置更改为解决了该问题。
以上解决方案都不适合我。删除配置文件并重新创建,更改配置并改回,重新启动 VS,重建所有等。我在我的应用程序中创建了一个新视图。在那里。我能看到它。当我在本地运行时,它会显示。当我发布时,它不存在。我有更新4。
唯一对我有用的是从项目中删除我的视图并再次添加。似乎让 IDE 意识到这里有一些新东西。因此,无论何处 VS 跟踪项目的增减,都可能涉及。
D
DdW

更进一步。创建发布配置文件时创建了两个文件。

新配置文件.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 将再次开始工作。


+1 这对我来说似乎。如果您在创建新配置文件后打开这两个文件并比较它们,它会稍微容易一些。我还发现,如果在团队中工作,这两个文件都需要检查到源代码管理中。
@Deano 签入任何 *.user 文件的问题是您不再能够进行个人(本地)项目定制。用户文件的重点是允许各个团队成员拥有自己的本地设置。
除了将“.pubxml.user”文件添加到源代码管理中之外,还有其他解决方案吗?
我们不会将 *.user 文件提交到源代码控制中,但顺便说一下,我们不会在 Visual Studio 中使用发布配置文件,因为我们的持续集成服务器和构建过程管理着所有这些......
J
JGilmartin

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

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

这将解决它。

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


这对我有用,我所做的是删除本地机器中的配置文件并重新创建它们。这不会影响其他开发机器。
我在将项目从 vs2013 切换到 vs2012 时遇到了这个问题,这完全解决了问题
这对我有用。我使用这些步骤来重建我的(文件系统)发布配置文件:stackoverflow.com/a/20616521/381082
S
Stack User

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


C
Community

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

找到了对我有用的解决方案 here

不久前我遇到的一个问题是,我认为我应该记录的一个问题是,当我发布我的项目时,某些文件类型没有被上传。有问题的文件类型是 .pdf 文件和 .rtf。发生这种情况的原因是这些文件扩展名未被 Visual Studio 识别为需要发布。幸运的是,这可以在 Visual Studio 中进行更改。选择未复制的文件。在属性中确保构建操作设置为内容。如果这不起作用,可以尝试以下方法。在 Project 菜单下选择 Package/Publish Web 并注意这个下拉菜单:尝试将其更改为 All files in this project folder。


这适用于我的情况——当只发布了一些文件时。
这仅起作用,因为文件未正确包含在项目中。有关根本原因和解决方案,请参阅下面的答案:stackoverflow.com/a/40721544/3520070
你指的是下面哪个答案?
C
Chris Hynes

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

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

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


u
user2896889

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

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


是的,这也是最终对我有用的方法(尝试了上面的所有其他建议)。这是vs2010
B
Bob Noordam

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

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


同样的解决方法也是我唯一的解决方法。为了澄清,步骤:构建>发布。选择左侧的设置选项卡。将构建配置更改为其他任何内容。您会看到发布配置文件名称旁边现在有一个星号 (*) - 这表明该错误已被阻止。将构建配置更改回您想要的。继续正常发布。固定的。
M
Matt Jordan

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


我们遇到了这个问题,似乎与 我的项目 下 PublishProfiles 文件夹中的 pubxml.user 文件有关 - 我有一个机器生成的要发布的文件列表,尽管 documentation 这么说文件仅适用于我特定的设置(因此不放在源代码管理中)。我能够发布好的。我的同事获取了我们源代码的新副本,但无法发布 - 当他的 pubxml.user 文件生成时,没有列出任何文件。我们已经卸载了更新的网络发布,一切都好起来了。
K
KoalaBear

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

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


这应该在顶部
现在 Visual Studio 2012 Update 3 已修复此问题
d
dav_i

以下对我有用:

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

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


Y
Yara

https://i.stack.imgur.com/WpKaH.png


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

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

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


T
Todd Menier

对于它的价值,我最终放弃了与 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)中调用它,但它也可以很容易地连接到构建后事件中。


M
MichAdel

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

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


W
Wilkoteq

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

马特


A
Anja

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

在 VS 工具栏中选择某个配置,例如 Release 和 Any CPU。运行项目。

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

此外,在我的情况下,有必要删除 OBJ 文件夹,因为在这里我上次尝试发布失败的设置卡住了,尽管我重新启动了 VS 并删除了所有发布配置文件。


C
Chris Moschini

我在解决方案中有一个包含其他几个引用项目的 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,蹩脚的笔记本电脑。


C
Candide

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

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


J
Joebet

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

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

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

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

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

希望它会帮助你们。


D
Dileep

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

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


R
Ryan Lundy

以上解决方案都不适合我。

但我注意到,在我们的主解决方案中的五个 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 文件已经具有您建议的两个 元素
s
saille

我遇到了这个问题,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。


R
Rahul Nikate

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

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


B
Benjamin W.

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

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

发布向导将在发布时反映任何错误,但不会将任何文件复制到目标文件夹。要找出生成错误的文件,只需将网站文件夹内容复制到新文件夹并使用该网站启动 Visual Studio。现在,当您尝试发布时,它会为您提供包含错误的文件名。只需纠正原始网站文件夹中的错误并尝试发布,它将像以前一样工作。


A
Adam

请按照以下步骤解决:

Build > Publish > Profile > New

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

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


J
Jason Hitchings

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

https://i.stack.imgur.com/yqH3Y.png

https://i.stack.imgur.com/MX5Kk.png

https://i.stack.imgur.com/NnsDB.png

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


A
Andrew Cowenhoven

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


I
Iceman

第一的:

构建发布配置。

在 Project Properties-> page 中选择 Package/Publish Web 下的所有文件和文件夹。

重建解决方案(清洁解决方案后)。

现在发布。

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