Пропавшие сборки в Т4 превращаются в ад GAC? - PullRequest
0 голосов
/ 01 апреля 2011

Я пытался следовать учебным пособиям Олега Сыча на T4 http://www.olegsych.com/2008/09/t4-tutorial-creatating-your-first-code-generator/, kinduva "Привет, северный ветер!" но сразу же на втором шаге (внизу) я получил десять «отсутствующих сборок», подобных этой

Ошибка 1 Преобразование компиляции: тип> 'Microsoft.SqlServer.Management.Sdk.Sfc.ISfcValidate' определен в сборке, на которую> нет ссылки. Необходимо добавить ссылку на сборку> 'Microsoft.SqlServer.Management.Sdk.Sfc, версия = 10.0.0.0, культура = нейтральная,> PublicKeyToken = 89845dcd8080cc91'.

Я убедился, что все сборки сервера sql из (список ниже) находятся в% windir% \ assembly (я думаю, что это GAC), но ничего хорошего. Я добавил сборки в проект visual-studio; не хорошо. Полагаю, единственное, что я могу сделать, это добавить абсолютные пути к сборкам, но это УЖАСНОЕ решение, поскольку я не могу поделиться этим решением с программистами, у которых нет абсолютно одинаковых абсолютных путей. Любые идеи, как это исправить, пожалуйста и спасибо?

<#@ template language="C#" #>
<#@ output extension="SQL" #>
<#@ assembly name="Microsoft.SqlServer.ConnectionInfo" #>
<#@ assembly name="Microsoft.SqlServer.Smo" #>
<#@ import namespace="Microsoft.SqlServer.Management.Smo" #>
<#
    Server server = new Server();
    Database database = new Database(server, "Northwind");
    Table table = new Table(database, "Products");
    table.Refresh();
#>
create procedure Products_Delete
    @ProductID int
as
    delete from Products
    where ProductID = @ProductID

Вот вещи, которые я положил в GAC

"C:\Program Files\Microsoft SQL Server\100\SDK\Assemblies\Microsoft.SqlServer.WmiEnum.dll"
"C:\Program Files\Microsoft SQL Server\100\SDK\Assemblies\Microsoft.ReportingServices.Interfaces.dll"
"C:\Program Files\Microsoft SQL Server\100\SDK\Assemblies\Microsoft.SqlServer.ConnectionInfo.dll"
"C:\Program Files\Microsoft SQL Server\100\SDK\Assemblies\Microsoft.SqlServer.ConnectionInfoExtended.dll"
"C:\Program Files\Microsoft SQL Server\100\SDK\Assemblies\Microsoft.SqlServer.Dmf.Adapters.dll"
"C:\Program Files\Microsoft SQL Server\100\SDK\Assemblies\Microsoft.SqlServer.Dmf.dll"
"C:\Program Files\Microsoft SQL Server\100\SDK\Assemblies\Microsoft.SqlServer.DmfSqlClrWrapper.dll"
"C:\Program Files\Microsoft SQL Server\100\SDK\Assemblies\Microsoft.SqlServer.Management.Collector.dll"
"C:\Program Files\Microsoft SQL Server\100\SDK\Assemblies\Microsoft.SqlServer.Management.CollectorEnum.dll"
"C:\Program Files\Microsoft SQL Server\100\SDK\Assemblies\Microsoft.SqlServer.Management.Sdk.Sfc.dll"
"C:\Program Files\Microsoft SQL Server\100\SDK\Assemblies\Microsoft.SqlServer.Management.Utility.dll"
"C:\Program Files\Microsoft SQL Server\100\SDK\Assemblies\Microsoft.SqlServer.Management.UtilityEnum.dll"
"C:\Program Files\Microsoft SQL Server\100\SDK\Assemblies\Microsoft.SqlServer.PolicyEnum.dll"
"C:\Program Files\Microsoft SQL Server\100\SDK\Assemblies\Microsoft.SqlServer.RegSvrEnum.dll"
"C:\Program Files\Microsoft SQL Server\100\SDK\Assemblies\Microsoft.SqlServer.ServiceBrokerEnum.dll"
"C:\Program Files\Microsoft SQL Server\100\SDK\Assemblies\Microsoft.SqlServer.Smo.dll"
"C:\Program Files\Microsoft SQL Server\100\SDK\Assemblies\Microsoft.SqlServer.SmoExtended.dll"
"C:\Program Files\Microsoft SQL Server\100\SDK\Assemblies\Microsoft.SqlServer.SqlEnum.dll"
"C:\Program Files\Microsoft SQL Server\100\SDK\Assemblies\Microsoft.SqlServer.SqlWmiManagement.dll"
"C:\Program Files\Microsoft SQL Server\100\SDK\Assemblies\Microsoft.SqlServer.SString.dll"

Ответы [ 4 ]

3 голосов
/ 01 апреля 2011

Вы можете ссылаться на сборки GACd, используя частичное строгое имя (т.е. пропуская ".dll"), например, используйте <# assembly name = "Microsoft.SqlServer.Management.Sdk.Sfc" #>

1 голос
/ 06 апреля 2011

Я получал ту же проблему, мое исправление добавляло

<# @ assembly name = "Microsoft.SqlServer.Management.Sdk.Sfc" #>

Это, похоже, работает дляя

Моя теперь выглядит так

<#@ template language="C#v3.5" hostspecific="True" debug="True" #>
<#@ output extension="SQL" #>
<#@ include file="T4Toolbox.tt" #>
<#@ assembly name="Microsoft.SqlServer.ConnectionInfo" #>
<#@ assembly name="Microsoft.SqlServer.Management.Sdk.Sfc" #>
<#@ assembly name="Microsoft.SqlServer.Smo" #>
<#@ import namespace="Microsoft.SqlServer.Management.Smo" #>
<#
    Server server = new Server(@"localhost\mssql2008");
    Database database = new Database(server, "BreakAway");
    Table table = new Table(database, "Contact");
    table.Refresh();
#>
0 голосов
/ 21 ноября 2016

Я столкнулся с подобной проблемой, пытаясь начать работать с T4. Добавление ссылки на пакет Microsoft.SqlServer.Scripting NuGet устранило проблемы, связанные со сборкой, с которыми я столкнулся.

0 голосов
/ 13 августа 2015

У меня была такая же проблема. Я мог бы решить это, добавив несколько сборок ...

<#@ template language="C#" Debug="true"#>
<#@ output extension="SQL" #>
<#@ assembly name="System.Xml" #>
<#@ assembly name="Microsoft.SqlServer.ConnectionInfo" #>
<#@ assembly name="Microsoft.SqlServer.Management.Sdk.Sfc" #>
<#@ assembly name="Microsoft.SqlServer.Smo" #>
<#@ import namespace="Microsoft.SqlServer.Management.Smo" #>
<#
    Server server = new Server(@"SQLInstanceName");
    Database database = new Database(server, "DBName");
    Table table = new Table(database, "Countries");
    table.Refresh();
#>
...