【问题标题】:Generate Bare Definitions for a Project or Namespace (Visual Studio)为项目或命名空间生成裸定义 (Visual Studio)
【发布时间】:2013-06-07 18:55:57
【问题描述】:

在开发用于我们产品的 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&lt;T&gt; [from metadata])。

【问题讨论】:

  • 当你编译放到没有源码的机器上,应该会自动隐藏。
  • @DanielA.White:确实如此,但我们希望分发比我们的运行时更小的程序集。

标签: visual-studio


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-10-23
    • 1970-01-01
    • 2011-07-15
    • 1970-01-01
    • 2010-10-04
    • 2013-05-25
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多