全,
我有一个T4模板
<#@ 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*/我正在尝试导入最后一行,以便在其他项目中轻松重用此模板,但我似乎遗漏了一些东西。我正在尝试做的事情是可能的吗?如果是这样的话,是怎么做的?
发布于 2013-04-16 01:17:56
Import只是添加了一条using语句,它不引用程序集。T4的引用程序集集与托管模板的项目完全分离。
如果你想引入宿主项目的程序集,那么你需要一个程序集指令来实现。类似于以下内容:
<#@程序集name="$(TargetPath)“#>
请注意,您在这里引入了一个构建循环,因此在生成DLL之前,项目将需要手动干预才能进行构建,因此请确保您只生成可选的部分,或者始终使用以前的签入版本。
发布于 2013-04-13 08:36:59
如果我没理解错你的问题:
复制-粘贴前两个代码片段from there,以获取包含T4的项目的EnvDTE对象模型:
<#@ 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获取该项目的默认命名空间:
// project is of type: EnvDTE.Project
string strDefaultNamespace = project.Properties.Item( "DefaultNamespace" )
.Value.ToString();然后,按您喜欢的方式使用strDefaultNamespace值。
https://stackoverflow.com/questions/15982351
复制相似问题