最近、.NET 4.5 の機能を利用する新しいプロジェクトをサポートできるように、継続的インテグレーション ビルド サーバーに .NET 4.5 をインストールしました。このビルド サーバーは、古いプロジェクトのビルドとデプロイにも使用され、その一部は .NET 4.0 を対象としています。
このサーバー上で構築されている .NET 4.0 を対象とするプロジェクトを、.NET 4.0 のみがインストールされている対象サーバーに展開すると、次のエラーで失敗するようになりました。
Method not found: 'Int32 System.Environment.get_CurrentManagedThreadId()'.
Environment.CurrentManagedThreadId は .NET Framework 4.5 の新しいプロパティであるため、4.0 を実行しているサーバーがそれを見つけられないのは理にかなっています。ただし、ビルド時に .NET 4.0 をターゲットにしているため、理論上は運用サーバーに 4.5 をインストールする必要はありません。
総括する:
- プロジェクトの目標 4.0
- ビルド サーバーに 4.5 がインストールされている
- プロジェクトがデプロイされるサーバーには、.NET 4.0 しかありません。
- プロジェクトが実行時にエラーで失敗する
Method not found: 'Int32 System.Environment.get_CurrentManagedThreadId()'.
何を与える?.NET 4.5 を使用するサーバーによって .NET 4.0 dll がビルドされている場合、.NET 4.0 のみがインストールされているサーバーで .NET 4.0 dll を正常に実行できますか?