ソリューションをVisualStudio 2010から2012に移動した後、厄介なエラーが発生しました。ビルドは正常で、すべてが完全にローカルホストで機能します。 .NET 4.5を必要とする新しいMVC4プロジェクトが1つあるので、ビルドサーバーに4.5フレームワークをインストールしました。ビルドは正常ですが、MSBuildはDotNetOpenAuth.Core.dllをパッケージの場所からBinディレクトリにコピーできません。問題は、特定のプロジェクトが4.0フレームワークを対象としているにもかかわらず、MSBuildがCoreBuildの一部として.NET4.5フレームワークSystem.Net.Httpアセンブリに対する依存関係をチェックしていると思われるためです。
警告code = "MSB3268"プライマリ参照\ packages\DotNetOpenAuth.Core.4.3.0.13117\lib\net40-full\DotNetOpenAuth.Core.dll "は、フレームワークアセンブリ" System.Netに間接的に依存しているため、解決できませんでした。 .Http、Version = 2.0.0.0、Culture = neutral、PublicKeyToken = b03f5f7f11d50a3a "これは、現在ターゲットになっているフレームワークでは解決できませんでした。"。NETFramework、Version = v4.0 "。この問題を解決するには、参照" cを削除してください。 :\ cc\kazork\code\trunk\src\packages\DotNetOpenAuth.Core.4.3.0.13117\lib\net40-full\DotNetOpenAuth.Core.dll」または、「System.Net.Http」を含むフレームワークバージョンにアプリケーションを再ターゲットします、Version = 2.0.0.0、Culture = neutral、PublicKeyToken = b03f5f7f11d50a3a
これが私のパッケージ設定です:
<?xml version="1.0" encoding="utf-8"?>
<packages>
<package id="ChardinJs" version="1.0.3" targetFramework="net40" />
<package id="Microsoft.Net.Http" version="2.0.20710.0" targetFramework="net40" />
<package id="DotNetOpenAuth.AspNet" version="4.3.0.13117" targetFramework="net40" />
<package id="DotNetOpenAuth.Core" version="4.3.0.13117" targetFramework="net40" />
<package id="DotNetOpenAuth.OAuth.Consumer" version="4.3.0.13117" targetFramework="net40" />
<package id="DotNetOpenAuth.OAuth.Core" version="4.3.0.13117" targetFramework="net40" />
<package id="DotNetOpenAuth.OpenId.Core" version="4.3.0.13117" targetFramework="net40" />
<package id="DotNetOpenAuth.OpenId.RelyingParty" version="4.3.0.13117" targetFramework="net40" />
<package id="EntityFramework" version="5.0.0" targetFramework="net40" />
<package id="flexigrid" version="1.1.0" targetFramework="net40" />
<package id="jQuery" version="1.9.1" targetFramework="net40" />
<package id="Microsoft.AspNet.FriendlyUrls.Core" version="1.0.0" targetFramework="net40" />
<package id="Microsoft.AspNet.Membership.OpenAuth" version="1.0.1" targetFramework="net40" />
<package id="Microsoft.AspNet.SignalR.Core" version="1.1.1" targetFramework="net40" />
<package id="Microsoft.AspNet.SignalR.JS" version="1.1.1" targetFramework="net40" />
<package id="Microsoft.AspNet.SignalR.Owin" version="1.1.1" targetFramework="net40" />
<package id="Microsoft.AspNet.SignalR.SystemWeb" version="1.1.1" targetFramework="net40" />
<package id="Microsoft.AspNet.Web.Optimization" version="1.0.0" targetFramework="net40" />
<package id="Microsoft.Owin.Host.SystemWeb" version="1.0.1" targetFramework="net40" />
<package id="Microsoft.Web.Infrastructure" version="1.0.0.0" targetFramework="net40" />
<package id="Newtonsoft.Json" version="5.0.5" targetFramework="net40" />
<package id="Owin" version="1.0" targetFramework="net40" />
<package id="PayPalCoreSDK" version="1.1.1" targetFramework="net40" />
<package id="PayPalMerchantSDK" version="2.3.98" targetFramework="net40" />
<package id="Select2.js" version="3.3.2" targetFramework="net40" />
<package id="toastr" version="1.2.2" targetFramework="net40" />
<package id="Twitter.Bootstrap" version="2.3.2" targetFramework="net40" />
<package id="WebGrease" version="1.3.0" targetFramework="net40" />
</packages>
System.Net.Httpを参照していて、ビンにコピーされています。問題のプロジェクトは4.0フレームワークを対象としています。私のバージョンのSystem.Net.Httpは4.0フレームワーク用です。
そのため、DotNetOpenAuthパッケージのインストール時に追加されたNugetパッケージを介してSystem.Net.Http .NET 4.0をコピーしていましたが、ビルドサーバーのMsBuildはDotNetOpenAuth.Coreの依存関係をチェックし、マシンにインストールされていない.NETアセンブリをチェックしていました。ビンにコピーされていたもの。私の場合:
C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.0
そして、私の中にSystem.Net.Httpアセンブリはありませんでした
C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.0
ディレクトリなので、MsBuildは、System.Net.Http.dllがある私のマシン..\Assemblys\Microsoft\Framework.NETFramework\v4.5に新しくインストールされた.NET4.5アセンブリを調べようとしたと思います。そのため、 System.Net.Http.dll for .NET 4.0ターゲットが存在しないという完全なエラーが発生する代わりに、DotNetOpenAuth.Core.dllがSystem.Net.Httpに依存しているという警告が表示されました。これは、検出できますが、プロジェクトが対象としていた4.0フレームワーク。
System.Net.Http .NET 4.0 DLLをパッケージからにコピーしただけです。
C:\ Program Files(x86)\ Reference Assemblies\Microsoft\Framework\.NETFramework\v4.0
私のビルドサーバーで、MsBuildは4.0.NETフレームワークの依存関係チェックのために正しいバージョンのSystem.Net.Htppと比較することができました。
これが失敗した場合は、.Net v4.5.1devパックも適用する必要があります。これは、複数のターゲティングをサポートしているためです。 4.5.1をインストールしましたが、アセンブリがコピーされましたが、それでもこのエラーが発生しました。 http://www.Microsoft.com/en-us/download/details.aspx?id=40772 から開発パックをインストールすると、この問題が修正され、サーバー2012r2でビルドされるようになりました。