VS2010 がインストールされたマシンでのビルドと 7.1 SDK がインストールされたマシンでのビルドの違い
-
27-09-2019 - |
質問
Visual Studio 2010 を使用できるようにコード ベースをアップグレードしようとしていますが、ビルド サーバー上ですべてを並べ替えるのに問題が発生しています。ビルド サーバーには Visual Studio 2010 をインストールしたくないため、.Net 4 フレームワークと SDK (v7.1) のみをインストールしました。
私たちは依然として .Net 3.5 プラットフォームをターゲットにしたいと考えています (将来のある時点で .Net 4 にアップグレードする予定ですが、今はまだ考えていません)。
コードをコンパイルすることに成功しましたが、次のような実行時エラーが発生しています。
Could not load file or assembly 'System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a' or one of its dependencies. The system cannot find the file specified.
問題は、ランタイムが埋め込みリソースを逆シリアル化しようとしており、リフレクター内のリソースを見ると、それらがすべて .Net 4.0 オブジェクトであることがわかります。たとえば、Windows アプリのアイコンのタイプは次のとおりです。 System.Drawing.Icon, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
.
MSBuild がリソースを正しくコンパイルしていない (ターゲットとは異なるランタイムを使用している) ように見えますか?開発マシン上でビルドされた DLL とビルド サーバー上でビルドされた DLL の差分を見ることでこれを確認しました。一方の DLL のリソースがバージョン 2.0.0.0 を使用し、もう一方 (ビルド サーバーから) が 4.0 を使用していることが明らかです。 .0.0。どちらの場合も、プロジェクト参照は v2.0.0.0 DLL です (ご想像のとおり)。
MSBuild がリソースを 4.0 オブジェクトとしてコンパイルする理由について心当たりのある人はいますか?
前もって感謝します。
クリス
解決
ソリューションを VS2010 にアップグレードしたときに、対象のフレームワークを変更しましたか?テキスト エディタで csproj ファイルを表示すると、これを見つけることができます。ビルド サーバーに 7.0a フレームワークが含まれていますか?
編集 :
しばらく前に同じ問題に遭遇しましたが、それはレジストリキーが設定されていないことに関係しています。ここを見てください:http://connect.microsoft.com/VisualStudio/フィードバック/詳細/594338/tfs-2010-build-agent-and-windows-7-1-sdk-targeting-net-3-5-generates-wrong-embedded-リソース
レジストリキーを手動で追加する必要があると思います HKLM\Software\Microsoft\MsBuild\ToolsVersions\SDK35ToolsPath
他のヒント
これが役立つかどうかはわかりませんが、RequiresFramework35SP1Assembly タスクに関するこのリンクを参照してください。