T4代码生成:当前项目中的访问类型

Pao*_*sco 17 .net c# t4

使用T4代码生成,是否可以访问当前项目中定义的类型?

例如,如果我有一个接口,我想将其实现委托给另一个类,即

interface IDoSomething {
    public void do_something();
}

class DoSomethingImpl : IDoSomething {
    public void do_something() {
        // implementation...
    }
}

class SomeClass : IDoSomething {
    IDoSomething m_doSomething = new DoSomethingImpl();

    // forward calls to impl object
    public void do_something() {
        m_doSomething.do_something();
    }
}
Run Code Online (Sandbox Code Playgroud)

我想SomeClass用代码生成自动化呼叫转发; 这可能吗?

Rob*_*Rob 1

虽然这不能解决锁定问题(尽管我听说 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#>
Run Code Online (Sandbox Code Playgroud)