2015-06-24 3 views
3

Мне нужно сделать генерацию схемы JSON в шаблоне T4 и найти новый класс Schema Newtonsoft более чем подходящим для этой цели (в рамках консольного приложения, проверено), однако я не могу похоже, заставляют его играть в мяч вместе с остальными, поскольку экземпляр Newtonsoft всегда возвращает null.T4 Templating с сторонними сборками

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 поддерживает некоторые переменные внутри Visual.. Студия:

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

Существует existing StackOverflow question об этом

Если вы ссылаетесь на .dll и копируется в выходной каталог, вы должны быть в состоянии использовать. $ (TargetDir), поэтому вам не нужно включать номер версии пакета NuGet, который изменится при обновлении пакета NuGet.

+0

Привет, Мэтт, я последовал за этим тем же самым обсуждением, и это не сработало для меня. В итоге это была версия от NuGet из Newtonsoft.Json.Schema, была внутренне скомпилирована против v6 + из Newtonsoft.Json и я получили v7 от NuGet. Странно, что обычное консольное приложение не вызвало это исключение, только когда я захотел использовать его в T4, было ли оно поднято, но не через обычную обработку исключений, пришлось действительно разобраться, чтобы найти эту ошибку. Получил последнюю версию .Schema от GitHub и скомпилирован с версией 7, и она сработала. Спасибо – JadedEric

+0

Я бы поставил то, что вы нашли в качестве ответа, так как другие люди могут столкнуться с этим и, возможно, не найдут ваше решение в комментарии. –

+0

Хорошая точка, спасибо :) – JadedEric

1

Обнаружено, что решение не было таким конкретным, как заявленная первоначальная ошибка.

My Newtonsoft.Json версия - версия 7.0.1, но скомпилированная версия Newtonsoft.Json.Schema была против версии 6.0.8, которая вызвала внутреннюю ошибку «разницы в версии», но никогда не поднималась на вершину стек, а T4 только что уведомили, что метаданные не могут быть найдены (теоретически правильные), но не очень специфичны.

Я схватил копию Newtonsoft.Json.Schema из GitHub и скомпилировал ее против версии 7, из NuGet, и ошибка исчезла.

Смежные вопросы