Bạn có thể đã làm việc này, nhưng nó có thể giúp ích cho người khác trong tương lai. Tôi đã gặp câu hỏi này gần đây và nó đã giúp tôi đi đúng hướng và cuối cùng dẫn đến một giải pháp.
Một giải pháp khả thi khác cho việc này là cập nhật thủ công các tệp dự án của bạn để nhắm mục tiêu phiên bản MSBuild mà bạn muốn các dự án của mình được xây dựng.
Gần đây tôi đã trải qua bản cập nhật máy chủ xây dựng TeamCity và tôi đã cài đặt Microsoft Build Tools 2015 trên đó. Tôi nghĩ rằng tôi đã có mọi thứ trên máy chủ xây dựng, tôi có giải pháp nhắm mục tiêu C # 6.0 và tôi đã nhắm mục tiêu mọi dự án .net 4.6.1. Giống như bạn, mọi thứ với mã cụ thể C # 6.0 đều được xây dựng tốt trong môi trường cục bộ của tôi, nhưng máy chủ xây dựng TeamCity của tôi không thích bất kỳ điều nào trong số đó.
Như những người khác đã đề cập, tôi đã thử sử dụng gói Microsoft.Net.Compilers NuGet. Phiên bản mới nhất của nó cho phép bản dựng hoạt động trên máy chủ bản dựng của tôi, nhưng nó sẽ không cho phép tôi xuất bản mã cục bộ (một yêu cầu của tôi). Các phiên bản trước của gói NuGet đó sẽ cho phép tôi xuất bản, nhưng bản dựng sẽ không hoạt động.
Những gì tôi thấy rằng tôi phải làm cuối cùng là sửa đổi từng tệp dự án trong giải pháp của mình để nhắm mục tiêu cụ thể phiên bản MSBuild có thể xử lý mã C # 6.0. Trong mỗi tệp dự án của mình, tôi tìm thấy một dòng tương tự như dòng sau:
<Project ToolsVersion="4.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
với thành phần chính của dòng đó là phần ToolsVersion của nó. Tôi chỉ cần thay đổi dòng này trên các tệp dự án của mình để đọc như sau:
<Project ToolsVersion="14.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
Sự khác biệt ở đây là tôi đang nhắm mục tiêu phiên bản 14, không phải 4. Phiên bản 14.0 tương ứng với Build Tools 2015. Bằng cách thay đổi điều này, máy chủ xây dựng TeamCity của tôi đã sử dụng đúng phiên bản MSBuild và có thể tạo mã C # 6.0 của tôi.
Tôi cũng phải cập nhật theo cách thủ công nút xml TargetFrameworkVersion của cái này để sử dụng 4.6.1 vì VS2015 không làm đúng cách và làm rối bản dựng cục bộ của tôi, nhưng điều đó không liên quan ở đây.
Làm ơn, ai đó sửa cho tôi nếu tôi sai, nhưng chỉ để tham khảo, tôi nghĩ số phiên bản giống như thế này:
4.0 = VS2012
12.0 = VS2013
14.0 = VS2015
15.0 = VS2017
Tôi tin rằng nếu bạn muốn sử dụng .net 4.7, bạn phải cài đặt Build Tools 2017 và có các dự án của bạn nhắm mục tiêu 15.0 thay vì 14.0, nhưng tôi chưa xác minh điều này.