为什么会出现错误“目标GatherAllFilesToPublish不存在”?


78

我最近安装了适用于Visual Studio 2010 Service Pack 1的新Azure开发工具。每次尝试发布现有网站(使用文件系统部署)时,都会出现以下错误:

项目中不存在目标“ GatherAllFilesToPublish”。

谁能告诉我我想念的东西吗?

谢谢


我遇到了同样的问题,我没有使用工具,但无法修复
EduardoCampañó2012年

在本地构建文件系统时也会发生这种情况。赛义德回答中的热点对我有用。
亚当·祖克曼

这并没有为我:(我使用VS 2013的工作
kulNinja

VS2019即将在这里-问题仍然存在。
基督教

Answers:


82

我想我知道问题所在。当您安装Azure SDK位时,它会安装一些VS Web Publish更新。其中之一更新文件位于

C:\Program Files (x86)\MSBuild\Microsoft\VisualStudio\v10.0\WebApplications\Microsoft.WebApplication.targets

根据该文件的定义方式(如果该文件具有更新的时间戳)(无论出于何种原因),则在安装新组件时该文件不会更新。

要解决此问题,您应该可以按照以下步骤操作:


1
正如Sprinkle所说,这些文件位于v10.0文件夹中,但确实成功了!谢谢!
Zenuka

2
我没有更改Microsoft.WebApplication.targets,但HotFix对我有用。
布莱恩

4
应用此修复程序后,为我工作,关闭了Visual Studio,然后再次将其重新打开以生效。
杰夫

1
不幸的是,即使此错误适用于vs 2010 ,该答案也已接管了该错误的搜索结果-是否有针对其他版本VS的解决方案?
乔治·莫尔

3
对我来说,即使关闭后VS也会说KB2591016不适用,或者被您计算机上的其他条件所阻止
Iman

72

我遇到了这个问题,并通过添加以下内容进行修复:

<Target Name="GatherAllFilesToPublish">
</Target>

到项目文件。


1
这对我有用,但是创建了一个名为“备份”的附加文件夹,并将文件备份到其中。该死的VS 2013越野车
PhillyNJ 2014年

1
这在VS2013中为我解决了此问题。没有看到@PhilVallone提到的任何多余的Backup文件夹
Alexander Puchkov

6
我试过了 错误消失了,但所有.cs文件也都发布了。我认为这是因为您仅添加了一个存根。此答案不是针对根本问题的解决方案,而是一种解决方法。
chiccodoro 2015年

2
为我工作。确保在添加目标时不应对其进行注释。
kulNinja 2015年

2
这也为我解决了这个问题。为了使每个人都理解,要实现此目的,您需要在Visual Studio中右键单击项目(不是解决方案),选择“卸载项目”,然后再次右键单击它,然后选择“编辑<项目名称>”,然后将<Target ....>传递到文件中并保存,关闭文件,然后再次右键单击它并选择“ Reload Project”。然后再次测试您的发布,看看是否有效
mknopf

46

这对我有用-收集所有文件以发布错误

  1. 右键单击该项目,然后选择“编辑(项目名称).csproj”。(例如在记事本中编辑)
  2. 寻找 <Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
  3. 在行上方添加以下内容。

    <PropertyGroup> 
     <VisualStudioVersion Condition="'$(VisualStudioVersion)' == ''">13.0</VisualStudioVersion>
     <VSToolsPath Condition="'$(VSToolsPath)' == ''">$(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v$(VisualStudioVersion)</VSToolsPath>
    </PropertyGroup>
    
  4. 保存并重新加载项目。


13吗 我不知道为什么会这样。现实中的最新Visual Studio 2013版本不是12吗?
Mathias Lykkegaard Lorenzen 2014年

2
它做了。我使用VS 2013
PhillyNJ

1
我使用了VS的版本-$(VisualStudioVersion)应该已经定义,所以它可能会跳过这一行。VSToolsPath是真正为我做的事情。
Matt DeKrey 2014年

3
这为我解决了。VS2013中的ASP.NET MVC项目
Jaans

3
我在全新安装的Windows上100%全新安装VS2015时遇到了此错误。这篇文章为我解决了,除了您必须将13.0更改为14.0。感谢一吨@PhillyNJ!
休息室

9

删除这些安装为我解决了这个问题:

  • Microsoft Web发布-Visual Web Developer Express 2010
  • Microsoft Web发布-Visual Studio 2010

参考


我在这篇文章中尝试了其他所有内容...令我惊讶的是,它没有被标记为答案,对我有用!谢谢:)
肖恩·哈迪2014年

1
这些程序都没有运行Visual Studio 2015的程序
Iman

9

我在VS 2017中遇到了这个问题,我尝试按照此处的建议手动更改csproj文件,但没有建议的修复程序对我有用。我遇到了这个nuget包。安装它对我有用。

MSBuild.Microsoft.VisualStudio.Web.targets


非常感谢!这对我有用。我认为那将是过去的日子之一。
蒂莫西·坎斯基

谢谢!上面的建议说,将Target节点添加到项目文件中的文件太多了,我同意有关它是解决方法而不是解决方案的意见。安装此Nuget程序包后,这似乎完全按预期发布。再次感谢!
zpert

5

我想将我的ASP.Net应用程序发布到Windows Azure时遇到类似的问题。经过多次反复试验,最终解决方案为我工作。这不需要文件的任何重命名或修补程序/修补程序的任何安装/重新安装。这是您必须做的:

在写字板/记事本中打开ASP.Net项目文件(.csproj),然后找到类似于以下内容的行:

<Import Project="$(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v10.0\WebApplications\Microsoft.WebApplication.targets" Condition="'$(Solutions.VSVersion)' == '8.0'" />

替换为下面给出的行:

<Import Project="$(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v10.0\WebApplications\Microsoft.WebApplication.targets" />

请尝试阅读此stackoverflow.com/help/deleted-answers,以更多地了解如何回答。即:“无法从根本上回答问题的答案”:仅是到外部站点的链接
RadimKöhler2013年

1
你救了我的一天!我尝试了所有其他答案,但都没有解决。事实证明,无论出于何种原因,在我的csproj文件中,该行甚至都包含字面形式的属性Conditon="false"。在开始工作之前,我还必须清理并重建项目。
chiccodoro 2015年

4

我在一个古老的问题中意识到了这一点,但是最近我遇到了它,这就是我如何解决它。

背景:我有一个旧项目,我已升级到VS Studio13。看来该项目文件没有正确升级。

在csproj文件中有对VS v10.0的引用,但是我正在运行VS 13,它实际上是“ v12.0”。

因此,我告诉csproj文件使用“ v12.0”文件夹,而不是“ v10.0”文件夹。

这就是我所拥有的:

<PropertyGroup>
  <VisualStudioVersion Condition="'$(VisualStudioVersion)' == ''">10.0</VisualStudioVersion>
  <VSToolsPath Condition="'$(VSToolsPath)' == ''">$(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v$(VisualStudioVersion)</VSToolsPath>
</PropertyGroup>
<Import Project="$(MSBuildBinPath)\Microsoft.CSharp.targets" />
<Import Project="$(SolutionDir)\..\BuildTools\Microsoft\VisualStudio\v10.0\WebApplications\Microsoft.WebApplication.targets" Condition="'$(VSToolsPath)' != ''" />
<Import Project="$(SolutionDir)\..\BuildTools\Microsoft\VisualStudio\v10.0\WebApplications\Microsoft.WebApplication.targets" Condition="false" />

这就是我将其更改为:

<PropertyGroup>
  <VisualStudioVersion Condition="'$(VisualStudioVersion)' == ''">12.0</VisualStudioVersion>
  <VSToolsPath Condition="'$(VSToolsPath)' == ''">$(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v$(VisualStudioVersion)</VSToolsPath>
</PropertyGroup>
<Import Project="$(MSBuildBinPath)\Microsoft.CSharp.targets" />
<Import Project="$(VSToolsPath)\WebApplications\Microsoft.WebApplication.targets" Condition="'$(VSToolsPath)' != ''" />

现在,我发布到文件系统的工作正常了!


4

VS2017同样的问题。您可以尝试一下,它对我有用。

  1. 卸载项目并编辑csproj文件
  2. 搜索关键字“ WebApplication.targets”

     <Import Project="...\WebApplications\Microsoft.WebApplication.targets" ... >
    

    注释或删除此行。(可能是两行,具体取决于“条件”)

  3. 保存并重新加载项目

在此步骤中,它将提示您安装大约500M的软件包。

之后,重新加载项目,然后就可以了!

我猜我在安装VS 2017时只是想念一些组件。

我也注意到VS2017中的MSBuild路径有很大不同,但是也许与csproj文件中使用相对路径的问题无关。


最简单的一种。谢谢!
安东宁·普罗哈兹卡

3

我遇到了类似的问题,并通过使用Sayed提供的步骤解决了该问题。

我重命名的文件虽然在v10.0目录中。

C:\Program Files (x86)\MSBuild\Microsoft\VisualStudio\v10.0\WebApplications\Microsoft.WebApplication.targets.

原始文件的日期为2011年1月18日,将其重命名为.bak扩展名,然后重新安装了KB2591016,看来该发布再次起作用。文件Microsoft.WebApplication.targets的新日期现在为2011年8月11日。


3

我一直在为Visual Studio 2013(和2015)遇到同样的问题。

对我而言,关键的修复方法是添加VSToolsPath属性设置,无论出于何种原因,该属性设置在我的项目文件中均不存在。

我将此添加到<PropertyGroup>指令中:

<VSToolsPath Condition="'$(VSToolsPath)' == ''">$(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v$(VisualStudioVersion)</VSToolsPath>

附带说明:我的项目文件也引用了该Microsoft.WebApplication.targets文件的v10.0版本,但这似乎还可以。


2

我有同样的错误。不知何故,此行丢失了。

<Import Project="$(VSToolsPath)\WebApplications\Microsoft.WebApplication.targets" Condition="'$(VSToolsPath)' != ''" />

将其添加到下面

<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />

现在工作正常


就我而言,它是<Import Project =“ $(MSBuildToolsPath32)\ Microsoft.CSharp.targets” />
Joy Acharya

2

我在VS2013中遇到相同的问题,我发现的解决方案是通过创建一个新的空Web应用程序项目,可以将以下行从其中复制到我的旧网站项目中:在顶部:

<Project ToolsVersion="12.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
  <Import Project="$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props" Condition="Exists('$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props')" />

<PropertyGroup>
    <VisualStudioVersion Condition="'$(VisualStudioVersion)' == ''">10.0</VisualStudioVersion>
    <VSToolsPath Condition="'$(VSToolsPath)' == ''">$(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v$(VisualStudioVersion)</VSToolsPath>
  </PropertyGroup>
  <Import Project="$(MSBuildBinPath)\Microsoft.CSharp.targets" />
  <Import Project="$(VSToolsPath)\WebApplications\Microsoft.WebApplication.targets" Condition="'$(VSToolsPath)' != ''" />
  <Import Project="$(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v10.0\WebApplications\Microsoft.WebApplication.targets" Condition="false" />

2

右键单击该项目,然后选择“编辑”(项目名称).csproj。(例如,在记事本中编辑)在行上方查找“添加以下内容”。

13.0 $(MSBuildExtensionsPath32)\ Microsoft \ VisualStudio \ v $(VisualStudioVersion)保存并重新加载项目。

这真的对我有用,谢谢


2

对于Visual Studio 2017-应将其添加到.csproj文件中的块之后,使用记事本并查找“ .targets”以找到它...

我创建了一个新的VS 2017项目,该项目对我有用(没有警告):

  <PropertyGroup>
    <VisualStudioVersion Condition="'$(VisualStudioVersion)' == ''">10.0</VisualStudioVersion>
    <VSToolsPath Condition="'$(VSToolsPath)' == ''">$(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v$(VisualStudioVersion)</VSToolsPath>
  </PropertyGroup>
  <Import Project="$(MSBuildBinPath)\Microsoft.CSharp.targets" />
  <Import Project="$(VSToolsPath)\WebApplications\Microsoft.WebApplication.targets" Condition="'$(VSToolsPath)' != ''" />
  <Import Project="$(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v10.0\WebApplications\Microsoft.WebApplication.targets" Condition="false" />
  <Target Name="MvcBuildViews" AfterTargets="AfterBuild" Condition="'$(MvcBuildViews)'=='true'">
    <AspNetCompiler VirtualPath="temp" PhysicalPath="$(WebProjectOutputDir)" />
  </Target>

2

我遇到了同样的问题:我在中创建了项目VS 2010,并且不得不从发布VS 2019。这里没有任何解决方案对我有用,并且我已经解决了大约一天的问题。

起作用的内容来自此链接:http : //www.dotnetxp.com/visual-studio-error-publish-target-gatherallfilestopublish-not-exist-project/

这是我所做的:

**卸载违规项目。

**在文本编辑器中打开csproj文件。

**找到这行

<Import Project="$(MSBuildBinPath)\Microsoft.CSharp.targets" />

并替换为此。我使用它,16.0因为那是我正在使用的版本(vs2019)。

<PropertyGroup>
<VisualStudioVersion Condition="'$(VisualStudioVersion)' == ''">16.0</VisualStudioVersion>
<VSToolsPath Condition="'$(VSToolsPath)' == ''">$(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v$(VisualStudioVersion)</VSToolsPath>
</PropertyGroup>
<Import Project="$(MSBuildBinPath)\Microsoft.CSharp.targets" />
<Import Project="$(VSToolsPath)\WebApplications\Microsoft.WebApplication.targets" Condition="'$(VSToolsPath)' != ''" />
<Import Project="$(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v16.0\WebApplications\Microsoft.WebApplication.targets" Condition="false" />

**重新加载项目并发布。

像魅力一样工作。



1

如果在VS2012(Visual Studio 2012)中编辑VS2010项目,请尝试此操作。从以下位置编辑csproj文件:

<Import Project="$(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v10.0\WebApplications\Microsoft.WebApplication.targets" />

并更改为:

<Import Project="$(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v11.0\WebApplications\Microsoft.WebApplication.targets" />

1
该行可能类似于<Import Project =“ $(MSBuildExtensionsPath32)\ Microsoft \ VisualStudio \ v10.0 \ WebApplications \ Microsoft.WebApplication.targets” condition ='false'/>,它对我有用,谢谢@SushiGuy
Kashif R

0

由于无法从我这一角度复制问题,因此我建议您尝试重新安装SDK。

在安装新的SDK之前,请尝试将其完全删除。

最好的祝福,

徐明


我完全删除了工具,然后重新安装,但这似乎不起作用。我完全卸载了新工具(.NET的Windows Azure SDK),然后又回到使用Visual Studio 2010 SP1的旧(当前)发布功能。
2012年

1
为什么一切都那么马车?说真的 我曾期望微软会提供更多。
Mathias Lykkegaard Lorenzen 2014年

0

我已解决的同一问题。请检查解决方案中是否缺少某些文件。如果您遇到错误,Error - The target "GatherAllFilesToPublish" does not exist in the project.则只需打开.proj文件并删除此行<Import Project="$(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v10.0\WebApplications\Microsoft.WebApplication.targets" Condition="false" />

您收到实际错误或那些丢失的文件进入解决方案

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.