Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

TemporaryGeneratedFile_[guid] in /obj/debug breaking build

I have 3 temporary files being created in obj/debug:

E.g.

  • TemporaryGeneratedFile_036C0B5B-1481-4323-8D20-8F5ADCB23D92.cs
  • TemporaryGeneratedFile_5937a670-0e60-4077-877b-f7221da3dda1.cs
  • TemporaryGeneratedFile_E7A71F73-0F8D-4B9B-B56E-8E70B10BC5D3.cs

(The guids don't seem to change even after a solution clean)

My build is failing because:

SA1633: The file has no header, the header Xml is invalid, or the header is not located at the top of the file.

I don't want to turn the StyleCop rule off. How do I find out what is creating these temporary files?

The site is an asp.net MVC 4 site, with 5 models, 4 controllers, 2 classes, 2 aspx web pages and 1 service reference, which numerically don't seem to tally with the 3 files.

Any pointers?

Edit: If I change framework from 4.5 back to 4 these files go away and the build is successful.

My version of StyleCop is 4.4, I'm more than open to finding a way to get it to ignore obj/debug

like image 619
NikolaiDante Avatar asked Sep 13 '12 11:09

NikolaiDante


3 Answers

I solved this issue by going to the project solution (whose build) was giving this error.

  1. right click on the project and unload the project.
  2. Then right click on the project and edit the .csproj file.
  3. Look for these temp (problematic) generated files. (see example code)
  4. remove this file references from the .csproj file.
  5. Right click on project and load back the project.
  6. Rebuild the solution.
  7. Its good to go now...

they look like this in the csproj file:

<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" />
like image 86
Rajesh Avatar answered Nov 11 '22 04:11

Rajesh


In the parsers block of a StyleCop.Settings file add an entry for these files: The value is a regex, so a tighter one for matching a guid could be used, but these meets my need for now.

  <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>
like image 39
NikolaiDante Avatar answered Nov 11 '22 03:11

NikolaiDante


The 3 files with "TemporaryGeneratedFile_" prefix are auto-generated by the Microsoft.WorkflowBuildExtensions.targets file most likely imported via the chain:

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

They are generated under the intermediate output path pointed by the $(IntermediateOutputPath) MSBuild property, usually something like obj\debug. One way to deal with the StyleCop warnings/errors about these auto-generated files is to tell StyleCop to skip any *.cs files under the $(IntermediateOutputPath). For example, include the following item in your project:

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

ExcludeFromStyleCop is an item name recognized by the StyleCop.targets file to exclude files from analysis during a build (at least for StyleCop 4.7). The double star ** is MSBuild syntax for searching recursively under a folder.

The new item might show up in the Solution Explorer in Visual Studio. If that is undesirable it can be hidden by using the 'Visible' item metadata:

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

Similar approach can be used to exclude other files if necessary. I hope that helps.

like image 16
Vlado Avatar answered Nov 11 '22 02:11

Vlado