2013-01-03 46 views
0

我正試圖在我正在編寫的一個項目中使用T4代產品,但不幸的是它必須針對客戶的.NET 2.0,但我似乎無法避免使用FCL 4.0庫或找到一種方法VS會允許我從一個目標2.0訪問4.0中的類型,目標是4.0。如何從.NET 2.0程序集間接使用FCL 4.0代碼?

這個想法是聲明一個T4Attribute,它可以用來裝飾消耗項目中的部分類型。然後T4根據屬性的細節生成該類型的額外代碼。例如,標準配置模式的大多數樣板部分都可以通過使用單行屬性修飾添加到某個類型。

我得出自己的自定義TextTransformation來支持這一點,但因爲我有VS2010我無法安裝VS2005/8 SDK,只有VS2010之一,這意味着我使用的是TextTransformation在.NET 4.0 DLL(Microsoft.VisualStudio.TextTemplating.10.0)。所以該屬性位於同一個DLL中,並且當我試圖從消費項目中引用該DLL時,它只能看到類型,如果兩者都以相同的框架版本爲目標。只要項目爲2.0並且庫爲4.0,VS就不會再找到引用的類型或名稱空間。

我想它認爲,因爲應用程序將啓動CLRv2運行,它將無法運行代碼在v4 DLL(可能使用dynamic等)。但是實際上,圖書館中的類型只能在開發人員的電腦上才能看到,並通過T4模板掃描項目中的T4Attribute來告訴它生成代碼 - 我假設VS2010中的T4引擎運行在CLRv4下。這些屬性甚至不會編譯到發佈版本中。

我仍然處於學習曲線的底部。我做錯了嗎,有沒有更簡單的方法,如果沒有,是否有解決我的問題的方法?儘管有錯誤的VS版本,我能以某種方式獲得較舊的VisualStudio DLL嗎?

+0

更新一個*八年以前的版本的框架是一個簡單易行的解決方案。在一家陷入困境的公司中努力創新是困難的,因爲在這裏你無法獲得幫助。看看事業。 –

+0

修改以澄清對v2.0的需求是由於客戶端的限制。我猜測問題不在於我的目標是_obsolete_.NET版本,而是我的目標版本早於安裝的VS SDK的版本。 –

+0

一個想法;它有助於指定在模板指令中使用的C#版本嗎? http://www.olegsych.com/2008/02/t4-template-directive/ – FuleSnabel

回答

2

創建兩個組件。首先,針對.NET 2.0定義您描述的T4Attribute,然後針對.NET 4.0定義自定義TextTransformation。這樣,您可以從產品代碼和第二個程序集中引用第一個程序集,以實現代碼生成目的。

+0

這是令人放心的 - 在被較早的反應所鼓舞后,我花了我的晚上嘗試了這一點,並且迄今爲止沒有發現任何問題,除了一些NUnit和重複聲明的複雜情況,但沒有showstoppers。你的回答正好描述了我最終不得不使用的安排。我剛剛完成了對概念驗證的測試,它運行完美,我同意這是最好的(也是唯一的)解決方法,可能會出現 - 謝謝! –

相關問題