除非文件已打开,否则错误的文件和行号不会显示在错误列表中

时间:2013-10-25 14:36:55

标签: c# visual-studio-2012

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

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

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

编辑1

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

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

Example Error

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

Error displays along other error

如果我将int更改为字符串,则只删除编号为错误的行。我实际上必须构建以便删除错误。

4 个答案:

答案 0 :(得分:4)

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

我找到的讨厌的解决方法是

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

答案 1 :(得分:1)

报告了某些错误,例如架构错误,但不影响最终构建。除非文件已打开,否则您可能/可能看不到错误,具体取决于文件。以下是一些值得尝试的事情

  1. 构建调试/发布模式,看看是否会改变构建的内容。
  2. 更改MSBuild Project Build Output Verbosity(工具 - &gt;项目和解决方案 - &gt;构建并运行)以查看是否有效。我猜测它只会添加到输出但不影响错误列表窗口。
  3. VS2013会发生这种情况吗?这可能提供线索。
  4. 报告的输出构建和智能感知错误之间存在差异并不罕见。

答案 2 :(得分:1)

听起来我只是看着IntelliSense解析器生成的错误。其中只查看打开的文件。当您关闭文件时,那些IS错误将再次从列表中删除。在构建和打开文件之后看到错误列表发生了类似的解释,IS解析器再次接管。

这完全是设计理念,只需修复错误即可获得成功。

答案 3 :(得分:0)

Michaels solution在2018年5月没有为我们工作。

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

添加了内联变量declerations: 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 ')'