如何在Visual Studio中在当前文档中生成代码?

2024-03-22

如果这是很容易搜索到的内容,我深表歉意,但我不太确定正确的搜索词是什么。

我现在正在使用 Visual Studio,主要用于 Unity 开发。创建新脚本时,我经常声明一些私有成员变量,如下所示:

private Rigidbody _rigidbody;
private SomeOtherComponent _myComponent;

为了初始化这些变量,我需要在名为“Start”的函数中添加 GetComponent 调用,如下所示:

void Start(){
    _rigidbody = GetComponent<Rigidbody>();
    _myComponent = GetComponent<SomeOtherComponent>();
}

现在,我找到了一个 Visual Studio 代码片段来快速键入“GetComponent”部分,这很好,但我正在寻找一种在 Start 函数中自动生成代码行的方法。在理想的世界中,我可以输入

private Rigidbody _rigidbody;

然后我可以点击一些组合键,它会自动添加

_rigidbody = GetComponent<Rigidbody>();

至开始功能。

片段只能让我完成一半。我需要做什么才能为 Visual Studio 创建这种类型的扩展?这是一件很难完成的事情吗?


你可以试试我的视觉指挥官 https://vlasovstudio.com/visual-commander/正是针对这种轻量级可扩展性而设计的扩展。它允许将文档编辑为文本或使用 Visual Studio 代码模型和 Roslyn。

例如,当插入符号位于变量声明中的 _rigidbody 或 _myComponent 上时,调用以下命令:

public class C : VisualCommanderExt.ICommand
{
    public void Run(EnvDTE80.DTE2 DTE, Microsoft.VisualStudio.Shell.Package package)
    {
        this.DTE = DTE;

        EnvDTE.CodeVariable v = FindCurrentVariable();
        if (v != null)
        {
            string initialization = v.Name + " = GetComponent<" + v.Type.CodeType.Name + ">();";
            AddLine(FindFunction("Start"), initialization);
        }
    }

    EnvDTE.CodeFunction FindFunction(string name)
    {
        EnvDTE.TextSelection ts = DTE.ActiveWindow.Selection as EnvDTE.TextSelection;
        if (ts == null)
            return null;
        EnvDTE.CodeClass codeClass = ts.ActivePoint.CodeElement[EnvDTE.vsCMElement.vsCMElementClass]
            as EnvDTE.CodeClass;
        if (codeClass == null)
            return null;
        foreach (EnvDTE.CodeElement elem in codeClass.Members)
        {
            if (elem.Kind == EnvDTE.vsCMElement.vsCMElementFunction && elem.Name == name)
                return elem as EnvDTE.CodeFunction;
        }
        return null;
    }

    EnvDTE.CodeVariable FindCurrentVariable()
    {
        EnvDTE.TextSelection ts = DTE.ActiveWindow.Selection as EnvDTE.TextSelection;
        if (ts == null)
            return null;
        return ts.ActivePoint.CodeElement[EnvDTE.vsCMElement.vsCMElementVariable]
            as EnvDTE.CodeVariable;
    }

    void AddLine(EnvDTE.CodeFunction f, string text)
    {
        EnvDTE.TextPoint tp = f.GetStartPoint(EnvDTE.vsCMPart.vsCMPartBody);
        EnvDTE.EditPoint p = tp.CreateEditPoint();
        p.Insert(text + System.Environment.NewLine);
        p.SmartFormat(tp);
    }

    EnvDTE80.DTE2 DTE;
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何在Visual Studio中在当前文档中生成代码? 的相关文章

随机推荐

  • gsutil:仅列出目录(错误?)

    gsutil ls d gs XXX test gs XXX test gs XXX test 336x280 swf gz 所以它不仅列出目录 以 以及常规文件 以 gz例如 但据我了解 这个命令应该只列出目录 错误在哪里 gsutil
  • 使用 Twitter Bootstrap 导航栏进行导航的正确方法是什么?

    我正在使用 Twitter Bootstrap 3 创建一个网页 我使用导航栏的直觉是让每个项目导航到新的 href 然而 我见过以不同的方式处理这个问题 有些页面确实导航到新的 href 并触发页面加载 可能使用某种模板在所有 html
  • Html Agility - 将解析保存到字符串

    刚刚第一次尝试使用 Html Agility Pack 并遇到了问题 首先 我从字符串变量加载 string NewsText dr Message ToString HtmlAgilityPack HtmlDocument htmlDoc
  • 如何创建堆积线图

    在 R 中创建堆积条形图有多种解决方案 但如何绘制堆积线图呢 可以使用以下命令创建堆积线图ggplot2包裹 一些示例数据 set seed 11 df lt data frame a rlnorm 30 b 1 10 c rep LETT
  • 当报告需要很长时间运行时,如何解决套接字关闭的问题?

