0

在开发用于我们产品的 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) { }

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

4

1 回答 1

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 来使用您的库。Intellisense 和编译时检查是免费的;你不必做任何特别的事情。

于 2013-06-07T19:01:03.150 回答