【发布时间】:2017-02-04 07:44:56
【问题描述】:
注意:这似乎是与 SSDT 项目一起使用的编译器的问题,它显然已在 2017 RC 中修复。我的问题类似于here. 描述的问题
我有一些代码拒绝让我将其编写为表达式体函数成员。简而言之,我想这样做:
void foo() => bar();
但 IDE 大发雷霆,要求我这样写:
void foo() { bar(); }
我的意思是肯定的,这是两个额外的字符,但我不确定它为什么抱怨,错误也没有意义。它给了我以下 3 个错误:
- CS0000: ;预计
- CS0000:方法必须有返回类型。
- CS0000:需要标识符。
完整的代码如下所示。
public static void foo() => bar("some param"); // Errors on this line.
static void bar(string myParam) { //20 lines of code }
我已经在 C# 交互式窗口中对此进行了测试,一切都可以正确编译和运行。我在代码中找不到任何不可打印的字符。
这是使用 VS 2015 社区,目标框架为 4.6.1
完整代码:
using System.Data.SqlClient;
using Microsoft.SqlServer.Server;
public partial class Triggers
{
private const string ConnectionString = "context connection = true";
private const string ReadInsertedTable = @"
SELECT ID,
(
SELECT *
FROM inserted AS b
WHERE a.ID = b.ID
FOR XML RAW, ELEMENTS XSINIL
)
FROM inserted AS a
";
[SqlTrigger(Name = "Person_Insert", Target = "Person", Event = "FOR INSERT")]
public static void Person_Insert() => AuditInsert(TableName); // All errors here.
private const string TableName = "Person";
private static void AuditInsert(string tableName)
{
using (var readConnection = new SqlConnection(ConnectionString))
using (var writeConnection = new SqlConnection(ConnectionString))
{
using (var readCommand = new SqlCommand(ReadInsertedTable, readConnection))
{
readConnection.Open();
using (var reader = readCommand.ExecuteReader())
{
SqlContext.Pipe.Send((reader));
}
}
}
}
}
更新:代码使用 msbuild 实用程序编译,但在 Visual Studio 中仍然失败。
【问题讨论】:
-
我已经将你的代码复制到我的 vs 并且编译没有错误
-
知道从哪里开始尝试解决这个问题吗?因为 CS0000 甚至看起来都不是一个正常的代码。我将从我的 IDE 中添加一个图像。
-
你用的是什么版本的VS?请注意,表达式主体成员是 C#6 的功能,因此它不适用于旧 IDE
-
VS2015 Community w/Update 3.
-
重要的是您要提及您在哪个环境中工作。在 Visual Studio 2015/2017 中,您可以通过 NUGET 包管理器 -> 管理解决方案包将新的编译器功能添加到项目中。打开它并浏览
Microsoft.Net.Compilers。然后将其添加到项目中并单击安装。对Microsoft.CodeDom.Providers.DotNetCompilerPlatform执行相同的操作。关闭 NUGET 并重建您的项目。
标签: c# visual-studio-2015 sql-server-data-tools