我们的内部应用程序之一有一个SQLCLR程序集,该程序集目前正在遇到问题。开发人员在使用我们的源代码管理系统中存储的版本重新创建该问题时遇到了问题,因此他怀疑有些代码可能已经发布,但没有上传到源代码管理中。是否有方法将SQLCLR程序集提取到.dll文件中,以便他能够反向工程它以进行分析?
发布于 2010-05-07 20:45:09
确实有一种方法--程序集存储在数据库中的sys.assembly_files表中。选择sys.assembly_files中的所有内容并找到assembly_id,然后运行以下代码(首先更改assembly_id和SaveToFile路径):
DECLARE @IMG_PATH VARBINARY(MAX)
DECLARE @ObjectToken INT
SELECT @IMG_PATH = content FROM sys.assembly_files WHERE assembly_id = 65536
EXEC sp_OACreate 'ADODB.Stream', @ObjectToken OUTPUT
EXEC sp_OASetProperty @ObjectToken, 'Type', 1
EXEC sp_OAMethod @ObjectToken, 'Open'
EXEC sp_OAMethod @ObjectToken, 'Write', NULL, @IMG_PATH
EXEC sp_OAMethod @ObjectToken, 'SaveToFile', NULL, 'D:\SqlServerProject1.dll', 2
EXEC sp_OAMethod @ObjectToken, 'Close'
EXEC sp_OADestroy @ObjectToken但是,为了使其工作,您需要在SQL实例中为功能启用外围区域配置中的OLE自动化功能。
我从这里提取了这个代码:
http://social.msdn.microsoft.com/Forums/en/sqlnetfx/thread/1e00e656-f322-45ec-b4e0-83db748fa97a
https://serverfault.com/questions/139703
复制相似问题