在Visual Studio

时间:2017-09-20 11:52:07

标签: visual-studio visual-studio-extensions

我目前正在开发一个EpiServer项目,我们使用ContentType属性来设置块的DisplayName和Order。订单基于块的名称。这是一个例子:

[ContentType(
    DisplayName = "My First Block",
    Order = 133536,
    GUID = "0f02e38a-a6e2-4333-9bd1-c61cf573d8d3",
    Description = "Just an example block.",
    GroupName = "Blocks.Content"
    )]
public class MyFirstBlock : BaseBlock
{
}

显然,EpiServer不能按字母顺序对块进行排序,因此我们根据DisplayName生成订单作为解决方法。发明了一个公式来确定顺序。一位同事编写了一个JavaScript函数,可用于生成订单号:

function getEPiOrderNumber(value) {
    var alphabeticalIndex = function (character) {
        return character.toLowerCase().charCodeAt() - 96;
    };

    var firstSection = alphabeticalIndex(value[0]);
    var secondSection = alphabeticalIndex(value[1]) + 10;
    var thirdSection = alphabeticalIndex(value[2]) + 100;

    return `${firstSection}${secondSection}${thirdSection}`;
}

此功能可以在浏览器的控制台中执行。比手动计算订单更好,但这要求我切换到浏览器,打开控制台,粘贴此代码并执行它,最后复制结果并将其粘贴到我正在处理的模型中。 / p>

我认为能够从VS中生成订单号会更方便。我一直在研究使用Visual Studio Extensions但是找不到任何我喜欢的东西。

最佳解决方案是能够选择(部分)DisplayName,右键单击并从上下文菜单中选择一个新命令,该命令将生成订单并将其粘贴到正确的位置。或者将它放在夹板上,这样我就可以轻松地将它粘贴在正确的位置。显示订单的弹出窗口也可以。

这甚至可能吗?

另一个选项可能是其中一个工具栏菜单中的新命令,比如工具,它会显示一个小窗口,我可以在其中输入/粘贴文本并让它生成我可以粘贴的顺序在代码中。

我已经想出如何将自定义命令添加到“工具”菜单以及如何生成代码并显示它,但是如何输入文本?或者是否可以从编辑器窗口中检索所选文本?这也可以解决我的问题。

如果有人能指出我正确的方向,那就太棒了!

PS。我对这个问题的标题不太满意,所以如果有人能想到一个能更好地描述我问题的标题,我愿意接受建议。

1 个答案:

答案 0 :(得分:1)

您可以使用以下代码从Visual Studio编辑器窗口中检索所选文本。

        DTE dte = (DTE)this.ServiceProvider.GetService(typeof(DTE));

        string text = "";

        if (dte.ActiveDocument != null)
        {
            var selection = (TextSelection)dte.ActiveDocument.Selection;
            text = selection.Text;
        }