为项目或命名空间生成裸定义(Visual Studio)

时间:2013-06-07 18:55:58

标签: visual-studio

在开发用于我们产品的SDK时,我们希望为用户(开发人员)提供一个Visual Studio插件,主要是在开发过程中为他们提供Intellisense并确保他们的代码为他们编译。为此,我们剥离了所有SDK API的内容,并将它们全部放在一个单独的项目中。

例如:

public IEnumerable<string> AvailableConnections(bool querySystem) {
    var connections = ConnectionList();
    if(querySystem)
        connections = connections.Concat(SystemConnections());
    ... // Filter connections somehow
    return connections;
}

public void WriteToStream(Stream strFrom, Stream strTo) {
    byte[] buffer = new byte[32 * 1024]; // 32 KiB
    int len;
    while ( (len = input.Read(buffer, 0, buffer.Length)) > 0)
    {
        output.Write(buffer, 0, len);
    }    
}

变为:

public IEnumerable<string> AvailableConnections(bool querySystem) { return null; }
public void WriteToStream(Stream strFrom, Stream strTo) { }

我的问题:是否存在自动执行此操作的工具,无论是针对特定项目还是特定命名空间?理想情况下,它会引入一个项目或命名空间,并输出所有公共类/函数,用简单的返回类型的默认值返回它们的定义。当你查看一个没有源代码的类时,Visual Studio似乎就这么做了(例如,你会看到IEnumerable<T> [from metadata])。

1 个答案:

答案 0 :(得分:0)

听起来你想为你的API提供接口。

您可以将其构建到您的项目中,基本上您将始终拥有一个显示所有公共成员的程序集,而不包含您的实现代码。

创建一个仅包含API的项目,并从主项目中引用该项目,以便您的具体代码(您的实现)实现接口。

API程序集主要包含接口,也许一些抽象类是帮助程序,您可以与开发人员共享。

举个例子,你会有一个像

这样的界面
public interface IMySdkThing
{
    IEnumerable<string> AvailableConnections(bool querySystem);
    void WriteToStream(Stream strFrom, Stream strTo);
}

您的实施将被声明为:

public class MySdkThing : IMySdkThing
{
    // all the code you showed, just as it is
}

所有这一切,目前尚不清楚这对开发者有何用处。他或她将需要一个带有一些实际可执行代码的DLL来使用您的库。智能感知和编译时检查免费提供;你不必做任何特别的事。