2014-01-29 51 views
5

我在工作中遇到以下情況,想聽聽一些建議,因爲我幾乎沒有想法,並且不知所措。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:

  1. Common.csproj // .NET 3.5共享/公共 '客戶' 和 '服務器' 的解決方案之間的代碼。
  2. Server.Common.csproj // .NET 4.0服務器端項目只有共享/通用代碼。常用參考。
  3. Client.Common.csproj // .NET 3.5客戶端項目只有共享/通用代碼。常用參考。
  4. Server.DomainModels.csproj // .NET 4.0服務器端類庫。參考Server.Common和Common。
  5. Agents.csproj // .NET 3.5客戶端類庫,用於調用服務器端Web應用程序項目,各種代理。參考Client.Common和Common。

此訂單構建正確。

然而,當在上述TFS2010服務器構建運行我得到這個順序代替:

  1. Server.DomainModels.csproj(這是上述#4) - > 1. Common.csproj(調用,以滿足上面的參考)。 - > 2. Server.Common.csproj(也被調用以滿足上面的參考)。
  2. '正確/原始' 有序Common.csproj(上文已建成,#1之前)
  3. '正確/原始' 有序Server.Common.csproj(上文已建成,#2之前)
  4. 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)的參考。

這對我來說沒有意義,但它似乎是發生了什麼。 我很感激任何意見或建議來檢查/更改有關此問題。

預先感謝您。

回答

0

如果它的所有可能我建議你升級所有的項目到4.0。它不是解釋你的問題,但它可能是一個解決方案。

+0

是的,沒什麼,我想要更多關於這一點。可悲的是,這需要一些重要的工作日來升級一些第三方/內部庫和代碼重新分解我們現在無法做到。 –

+0

預計很多,但不得不嘗試... – AlonEl

1

所以,我再次閱讀了鏈接的博客文章,這一次也是評論。一個評論指的是msbuild仍然着眼於解決方案定義的順序,而不是文章所闡述的內容。

我試過了,將Common和Server.Common移到頂部 - 尤里卡!它現在可以在tfs的msbuild上正確構建。

我的一些轉換仍然只有在通過tfs運行時纔會失敗,但至少在im完成後更接近。

相關問題