【问题标题】:Can the F# core libs be SQLCLR-approved?F# 核心库可以通过 SQLCLR 批准吗?
【发布时间】:2011-12-13 01:29:16
【问题描述】:

根据this 线程,F# Core 必须经过 SQLCLR 批准才能将程序集标记为SAFE。这是计划好的吗?还能做到吗?

【问题讨论】:

    标签: f# sqlclr


    【解决方案1】:

    我相信这是可以做到的。但是,F# 核心库是 Microsoft 的唯一财产。这意味着您不能修改其代码并重新编译它以匹配并遵守 SQLCLR SAFE。我建议您使用 Microsoft 的连接网站向 Microsoft 添加建议。

    Microsoft connect 位于:http://connect.microsoft.com(您必须在 live.com 或 hotmail.com 上注册并拥有电子邮件帐户,然后才能注册)。

    要手动添加您的 .NET DLL 并将其集成到 SQL Server,您可以这样做:

    在此示例中,必须首先编译 F# 代码中的 DLL。我从 MSDN Library 链接采取这一步: http://msdn.microsoft.com/en-us/library/ms254956(v=vs.80).aspx

    不要忘记将 PERMISSION_SET = SAFE 添加到 CREATE ASSEMBLY 命令中。

    这是我从上面链接中引用的步骤:

    在 SQL Server 中加载并运行“Hello World”存储过程

    一旦示例程序成功 编译,你可以在SQL中测试它 服务器。为此,请打开 SQL Server Management Studio 并创建一个新的 查询,连接到合适的测试 数据库(例如, AdventureWorks 示例数据库)。我们 将需要创建程序集,所以我们 可以访问存储过程。为了 这个例子,我们假设你 已经创建了 helloworld.dll C:\ 目录中的程序集。添加 在 Transact-SQL 语句之后 您的查询。

    CREATE ASSEMBLY helloworld from 'c:\helloworld.dll' WITH PERMISSION_SET = SAFE
    

    创建程序集后, 我们现在可以访问我们的 HelloWorld 使用创建过程的方法 陈述。我们将调用我们存储的 程序“你好”:

    CREATE PROCEDURE hello
    AS
    EXTERNAL NAME helloworld.HelloWorldProc.HelloWorld
    

    创建程序后, 它可以像正常一样运行 写的存储过程 事务处理 SQL。执行以下 命令:

    EXEC hello
    

    这应该会导致以下结果 SQL Server 管理中的输出 Studio 消息窗口。

    Hello world!
    

    编辑:根据下面的评论,他对 F# 现在开源的看法是正确的!您可以修改和重新编译它以满足您的需要。

    编辑:添加有关如何将 DLL 集成到 SQL Server CLR 集成的更多详细指南。

    【讨论】:

    • F# 核心库与所有编译器一样,是使用开源许可证 Apache 2.0 发布的。你当然可以修改和重新编译它,你也可以分发它,甚至用于商业目的。
    • 嗨丹尼尔..如果您认为我的回答对您有帮助,请将其标记为您的问题的答案。 :)
    • @eriawan:问题是“是否有计划”和“是否可以完成”,您没有完全回答。我希望也许潜伏在 SO 周围的 MS 员工之一会插话。但是,您将其发布在 MS Connect 上的建议很有帮助,所以我投了赞成票。
    • @Daniel 你能再读一遍我的答案吗?我说,我相信是可以做到的,尤其是现在F#是开源的。您可以简单地从源代码重新构建它。我自己做过。但正如我在回答的第一段中指出的那样,最好将 F# 的 SQLCLR 合规性留给 Microsoft,因为他们仍然拥有它,即使它是开源的。
    【解决方案2】:

    使用 fsc(又名 F# 编译器)的 --standalone 标志是一个很讨厌的技巧。这甚至可以添加到项目设置中,并嵌入到 F# 运行时库的输出工件中(以及所有其他被视为可嵌入的依赖项)。我相信到那时你应该能够通过将你的程序集标记为 SQLCLR 安全来做你想做的事情。

    【讨论】:

    • 这仍然不允许将程序集标记为SAFE。它所做的只是将不安全的代码移动到您的自定义程序集中。
    猜你喜欢
    • 1970-01-01
    • 2020-08-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-11-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多