【发布时间】:2013-05-13 02:35:51
【问题描述】:
我正在尝试使用 .NET CLR 创建存储过程。我成功地将以下代码编译成 .NET 3.5 DLL。
Imports System.Math
Imports System.Text.RegularExpressions
Imports Microsoft.SqlServer.Server
Partial Public Class LevenshteinerAndSoundexer
<SqlProcedure()> _
Public Shared Function getLevenshteinDistance(ByVal string1 As String, ByVal String2 As String) As Integer
然后我使用以下代码成功地将其添加为程序集:
create assembly
LevenshteinLibrary
from 'Path\LevenshteinLibrary.dll'
但是当我用这段代码创建过程时
create procedure testCLR(@s1 nvarchar(1000), @s2 nvarchar(1000))
as external NAME LevenshteinLibrary.LevenshteinerAndSoundexer.getLevenshteinDistance
我得到了错误
“在程序集中找不到类型‘LevenshteinLibrary’ 'LevenshteinLibrary'"
为什么它不能“看到”这个功能?
当我在 ILSpy 中检查 DLL 时会发生以下情况:
这是我扩展库时的样子
【问题讨论】:
-
会不会是this namespace issue?
-
您也可以使用 ILSpy 并发布您的 dll like the question Pondlife linked to did 的屏幕截图吗?
-
@ScottChamberlain 我将不得不要求 SA 安装 ILSpy,这需要几天时间
-
不,在你的机器上做,你可以在任何电脑上运行它,只要把它指向你编译的dll。该工具用于查看 .NET 程序集,与 SQL 无关。
-
看起来和骗子一样。您需要
LevenshteinLibrary.[LevenshteinLibrary.LevenshteinerAndSoundexer].getLevenshteinDistance,因为LevenshteinerAndSoundexer大概在LevenshteinLibrary命名空间中(以及作为程序集名称)。 VB.NET 自动附加一个root namespace
标签: .net sql-server-2008 tsql