2015-06-24 65 views
3

我需要在T4模板中執行JSON模式生成,並且發現Newtonsoft的新Schema類遠遠超出手頭上的目的(在控制檯應用程序中測試過),但是,我無法似乎使它與其他球一起玩,因爲Newtonsoft的實例總是返回null。T4與第三方程序集的模板

T4聲明:

<#@ template debug="true" hostspecific="true" language="C#" #> 
<#@ assembly name="System.Core" #> 
<#@ assembly name="Newtonsoft.Json.dll" #> 
<#@ assembly name="Newtonsoft.Json.Schema.dll" #> 
<#@ import namespace="System.Linq" #> 
<#@ import namespace="System.Text" #> 
<#@ import namespace="System.Collections.Generic" #> 
<#@ output extension=".cs" #> 

集引用指向DLL文件,我在該項目的項目設置中設置文件夾的樣子起坐,截圖如下:

enter image description here

試圖做下面的事情,失敗,因爲Newtonsoft無法找到:

var schema = Newtonsoft.Json .Schema.JSchema.Parse(jsoncontent);

會發生錯誤是:元數據文件「Newtonsoft.Json.Schema.dll」找不到

回答

4

T4模板不使用項目中定義的參考路徑T4不支持可視裏面一些變量。演播室:

<#@ assembly name="$(SolutionDir)\MyProject\bin\Debug\SomeLibrary.Dll" #> 

有一個existing StackOverflow question這個

如果你引用的.dll和它被複制到輸出目錄,你應該能夠使用。 $(TargetDir),因此您不需要包含NuGet程序包版本號,在更新NuGet程序包時該版本號會發生變化。

+0

嗨馬特,我遵循完全相同的討論,它不適合我。它最終成爲了Newtonsoft.Json.Schema的NuGet的版本,內部針對Newtonsoft.Json的v6 +進行了編譯,並且我從NuGet獲得了v7。奇怪的是,一個普通的控制檯應用程序沒有引發這個異常,只是當我想在T4中使用它時,它被引發,但不是通過傳統的異常處理,必須真正挖掘才能找到這個錯誤。從GitHub獲得了最新的.Schema,並使用版本7進行編譯,並且工作正常。謝謝 – JadedEric

+0

我會把你發現的答案,因爲其他人可能會遇到這種情況,也許沒有找到你的解決方案的評論。 –

+0

好點,謝謝:) – JadedEric

1

發現這個解決方案並不像原來的錯誤那樣具體。

我的Newtonsoft.Json版本是7.0.1版本,但是Newtonsoft.Json.Schema的編譯版本是針對6.0.8版本的,它引起了內部「版本差異」錯誤,但從未被提升到頂部堆棧和T4剛剛通知元數據無法找到(理論上正確),但不是非常具體。

我從GitHub抓起一個Newtonsoft.Json.Schema的副本,並從NuGet編譯成版本7,錯誤消失了。