我在VS 2012中有一个Web应用程序项目,当我使用Web发布工具时,它成功地构建了,但没有将任何文件复制到发布目标(在这种情况下是文件系统)。

如果我看构建输出,我可以看到一切都被复制到obj\Release\Package\PackageTmp\正确,但然后我在构建输出中看到的是这样的:

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

即使它说发布成功,但目标目录中没有用于发布的文件。

我在多个项目中看到过这种情况,有时似乎是解决方案/平台配置导致了这个问题,但我还不能确定造成这个问题的确切原因。

有人见过这种情况吗?或者有人知道如何让它正确工作吗?

更新:

我可能找到了一个变通办法。这又发生了,我把发布设置弄乱了。一旦我改变了设置选项卡上选择的配置到另一个配置,然后回到我想要使用的所有文件再次开始发布。希望这在未来的其他项目中也适用。

更新2:

我在Microsoft Connect上发布了一个bug,并从VS Web developer团队的开发人员那里得到了回复。他说他们已经在内部版本中修复了这个问题,并将很快发布发布工具的更新来修复这个问题。

更新3:

最近Visual Studio 2012 Update 2修复了这个问题


我在VS 2010上遇到了同样的问题,在检查发布输出,事件日志,打开和检查visual studio日志等之后,我决定删除web发布(通过添加/删除),我相信最近更新到v1.0.30810.0。这就解决了问题。


我做了好几个项目都遇到了同样的问题。唯一受欢迎的似乎是网络项目。删除和重新创建概要文件只能解决一次问题。此外,比较生成的publishxml不会产生任何差异,因此它似乎与概要文件完全无关。

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


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


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

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

下面是我找到答案的线索:

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

上述对话中对我有帮助的中肯回答是:

