注意:这似乎是与SSDT项目一起使用的编译器的一个问题,它显然在2017年RC中得到修复。我的问题类似于here.
所描述的问题我有一些代码拒绝让我把它写成表达式身体功能成员。简而言之,我想这样做:
void foo() => bar();
但IDE发脾气并要求我这样写:
void foo() { bar(); }
我的意思是,这是两个额外的角色,但我不确定它为什么会抱怨,错误也没有意义。它给了我以下3个错误:
完整代码如下所示。
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中仍然失败。
答案 0 :(得分:4)
这将与Roslyn有关。试着运行:
非罗斯林: https://dotnetfiddle.net/LJm1Fj
罗斯林: https://dotnetfiddle.net/aMUsj0
我怀疑您的项目文件或Visual Studio安装有问题,因为默认情况下VS2015应该使用基于Roslyn的编译器。
我试试:
<Project ToolsVersion="14.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
和目标<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
C:\Program Files (x86)\MSBuild\14.0\bin\csc.exe /noconfig /nowarn:1701,1702,2008 /nostdlib+ /platform:anycpu32bitpreferred /errorreport:prompt /warn:4 /define:DEBUG;TRACE /errorendlocation /preferreduilang:en-US /highentropyva+ /reference:"C:\Program Files (x86)\Reference ... Using shared compilation with compiler from directory: C:\Program Files (x86)\MSBuild\14.0\bin
答案 1 :(得分:0)
这个答案在很大程度上是无关紧要的。
当提问者在用户问题的帮助下找到自己时,问题是 SQL Server数据库项目(.sqlproj
)(与.csproj
类型的其他项目不同)不是使用新的C#6.0编译器构建的,至少在Visual Studio 2015中没有。由提问者Usage of wrong compiler during SQL Server Database Project building链接的线程有一些细节。
旧答案:
在您的图片中,常量声明:
private const string TableName = "Person";
缺少。但是,您尚未从tableName
方法中删除AuditInsert
参数。