    我正在运行用 iReport 制作的 Clarity 报告 我的一份报告非常复杂 有时需要很长时间才能运行 取决于参数 有时 花了太长时间 我收到一条消息说 插座关闭 当报表快速运行时 不会出现此消息 我认为这意味着运行已超时 我目前正在努
  • 单元测试应该如何处理预期和意外的异常?

    当预期的异常发生时 它是否应该通过测试 当出现意外异常时 测试是否会失败 处理异常是否多余 因为它会使测试失败并因此充当测试 测试预期的异常 你必须添加expected属性具有预期的异常 因此如果抛出指定的异常 测试将通过 否则就会失败 例
  • 逐行编写 Lua 脚本

    我使用以下命令将 Lua 脚本添加到我的 C 应用程序中动态Lua http dynamiclua codeplex com 图书馆 它运作得很好 我想实现您获取正在执行的当前行 就像在 Visual Studio 中一样 并突出显示它 目
  • 将 opencv BackgroundSubtractorMOG 保存到文件吗?

    我使用 opencv 进行车辆计数过程 如何将我的BackgroundSubtractorMOG对象 例如BackgroundSubtractorMOG2等 保存到文件中 以便我可以从文件中读取它 再次使用经过训练的背景模型而无需长时间训练
  • Alphablend 和透明Blt

    这个问题与我有关先前的问题 https stackoverflow com q 12700165 62576 on SO 我想组合两个图层 并仅将 alpha 应用于源图层的特定部分 我尝试的一种方法是将 SourceConstantAlp
  • 从服务器的标头中获取标头令牌

    我如何更改代码才能获取令牌 因为它始终为空 控制台不会返回任何错误 并且在邮递员 应用程序 中服务器端正常工作 我在服务器端有这段代码 router post async req res gt const error validate re
  • 如何在TableLayout周围添加边框?

    下面是我的表代码 我的屏幕看起来像这样https i stack imgur com U5ppn jpg https i stack imgur com U5ppn jpg但我想让它看起来像这样https i stack imgur com
  • Javascript 中嵌套函数的返回值[重复]

    这个问题在这里已经有答案了 我有一个设置如下的函数 function mainFunction function subFunction var str foo return str var test mainFunction alert
  • PHP 混合类型与 Typescript 任意类型

    我正在尝试 PHPmixed输入自定义函数 但这个错误让我难住了 标点符号是我的 类型错误 参数 1 传递给 必须是一个实例mixed string given 下面的一些 示例 代码会导致错误消息并说明我希望实现的目标 下面是一些 TLD
  • 如何在前端使用 JavaScript Fetch API 从 FastAPI 后端下载文件?

    这是我的 FastAPI python 代码 它返回一个 ics file app get latLong async def read item lat float long float mainFunc lat long return
  • Node.js - PostgreSQL (pg):客户端已连接。您不能重复使用客户端

    我只是想编写简单的注册 登录系统 我正在尝试查找用户名是否存在 步骤如下 Go 本地主机 3000 用户 注册 page 填写所有字段并单击注册按钮 检查我的命令行如果用户名存在 它应该使用 console log 打印它 到目前为止一切正
  • CodeIgniter 中的公共函数与函数

    在 PHP 中 在类内部声明方法有什么区别 public function VS function 例如 public function contact data header Contact this gt load gt view ad
  • OAuth 2.0“state”和 OpenID“nonce”参数之间的区别?为什么状态不能重用?

    OAuth 2 0 定义了客户端在请求中发送的 状态 参数 以防止跨站请求攻击 OpenID 规范中也提到了 nonce 除了 ID 令牌而不是查询参数中返回 nonce 这一事实之外 它们似乎具有完全相同的目的 如果有人能解释他们为什么分
  • MySQLdb Connection 和 Cursor 对象可以在多个线程中安全使用吗?

    我在 Python 3 5 中使用 mysqlclient v1 3 10 连接到数据库后 您将获得一个连接对象 从中您将获得一个用于运行查询的游标对象 这些对象线程安全吗 即我可以创建一组然后在多个不同的 python 线程之间共享和使用
  • 有没有一个windows shell工具可以保存历史记录? [关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 询问我们的问题推荐或查找工具 库或最喜欢的场外资源与 Stack Overflow 无关 因为它们往往会吸引固执己见的答案和垃圾邮件 反而
  • 如何在Visual Studio中在当前文档中生成代码?

    如果这是很容易搜索到的内容 我深表歉意 但我不太确定正确的搜索词是什么 我现在正在使用 Visual Studio 主要用于 Unity 开发 创建新脚本时 我经常声明一些私有成员变量 如下所示 private Rigidbody rigi