在.net中,有没有办法检测某个单词是否是给定.net语言中的关键字?
我正在为这个项目使用一个相当简单的代码生成器,我想开始自动化它.现在我手工完成每一个,所以解决出现的任何问题都很容易.但是,一旦这种情况自动开始,我将需要一种方法来检测我需要用作标识符的单词是否是关键字.我仍然可以使用它,我只需要正确引用它.
我知道我可以简单地引用我生成的所有内容,但我想保持生成的代码很漂亮:)
我需要引用的一类例子:
vb: Public [Class] As String = "CLASS"
c#: public String @class = "CLASS";
Run Code Online (Sandbox Code Playgroud) 目前我正在为报告功能编写测试,项目获得的功能越多,需要编写更多报告
在我的案例报告中得到一些"搜索"参数和限制,如行数等
现在我的问题:任何人都知道如何使用phpunit为一个具有众所周知的可能参数的函数自动生成测试用例?
我读了一些像其他语言的快速检查工具,但是为PHP存在自动测试生成吗?或者有人建议如何自动创建测试?
谢谢
几个学期回来我有一个课,我们写了一个非常基本的方案解析器,最后是一个解释器.在课程结束后,我将解析器转换为C++解析器,只要我没有对预处理器或宏做任何事情,我就可以很好地解析C++.我可以用它来读取我的类和函数,并做一些巧妙的事情,比如自动生成类读者或编写器,或者从文本文件中设置函数回调.
但是,我的计划非常有限.我确信我可以花一些时间来使它更健壮并做更多整洁的事情,但如果已经有更强大的工具可以做同样的事情,我不想花费时间和精力.我认为必须有这样的东西,因为解析器是编译器的重要组成部分,但我还没有看到专门用于自动代码生成的工具,这使得它很容易通过并使用代表类,函数和数据的数据结构.特别是C++的变量.有没有这样的工具?
编辑:
希望这将澄清我正在寻找的一点点.我在Visual Studio中作为预建步骤运行的程序.它读取我的源文件,列出类,它们的成员,它们的功能等,然后用它们来生成新的代码.目前我只是使用它来轻松读取和写入我的数据结构到纯文本文件,但我也可以做其他事情.文件读取器和编写器输出到普通的.cpp和.h文件,我将其包含在项目的其余部分中,就像我任何其他文件一样.我正在寻找的是做类似事情的工具,所以我可以决定是继续使用自己的还是转而使用更好的解决方案.我不是在寻找任何可以生成机器代码或编辑代码的东西.
我推迟使用生成的代码作为构建过程的一部分,因为它担心它在构建过程中引入的复杂性.
有没有一种简单的方法可以将构建时生成的代码集成到应用程序中?
我正在考虑的代码类似于 Visual Studio执行的资源和设置文件代码生成:
对于(非现实世界)示例,考虑通过类似命名的C#属性(或方法)生成对正则表达式的命名捕获组的访问者的预编译器.这是我想要生成的各种事物的典型:样板包装器的长片段,其主要功能是启用编译时检查错误(在上面;访问不存在的捕获组或写入和无效的正则表达式)和否不太重要的是,这些属性的智能感知.最后,这个设置应该可以由团队中的其他人轻松使用,只有极少的学习曲线.即,要求手动干预以重新生成代码是绝对不可接受的,也不能接受将生成的代码提交到源代码控制中.在最坏的情况下,每个人都应该只需要安装一些扩展; 理想情况下,扩展应该可以安装到源树中,这样任何签出树的人都可以在没有任何介绍的情况下构建项目.
为了使其运行良好,IDE集成非常重要:更新底层的"资源"定义文件应该触发 代码的重新生成而无需任何用户交互,理想情况下,生成器本身将很容易为其他开发人员维护(即一些发电机调试能力是一个加号).
最后,类似XSLT的方法是理想的,其中相同的模板可以应用于各种输入资源 ; 因为这意味着你甚至不需要查看实际的生成器代码,如果你想要做的就是更新资源,并且因为它使模板重用变得微不足道.
我看过T4,但是从我看到的这个方法有一个不太方便的ASP方法,模板和资源没有干净地分开(即,生成器负责查找资源 - 这使模板重用变得不那么容易).
是否有更好(更干净)的解决方案或运行T4的某种方式,以便可以轻松地重复使用相同的模板并且(很像.NET设置文件)资源的任何更新都会自动触发已实现代码的重新生成?
简介: 我正在寻找可以实现的代码方法
我正在尝试在持续集成服务器上构建支持RIA的Silverlight项目.没有安装Visual Studio.因此我错过了一些库/目标.
需要安装什么才能构建仅使用MSBuild的RIA项目?
msbuild wcf continuous-integration code-generation wcf-ria-services
我想要一段不涉及循环但自动生成一些C++代码的代码.
我有一个const int d,从这里我想编写d行代码来访问一个数组.所以举个例子
for(int k=0; k<d;++k){
// do something to myarryay[k];
}
Run Code Online (Sandbox Code Playgroud)
但我不想在for循环中写这个.我希望编译器执行,就好像编写了以下代码行:
do something to myarray[0]
do something to myarray[1]
.
.
.
do something to myarray[d]
Run Code Online (Sandbox Code Playgroud)
任何人都可以给我一些建议吗?
提前致谢.
我想知道是否有任何好方法以编程方式生成C#代码而不实际操作字符串或StringBuilders.此外,它应检查代码是否编译,但我想这可以使用CSharpCodeProvider完成.
我正在寻找以下内容:
CodeUnit unit = new CodeUnit();
unit.AddDefaultUsings();
unit.AddUsing("MyApi.CoolNameSpace", "MyApi.Yay");
var clazz = unit.AddClass("GeneratedClass", Access.Public);
clazz.AddConstructor("....");
if(unit.Compile() != true)
//oh dang, somethings wrong!
else unit.WriteUTF8To("GeneratedClass.cs");
Run Code Online (Sandbox Code Playgroud)
这可能是核心库的一部分(不要认为CSharpCodeProvider可以做到这一点?)或外部库,但这根本不是我的强项(使用c#动态生成代码),所以如果这看起来毫无头绪,那是因为我!
WaveMaker是一个生成Java和Javascript代码的RAD工具 - 所以:
.NET 4.5中是否有任何内容可以从dynamic具有所有自动实现属性的字符串生成字符串C#POCO ?
如果没有,是否有任何内置于.NET中的内容(类似于a),List<KeyValuePair<string, Type>>以便我们可以根据伪代码生成POCO:
foreach (var kvp in list)
{
builder.AppendFormat("public {0} {1} {{ get; set; }}", kvp.Value, kvp.Key);
}
Run Code Online (Sandbox Code Playgroud)
最后,有没有任何知名的库可以帮助这种非常基本的代码生成?
public void CreateMethod()
{
CodeMemberMethod mymethod = new CodeMemberMethod();
mymethod.Name = testMethod;
CodeTypeReference ctr = new CodeTypeReference();
//Assign the return type to the method.
mymethod.ReturnType = ctr;
CodeSnippetExpression snippet1 = new CodeSnippetExpression("AutomationBase obj = new AutomationBase()");
CodeSnippetExpression snippet2 = new CodeSnippetExpression("obj.Execute(testCases[1])");
CodeExpressionStatement stmt1 = new CodeExpressionStatement(snippet1);
CodeExpressionStatement stmt2 = new CodeExpressionStatement(snippet2);
mymethod.Statements.Add(stmt1);
mymethod.Statements.Add(stmt2);
mymethod.Attributes = MemberAttributes.Public;
myclass.Members.Add(mymethod);
}
Run Code Online (Sandbox Code Playgroud)
产量
public virtual void TestCaseId002() {
AutomationBase obj = new AutomationBase();
obj.Execute(testCases[1]);
}
Run Code Online (Sandbox Code Playgroud)
获得虚拟无效
我只需要无效.