The first way that a .NET PE file can be identified is by using a PEiD or CFF Explorer that includes signatures covering .NET applications, as you can see in the following screenshot:
Figure 5: PEiD detecting a .NET application
The second way is to check the Import Table inside the data directory. .NET applications always import only one API, which is _CorExeMain from mscoree.dll here:
Figure 6: .NET application import table
Finally, you can check the last entry in the data directory, which represents the CLR header. If it's populated (that is, contains values other than NULL) then it's a .NET application, and this should be a CLR header (you can use CFF Explorer to check that).