我在工作中遇到以下情況,想聽聽一些建議,因爲我幾乎沒有想法,並且不知所措。MSBuild失敗VS2010/2013成功 - 混合3.5和4.0 - 爲什麼?
我有一個解決方案,其中包含我們的服務器端項目 - 一些Web應用程序被部署到IIS和一些類庫的邏輯。它最初是在.NET 3.5的VS2010下製作的(據我所知)。該解決方案隨着時間的推移而升級,現在還包含一些針對.NET 4.0的項目。
該解決方案在我的機器上使用VS2010和VS2013(我現在主要使用它)在運行時按預期構建和運行 - 具有完整VS2013安裝的32位Windows 7 SP1機器等。解決方案也可以通過在我的機器上使用命令行MSBuild完成構建(所以32位)。
當從我們的64位TFS 2010服務器建立,生成失敗援引從.NET 3.5組件間接引用到.NET 4.0底座組件等mscorlib程序等
的客戶端解決方案(具有WPF'外殼'和更多類庫邏輯項目)以及兩者之間的共享項目,都是.NET 3.5,並且都可以在我的機器和TFS服務器上很好地構建。
在閱讀THIS之後到目前爲止,我注意到TFS服務器上的構建順序是不同的。我嘗試了所提到的主要/第一個問題的解決方法,但目前爲止沒有任何幫助。沒有嘗試第二個(強制編譯32位或上述影響),但我要去。
無論哪種方式,下面是服務器解決方案構建命令的簡化和命名,我想解釋發生了什麼。
VS2010/VS2013:
- Common.csproj // .NET 3.5共享/公共 '客戶' 和 '服務器' 的解決方案之間的代碼。
- Server.Common.csproj // .NET 4.0服務器端項目只有共享/通用代碼。常用參考。
- Client.Common.csproj // .NET 3.5客戶端項目只有共享/通用代碼。常用參考。
- Server.DomainModels.csproj // .NET 4.0服務器端類庫。參考Server.Common和Common。
- Agents.csproj // .NET 3.5客戶端類庫,用於調用服務器端Web應用程序項目,各種代理。參考Client.Common和Common。
此訂單構建正確。
然而,當在上述TFS2010服務器構建運行我得到這個順序代替:
- Server.DomainModels.csproj(這是上述#4) - > 1. Common.csproj(調用,以滿足上面的參考)。 - > 2. Server.Common.csproj(也被調用以滿足上面的參考)。
- '正確/原始' 有序Common.csproj(上文已建成,#1之前)
- '正確/原始' 有序Server.Common.csproj(上文已建成,#2之前)
- Agents.csproj (#5之前) - > 1. Client.Common。的csproj(#3前,按照原來的順序#5之前建)
的Client.Common.csproj項目(.NET 3.5)構建失敗,因爲它不能滿足其對參考Common.csproj(誰可能是目標.NET 3.5),因爲它顯然現在間接引用了.NET 4.0程序集 - 因爲它的構建是爲了滿足Server.DomainModels.csproj項目(.NET 4.0)的參考。
這對我來說沒有意義,但它似乎是發生了什麼。 我很感激任何意見或建議來檢查/更改有關此問題。
預先感謝您。
是的,沒什麼,我想要更多關於這一點。可悲的是,這需要一些重要的工作日來升級一些第三方/內部庫和代碼重新分解我們現在無法做到。 –
預計很多,但不得不嘗試... – AlonEl