自从从 VS 2013
切换到 VS 2015
并使用一些新的 C# 6
功能后,我们在 Visual Studio Online 中进行日常构建
开始失败。
构建中的错误都指向新的自动属性功能,但我认为所有新功能都会导致此问题。
导致失败的示例代码片段正在使用:
public int MyFavouriteNumber { get; set; } = 7;
代替
private int _myFavouriteNumber = 7;
public int MyFavouriteNumber
{
get { return _myFavouriteNumber; }
set { _myFavouriteNumber = value; }
}
我查看了我的构建配置,但看不到任何与 C# 6
或 Roslyn
相关的内容。
我必须更改什么才能让我的日常构建再次运行?
编辑
这是一个示例错误(对于自动属性,它们都是一样的)。
Models\Core\Bookings\BookingProduct.cs (29, 0) Invalid token '=' in class, struct, or interface member declaration
Models\Core\Bookings\BookingProduct.cs (29, 0) Invalid token '(' in class, struct, or interface member declaration
这是有问题的行:
public virtual IList<BookingPricingAddon> AddonsPricing { get; set; } = new List<BookingPricingAddon>();
最佳答案
TheLethalCoder的评论为我指明了正确的方向。
问题是我所有的项目都使用 Default
作为目标语言版本,如果你使用 VS 2015
就没问题,但是,我的 .sln
文件有以下开头的 3 行:
Microsoft Visual Studio Solution File, Format Version 12.00
# Visual Studio 2013
VisualStudioVersion = 12.0.31101.0
显然,Visual Studio Online
使用它来确定要使用哪个版本的 MSBuild
。 (它使用的是 12
)。
将我的解决方案升级为以下内容:
Microsoft Visual Studio Solution File, Format Version 12.00
# Visual Studio 14
VisualStudioVersion = 14.0.23107.0
允许 Visual Studio Online
看到我的 IDE 使用的是 Roslyn,因此使用了 MSBuild 14
。
我发现最简单的升级方法是单击 Solution Explorer
中的解决方案,然后转到 File > Save As > Solution File
并覆盖现有的解决方案文件, 它只是升级前 3 行。
现在我的构建成功了。
我认为同样可以通过在您的每个项目上设置语言版本
来实现。这可以通过转到您的 .csproj
文件并导航到:
Properties > Build > Advanced > Language Version > C# 6.0
有关每个 IDE 中的 Default
设置的一个很好的引用可以找到 here .
关于c# - 自切换到 VS 2015 并使用 C#6 Roslyn 功能后,Visual Studio Online CI 每日构建失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31830866/