我有一个包含文本模板的C#项目。我希望这个模板可以通过反射C#类来生成一些SQL。
如何使用T4访问当前项目的内容?是否可能访问反射,或者只能访问必须进行解析的原始源代码?
谢谢!
我有一个包含文本模板的C#项目。我希望这个模板可以通过反射C#类来生成一些SQL。
如何使用T4访问当前项目的内容?是否可能访问反射,或者只能访问必须进行解析的原始源代码?
谢谢!
如何使用T4访问当前项目的内容?
一种方法是使用EnvDTE COM组件。在Google中搜索T4和EnvDTE应该会带回大量示例。
是否可能,并且如果可能,Reflection是否可用,还是必须访问原始源代码,然后进行解析?
Reflection在T4中肯定可用。它的工作方式大多与您预期的相同。
Oleg Sych有许多关于常见T4使用场景的优秀博客文章,但还有很多其他T4资源可用。
虽然这并不能解决锁定问题(尽管我听说VS2010可以),但您可以尝试将dll复制到临时位置,然后只使用该复制的程序集。
<#@ template debug="false" hostspecific="false" language="C#" #>
<#@ output extension=".txt" #>
<#@ import namespace="System.Reflection" #>
<#@ import namespace="System.IO" #>
<#
var newFileName = System.IO.Path.GetTempFileName();
System.IO.File.Copy(@"C:\Development\CustomAssembly.dll",newFileName,true);
var assembly = Assembly.LoadFrom(newFileName);
var type = assembly.GetType("CustomAssembly.DummyClass");
#>
<#=newFileName#>
<#=type#>