2013-02-12 17 views
9

Chúng tôi vừa cài đặt .NET 4.5 vào máy chủ tích hợp liên tục để có thể hỗ trợ các dự án mới sử dụng các tính năng của .NET 4.5. Máy chủ xây dựng này cũng được sử dụng để xây dựng và triển khai các dự án cũ hơn, một số trong đó nhắm mục tiêu .NET 4.0.Máy chủ xây dựng có cài đặt .NET 4.5 đã triển khai thành công dự án nhắm mục tiêu 4.0 đến máy chủ chỉ với cài đặt .NET 4.0 không?

Các dự án nhắm mục tiêu .NET 4.0 được xây dựng trên máy chủ này, sau đó triển khai đến một máy chủ mục tiêu mà chỉ có .NET 4.0 được cài đặt tại đang thất bại với các lỗi sau:

Method not found: 'Int32 System.Environment.get_CurrentManagedThreadId()'. 

Environment.CurrentManagedThreadId là một mới tài sản của .NET Framework 4.5, do đó, nó có ý nghĩa rằng một máy chủ chạy 4.0 không thể tìm thấy nó. Tuy nhiên, chúng tôi nhắm mục tiêu .NET 4.0 tại thời điểm xây dựng, vì vậy theo lý thuyết chúng tôi không nên cần để cài đặt 4.5 trên máy chủ sản xuất.

Tóm lại:

  • Dự án đặt mục tiêu 4,0
  • xây dựng máy chủ đã được cài đặt 4,5
  • Các máy chủ mà trên đó dự án được triển khai sau đó chỉ có .NET 4.0
  • dự án thất bại khi chạy với lỗi Method not found: 'Int32 System.Environment.get_CurrentManagedThreadId()'.

Điều gì mang lại? Có thể chạy thành công .NET 4.0 dll trên một máy chủ chỉ với .NET 4.0 được cài đặt khi các dll được xây dựng bởi một máy chủ có .NET 4.5 không?

Trả lời

12

Điều này xảy ra vì 4.5 là bản nâng cấp tại chỗ lên 4.0. Khi máy chủ xây dựng biên dịch, theo mặc định, nó sẽ tìm thấy các hội đồng 4,5 ngay cả khi bạn đang nhắm mục tiêu .NET 4.

Bạn có thể sửa điều này, nhưng bạn cần phải thêm 4.0 tham chiếu hội đồng vào máy chủ xây dựng của bạn (để trình biên dịch tìm thấy chúng), và không chỉ dựa vào các phiên bản .NET 4.5.

Để biết chi tiết, hãy xem Marc Gravell's blog post on the subject.

+0

Cảm ơn, bài đăng trên blog đó dường như mô tả chính xác vấn đề chúng tôi đang gặp phải. Tuy nhiên, theo như chúng tôi có thể nói với máy chủ xây dựng * đã * đã có các hội đồng tham chiếu 4.0, vì vậy chúng tôi vẫn không chắc chắn những gì đang xảy ra. –

+0

@DavidMills Nói chung, tôi thực sự khuyên bạn không nên cài đặt 4.5 trên máy chủ xây dựng nếu bạn định nhắm mục tiêu 4.0. Chỉ có quá nhiều thay đổi đột phá trong bản nâng cấp tại chỗ này. Điều đó đang được nói, nó sẽ làm việc nếu các hội đồng ref nằm ở vị trí chính xác. –

+0

Cảm ơn, Reed. Chúng tôi đã đi trước và thiết lập một máy chủ nô lệ xây dựng Jenkins để hỗ trợ các dự án nhắm mục tiêu 4.0. Thật không may, nhưng dường như là cần thiết. Hy vọng rằng Microsoft sẽ suy nghĩ hai lần trước khi phát hành phiên bản .NET khác như là một bản nâng cấp tại chỗ. –