Tag: 代码生成

用于代码的元语言为ANSI-C和C#Structs生成打包的结构

我正在尝试找到一种“元语言”,可用于定义结构和获取/设置成员的代码。 问题在于结构已经存在于代码中,并且这种“元语言”将用作原始手工编码结构的逐位替换,以允许生成描述结构的头部。 关键是这些结构被用作C#应用程序和嵌入式设备之间的协议的一部分(不是基于Linux,认为更小,更像PIC或CM0那样受限制。)元语言将充当 结构成员的文档 为get / set操作生成C#结构和实现 生成打包的ANSI-C结构和get / set函数 元语言需要支持 枚举定义(指定大小 – 即uint16_t,uint8_t或更小的多位枚举) 位数组(指定大小 – 即48位数组打包成6个字节) 位结构/枚举数组(指定大小 – 即48位索引的2位结构为12个字节) 字节序和位序的规范, 生成二进制结构,可以通过生成的ANSI-C代码或C-sharp代码直接读取,以便通过网络发送。 收到数据时对数据进行有限的validation也是很好的。 到目前为止,我已经看过了 BSON 蚀刻 Hessian Avro 冰 MessagePack 协议缓冲区 节约 所有这些都非常适合文档和构建新协议,但是试图保持与现有协议的兼容性,并且由于数据封送中固有的类型编码而导致这些协议不足。 我还查看了ASN.1的ECN编码,但这似乎太难以理解,导致文档出现问题。 我从C结构看了Generating C#结构,但那里没有一个好的选择。 有什么建议?

在.Net中生成exe

在.Net中,您可以在内存中生成字节代码,并可能将生成的程序保存到.exe文件中。 要做第一步,我有以下测试代码改编自http://www.code-magazine.com/Article.aspx?quickid=0301051 var name = new AssemblyName(); name.Name = “MyAssembly”; var ad = Thread.GetDomain(); var ab = ad.DefineDynamicAssembly(name, AssemblyBuilderAccess.Run); var mb = ab.DefineDynamicModule(“MyModule”); var theClass = mb.DefineType(“MathOps”, TypeAttributes.Public); var retType = typeof(System.Int32); var parms = new Type[2]; parms[0] = typeof(System.Int32); parms[1] = typeof(System.Int32); var meb = theClass.DefineMethod(“ReturnSum”, MethodAttributes.Public, retType, parms); var gen = meb.GetILGenerator(); gen.Emit(OpCodes.Ldarg_1); […]

如何通过t4生成自定义类?

我试图通过T4生成以下代码。 using System; using MyDAL; namspace Test { // Select… public partial class MyCustomer { public int id { get ;set;} public string name { get ;set;} public string surname { get ;set;} public MyCustomer() { } public List GetById(int id) { // do something… } } // Delete,Update,Save public partial class MyCustomer { public […]

CompileAssemblyFromDom抛出访问被拒绝的exception

代码: using (var codeProvider = new CSharpCodeProvider()) { var compilerParameter = new CompilerParameters( _assemblies, assemblyName, false) { GenerateInMemory = true, CompilerOptions = “/optimize” }; var compilerResults = codeProvider.CompileAssemblyFromDom( compilerParameter, templateResults.Select(r => r.GeneratedCode) .ToArray()); } 它抛出exception:CS1567生成Win32资源时出错:访问被拒绝。 这是什么意思?

任何人都有从MSBuild调用Rake获取代码生成和其他好处的经验吗? 怎么回事? 你有什么想法/建议?

使用Visual Studio 2008在C#中编程时,我经常希望“自动”生成代码。 如果可能的话,我想通过让我的MSBuild解决方案文件调用Rake来实现它,Rake会调用Ruby代码来生成代码,生成的文件会自动出现在我的解决方案中。 这是一个商业示例(我可以命名的许多可能示例),这种自动代码生成会有所帮助。 在最近的一个项目中,我有一个包含一些包含美元金额的属性的界面。 我想要第二个接口和第三个接口,它们具有与第一个接口相同的属性,除了它们是“合格”的业务单元名称。 像这样的东西: public interface IQuarterlyResults { double TotalRevenue { get; set; } double NetProfit { get; set; } } public interface IConsumerQuarterlyResults { double ConsumerTotalRevenue { get; set; } double ConsumerNetProfit { get; set; } } public interface ICorporateQuarterResults { double CorporateTotalRevenue { get; set; } double CorporateNetProfit { […]

Visual Studio体系结构代码生成 – 创建列表而不是IEnumerable

是否可以在Visual Studio(2013)类图中配置关联,以便在从它生成代码时创建一个类型为List的属性,甚至是ICollection而不是默认的IEnumerable ?

使用xsd.exe生成类的可空值

我一直在使用xsd.exe生成一个用于反序列化XML的类。 我在源xsd中有十进制值,这是不需要的: xsd生成的类生成以下代码: private decimal balanceField; [System.Xml.Serialization.XmlAttributeAttribute()] public decimal Balance { get { return this.balanceField; } set { this.balanceField = value; } } 我注意到它不可空。 我如何生成可为空的字段,如下所示: private decimal? balanceField; [System.Xml.Serialization.XmlAttributeAttribute()] public decimal? Balance { get { return this.balanceField; } set { this.balanceField = value; } }

如何让enum包含短划线( – )?

我正在使用Enterprise Architect从此模式生成业务对象。 该架构具有以下枚举规范: 企业架构师生成以下代码,但Visual Studio不喜欢CD-ROM中的破折号( – ),也不会编译。 public enum PackageMedium : int { NTP, DAT, Exabyte, CD-ROM, DLT, D1, DVD, BD, LTO, LTO2, LTO4 } 我能做些什么来完成这项工作? 基于@Craig Stuntz回答我能找到这篇文章 ,帮助我从Enum中检索这些特殊字符。

CodeDom和集合初始值设定项

有没有办法使用C#CodeDom生成字典初始化程序? 那些支持吗? 我想拥有: private IDictionary map = new Dictionary { { “Name”, “Value” }, … };

代码生成来自C#POCO类的Winforms表单

是否有一些开源代码已经写在那里接受具有属性和validation属性的类,并输出一个Windows窗体,其控件对应于这些属性? 例子: public bool IsRed { get; set; } 生成一个带Is Red?的复选框Is Red? 标签。 public int NumberOfDays { get; set; } 生成一个带有名为Number of Days的标签的文本框,并仅将输入限制为数字字符。 [Required] public Color Color { get; set; } 其中Color是表单的枚举 public enum Color { Red, Green, Blue } 生成一个combobox,其中列表中填充了Red Green和Blue ,并使其成为必需项。 理想情况下,生成的代码包含一个方法,该方法接受我的类的实例,并使用我的实例的属性中的值预先填充winform中的控件。 相应地,另一种方法将控件中的现有值保存到我的类的实例中。 有没有这样的东西? 请注意:我不是在寻找: ORM或DAL 像CodeSmith这样的通用工具,除非它是免费和开源的 WPF或ASP.NET代码,它需要是Winforms NetTiers或任何类似类型的完整应用程序框架,除非我能够解析出专门适用于此场景的一小部分。