Chúng tôi gặp lỗi dường như phổ biếnCompile .net vào xây dựng máy chủ với .net 4.5
Could not load type 'System.Runtime.CompilerServices.ExtensionAttribute' from assembly 'mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
trong một dự án mà cần phải được biên dịch chống lại Net 4.0 nhưng được xây dựng trên một xây dựng máy chủ đang chạy Windows Server 2012 (với .Net 4.5). Dự án là một ứng dụng web được triển khai tới một máy chủ web chạy năm 2003, nơi cài đặt .Net 4.5 không phải là một tùy chọn. Có nó chạy chống lại "cổ điển" Net 4,0
Từ câu hỏi tương tự, chúng tôi đang cố gắng tùy chọn dòng lệnh để MSBuild:
/property:FrameworkPathOverride="C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.0"
Chúng tôi cũng đã cố gắng kết hợp khác nhau của
/property:ReferencePath="C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.0"
/property:NoStdLib=true
/property:NoCompilerStandardLib=true
Các tham chiếu hội đồng (bao gồm cả các tập tin .dll) trong thực tế được cài đặt ở nơi đó trên máy chủ xây dựng. Nhưng khi chúng tôi triển khai trang web và truy cập vào trang chủ, chúng tôi nhận được lỗi đó. (Thật thú vị, khi tải lại trang, lỗi biến mất và trang web hoạt động bình thường.) Các tham số MSBuild cần thiết để biên dịch đối với các hội đồng .Net 4.0 là gì?
Cập nhật Tôi bật lố bịch cấp khai thác gỗ trên MSBuild, và tôi thấy rằng dường như nó đang xây dựng đối với các hội đồng tham khảo Net 4.0:
Resolved file path is "C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.0\mscorlib.dll
và tôi không thấy bất kỳ đề cập đến hội đồng bên ngoài thư mục đó hoặc thư mục làm việc của máy chủ xây dựng. Vì vậy, nó xuất hiện để biên dịch đúng cách, nhưng khi triển khai trên máy chủ web, nó ném ngoại lệ.
Về ngoại lệ sẽ biến mất khi tải lại trang, tôi tự hỏi liệu điều đó có liên quan đến bước biên dịch trước đánh dấu hay không. Chúng tôi đang chạy aspnet_compile trên máy chủ xây dựng. Có lẽ nếu có một ngoại lệ đến từ một hội đồng được tạo ra, máy chủ web sẽ biên dịch lại nó. Và lắp ráp biên dịch lại là tốt, bởi vì nó được tạo ra với sự thật .Net 4.0.
Bạn đang sử dụng ILMerge? –
Chúng tôi không sử dụng ILMerge. –
Đổi tên C: \ Windows \ Microsoft.NET \ Framework \ v4.0.30319 \ mscorlib.dll trên máy chủ xây dựng đó và thực hiện xây dựng sạch sẽ. Bạn sẽ tìm thấy dự án sử dụng các assembly tham chiếu sai. –