我在 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 修复
同样的问题。解决方法是将发布设置从 Release 更改为 Debug。重新发布,然后改回发布...
这可能是由使用 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 开发团队
更进一步。创建发布配置文件时创建了两个文件。
新配置文件.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 将再次开始工作。
一个简单的解决方法是删除您的发布配置文件并创建一个新的。
当您右键单击您的解决方案并选择发布时,您有一个配置文件集。删除它并创建一个新的。
这将解决它。
我从 2010 年切换到 2012 年遇到了这个问题
我有同样的错误,我将设置从发布更改为调试,问题解决了..
我遇到了同样的问题,但是这个线程中的答案都没有对我有用。我的问题是有一个目录包含动态生成的(由我的应用程序)静态 HTML 文件。整个目录没有发布。
找到了对我有用的解决方案 here:
不久前我遇到的一个问题是,我认为我应该记录的一个问题是,当我发布我的项目时,某些文件类型没有被上传。有问题的文件类型是 .pdf 文件和 .rtf。发生这种情况的原因是这些文件扩展名未被 Visual Studio 识别为需要发布。幸运的是,这可以在 Visual Studio 中进行更改。选择未复制的文件。在属性中确保构建操作设置为内容。如果这不起作用,可以尝试以下方法。在 Project 菜单下选择 Package/Publish Web 并注意这个下拉菜单:尝试将其更改为 All files in this project folder。
这是因为 .pubxml.user 包含发布所需的信息,并且该文件不(也不应该)包含在源代码管理中。要修复此 VS 错误,请将 .pubxml.user 文件中的信息复制到 .pubxml 文件中。相关属性为:
<LastUsedBuildConfiguration>Release</LastUsedBuildConfiguration>
<LastUsedPlatform>Any CPU</LastUsedPlatform>
把它们放在你的 .pubxml 中,你应该很高兴。
我尝试了所有这些解决方案,但这是每次都有效的解决方案。
我们只需将“发布方法:”从“文件系统”更改为例如“Web 部署”,然后立即将其更改回“文件系统”。
我对几个项目有(有)同样的问题。唯一受到打击的似乎是网络项目。删除和重新创建配置文件只能解决一次问题。此外,比较生成的 publishxml 没有任何差异,因此它似乎与配置文件完全无关。
OP 提到的来回更改构建问题的解决方法似乎是目前唯一可靠的解决方案。
我在 VS 2010 上遇到了同样的问题,在检查了发布输出、事件日志、打开和检查 Visual Studio 日志等之后,我决定删除我认为最近更新到 v1 的网络发布(通过添加/删除)。 0.30810.0。这解决了问题。
在这里,我们遇到了同样的问题。
我们只需将“发布方法:”从“文件系统”更改为例如“Web 部署”,然后立即将其更改回“文件系统”。
以下对我有用:
只需从 Release>Debug>Release 更改(反之亦然)然后发布。
无需删除、编辑、发布您不需要的任何内容。
https://i.stack.imgur.com/WpKaH.png
None
,或者在项目中完全丢失(存在但未“使用”)!这完全解释了为什么在本地运行总是有效,但发布却从来没有。 :D
带有磁盘发布目标的 VS 2012 Pro 也存在同样的问题。项目用于正确发布,但开始执行此问题,无法将文件复制到目标文件夹。
解决方案是编辑发布配置文件,将模式从 Release (Any CPU) 更改为 debug 然后回到 Release (Any CPU)。这样做会导致 PublishProfiles\projname.pubxml.user 文件被重写(如上所述)。看起来它在 propertygroup 节点下添加了 LastUsedBuild、LastUsedPlatform 和 TimeStampOfAssociatedLegacyPublishXmlFile 元素。发布完成后,它会添加另一个包含单个文件和发布时间的 ItemGroup。
对于它的价值,我最终放弃了与 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)中调用它,但它也可以很容易地连接到构建后事件中。
这个动作对我来说是成功的:
在“Properties>PublishProfiles>xxxx.pubxml”中终止发布配置文件并再次重新设置。
我发现我可以通过将目标位置从 obj/[release|stage|..] 完全更改为解决方案文件夹之外的新路径来解决这个问题,例如 c:\deployment。似乎 VS 2012 在发布过程中变得困惑并且可能在某个地方放弃了。
马特
最近在 VS 2013 中我导入了 Umbraco CMS 的 MVC 项目也遇到了同样的问题。我无法发布。上面的答案有所帮助,尽管我需要一段时间来弄清楚我实际上应该在 VS 中做什么。它需要一些研究,例如在 MS 博客上找到。我试着简单地说:
在 VS 工具栏中选择某个配置,例如 Release 和 Any CPU。运行项目。
然后在解决方案资源管理器中右键单击相关解决方案,选择发布。创建一个新的发布配置文件或使用给定的配置文件,但始终确保在设置中选择相同的配置(例如发布和任何 CPU),就像您上次运行项目之前一样。
此外,在我的情况下,有必要删除 OBJ 文件夹,因为在这里我上次尝试发布失败的设置卡住了,尽管我重新启动了 VS 并删除了所有发布配置文件。
我在解决方案中有一个包含其他几个引用项目的 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,蹩脚的笔记本电脑。
在 Visual Studio 2012 中,版本之间的切换仍然会导致问题。
我们添加了一个预构建事件来删除 obj
文件夹:del /s /f /q $(ProjectDir)\obj
,它修复了发布问题。清洁有时有效,但并非总是如此。
我终于自己找到了答案。以上所有解决方案都不适合我。
我所做的是我将项目移动到驱动器 c 将项目文件夹更改为更短的内容并使其发布..
它失败的原因是我的项目名称/层次结构很长。
C:\Users\user\Desktop\Compliance Management System\ComplianceIssueManagementSystem\ComplianceIssueManagementSystem
我想到了这一点,因为有时当我提取 rar 文件时,它说名称/路径太长。我认为它将与 Visual Studio 2012 发布相同。确实如此!
希望它会帮助你们。
检查您当前的项目是否已经使用相同的类名和不同的页面名进行了备份(类名将继承复制的文件)。最终这会使编译器感到困惑!!!
CodeFile="Consolidated.aspx.vb" Inherits="Consolidated
以上解决方案都不适合我。
但我注意到,在我们的主解决方案中的五个 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" />
在我进行此更改后,所有五个项目都将它们的部署包放在了正确的位置。
(对不起,长线,但我找不到更好的方法来压缩它们。)
我遇到了这个问题,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。
我遇到了同样的问题。以上解决方案都不适合我。
因此,我排除了发布时无法复制的文件。
我曾多次发布该网站。但是有一天我修改了一些 aspx 文件,然后尝试发布网站,结果是一个空的已发布文件夹。
在我的解决方法中,我找到了解决方案。
发布向导将在发布时反映任何错误,但不会将任何文件复制到目标文件夹。要找出生成错误的文件,只需将网站文件夹内容复制到新文件夹并使用该网站启动 Visual Studio。现在,当您尝试发布时,它会为您提供包含错误的文件名。只需纠正原始网站文件夹中的错误并尝试发布,它将像以前一样工作。
请按照以下步骤解决:
Build > Publish > Profile > New
创建一个新配置文件并使用与现有配置文件相同的设置对其进行配置。
该项目现在将正确发布。这通常是由于在较新版本的 Visual Studio 中创建的另一台计算机的源代码控制发布配置文件的结果。
已修复 - 提供的各种解决方案对我不起作用。 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 并没有解决问题,必须重新启动系统。
尝试退出 Visual Studio,删除 PublishProfiles 目录中相关的 pubxml.user 文件,重新启动 VS 并发布。在 VS 2019 上工作。
第一的:
构建发布配置。
在 Project Properties-> page 中选择 Package/Publish Web 下的所有文件和文件夹。
重建解决方案(清洁解决方案后)。
现在发布。
在发布时重新检查您选择的内容。这应该这样做。它对我有用!:)
不定期副业成功案例分享