Как использовать Microsoft.Data.Sqlite в шаблоне T4 в VS2017 - PullRequest
0 голосов
/ 22 апреля 2019

Я пытаюсь сгенерировать некоторый код C # через мой собственный файл .tt в VS2017.В идеале я хочу иметь возможность использовать ссылку на сборку для Microsoft.Data.Sqlite, но не могу получить успешное преобразование.

Как получить преобразование .tt для приятного воспроизведения с dll netStandard2.0 илия должен использовать что-то вроде dll System.Data.Sqlite .netFramework friendly?

Я попытался добавить эту дополнительную ссылку на сборку безуспешно:

<# @ Assembly Name ="C: \ Program Files \ dotnet \ sdk \ NuGetFallbackFolder \ netstandard.library \ 2.0.3 \ build \ netstandard2.0 \ ref \ netstandard.dll" #>

Если я добавлю это впопытаться решить нестандартную проблему, затем он выдает следующие типы ошибок:

Компиляция преобразования: тип «IDataReader» существует в обоих «System.Data, версия = 4.0.0.0, культура = нейтральная», PublicKeyToken = b77a5c561934e089 'and' netstandard, версия = 2.0.0.0, Culture = нейтральный, PublicKeyToken = cc7b13ffcd2ddd51 '

<#@ template debug="true" hostSpecific="true" language="C#" #>
<#@ output extension=".generated.cs" #>
<#@ assembly name="System.Core" #>
<#@ Assembly name="System.Data" #>
<#@ Assembly name="$(SolutionDir)PreTemplatingBin\Microsoft.Data.Sqlite.dll" #>
<#@ import namespace="System" #>
<#@ import namespace="System.Data" #>
<#@ import namespace="System.IO" #>
<#@ import namespace="System.Text.RegularExpressions" #>
<#@ import namespace="Microsoft.Data.Sqlite" #>

…

<#+
    private string GetSubNamespace(string connString)
    {
        return "My.Pretend.Namespace";
    }

    public static SqliteDataReader GetReader(string commandText, string connectionString, out Action cleanup)
    {
        var cnxn = new SqliteConnection(connectionString);
        var cmd = new SqliteCommand(commandText, cnxn);

        cnxn.Open();

        var reader = cmd.ExecuteReader();

        Action cleanup2 = null;
        cleanup2 += () => ((IDisposable)reader).Dispose();
        cleanup2 += () => ((IDisposable)cmd).Dispose();
        cleanup2 += () => ((IDisposable)cnxn).Dispose();

        cleanup = cleanup2;

        return reader;
    }
#>

Ожидаемый результат:

Я ожидаю, что смогучтобы гet .generated.cs будет с или без собственных синтаксических ошибок.

Фактический результат:

Ошибки преобразования DbCommand, DbConnection, DbDataReader со следующими сообщениями:

Преобразование компиляции: тип 'DbCommand' определен в сборке, на которую нет ссылок.Вы должны добавить ссылку на сборку 'netstandard, версия = 2.0.0.0, Culture = нейтральная, PublicKeyToken = cc7b13ffcd2ddd51'

...