我有一个WebApplication包含引用WCF服务。

在使用Visual Studio 2010构建时,构建失败,没有任何错误或警告。但是使用MsBuild构建.csproj是成功的。

不知道我应该在Visual Studio中尝试什么来解决/诊断问题。你能帮帮我吗?

我发现构建一直在失败,

从状态栏中显示的文本。 从输出窗口: ========== 构建:0成功或更新,1失败,0跳过 ========== 输出选项卡包含配置详细信息。 ------构建开始:项目:<projectName here>配置:调试任何CPU


当前回答

我也遇到过类似的情况。在我的案例中,出现在csproj文件的BeforeBuild目标中的自定义操作(来自Nuget.org - http://www.nuget.org/packages/MSBuildVersioning/上提供的MSBuildVersioning包)失败了,没有在正常的地方触发任何错误消息。

我可以通过设置“MSBuild项目构建输出verbose”(在最新的Visual Studio的工具选项卡[路径:Tools > Options >构建和运行])为“诊断”来确定这一点,如下所示。这表明自定义操作(在我的例子中是HgVersionFile)失败了。

其他回答

我想扩展一下萨斯的答案。我必须针对正确的. net版本来解决这个问题。

一个项目给了我一个错误:

“类型或命名空间名称‘SomeNamespace’在命名空间‘BeforeSomeNamespace’中不存在(您是否缺少程序集引用?)”。

在“错误列表”窗口中没有错误,但程序集在“引用”下有一个黄色警告标志。

然后我看到引用的项目目标是4.5.1,而引用的项目目标是4.6.1。将4.6.1更改为4.5.1允许整体构建成功。

我注意到,如果在错误列表中选择了“构建+智能感知”,它会导致错误消息被吞噬。

将此选项更改为“Build Only”,将显示所有错误消息:

我不知道这是否是Visual Studio中的bug,但它确实揭示了隐藏的错误消息,这是确定失败的关键。

有些人,比如Richard J Foster,建议将“MSBuild项目构建输出详细信息”设置为“诊断”(可能的最高选项),但这并没有为我解决问题,因为Visual Studio似乎在抑制错误消息本身。

作为一种替代方法,您可以尝试使用来自“output”选项卡的原始输出消息,这些消息没有被Visual Studio过滤。要么就地搜索字符串"error"和/或"failed",要么将所有输出复制到您最喜欢的文本编辑器并在那里进行搜索。

为了确保每次构建时都出现输出窗口,您可以转到工具→选项→项目和解决方案→常规,并确保选中“在构建开始时显示输出窗口”选项。

作为额外的故障排除步骤,还可以通过运行dotnet build从PowerShell命令行构建项目。这将向您显示完整的构建输出,包括Visual Studio可能隐藏的任何错误。

我尝试了很多事情,比如重新启动Visual Studio,清理并重新构建解决方案,重新启动PC等,但没有一个对我有效。我最终通过以下方法解决了这个问题:

首先,确保解决方案中的所有项目(包括测试)的目标都是相同的. net版本。然后:

保存项目中挂起的更改并关闭Visual Studio 从文件资源管理器中找到准确的位置,找到“obj”文件并打开它, 然后,删除所有包含的文件(有些文件不会删除,没关系,跳过它们)。 使用运行命令(按Windows键+ R),输入“%temp%”,按enter找到临时文件。 最后,将它们全部删除。

我也遇到过类似的情况。在我的案例中,出现在csproj文件的BeforeBuild目标中的自定义操作(来自Nuget.org - http://www.nuget.org/packages/MSBuildVersioning/上提供的MSBuildVersioning包)失败了,没有在正常的地方触发任何错误消息。

我可以通过设置“MSBuild项目构建输出verbose”(在最新的Visual Studio的工具选项卡[路径:Tools > Options >构建和运行])为“诊断”来确定这一点,如下所示。这表明自定义操作(在我的例子中是HgVersionFile)失败了。

删除隐藏的.vs文件夹并重新启动Visual Studio。这对我很管用。