在 Visual Studio 中自动执行重复的手动任务(根据名称生成订单号)
Automate a reoccuring manual task (generate order number based on name) in Visual Studio
我目前正在开发一个 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}`;
}
该功能可以在浏览器的控制台中执行。比手动计算顺序要好,但这需要我切换到浏览器,打开控制台,粘贴这段代码并执行它,最后复制结果并将其粘贴到我正在处理的模型中。
我认为能够从 VS 中生成订单号会方便得多。我一直在研究使用 Visual Studio 扩展,但找不到任何我喜欢的东西。
最佳解决方案是能够 select DisplayName(的一部分),右键单击并从上下文菜单中 select 一个新命令,该命令将生成顺序并粘贴它在正确的位置。或者将它放在剪贴板上,这样我就可以自己轻松地将其粘贴到正确的位置。 pop-up 显示订单也可以。
这可能吗?
另一个选项可能是工具栏菜单之一中的新命令,比如工具,它会显示一个小的 window,我可以在其中输入/粘贴文本并让它生成我可以生成的顺序然后粘贴代码。
我已经知道如何将自定义命令添加到“工具”菜单以及如何生成代码并显示它,但如何输入文本?或者是否可以从编辑器 window 中检索 selected 文本?这也能解决我的问题。
如果有人能指出我正确的方向,那就太好了!
PS。我对这个问题的标题不太满意,所以如果有人能想到一个能更好地描述我的问题的标题,我愿意接受建议。
您可以使用以下代码从 Visual Studio 编辑器 window 中检索选定的文本。
DTE dte = (DTE)this.ServiceProvider.GetService(typeof(DTE));
string text = "";
if (dte.ActiveDocument != null)
{
var selection = (TextSelection)dte.ActiveDocument.Selection;
text = selection.Text;
}
我目前正在开发一个 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}`;
}
该功能可以在浏览器的控制台中执行。比手动计算顺序要好,但这需要我切换到浏览器,打开控制台,粘贴这段代码并执行它,最后复制结果并将其粘贴到我正在处理的模型中。
我认为能够从 VS 中生成订单号会方便得多。我一直在研究使用 Visual Studio 扩展,但找不到任何我喜欢的东西。
最佳解决方案是能够 select DisplayName(的一部分),右键单击并从上下文菜单中 select 一个新命令,该命令将生成顺序并粘贴它在正确的位置。或者将它放在剪贴板上,这样我就可以自己轻松地将其粘贴到正确的位置。 pop-up 显示订单也可以。
这可能吗?
另一个选项可能是工具栏菜单之一中的新命令,比如工具,它会显示一个小的 window,我可以在其中输入/粘贴文本并让它生成我可以生成的顺序然后粘贴代码。
我已经知道如何将自定义命令添加到“工具”菜单以及如何生成代码并显示它,但如何输入文本?或者是否可以从编辑器 window 中检索 selected 文本?这也能解决我的问题。
如果有人能指出我正确的方向,那就太好了!
PS。我对这个问题的标题不太满意,所以如果有人能想到一个能更好地描述我的问题的标题,我愿意接受建议。
您可以使用以下代码从 Visual Studio 编辑器 window 中检索选定的文本。
DTE dte = (DTE)this.ServiceProvider.GetService(typeof(DTE));
string text = "";
if (dte.ActiveDocument != null)
{
var selection = (TextSelection)dte.ActiveDocument.Selection;
text = selection.Text;
}