2015-11-14 49 views
1

我遇到了MSBuild的依賴關係問題。我在解決方案中爲Microsoft.Tpl.Dataflow添加了一個NuGet包到項目。這會導致解決方案中引用第一個項目的網站項目的構建失敗。獲得正確的運行時版本似乎存在問題。Msbuild無法通過間接引用System.Runtime構建網站項目

這是我在用MSBuild構建解決方案時遇到的許多錯誤之一。

C:\ SRC \ MyWebsite.metaproj:警告MSB3268:主要參考 「C:\ SRC \項目\ ReferencedProject \ BIN \調試\ ReferencedProject.dll」 無法得到解決,因爲它有一個間接的依賴於 框架程序集「System.Runtime,Version = 4.0.0.0,Culture = neutral, PublicKeyToken = b03f5f7f11d50a3a」,這在目前的目標框架中無法解析。 」 .NETFramework,版本= V4.5" 。要解決 此問題,請刪除引用 「C:\ src \ projects \ ReferencedProject \ bin \ Debug \ ReferencedProject.dll」 或將您的應用程序重定向到包含 「System.Runtime,Version = 4.0的框架版本。 0.0,文化=中立, PublicKeyToken = b03f5f7f11d50a3a「。

令人困惑的是,解決方案在Visual Studio中良好地構建。此外,解決方案中的所有其他項目都只是構建失敗的網站項目。

我已經試過

  • 更改爲網站到4.0的目標框架(這是目前4.5)。
  • 添加集的引用System.Runtime.dll版本4.0.0.0

我仍然不能得到它來構建。我怎樣才能解決這個問題?

回答

2

原來aspnet_compiler.exe(這是由MSBuild的稱呼)在

C沒有尋找在門面目錄庫:\程序文件(x86)\參考大會\微軟\ Framework.NETFramework \ v4.5 \ Facade

因此,解決方案中的網站項目無法編譯。

我發現這從this blog post.正如在那裏提到的,爲了解決這個問題,我將DLL從Facade目錄複製到v4.5目錄中,並且一切正常。

說實話,這是一個不太理想的解決方案。

+0

感謝您分享。 – frattaro

+0

這也發生在我們.net 4.7。我想補充一點,這隻發生在我們在構建服務器上使用msbuild命令行時,而不是在visual studio中。雖然這個解決方案也可以工作,因爲4.7也有Facades目錄,所以比複製系統文件要好得多,因爲系統文件必須在每個構建服務器上完成。 – madamission

+0

如果有人想更深入地嘗試以正確的方式進行嘗試,或者驗證將其報告給Microsoft,我'認爲'有一個名爲TargetFrameworkDirectories的基礎msbuild參數缺少該路徑。至於如何使用aspnet_compiler在那裏得到它,我不確定,因爲我不知道你是否可以傳遞參數。至於現在我將使用不太理想的複製文件的解決方案。 – madamission