Windows 8 マシンの Visual Studio 2012 で開発された、非同期/待機サポートにMicrosoft.Bcl.Asyncを使用する .NET 4.0 アプリケーションがあります。私のマシンで問題なくビルドでき、他の環境 (XP/Vista/7) でも問題なく動作します。
私のビルド サーバーのセットアップは、Windows Server 2008 R2、.NET 4.5 がインストールされ、TeamCity です。
ビルド構成でソリューションのビルドに失敗し、次のエラーが表示されます。
GenerateTemporaryTargetAssembly
GenerateTemporaryTargetAssembly
Ferox.Local.Wpf\uf4edrwb.tmp_proj
CoreCompile
Csc
MyClass.cs(8, 29): error CS0433: The type 'System.IProgress<T>' exists in both 'c:\Windows\Microsoft.NET\Framework\v4.0.30319\mscorlib.dll' and 'c:\TeamCity\buildAgent\work\80d9f16a33820be7\packages\Microsoft.Bcl.1.0.19\lib\net40\System.Runtime.dll'
ビルド構成は Visual Studio 2012 に設定されています。エージェントの要件を確認したところ、"DotNetFramework4.5_x86" への依存関係が含まれています。したがって、ここに記載されているように、.net 4.5 msbuild を使用する必要があります。
パッケージ (Microsoft.Bcl.Async、Microsoft.Bcl、Microsoft.Bcl.Build) を削除し、再度追加しました。変わりはない。
オプションが不足しています。何か案は?
編集
先ほど言ったように、TeamCity を設定しただけで、ビルド構成は非常に単純です。まず、svn からブランチをチェックアウトします。
ランナー タイプ「Visual Studio (sln)」のビルド ステップがあり、Visual Studio のバージョンは 2012、「ターゲット」フィールドは「クリーン、ビルド」、構成は「リリース」です。
さらに、「AssemblyInfo パッチャー」を使用してバージョン番号を更新します。
アップデート
Jon Skeet の提案に従い、ランナーの種類を MSBuild に変更しました。ランナー タイプ: MSBuild MSBuild バージョン: Microsoft .NET Framework 4.5 MSBuild ツールバージョン: なし 実行プラットフォーム: x86 ターゲット: クリーン、ビルド コマンド ライン パラメーター: /P:Configuration=Release
それでも同じエラーが発生します。
「MSBuild ToolsVersion」を「4.0」に変更しました (ソリューションは Visual Studio 2012 で作成されているため、必要はないと思いますが)。同じエラー。
「実行プラットフォーム」を「x64」に変更しました。同じエラー。
アップデート
私のサーバー マシンには、.NET 4.0 (および 4.0.3) の参照アセンブリがありませんでした。この投稿を見た後、それが原因かもしれないと思いました。そのことを念頭に置いて、参照アセンブリを開発者のコンピューターからサーバーにコピーしました。次に、もう一度ソリューションを構築しようとしました。同じエラー。あの時は本当に勝てると思ったのに…
アップデート
ビルドに影響を与える.NET4.5インストールからぶら下がっている更新があるかどうかを確認するために、サーバーを再起動しようとしました。同じエラー。
アップデート
Windows 7 および .NET 4 用の Windows SDK をサーバーにインストールしました。そしてついにビルド成功!ただし、Marc Gravell の投稿と Hans の回答に従って、参照アセンブリをコピーするだけでビルドが修正されるはずだと本当に思っていました。次に、「...\Reference Assemblies\」フォルダーを検索して、sdk のインストールによって他に何かが追加されたかどうかを確認しました。そして、自分の間違いに気づきました。参照アセンブリを「C:\Program Files (x86)\Reference」にコピーするのではなく、サーバーのフォルダー「C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework」にコピーしていました。 Assemblies\Microsoft\Framework.NETFramework" . したがって、ビルドはアセンブリを見つけることができませんでした。