7

我有一个解决方案,错误的文件名和行号没有显示在错误列表中,除非我打开了文件。

我有另一个解决方案,当我构建解决方案时只显示三个错误,它们确实显示了行号和文件。如果我打开带有错误的文件,则会弹出另外 3 个错误,但是当我关闭文件时,所有错误都会消失,直到我再次重建。

我从谷歌搜索中看到的唯一问题是路径太长或太奇怪,但我认为这不是问题。路径C:\TFS\Apps\Rel_2013.7.1\S3\CrmSvcUtil Extensions适用于部分有效的解决方案和C:\TFS\Apps\Rel_2013.7.1\S3根本不起作用的解决方案。

编辑 1

只是为了清楚我所看到的:我的解决方案中有多个项目,但其中一个项目不显示错误的文件或行号,除非文件打开。

在这个屏幕截图中,我添加了两个愚蠢的错误,每个错误都在不同的项目中,并构建了解决方案。测试项目按预期显示文件和行号。Common 项目没有显示文件或行号错误,即使它应该并且在我实际打开包含错误的文件时显示。警告没有显示文件,因为它是项目级别的警告,而不是文件级别的警告,这是有道理的。

示例错误

当我打开带有错误的文件时,会显示文件名和行号,但出现不同的错误:

错误与其他错误一起显示

如果我将 int 更改为字符串,则仅删除行编号错误。我实际上必须构建才能消除错误。

4

4 回答 4

4

我在使用旧版 Workflow 框架 V3 的项目上遇到了同样的问题。有趣的是,如果项目只有编译器警告,则文件和行正确显示,但导致所有警告和错误的错误参考文件 C:\Windows\Microsoft.NET\Framework\v4.0.30319\Workflow.Targets(121 ,5):

我发现的讨厌的解决方法是

  1. 卸载项目
  2. 注释掉 .csproj 文件底部的行
<Import Project="$(MSBuildToolsPath)\Workflow.Targets" />
  1. 重新加载项目并编译它。编译器错误将显示正确的文件名和行号。
  2. 修复编译器错误
  3. 再次卸载项目,恢复 Workflow.Targets 导入并重新加载项目。

类似的解决方案已报告给 MS https://connect.microsoft.com/VisualStudio/feedback/details/797056/state-machine-workflow-projects-using-vs-2012

如果您忘记恢复 Workflow.Targets 导入,则会出现运行时错误,例如

System.Workflow.ComponentModel.Compiler.WorkflowValidationFailedException: The workflow failed validation.
   at System.Workflow.Runtime.WorkflowDefinitionDispenser.ValidateDefinition(Activity root, Boolean isNewType, ITypeProvider typeProvider)
   at System.Workflow.Runtime.WorkflowDefinitionDispenser.LoadRootActivity
于 2014-10-23T03:50:33.847 回答
1

报告某些错误(例如架构错误),但不会影响最终构建。取决于文件,除非文件打开,否则您可能/可能看不到错误。这里有一些东西可以尝试

  1. 在调试/发布模式下构建,看看这是否会改变任一构建的内容。
  2. 更改MSBuild Project Build Output Verbosity(工具-> 项目和解决方案-> 构建并运行)以查看是否有效果。我猜这只会添加到输出中,但不会影响错误列表窗口。
  3. 这在VS2013中会发生吗?这可能会提供一个线索。

报告的输出构建和智能感知错误之间存在差异并不罕见。

于 2013-10-28T15:33:27.723 回答
1

在我看来,您只是在查看 IntelliSense 解析器生成的错误。它只查看打开的文件。当您关闭文件时,这些 IS 错误将再次从列表中删除。在您构建并打开文件后看到错误列表更改的解释类似,IS 解析器再次接管。

这都是设计使然,只需修复错误即可。

于 2013-10-28T16:53:27.533 回答
0

Michaels解决方案在 2018 年 5 月对我们不起作用。

Visual Studio 2017 + .NET 4.7.2 和 C# 7.2,旧的工作流服务。

添加了内联变量声明: int.TryParse(s, out int queueId);

回到预定义变量并成功编译。

int queueId = 0;
int.TryParse(s, out queueId);

我会确定微软有一个错误。

样本错误:

 C:\WINDOWS\Microsoft.NET\Framework\v4.0.30319\Workflow.targets(121,5): error : Invalid expression term 'int'
 C:\WINDOWS\Microsoft.NET\Framework\v4.0.30319\Workflow.targets(121,5): error : ; expected
 C:\WINDOWS\Microsoft.NET\Framework\v4.0.30319\Workflow.targets(121,5): error : Invalid expression term ')'
于 2018-05-04T21:52:27.750 回答