Visual Studio 2012 Web发布不复制文件
我在VS 2012中有一个Web应用程序项目,当我使用Web发布工具时,它会成功构build,但不会将任何文件复制到发布目标(本例中为文件系统)。
如果我查看构build输出,我可以看到所有东西都被正确地复制到obj \ Release \ Package \ PackageTmp \中,但是在构build输出中看到的所有内容都是这样的:
4>完成build筑工程“{Project} .csproj”。
4>删除现有文件…
4>发布文件夹/ …
4> ==========构build:3成功,0失败,1最新,0跳过==========
==========发布:1次成功,0次失败,0次跳过==========
尽pipe它表示发布成功,但发布目标目录中没有文件。
我已经在多个项目中看到了这一点,有时看起来像解决scheme/平台configuration导致这个问题,但我一直没有find确切的原因。
有没有其他人看到这种情况发生或有一个想法如何让这个工作正常?
更新:
我可能已经find了解决办法。 我只是再次发生这种情况,我正在搞乱发布设置。 一旦我将“设置”选项卡上的选定configuration更改为另一个configuration,然后又返回到我想要使用的所有文件都开始再次发布。 希望这可以在未来的其他项目。
更新2:
我在Microsoft Connect上发布了一个错误,并从VS Web开发团队的开发人员那里听到了这个错误。 他表示,他们已经在内部版本中解决了这个问题,并且很快就会发布对发布工具的更新,以解决这个问题。
更新3:
最近,Visual Studio 2012 Update 2修复了这个问题
这可能是由VS2012的RC创build的解决scheme/项目造成的。 这发生在我几个月前,并通过确保我的解决scheme构buildconfiguration匹配我的项目configuration解决了问题…
我刚刚在使用VS2012 Express for Web打开最初在vs2012RC中创build的相同解决scheme时遇到了同样的问题。 我做了正确的海报build议,并解决了我的问题。
这是导致我回答的线索:
connect.microsoft.com/VisualStudio/feedback/details/746321/publish-web-application-fails
上面对话帮助我的相关回应是:
微软于2012年6月13日在下午12:00嗨安德鲁,
这是我们如何处理解决schemeconfiguration与项目configuration的一个错误。 我们错误地认为它们是相同的(例如Solution's Release | x86将每个项目都设置为Release | x86),这导致我们使用错误的构build属性来发布文件。
解决方法是使解决schemeconfiguration和构buildconfiguration匹配。 这个问题将在下一个版本的Visual Studio 2012中得到解决。
谢谢, – Jimmy Lewis SDET,Visual Web Developer团队
同样的问题。 解决方法是将发布设置从发布更改为debugging。 重新发布和他们chage回到释放…
进一步采取这一点。 您创build了一个发布configuration文件时创build了两个文件。
NewProfile.pubxml and NewProfile.pubxml.user
从源代码pipe理打开PublishProfile文件夹中的这些文件的项目时,它只有pubxml文件而不是publxml.user文件,所以它在打开项目时即时创buildpublxml.user文件。 当它在运行中创build新的publxml.user时,xml看起来像:
<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> </Project>
当你创build一个新的configuration文件,它会创build如下所示的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将再次开始工作。
一个简单的解决办法是删除您的发布configuration文件,并创build一个新的。
当你右键点击你的解决scheme并select发布,你有一个configuration文件集。 删除这个并创build一个新的。
这将解决它。
从2010年到2012年,我遇到了这个问题
我有同样的错误,我改变了从发布到debugging的设置和问题解决..
我有这个相同的问题,但没有在这个线程的答案为我工作。 我的问题是,有一个目录包含dynamic生成(通过我的应用程序)静态HTML文件。 整个目录没有被发布。
为我工作的解决scheme在这里find了 :
我回头想到应该logging的一个问题是某些文件types在我发布项目时没有被上传。
有问题的文件types是.pdf文件和.rtf。
发生这种情况的原因是因为这些文件扩展名未被识别为需要由Visual Studio发布。 幸运的是,这可以在Visual Studio中进行更改。
select未被复制的文件。 在“ 属性”中确保“ 生成操作”设置为“ 内容” 。
如果这不起作用,可以尝试以下方法。
在“ 项目”菜单下select“ 打包/发布网页”,注意下拉菜单:
尝试将其更改为此项目文件夹中的所有文件。
这是因为.pubxml.user包含需要发布的信息,而且该文件不是(也不应该)包含在源代码pipe理中。 要修复这个VS错误,请将信息从.pubxml.user文件复制到.pubxml文件。 相关的属性是:
<LastUsedBuildConfiguration>Release</LastUsedBuildConfiguration> <LastUsedPlatform>Any CPU</LastUsedPlatform>
把这些放在你的.pubxml中,你应该很好。
我尝试了所有这些解决scheme,但这是每次都有效的解决scheme。
我们只是将“发布方法:”从“文件系统”更改为“Web部署”,然后立即将其更改回“文件系统”。
我有几个项目有同样的问题。 唯一的打击似乎是networking项目。 删除和重新创buildconfiguration文件只解决问题一次。 另外,比较生成的publishxml并没有什么区别,所以它看起来似乎与profile没有任何关系。
OP提到的解决方法是在这个时候唯一可靠的解决scheme。
我在VS 2010上遇到了同样的问题,在检查了发布输出,事件日志,打开和检查Visual Studio日志等之后,我决定删除我认为最近更新到v1的Web发布(通过添加/删除)。 0.30810.0。 这解决了这个问题。
这里我们遇到了同样的问题。
我们只是将“发布方法:”从“文件系统”更改为“Web部署”,然后立即将其更改回“文件系统”。
以下为我工作:
只需从发布>debugging>发布(反之亦然),然后发布。
无需删除,编辑,发布任何你不需要的东西。
VS 2012 Pro与磁盘发布目标相同的问题。 用于正确发布的项目,但是无法将文件复制到目标文件夹时开始执行此问题。
解决scheme是编辑发布configuration文件,将模式从发布(任何CPU)更改为debugging,然后返回到发布(任何CPU)。 这样做会导致PublishProfiles \ projname.pubxml.user文件被重写(如上所述)。 看起来像在属性组节点下添加了LastUsedBuild,LastUsedPlatform和TimeStampOfAssociatedLegacyPublishXmlFile元素。 发布完成后,它会添加另一个具有单个文件和发布时间的ItemGroup。
我的问题是在myproject.csproj文件的configuration错误。 '_address-step1-stored.cshtml'文件没有复制发布。 “没有”更改为“内容”,现在没关系。
这个行动对我来说是成功的:
在“属性> PublishProfiles> xxxx.pubxml”中停用发布configuration文件,然后重新设置。
对于它的价值,我最终放弃了与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)中调用了它,但是它也可以很容易地被挂钩到一个post-build事件中。
我发现我可以通过将目标位置从obj / [release | stage | ..]更改为解决scheme文件夹之外的新path(例如c:\ deployment)来解决此问题。 看起来VS 2012在发布过程中变得困惑,也许放弃了某个地方。
马特
最近在VS 2013中,我导入了Umbraco CMS的MVC项目也遇到了同样的问题。 我无法发布。 上面的答案有所帮助,但我需要一段时间来弄清楚我应该在VS中做什么。 它需要一些研究,例如在MS博客上发现。 我试图说简单:
- 在VS工具栏中select一个特定的configuration,例如Release和Any CPU。 运行该项目。
- 之后右键单击相关解决scheme的解决scheme资源pipe理器中的“发布”。 创build新的发布configuration文件或使用给定的发布configuration文件,但始终确保在设置中select相同的configuration(例如,Release和Any CPU),就像在上次运行项目之前一样。
- 另外在我的情况下,有必要删除OBJ文件夹,因为这里从我最后一次失败的设置尝试发布卡住,虽然我重新启动VS并删除所有发布configuration文件。
我有一个Web应用程序与解决scheme中的其他几个被引用的项目。 过去,我已经多次成功部署了一个发布configuration。 我将项目configuration从debugging更改为发布,以便过去错过的项目。 下一次我试图部署时,我得到了这些症状,发布只是平静地失败 – 它什么都不做,说它成功了:
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 ==========
恢复它的唯一方法是消除发布configuration文件,closuresVisual Studio强制它保存删除,重新打开它,并从头开始重新创build发布configuration文件。 一旦我这样做,我可以再次发布罚款。
Win8 VS2012,蹩脚的笔记本电脑。
在Visual Studio 2012中,在版本之间切换仍然会导致问题。
我们添加了一个预生成事件来删除obj
文件夹: del /s /f /q $(ProjectDir)\obj
,它解决了发布的问题。 有时清洁工作,但并不总是。
我终于自己find了答案。 以上所有解决scheme都不适合我。
我所做的是,我移动项目驱动器c将项目文件夹更改为更短,并繁荣发布..
在我这边失败的原因是我有很长的项目名称/层级。
C:\ Users \ user \ Desktop \ Compliancepipe理系统\ ComplianceIssuepipe理系统\ ComplianceIssuepipe理系统
我曾想过这个,因为有时当我提取rar文件,它说,名称/path太长。 我认为这将是一样的Visual Studio 2012发布。 它确实!
希望它会帮助你们。
检查您当前的项目,确定您是否使用相同的类名称和不同的页面名称(类名将inheritance复制的文件)。 最终会混淆编译器!
CodeFile =“Consolidated.aspx.vb”Inherits =“合并
上述解决scheme都不适合我。
但是我注意到,在我们的主要解决scheme中,我们的五个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生成的Service Reference文件中遇到了这个问题,整个path长度太长了。
通过使用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.Namespacereplace为生成的服务代理中的现有名称空间(通常位于Reference.cs文件中),以避免编译错误。
http://myservice
应该replace为服务端点url。
我遇到了同样的问题。 上述解决scheme都不适合我。
所以,我排除了在发布时无法复制的文件。
我曾多次发表该网站。 但有一天,当我修改了一些aspx文件,然后试图发布网站,它导致了一个空的发布文件夹。
在我的解决方法中,我find了一个解决scheme。
-
发布向导将在发布时反映出任何错误,但不会将任何文件复制到目标文件夹。
-
要找出生成错误的文件,只需将网站文件夹的内容复制到一个新的文件夹,然后用该网站启动Visual Studio。
-
现在,当您尝试发布它会给你包含错误的文件名。
-
只是纠正原来的网站文件夹中的错误,并尝试发布,它会像以前一样工作。
按照以下步骤解决:
Build > Publish > Profile > New
创build一个新的configuration文件,并使用与现有configuration文件相同的设置进行configuration。
该项目现在将正确发布。 这通常是由在Visual Studio的较新版本中创build的另一台计算机的源代码控制的发布configuration文件引起的。
第一:
- 在发行版本configuration。
- 在“项目属性” – >“页面”中select“打包/发布网站”下的所有文件和文件夹。
- 重build解决scheme(清洁解决scheme之后)。
- 现在发布。
发布时重新检查你select的是什么。
这应该做到这一点。 它为我做了!:)
最简单的是,
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!