[C#].NETFramework,Version=v4.0.AssemblyAttributes.csでコンパイルエラーが発生する。

問題の内容

VisualStudioでコンパイル時、”.NETFramework,Version=v4.0.AssemblyAttributes.cs”ファイルでエラーが発生する場合があります。

上記ファイルが存在する場所は、プロジェクトがあるフォルダではなくtempの下になっています。
このファイルは、VisualStudioが自動生成するファイルで、正しく生成されていれば、以下のような内容になります。

// <autogenerated />
using System;
using System.Reflection;
[assembly: global::System.Runtime.Versioning.TargetFrameworkAttribute(".NETFramework,Version=v4.0", FrameworkDisplayName = ".NET Framework 4")]



ですが、なにかのタイミングでこのファイルがおかしくなってしまうことがあるようで、コンパイル時にエラーが発生してしまいます。
再現状況は不明ですが、tempフォルダを全て削除し、再起動した直後に良く発生するような気がします。



解決方法


解決方法としては、一旦VisualStudioを終了した後、該当ファイルを削除し再度コンパイル直すと、うまく行くようです。
ただし、この方法では問題が再発する(しばらくすると,問題の.csファイルがおかしくなってしまう)ことがあるので、対処療法に過ぎません。


他には、*.csprojファイルを手で編集してしまう方法があります。
VS2010を閉じた後、csprojファイルをエディタで開いて、”Import Microsoft.CSharp.targets”のタグがある下に、を追加させます。
一旦変更してしまえば、その後ビルドを行っても問題の.csファイルを自動生成しなくなるようです。

変更例

<Project ToolsVersion="4.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
  <PropertyGroup>
 
  ...
 
  <Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
  <Target Name="GenerateTargetFrameworkMonikerAttribute" />                   <-- この行を追加
 
  <!-- To modify your build process, add your task inside one of the targets below and uncomment it. 
       Other similar extension points exist, see Microsoft.Common.targets.
  <Target Name="BeforeBuild">
  </Target>
  <Target Name="AfterBuild">
  </Target>
  -->
</Project>


関連記事

コメントを残す

メールアドレスが公開されることはありません。