T4 模板与第 3 方程序集
T4 Templating with 3rd party assemblies
我需要在 T4 模板中生成 JSON 模式,发现 Newtonsoft 的新模式 class 足以满足手头的目的(在控制台应用程序中,经过测试),但是,我似乎无法让它与其他人一起玩球,因为 Newtonsoft 的实例总是 returns null。
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 文件,我在项目的项目设置中设置了文件夹查找,屏幕截图如下:
尝试执行如下操作失败,因为找不到 Newtonsoft:
var schema = Newtonsoft.Json.Schema.JSchema.Parse(jsoncontent);
抛出的错误是:找不到元数据文件“Newtonsoft.Json.Schema.dll”。
T4模板不使用项目中定义的引用路径。 T4 确实支持 Visual Studio:
中的一些变量
<#@ assembly name="$(SolutionDir)\MyProject\bin\Debug\SomeLibrary.Dll" #>
关于这个有一个existing Whosebug question。
如果您正在引用 .dll 并将其复制到输出目录中,您应该能够在路径中使用 $(TargetDir),这样您就不需要包括 NuGet 包版本号,该版本号将在您更新 NuGet 包时更改。
发现此问题的解决方案并不像原始错误所述那样具体。
我的Newtonsoft.Json版本是7.0.1,但是Newtonsoft.Json.Schema的编译版本是针对6.0.8版本的,导致内部"version difference"错误,但是一直没有得到提升到栈顶,T4只是通知找不到元数据(理论上是正确的)但不是很具体。
我从 GitHub 抓取了 Newtonsoft.Json.Schema 的副本,并根据版本 7 从 NuGet 编译了它,错误消失了。
我需要在 T4 模板中生成 JSON 模式,发现 Newtonsoft 的新模式 class 足以满足手头的目的(在控制台应用程序中,经过测试),但是,我似乎无法让它与其他人一起玩球,因为 Newtonsoft 的实例总是 returns null。
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 文件,我在项目的项目设置中设置了文件夹查找,屏幕截图如下:
尝试执行如下操作失败,因为找不到 Newtonsoft:
var schema = Newtonsoft.Json.Schema.JSchema.Parse(jsoncontent);
抛出的错误是:找不到元数据文件“Newtonsoft.Json.Schema.dll”。
T4模板不使用项目中定义的引用路径。 T4 确实支持 Visual Studio:
中的一些变量<#@ assembly name="$(SolutionDir)\MyProject\bin\Debug\SomeLibrary.Dll" #>
关于这个有一个existing Whosebug question。
如果您正在引用 .dll 并将其复制到输出目录中,您应该能够在路径中使用 $(TargetDir),这样您就不需要包括 NuGet 包版本号,该版本号将在您更新 NuGet 包时更改。
发现此问题的解决方案并不像原始错误所述那样具体。
我的Newtonsoft.Json版本是7.0.1,但是Newtonsoft.Json.Schema的编译版本是针对6.0.8版本的,导致内部"version difference"错误,但是一直没有得到提升到栈顶,T4只是通知找不到元数据(理论上是正确的)但不是很具体。
我从 GitHub 抓取了 Newtonsoft.Json.Schema 的副本,并根据版本 7 从 NuGet 编译了它,错误消失了。