首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >T4模板:导入宿主程序集中的命名空间

T4模板:导入宿主程序集中的命名空间
EN

Stack Overflow用户
提问于 2013-04-13 07:19:15
回答 2查看 10.1K关注 0票数 6

全,

我有一个T4模板

代码语言:javascript
复制
<#@ template debug="true" hostSpecific="true" #>
<#@ output extension=".cs" #>
<#@ Assembly Name="System.Core" #>
<#@ Assembly Name="System.Windows.Forms" #>
<#@ import namespace="System" #>
<#@ import namespace="System.IO" #>
<#@ import namespace="System.Diagnostics" #>
<#@ import namespace="System.Linq" #>
<#@ import namespace="System.Collections" #>
<#@ import namespace="System.Collections.Generic" #>
<#@ import namespace="MyLibrarysRootNameSpace.SomeNamespace" #>
/*Rest of template follows*/

我正在尝试导入最后一行,以便在其他项目中轻松重用此模板,但我似乎遗漏了一些东西。我正在尝试做的事情是可能的吗?如果是这样的话,是怎么做的?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-04-16 01:17:56

Import只是添加了一条using语句,它不引用程序集。T4的引用程序集集与托管模板的项目完全分离。

如果你想引入宿主项目的程序集,那么你需要一个程序集指令来实现。类似于以下内容:

<#@程序集name="$(TargetPath)“#>

请注意,您在这里引入了一个构建循环,因此在生成DLL之前,项目将需要手动干预才能进行构建,因此请确保您只生成可选的部分,或者始终使用以前的签入版本。

票数 10
EN

Stack Overflow用户

发布于 2013-04-13 08:36:59

如果我没理解错你的问题:

复制-粘贴前两个代码片段from there,以获取包含T4的项目的EnvDTE对象模型:

代码语言:javascript
复制
<#@ assembly name="EnvDte" #>
<#
    var visualStudio = ( this.Host as IServiceProvider )
        .GetService( typeof( EnvDTE.DTE ) ) as EnvDTE.DTE;
    var project = visualStudio.Solution
        .FindProjectItem( this.Host.TemplateFile )
        .ContainingProject as EnvDTE.Project;
#>

然后,使用the method from there获取该项目的默认命名空间:

代码语言:javascript
复制
// project is of type: EnvDTE.Project
string strDefaultNamespace = project.Properties.Item( "DefaultNamespace" )
    .Value.ToString();

然后,按您喜欢的方式使用strDefaultNamespace值。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/15982351

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档