【问题标题】:Use .NET dll as COM使用 .NET dll 作为 COM
【发布时间】:2013-01-29 19:03:10
【问题描述】:

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

在研究时,我发现 .NET SQL Server 2005 的唯一版本将原生支持它 2.0 - 但是我需要使用客户端来使用为 .NET 4 编写的 Web 服务。在尝试了一些解决方法之后让 SQL Server 识别 .NET 4 DLL 我决定简单地创建一个 .NET 2 CLR 存储过程并使用以 COM 公开的 .NET 4 编写的包装类来调用我的 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 作为参考,但代码甚至无法编译。

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

编辑:我也不能直接添加网络参考:

【问题讨论】:

  • 您的 Web 服务是否生成 WSDL 文件?
  • @JohnKoerner 是的。我有一个可以正常使用它的工作客户端,但它需要 System.ServiceModel.dll,而 .NET 2 没有。
  • 您可以尝试使用 WSDL to Proxy 类工具:msdn.microsoft.com/en-us/library/aa529578.aspx
  • @JohnKoerner 我已经使用 svcutil.exe 从 .NET 4 生成一个类。不过我会考虑使用 WSDL ......目前似乎找不到该文件。

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


【解决方案1】:

我最终只使用了John Koerner 的建议,并使用不使用System.ServiceModel 的WSDL 生成了一个客户端。结果,我制作了我的 CLR 程序集 .net 2.0,它运行良好。

【讨论】:

    猜你喜欢
    • 2013-05-03
    • 2018-09-13
    • 2011-07-27
    • 2021-03-19
    • 2010-11-14
    • 2011-04-07
    • 2015-12-25
    • 1970-01-01
    • 2011-03-29
    相关资源
    最近更新 更多