Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/306.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# SQL Server数据库项目生成过程中使用错误的编译器_C#_.net_Msbuild_Visual Studio 2015_Sql Server Data Tools - Fatal编程技术网

C# SQL Server数据库项目生成过程中使用错误的编译器

C# SQL Server数据库项目生成过程中使用错误的编译器,c#,.net,msbuild,visual-studio-2015,sql-server-data-tools,C#,.net,Msbuild,Visual Studio 2015,Sql Server Data Tools,我对使用Visual Studio 2015编译SSDT SQL Server数据库项目有疑问。我想在我的数据库项目中使用C#6特性,但它似乎不受支持。 例如,我在db项目中添加了下一个类: namespace Database1 { class ClassFile1 { public string Str { get; } = string.Empty; } } 我已尝试编译此文件,但出现错误: CS1519:类、结构或接口成员声明中的令牌“=”无效

我对使用Visual Studio 2015编译SSDT SQL Server数据库项目有疑问。我想在我的数据库项目中使用C#6特性,但它似乎不受支持。 例如,我在db项目中添加了下一个类:

namespace Database1
{
    class ClassFile1
    {
        public string Str { get; } = string.Empty;
    }
}
我已尝试编译此文件,但出现错误:

CS1519:类、结构或接口成员声明中的令牌“=”无效

我发现这个错误的原因是VS2015使用的编译器版本错误。下一个编译行由VS生成:

C:\Windows\Microsoft.NET\Framework\v4.0.30319\Csc.exe /noconfig /nowarn:1701,1702,2008 /nostdlib+ /errorreport:prompt /warn:4 /define:DEBUG;TRACE /errorendlocation /preferreduilang:en-US /highentropyva+ /reference:"C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.6\mscorlib.dll" /debug+ /debug:full /optimize- /out:obj\Debug\Database2.dll /subsystemversion:6.00 /target:library /warnaserror- /utf8output ClassFile1.cs 
如您所见,使用了C:\Windows\Microsoft.NET\Framework\v4.0.30319\Csc.exe,这是错误的

我曾尝试过从VS 2015的开发者命令提示符下编译db project,但这项工作已成功完成,因为在该提示符下的csc.exe是支持C#6功能的Roslyn编译器(C:\Program Files(x86)\MSBuild\14.0\Bin\csc.exe)。你可以查一下这个问题

我尝试使用MSBuild 14.0编译该项目,也成功地完成了编译


问题是:如何将我的VS用于编译SSDT DB项目的编译器版本从旧的C:\Windows\Microsoft.NET\Framework\v4.0.30319\Csc.exe更改/重写为新的Roslyn编译器(C:\Program Files(x86)\MSBuild\14.0\Bin\Csc.exe)?

您需要针对将要部署到的SQL版本所使用的clr版本:

SQL 2005-2008 R2=CLR 2

SQL 2012=CLR 4

恐怕您不能在机器上运行任何版本的clr


ed

我也在尝试这样做,但遇到了同样的问题。我的解决方法是创建一个单独的常规类库项目。我将数据库项目中的C#代码移到了新的库中(到2015年将使用C#6/Roslyn进行编译)。然后从我的数据库项目中引用这个类库

只需记住设置类库引用的属性:
Model-Aware
=true和
generatesqlscript
=true。我还没有对它进行彻底的测试,但是我能够使用publish命令从数据库项目中部署它,并在类库中调用该函数。

好消息
Visual Studio 2017将在SSDT数据库项目中使用当前的C#编译器,因此
C#6最终将在SQL Server程序集中工作

所用编译器的路径为:

C:\ProgramFiles(x86)\Microsoft Visual Studio\2017\Enterprise\MSBuild\15.0\Bin\csc.exe
因为所有的C#6功能都只是纯编译器功能,如果您只针对.NET3.5和SQLServer2008,现在甚至可以使用它们

在Visual Studio 2017 RC中,我还能够使用一些C#7功能,如表达式体构造函数、新的
out
变量、
ref
返回、增强的
switch/is
模式匹配和改进的二进制/十六进制文本。但我无法使用本地函数或任何与元组相关的东西,如新的元组返回类型、元组文本或新的解构声明。

在Visual Studio 2017的最终版本中,这种行为可能会有所改变。

我不明白。我的项目设置使用SQL server 2014目标平台。我使用SQL Server 2014。那么,如果我使用MsBuild中的csc.exe,为什么所有的构建和部署都会成功呢?我只想更改VS 2015用于构建sql项目的编译器。它不受支持。您必须使用clr 4Ok,我应该更改哪些属性才能使用clr 4?