C# SQL Server数据库项目生成过程中使用错误的编译器
我对使用Visual Studio 2015编译SSDT SQL Server数据库项目有疑问。我想在我的数据库项目中使用C#6特性,但它似乎不受支持。 例如,我在db项目中添加了下一个类: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:类、结构或接口成员声明中的令牌“=”无效
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?