Dot-Net
安裝了 .NET 4.5 的建構伺服器能否成功地將針對 4.0 的項目部署到僅安裝了 .NET 4.0 的伺服器?
我們最近在我們的持續集成建構伺服器上安裝了 .NET 4.5,以便它可以支持利用 .NET 4.5 功能的新項目。此建構伺服器還用於建構和部署較舊的項目,其中一些項目面向 .NET 4.0。
在此伺服器上建構以 .NET 4.0 為目標的項目,然後部署到僅安裝了 .NET 4.0 的目標伺服器,現在失敗並出現以下錯誤:
Method not found: 'Int32 System.Environment.get_CurrentManagedThreadId()'.Environment.CurrentManagedThreadId 是 .NET Framework 4.5 的新屬性,因此執行 4.0 的伺服器找不到它是有道理的。但是,我們在建構時以 .NET 4.0 為目標,因此理論上我們不需要在生產伺服器上安裝 4.5。
總結一下:
- 項目目標 4.0
- 建構伺服器已安裝 4.5
- 然後部署項目的伺服器只有 .NET 4.0
- 項目在執行時失敗並出現錯誤
Method not found: 'Int32 System.Environment.get_CurrentManagedThreadId()'.是什麼賦予了?當 dll 由具有 .NET 4.5 的伺服器建構時,是否可以在僅安裝 .NET 4.0 的伺服器上成功執行 .NET 4.0 dll?
這是因為 4.5 是對 4.0 的就地升級。當建構伺服器編譯時,預設情況下,即使您的目標是 .NET 4,它也會找到 4.5 程序集。
您可以更正此問題,但您需要將 4.0 引用程序集添加到您的建構伺服器(以便編譯器找到它們),而不僅僅是依賴 .NET 4.5 版本。
有關詳細資訊,請參閱Marc Gravell 關於該主題的部落格文章。