|
在這之前,我寫了一系列關(guān)于代碼生成和T4相關(guān)的文章,而我現(xiàn)在也試圖將T4引入我們自己的開發(fā)框架。在實(shí)踐中遇到了一些問題,也解決了不少問題。如果你也在進(jìn)行T4相關(guān)的開發(fā),相信你也一定會(huì)遇到這些問題。為此,特意將這些問題和解決方案與朋友們分享,希望在遇到這些問題的時(shí)候少走彎路。本篇文章介紹的是兩個(gè)重要的話題:程序集鎖定和調(diào)試。
目錄
一、程序集引用導(dǎo)致的編譯問題
二、T4引擎對(duì)引用程序集的鎖定
三、Debugger.Break導(dǎo)致VS 2010的Crash
四、在Debugger.Break之前加上Debugger.Launch
一、程序集引用導(dǎo)致的編譯問題
為了讓讀者對(duì)“程序集鎖定”,以及由它造成的開發(fā)上的不便有一個(gè)深刻的認(rèn)識(shí),我特意寫了一個(gè)小例子。如右圖所示的解決方案包含兩個(gè)項(xiàng)目:Lib和T4。其中我們的T4項(xiàng)目中定義了一個(gè)叫作HelloWorld.tt的模板文件,該文件需要使用到定義在Lib項(xiàng)目中的某個(gè)類型。所以,HelloWorld.tt模板文件中需要通過<#@Assembly…#>指令引用Lib項(xiàng)目編譯生成的程序集(Artech.T4Template.Lib.dll)。
如果你看過我上一篇文章,你應(yīng)該知道我們至少具有解決T4模板的程序集引用的五種方案,在這里我們采用的是VS宏的解決方案,即將引用程序集文件的路徑設(shè)置成通過$(SolutionDir)表示的解決方案目錄的相對(duì)路徑。HelloWorld.tt定義如下,引用的程序集路徑為L(zhǎng)ib項(xiàng)目在Debug模式下編譯生成的目錄($(SolutionDir)Lib/Bin/Debug/)。
<#@ template debug="true" hostSpecific="true" #>
<#@ output extension=".cs" #>
<#@ Assembly name="$(SolutionDir)Lib/Bin/Debug/Artech.T4Template.Lib.dll" #>
using System;
public class HelloWord
{
static void Main()
{
<# foreach( var person in Artech.T4Template.HelloWorldHelper.GetPersons())
{#>
Console.WriteLine("Hello, {0}!", "<#=person#>");
<# } #>
}
}
NET技術(shù):編寫T4模板無法避免的兩個(gè)話題:&quot;Assembly Locking&quot;&amp;&quot;Debug&quot;,轉(zhuǎn)載需保留來源!
鄭重聲明:本文版權(quán)歸原作者所有,轉(zhuǎn)載文章僅為傳播更多信息之目的,如作者信息標(biāo)記有誤,請(qǐng)第一時(shí)間聯(lián)系我們修改或刪除,多謝。