可以将文章内容翻译成中文,广告屏蔽插件可能会导致该功能失效(如失效,请关闭广告屏蔽插件后再试):
问题:
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
回答1:
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>
回答2:
I solved this issue by going to the project solution (whose build) was giving this error.
- right click on the project and unload the project.
- Then right click on the project and edit the .csproj file.
- Look for these temp (problematic) generated files. (see example code)
- remove this file references from the .csproj file.
- Right click on project and load back the project.
- Rebuild the solution.
- 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" />
回答3:
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.
回答4:
I was helping a colleague who had added a new project to our main VS solution and who got these same 3 errors. I went through the suggested steps above with him but did not have any success in fixing it. After this, I discovered he had missed one of the steps we perform when adding a new project within our solution that uses Code Analysis and StyleCop. He had forgot to add the Settings.StyleCop file to his project :)
回答5:
I have recently ran into this same problem out of nowhere.
For me, I was able to overcome this by opening the .csproj files for each project, then remove the following line:
<Import Project="$(SolutionDir)\CodeAnalize\Microsoft.StyleCop.targets" />
After re-opening the solution, it was able to build everything without an error.
回答6:
I faced a similar problem and solved it as follow:
Deleted debug in bin folder in addition to debug in obj folder rebuild and it worked