在开发用于我们产品的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]
)。
答案 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来使用您的库。智能感知和编译时检查免费提供;你不必做任何特别的事。