我们的一个内部应用程序有一个目前遇到问题的SQLCLR组件。 开发人员在使用存储在我们的源代码pipe理系统中的版本来重新创build问题时遇到了问题,所以他怀疑有些代码可能已经发布了,而且没有上传到源代码控制。 有没有办法将一个SQLCLR程序集提取到一个.dll文件,以便他可以反向工程进行分析?
确实有一种方法 – 程序集存储在数据库的sys.assembly_files表中。 从sys.assembly_filesselect一切,findassembly_id ,然后运行以下代码(首先更改assembly_id和SaveToFilepath):
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实例的function的表面区域configuration中启用OLE自动化function。
我从这里拉这个代码:
http://social.msdn.microsoft.com/Forums/en/sqlnetfx/thread/1e00e656-f322-45ec-b4e0-83db748fa97a