Отсутствующие сборки в T4 становятся адом GAC?

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

Ошибка 1. Преобразование компиляции: тип > 'Microsoft.SqlServer.Management.Sdk.Sfc.ISfcValidate' определен в сборке, на которую > не ссылаются. Вы должны добавить ссылку на сборку >'Microsoft.SqlServer.Management.Sdk.Sfc, Version=10.0.0.0, Culture=neutral, >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"

person Reb.Cabin    schedule 01.04.2011    source источник
comment
На всякий случай: не просто копируйте файлы в c:\windows\assembly, они должны быть зарегистрированы с помощью gacutil.exe. Перечисленные вами сборки уже находятся в GAC на моей машине, предположительно из установки VS2010.   -  person Hans Passant    schedule 01.04.2011


Ответы (4)


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

person GarethJ    schedule 01.04.2011

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

‹#@ имя сборки="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();
#>
person Kris    schedule 06.04.2011

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

<#@ 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();
#>
person Carolina    schedule 13.08.2015

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

person Mass Dot Net    schedule 21.11.2016