我在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 2012 Pro的磁盘发布目标。项目用来正确发布,但开始做这个问题,它无法将文件复制到目标文件夹。

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

其他回答

我在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。

这可能是由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

下面的方法对我很有效:

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

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

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

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

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

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

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

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

希望对你们有所帮助。