如何根据 Visual Studio 中的文件名以编程方式更改 C# .cs 文件?
How to programmatically make changes to C# .cs files based on the file name in Visual Studio?
我将如何以编程方式对 类 进行更改,例如根据 class/file 名称在 Visual Studio (C#) 中添加注释?
例如
之前:
using System;
using System.Collections.Generic;
using System.Text;
namespace ChangingCode.Lib
{
public class ChangeThisClass
{
public void Method()
{
}
}
}
之后:
using System;
using System.Collections.Generic;
using System.Text;
//This Got Added Somehow
//Is it possible?
namespace ChangingCode.Lib
{
public class ChangeThisClass
{
public void Method()
{
}
}
}
遗憾的是,CodeDom 不附带任何 C# 解析器实现(尽管它是 got an interface for that). There are however quite a few C# parsers available (see this SO answer 以获取更多信息)。
假设,您决定使用 NRefactory, then adding comments becomes a matter of changing an AST:
var compiledUnit = ICSharpCode.NRefactory.CSharp.SyntaxTree.Parse(File.ReadAllText(@"D:\file.cs"));
var namespaceNode = compiledUnit.Children.First(n => (n.GetType() == typeof(NamespaceDeclaration))) as NamespaceDeclaration; // find the start of namespace declaration
var parent = namespaceNode.Parent; // get reference to file root since you're adding nodes above namespace
parent.InsertChildAfter(namespaceNode.PrevSibling, new Comment("This Got Added Somehow"), Roles.Comment);
parent.InsertChildAfter(namespaceNode.PrevSibling, new Comment("Is it possible?"), Roles.Comment);
// save it all back
File.WriteAllText(@"D:\file.cs.modified.txt", compiledUnit.ToString());
要实现这个,我想你可以创建一个包含任何自定义内容的父模板,然后在项目中使用这个模板。
1) 首先,创建一个新的 C# class 这是一个父模板供以后使用,然后你可以在这个文件中添加这样的注释:
// this is a file called $itemname$
//is it possible?
//...........
而$itemname$
是保留的模板参数,表示使用新模板创建的项目的名称。例如,当您使用这个新模板并创建一个名为 StrFeed
的新项目时,上面的代码将显示在这个新文件中,并且 $itemname$
将是 StrFeed
。更多预留模板参数,可参考this.
2) 点击 item template
by Project
-->Export Template
然后选择你的自定义 class 然后重命名点赞 customitem
并记住此名称是自定义模板的名称,您可以按名称在 Add New Item
中搜索此名称。
3)当您完成此项目模板创建后,请关闭VS实例,然后您可以在其他项目中使用此项目模板。
4) 创建一个新项目,然后添加新项目并搜索其名称 customitem
然后给它一个新名称,然后你会得到你想要的想要它。
有关如何创建自定义项模板的更多详细信息,您可以查看this link。
我将如何以编程方式对 类 进行更改,例如根据 class/file 名称在 Visual Studio (C#) 中添加注释?
例如
之前:
using System;
using System.Collections.Generic;
using System.Text;
namespace ChangingCode.Lib
{
public class ChangeThisClass
{
public void Method()
{
}
}
}
之后:
using System;
using System.Collections.Generic;
using System.Text;
//This Got Added Somehow
//Is it possible?
namespace ChangingCode.Lib
{
public class ChangeThisClass
{
public void Method()
{
}
}
}
遗憾的是,CodeDom 不附带任何 C# 解析器实现(尽管它是 got an interface for that). There are however quite a few C# parsers available (see this SO answer 以获取更多信息)。
假设,您决定使用 NRefactory, then adding comments becomes a matter of changing an AST:
var compiledUnit = ICSharpCode.NRefactory.CSharp.SyntaxTree.Parse(File.ReadAllText(@"D:\file.cs"));
var namespaceNode = compiledUnit.Children.First(n => (n.GetType() == typeof(NamespaceDeclaration))) as NamespaceDeclaration; // find the start of namespace declaration
var parent = namespaceNode.Parent; // get reference to file root since you're adding nodes above namespace
parent.InsertChildAfter(namespaceNode.PrevSibling, new Comment("This Got Added Somehow"), Roles.Comment);
parent.InsertChildAfter(namespaceNode.PrevSibling, new Comment("Is it possible?"), Roles.Comment);
// save it all back
File.WriteAllText(@"D:\file.cs.modified.txt", compiledUnit.ToString());
要实现这个,我想你可以创建一个包含任何自定义内容的父模板,然后在项目中使用这个模板。
1) 首先,创建一个新的 C# class 这是一个父模板供以后使用,然后你可以在这个文件中添加这样的注释:
// this is a file called $itemname$
//is it possible?
//...........
而$itemname$
是保留的模板参数,表示使用新模板创建的项目的名称。例如,当您使用这个新模板并创建一个名为 StrFeed
的新项目时,上面的代码将显示在这个新文件中,并且 $itemname$
将是 StrFeed
。更多预留模板参数,可参考this.
2) 点击 item template
by Project
-->Export Template
然后选择你的自定义 class 然后重命名点赞 customitem
并记住此名称是自定义模板的名称,您可以按名称在 Add New Item
中搜索此名称。
3)当您完成此项目模板创建后,请关闭VS实例,然后您可以在其他项目中使用此项目模板。
4) 创建一个新项目,然后添加新项目并搜索其名称 customitem
然后给它一个新名称,然后你会得到你想要的想要它。
有关如何创建自定义项模板的更多详细信息,您可以查看this link。