C#CLR存储过程将不会部署到SQL Server 2005

use*_*485 4 c# clr stored-procedures sql-server-2005

我正在开发一个C#SQL Server 2005存储过程,它为我的应用程序进行数据验证.我有一个很好的框架,这是有效的.验证方法如下:

private void TestDate() {
    TestFields(delegate (string value) {
        if (value == String.Empty || value == "")
            return true;
        return IsDate(value);
    });
}
Run Code Online (Sandbox Code Playgroud)

该解决方案使用如上所述编写的几种方法编译,部署和运行.TestFields迭代查询返回的列,调用委托,返回是否通过了有效性测试.我添加了一个新方法:

private void TestRequired() {
    TestFields(delegate (string value) {
        return ! (value == String.Empty || value == "");
    });
}
Run Code Online (Sandbox Code Playgroud)

使用此方法,DLL将不会部署:CREATE ASSEMBLY失败,因为安全程序集"SurveyValidation"中类型"SurveyValidator"上的方法"TestRequired"正在存储到静态字段.安全组件中不允许存储到静态字段.

我拔出了头发.如果我注释掉TestRequired(),它就可以了.显然,它没有做一个赋值语句,所以我不知道SQL Server在抱怨什么.我是不是偶然发现了某种晦涩的错误?(我知道错误意味着什么,我在SP类中没有任何静态字段.只是创建项目的静态输入方法给你.)

TIA,戴夫

Rem*_*anu 5

CompilerGeneratedAttribute在类声明前添加一个:

此属性允许SQL Server引用编译器生成的静态值.

我知道这听起来有点不正统,但完全可以做到这一点.