Posted by Microsoft on 6/13/2012 at 12:00 PM Hi Andrew, This was a bug in how we handle the solution configuration vs. the project configuration. We incorrectly assumed that they would be the same (e.g. Solution's Release|x86 would have each project set to Release|x86 as well), which caused us to use the wrong build properties for publishing files. The workaround is to make the solution configuration and build configuration match. This issue will be fixed in the next release of Visual Studio 2012. Thanks, - Jimmy Lewis SDET, Visual Web Developer team


更进一步说。在创建发布配置文件时,将创建两个文件。

NewProfile.pubxml NewProfile.pubxml.user

当您从源代码控制打开一个在PublishProfile文件夹中包含这些文件的项目时,它只有.pubxml文件,而没有. publicxml文件。用户文件,因此它创建了。publicxml。用户文件在运行时打开项目。 当它创建新的. publicxml . xml时。用户在飞行的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. xml文件中。用户文件你的PublishProfiles将重新开始工作。


我有同样的错误,我改变了设置从发布调试和问题解决。


同样的问题与VS 2012 Pro的磁盘发布目标。项目用来正确发布,但开始做这个问题,它无法将文件复制到目标文件夹。

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


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

我们只需将“Publish method:”从“File System”更改为“Web Deploy”,然后立即将其更改为“File System”。


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

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


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

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


我也有同样的问题,但没有一个答案在这个线程为我工作。我的问题是,有一个目录,其中包含动态生成(由我的应用程序)静态HTML文件。没有发布整个目录。

我找到了适合我的解决方案:

One issue I got a while back and thought I should document was that certain file types were not being uploaded when I published my project. The file types in question were .pdf files and .rtf. The reason this happened was because these file extensions were not recognized as requiring publishing by Visual Studio. Luckily this can be changed in Visual Studio. Select the file(s) that aren’t being copied. In Properties ensure that Build Action is set to Content. If this doesn’t work the following can be tried. Under the Project menu select Package/Publish Web and notice this drop down: Try changing this to All files in this project folder.


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

当您右键单击解决方案并选择publish时,您就有了一个概要集。删除这个并创建一个新的。

这将解决问题。

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


这是因为.pubxml. xml。User包含发布所需的信息,该文件没有(也不应该)包含在源代码控制中。要修复这个VS错误,请从.pubxml. xml文件中复制信息。用户文件到.pubxml文件。相关属性为:

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

把它们放到.pubxml中,就可以开始了。


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

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


下面的方法对我很有效:

简单地从发布>调试>发布(反之亦然)更改,然后发布。

不需要删除,编辑,发布任何你不需要的东西。


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

我们只需将“Publish method:”从“File System”更改为“Web Deploy”,然后立即将其更改为“File System”。


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

我所做的是,我将项目移动到驱动c,将项目文件夹更改为更短的内容,然后boom它发布。

在我这边失败的原因是我有很长的项目名称/层次结构。

c:\用户\用户\桌面\合规管理系统\合规issue emanagementsystem \合规issue emanagementsystem

我想到了这一点,因为有时当我提取rar文件时,它说名称/路径太长。我以为它会和visual studio 2012发布一样。确实如此!

希望对你们有所帮助。


检查你当前的项目,你是否做了相同的类名和不同的页面名(类名将继承复制的文件)。最终这将混淆编译器!!

代码文件=“合并.aspx.vb” 继承=“合并


最简单的是,

   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!

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


我发现我可以通过改变目标位置从obj/[释放|阶段|..]到解决方案文件夹之外的新路径,例如c:\deployment。看起来VS 2012有点混乱,可能在发布过程中就放弃了。

Matt


以上的方法对我来说都没用。

但我注意到我们的五个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

我的。命名空间应该替换为生成的服务代理中的现有命名空间(通常在Reference.cs文件中找到),以避免编译错误。

http://myservice应该替换为服务端点url。


我也遇到了同样的问题。以上的方法对我来说都没用。

因此,我已经排除了在发布时未能复制的文件。


最近在VS 2013的一个MVC项目中,我导入了Umbraco CMS,遇到了同样的问题。我不能出版。上面的答案很有帮助,尽管我需要一段时间来弄清楚我在vs中应该做什么。这需要一些研究,比如在MS博客上找到答案。我试着简单地说:

Choose in the VS toolbar a certain configuration e.g. Release and Any CPU. Run the project. Afterwards right-click in the Solution Explorer on the solution in question, choose Publish. Create a new publishing profile or use a given one, but always make sure that in the settings the same configuration (e.g. Release and Any CPU) is chosen, as before you run the project the last time. Additionally in my case it was necessary to delete the OBJ folder because here the settings from my last unsuccessful tries to publish got stuck, though I restarted VS and deleting all publishing profiles.


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

在我的变通中,我找到了一个解决方案。

发布向导将在发布时反映任何错误,但不会将任何文件复制到目标文件夹。 要找出产生错误的文件,只需将网站文件夹内容复制到一个新文件夹中,并用该网站启动visual studio。 现在,当你尝试发布时,它会给你一个包含错误的文件名。 只需纠正原始网站文件夹中的错误,并尝试发布,它将像之前一样工作。


第一:

内置版本配置。 在项目属性->页面选择下的所有文件和文件夹 包/发布Web。 重建溶液(清洁溶液之后)。 现在发布。

出版时,重新检查你所选择的。 这个应该可以了。我就是这样!:)


我的问题是在错误的配置我的项目。csproj文件。“_address-step1-stored。Cshtml的文件在发布时没有复制。“None”改为“Content”,现在没问题了。


遵循以下步骤来解决:

Build > Publish > Profile > New

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

项目现在将正确发布。这通常是由另一台机器在更新版本的Visual Studio中创建的受源代码控制的发布配置文件造成的。


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

在改变临时变量后重新启动visual studio没有做到这一点,必须重新启动系统。


尝试退出Visual Studio,删除相关的pubxml。在你的PublishProfiles目录下,重新启动VS并发布。参与VS 2019的工作。