基于SQL Server版本的SQL CLR条件编译

问题描述 投票:1回答:2

我一直在使用基于.Net Framework的Visual Studio条件编译来完成我的许多项目。

但是现在我遇到了根据所选目标SQL Server版本在Visual Studio SQL CLR项目中有条件地编译的需要。

有没有办法做到这一点?我需要一种方法可选地在编译的DLL中包含某些.sql文件(存储过程)和C#.cs文件(SQL CLR存储过程)

谢谢你的帮助!

编辑:

我找到了SQLCLR项目的.cs部分的解决方案。我按照相同的步骤检测.Net Framework,根据此Stack Overflow question,然后添加到VersionSpecificSymbols.Common.prop文件行,如下所示:

<DefineConstants Condition =“$(DSP.Contains('100'))== True”> $(DefineConstants); SQL2008 </ DefineConstants>

我仍在寻找一种基于SQL Server版本“过滤”存储过程的方法

c# sql-server visual-studio msbuild sqlclr
2个回答
1
投票

由于没有提供额外的答案,我将包括我对SQLCLR项目的.cs部分的部分解决方案:

我按照相同的步骤检测.Net Framework,根据此Stack Overflow question,然后添加到VersionSpecificSymbols.Common.prop文件行,如下所示:

<DefineConstants Condition =“$(DSP.Contains('100'))== True”> $(DefineConstants); SQL2008 </ DefineConstants>

<DefineConstants Condition =“$(DSP.Contains('110'))== True”> $(DefineConstants); SQL2012 </ DefineConstants>

<DefineConstants Condition =“$(DSP.Contains('120'))== True”> $(DefineConstants); SQL2014 </ DefineConstants>

<DefineConstants Condition =“$(DSP.Contains('130'))== True”> $(DefineConstants); SQL2016 </ DefineConstants>


0
投票

有没有办法做到这一点?

据我所知,恐怕你做不到。我们知道,有几种方法可以获得SQL Server的版本:

How to check SQL Server version

但我们无法通过MSBuild从项目文件.sqlproj获取SQL Server版本。所以我们不能直接使用.sql文件(存储过程)和C#.cs文件(SQL CLR存储过程)的条件,如:

  <ItemGroup>
    <Compile Include="SqlStoredProcedure1.cs" Condition=" '$(sqlversion)' == 'sql server 2012' " />
  </ItemGroup>

作为解决方法,您可以定义新配置:

enter image description here

例如,SqlServer2012,然后将此条件设置为.sql文件(存储过程)和C#.cs文件(SQL CLR存储过程):

  <ItemGroup>
    <Build Include="Procedure1.sql" Condition=" '$(Configuration)' == 'SqlServer2012' "/>
  </ItemGroup>

  <ItemGroup>
    <Compile Include="SqlStoredProcedure1.cs" Condition=" '$(Configuration)' == 'SqlServer2012' " />
  </ItemGroup>

在这种情况下,只有当您配置为SqlServer2012时才包含这两个文件。

注意:此方法的局限性在于您需要提前了解SQL Server版本。

希望这可以帮助。

© www.soinside.com 2019 - 2024. All rights reserved.