61

我在 obj/debug 中创建了 3 个临时文件:

例如

  • TemporaryGeneratedFile_036C0B5B-1481-4323-8D20-8F5ADCB23D92.cs
  • TemporaryGeneratedFile_5937a670-0e60-4077-877b-f7221da3dda1.cs
  • 临时生成文件_E7A71F73-0F8D-4B9B-B56E-8E70B10BC5D3.cs

(即使在解决方案清洁后,指南似乎也没有改变)

我的构建失败了,因为:

SA1633:文件没有头,头 Xml 无效,或者头不在文件顶部。

我不想关闭 StyleCop 规则。如何找出创建这些临时文件的原因?

该站点是一个 asp.net MVC 4 站点,有 5 个模型、4 个控制器、2 个类、2 个 aspx 网页和 1 个服务参考,在数字上似乎与 3 个文件不相符。

任何指针?

编辑:如果我将框架从 4.5 更改回 4,这些文件就会消失并且构建成功。

我的 StyleCop 版本是 4.4,我非常愿意找到一种方法让它忽略 obj/debug

4

7 回答 7

86

我通过转到项目解决方案(其构建)给出了这个错误来解决了这个问题。

  1. 右键单击项目并卸载项目。
  2. 然后右键单击项目并编辑 .csproj 文件。
  3. 查找这些临时(有问题的)生成的文件。(见示例代码)
  4. 从 .csproj 文件中删除此文件引用。
  5. 右键单击项目并加载回项目。
  6. 重建解决方案。
  7. 现在去就好了...

它们在 csproj 文件中看起来像这样:

<Compile Include="src\obj\Debug\TemporaryGeneratedFile_036C0B5B-1481-4323-8D20-8F5ADCB23D92.cs" />
<Compile Include="src\obj\Debug\TemporaryGeneratedFile_5937a670-0e60-4077-877b-f7221da3dda1.cs" />
<Compile Include="src\obj\Debug\TemporaryGeneratedFile_E7A71F73-0F8D-4B9B-B56E-8E70B10BC5D3.cs" />
于 2012-09-24T14:37:26.607 回答
39

在 StyleCop.Settings 文件的解析器块中,为这些文件添加一个条目:该值是一个正则表达式,因此可以使用更紧密的匹配 guid,但这些满足我现在的需要。

  <Parsers>
    <Parser ParserId="Microsoft.StyleCop.CSharp.CsParser">
      <ParserSettings>
        <BooleanProperty Name="AnalyzeDesignerFiles">False</BooleanProperty>
        <CollectionProperty Name="GeneratedFileFilters">
          <Value>\.g\.cs$</Value>
          <Value>\.generated\.cs$</Value>
          <Value>\.g\.i\.cs$</Value>
          <Value>TemporaryGeneratedFile_.*\.cs$</Value>
        </CollectionProperty>
      </ParserSettings>
    </Parser>
  </Parsers>
于 2012-09-14T09:17:41.840 回答
15

带有“TemporaryGeneratedFile_”前缀的 3 个文件由最有可能通过链导入的 Microsoft.WorkflowBuildExtensions.targets 文件自动生成:

  • *.csproj -->
  • Microsoft.CSharp.targets -->
  • Microsoft.Common.targets -->
  • Microsoft.WorkflowBuildExtensions.targets

它们是在$(IntermediateOutputPath)MSBuild 属性指向的中间输出路径下生成的,通常类似于obj\debug. 处理有关这些自动生成文件的 StyleCop 警告/错误的一种方法是告诉 StyleCop 跳过$(IntermediateOutputPath). 例如,在您的项目中包含以下项目:

<ItemGroup>
    <ExcludeFromStyleCop Include="$(IntermediateOutputPath)\**\*.cs" />
</ItemGroup>

ExcludeFromStyleCop是 StyleCop.targets 文件识别的项目名称,用于在构建期间从分析中排除文件(至少对于 StyleCop 4.7)。双星**是用于在文件夹下递归搜索的 MSBuild 语法。

新项目可能会显示在 Visual Studio 的解决方案资源管理器中。如果这是不可取的,可以使用“可见”项目元数据将其隐藏:

<ItemGroup>
    <ExcludeFromStyleCop Include="$(IntermediateOutputPath)\**\*.cs" >
        <Visible>False</Visible>
    </ExcludeFromStyleCop>
</ItemGroup>

如有必要,可以使用类似的方法来排除其他文件。我希望这会有所帮助。

于 2013-02-23T09:23:55.373 回答
1

我最近在一个旧的 WebForms 项目中进行了一些代码更改后遇到了这个问题。我采取了以下步骤:

  1. 关闭项目
  2. 在文本编辑器中打开 .csproj 文件
  3. 搜索“TemporaryGeneratedFile_”,发现有3个文件有问题
  4. 删除这三个包括:
<Compile Include="obj\Debug\TemporaryGeneratedFile_036C0B5B-1481-4323-8D20-8F5ADCB23D92.cs"/>
<Compile Include="obj\Debug\TemporaryGeneratedFile_5937a670-0e60-4077-877b-f7221da3dda1.cs"/>
<Compile Include="obj\Debug\TemporaryGeneratedFile_E7A71F73-0F8D-4B9B-B56E-8E70B10BC5D3.cs"/>
  1. 保存并重新打开
  2. 重建并且没有进一步的问题
于 2021-11-29T16:22:55.187 回答
0

我正在帮助一位同事,他在我们的主要 VS 解决方案中添加了一个新项目,并且遇到了同样的 3 个错误。我和他一起完成了上述建议的步骤,但没有成功修复它。在此之后,我发现他错过了我们在使用代码分析和 StyleCop 的解决方案中添加新项目时执行的步骤之一。他忘记将 Settings.StyleCop 文件添加到他的项目中 :)

于 2017-03-09T16:27:09.777 回答
0

我最近突然遇到了同样的问题。

对我来说,我可以通过打开每个项目的 .csproj 文件来克服这个问题,然后删除以下行:

<Import Project="$(SolutionDir)\CodeAnalize\Microsoft.StyleCop.targets" />

重新打开解决方案后,它能够毫无错误地构建所有内容。

于 2017-05-09T00:15:20.153 回答
0

我遇到了类似的问题并解决如下:

除了在 obj 文件夹 重建中调试之外,还删除了 bin 文件夹中的调试,并且它有效

于 2018-02-16T14:33:29.930 回答