Tag: 代码生成

使用Roslyn将自定义属性添加到C#类

考虑文件“MyClass.cs”中的以下类 using System; public class MyClass : Entity { public long Id { get; set; } [Required] public string Name { get; set; } public string Slug { get; set; } public DateTime CreatedOn { get; private set; } public DateTime UpdatedOn { get; private set; } /* … */ } 目前我手动创建数据合同类,如下所示: [DataContract(Namespace = “http://example.com/”, […]

当“更喜欢组合而不是inheritance”时生成传递代码

问题 假设我试图将手机模型化为普通手机和PDA的组合。 这是一种多重inheritance方案(手机是手机,它是 PDA)。 由于C#不支持多重inheritance,因此这几乎需要某种组合。 另外,让我们说我还有其他理由支持作曲。 我一直想知道:是否有任何工具可以自动生成所有不可避免的传递代码? 让我用一些实际的代码充实我的例子: 接口: public interface IPhone { public void MakeCall(int phoneNumber); public void AnswerCall(); public void HangUp(); } public interface IPda { public void SendEmail(string[] recipientList, string subject, string message); public int LookUpContactPhoneNumber(string contactName); public void SyncWithComputer(); } 实现: public class Phone : IPhone { public void MakeCall(int phoneNumber) […]

使用与模板位于同一项目中的T4模板中的类型

我正在研究我的第一个T4代码生成工具,为我的项目添加一些存储过程帮助程序代码。 我已经创建了自定义类型(例如StoredProcedure和StoredProcedureParameter来帮助我生成代码,并在我的代码中包含了程序集和命名空间引用: 这允许我在我的T4模板代码中使用我的自定义类型。 但是,因为我的自定义类型与T4模板代码存在于同一个项目中,所以在运行模板代码而不重新启动Visual Studio时,我无法重新编译项目。 这不是很有趣。 我读了一篇很棒的文章 ,通过使用T4工具箱解决了这个问题,但是它没有用。 我正在实现VolatileAssembly指令错误或者T4工具箱根本没有安装。 我不确定工具箱是否正确安装(我在Win XP上使用VS 2010)。 有什么方法可以解决这个问题?

使用Roslyn解析/转换/生成代码:我的目标是太高还是太低?

(我正在尝试通过从vs生成的设置文件生成接口和包装类来解决Application.Settings / MVVM问题。) 我想做的是: 从文件中解析类声明 仅基于类的(非静态)属性生成接口声明 生成一个实现此接口的包装类,在构造函数中获取原始类的实例,并将所有属性“管道”到实例。 生成另一个直接实现接口的类。 我的问题是双重的: 我吠叫错了树吗? 我会更好地使用Code-Dom,T4,Regex(!)来实现这个目标,还是部分原因? (我不介意一些额外的工作,因为这主要是一种学习经历。) 如果罗斯林是要走的路,我应该关注哪一点? 我有点天真地希望有一些方法可以走树并吐出我想要的东西,但是我无法理解是否/如何使用SyntaxRewriter来实现它,或者是否要使用流畅的结构,多次查询源我需要的位。 如果你想评论MVVM方面,你可以,但这不是问题的主旨:)

从C#代码生成汇编代码?

有没有办法从C#代码生成汇编代码? 我知道C代码可以使用GAS,但有人知道C#是否可行?

生成C#代码时,XSD工具将“Specified”附加到某些属性/字段

我对XSD生成器有一种奇怪的行为我无法解释。 我有一个像这样的XSD: Some Doc … … … … 它源自CoreObject: … 这只是XSD的一小部分,有很多更复杂的类型。 因此,当我生成类似于此的类时,我得到一个生成的类,它有两个属性(除了我期望的5): public bool MinDuration_100msSpecified 和 public bool StageOnDemandSpecified 所以对于“原始”属性,附加了“Specified”,类型现在是bool。 任何人都可以解释为什么会这样吗?

有没有办法生成WMI代码/类?

如何生成用于访问WMI的C#类?

使用Visual Studio 2010 UML建模进行代码存根

目前我正在探索添加到Visual Studio 2010 Beta 1 IDE中的所有新function,我发现了一个function,希望对我有很大的帮助。 Architecture Edition中的UML建模工具。 我想创建一个新的测试项目,没什么特别的。 我开始只创建一个标准的UML逻辑类图。 在我完成之后,我想将我的图表导出到带有类存根的C#代码,但我无法弄清楚如何做到这一点。 所以很自然地我咨询了MSDN,但我找不到任何关于自上而下的设计方法的参考,并放弃了它。 然后我碰巧在Channel 9网站上观看了Top down架构video,他们提到了Visual Studio 2010能够完成这项任务的可能性。 所以我想我的问题是,Visual Studio 2010可以采用逻辑类图并从中生成代码存根吗? 我目前正在Windows 7上使用Visual Studio 2010 Beta 1 Team System(如果有帮助的话)。 谢谢

NHibernate代码生成

我正在使用NHibernate和一些代码生成工具。 MyGeneration是一个,SmartCode是另一个。 之前已经问过这个问题,但我已经看了一些其他的响应,发现nHibernate空间中的代码生成工具非常差。 我可能能够使用MyGeneration和SmartCode,但是你有没有其他可能的用途,并且会推荐? 我想我的标准是他们必须使用MSSQL 2008,目前正在开发的工具也会很好,因为似乎某些工具不再被积极开发。 理想情况下,这些工具也会生成域对象,还有nhibernate映射文件 – Fluent nhibernate会很好但不是必需的。 如果可以调整代码生成的模板和方法,那将是很好的。 我是一名开发人员,所以很高兴能够通过合适的工具进行更改。 谢谢。

如何在编码的编译代码中调试/中断

我有一个应用程序动态加载c#源文件并将其作为插件运行。 当我在调试模式下运行主应用程序时,是否可以调试到动态程序集? 显然设置断点是有问题的,因为源不是原始项目的一部分,但是我应该能够进入或打破代码的exception吗? 有没有办法让编码器生成这个或什么的PDB? 这是我用于动态compliation的代码。 CSharpCodeProvider codeProvider = new CSharpCodeProvider(new Dictionary() { { “CompilerVersion”, “v3.5” } }); //codeProvider. ICodeCompiler icc = codeProvider.CreateCompiler(); CompilerParameters parameters = new CompilerParameters(); parameters.GenerateExecutable = false; parameters.GenerateInMemory = true; parameters.CompilerOptions = string.Format(“/lib:\”{0}\””, Application.StartupPath); parameters.ReferencedAssemblies.Add(“System.dll”); parameters.ReferencedAssemblies.Add(“System.Core.dll”); CompilerResults results = icc.CompileAssemblyFromSource(parameters, Source); DLL.CreateInstance(t.FullName, false, BindingFlags.Default, null, new object[] { engine }, null, null);