使用.NET DLL作为COM

时间:2013-01-29 19:03:11

标签: c# .net sql-server-2005 com sqlclr

我有一个令人费解的问题,我需要从SQL Server 2005存储过程调用WCF Web服务。

在研究时我发现.NET SQL Server 2005的唯一版本本身就支持它2.0 - 但我需要使用客户端来使用为.NET 4编写的Web服务。在尝试了一些解决方法之后尝试让SQL Server识别.NET 4 DLL我决定简单地创建一个.NET 2 CLR存储过程,并使用.NET 4中编写的包装类公开为COM,以便调用我的Web服务。

我找到了几个指南,讨论如何将.NET 4 dll与.NET 2一起用作COM dll(linklink),但仍然在苦苦挣扎。

我的“包装类”(.NET 4)如下所示:

namespace Wrapper
{
    [Guid("4C1D992C-4965-49B2-A694-33810A3B9775")]
    [ComVisible(true)]
    public class WrapperClass
    {
         public bool Process(Guid ID)
         {
         }
    }
}

我已按照上面第二个链接的建议添加了app.manifest文件。但是,当我将生成的DLL添加到我的.NET 2 sql server项目时,它无法使用以下消息进行构建:

1>c:\Windows\Microsoft.NET\Framework\v4.0.30319\Microsoft.Common.targets(1578,5): Warning:  MSB3274: The primary reference "Wrapper" could not be resolved because it was built against the ".NETFramework,Version=v4.0" framework. This is a higher version than the currently targeted framework ".NETFramework,Version=v2.0".

我在这里做错了什么?我试着根本不添加DLL作为参考,但代码甚至都没有编译。

或者,是否有另一种(更简单的)方法可以解决这个问题?

编辑:我无法直接添加网络参考:

enter image description here

1 个答案:

答案 0 :(得分:0)

我最后只使用John Koerner的建议并使用未使用System.ServiceModel的WSDL生成客户端。结果我制作了我的CLR程序集.net 2.0,它工作正常。