【问题标题】:SQL CLR conditional compilation based on SQL Server version基于 SQL Server 版本的 SQL CLR 条件编译
【发布时间】:2018-05-27 12:24:45
【问题描述】:

我的许多项目都在使用基于 .Net Framework 的 Visual Studio 条件编译。

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

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

感谢您的帮助!

编辑:

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

$(DefineConstants);SQL2008

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

【问题讨论】:

    标签: c# sql-server visual-studio msbuild sqlclr


    【解决方案1】:

    由于没有提供其他答案,我将我的部分解决方案包括在 SQLCLR 项目的 .cs 部分中:

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

    $(DefineConstants);SQL2008

    $(DefineConstants);SQL2012

    $(DefineConstants);SQL2014

    $(DefineConstants);SQL2016

    【讨论】:

      【解决方案2】:

      有没有办法做到这一点?

      据我所知,恐怕你做不到。我们知道,获取 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>
      

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

      比如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 的版本。

      希望这会有所帮助。

      【讨论】:

      • 我刚刚用部分解决方案编辑了我的问题,但您使用不同配置的想法是我没有考虑的。我看到的唯一问题是需要为每个配置指定 .sql 文件。我希望更多的预部署脚本操作。
      • @SQLHTTP,没关系,您可以分享您的解决方案并标记它,以便其他社区更容易找到解决方案。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-08-22
      • 2020-04-28
      • 2018-08-22
      • 1970-01-01
      • 2014-05-10
      • 2012-06-07
      相关资源
      最近更新 更多