我有一个定义类
的库namespace ClassLibrary1
{
public class Class1
{
public static readonly int Rate = 5;
}
}
在同一个lib中我添加了一个tt文件
<#@ template debug="false" hostspecific="false" language="C#" #>
<#@ output extension=".cs" #>
<#@ import namespace="ClassLibrary1" #>
<#@ assembly name="ClassLibrary.dll" #>
enum MilkRate{ Walmart=<#= Class1.Rate #>}
我收到错误“编译转换:无法找到元数据文件'ClassLibrary.dll'd:\ documents \ visual studio 10 \ Projects \ ConsoleApplication2 \ ClassLibrary1 \ TextTemplate1.tt”
如何解决这个问题?
[在VS 2010,VS2008上发生]
答案 0 :(得分:1)
我不确定这是否可行。
我认为我可能遇到的问题是:您的模板生成的代码会更改它引用的dll!
您可以做的一件事是使用以下模板引用另一个模板:
<#@ include file="Helper.tt" #>
通过这种方式,您可以在一个中央模板中定义Rate = 5
,并让其他所有内容参考。您甚至可以构建一个模板来生成Class1
类,以便将所有内容保存在一个中心位置。
我知道这并没有直接回答你的问题,但我希望它有用。
答案 1 :(得分:1)
你可以做到这一点,但这种“递归”工作方式存在问题需要小心。
在VS2010中,您可以在&lt;#@ assembly#&gt;中使用VS宏变量,$(SolutionDir),$(ProjectDir)和朋友。指令,例如
&lt;#@ assembly name =“$(ProjectDir)$(OutDir)ClassLibrary.dll”#&gt;
如果你有一个开发人员从源代码控制中做一个干净的获取,他们必须先做一个构建才能进行工作转换。
如果他们先变换,变换将失败,然后他们的构建将失败并且他们将被卡住并且必须恢复文件。这没什么大不了的,但它可以绊倒。
答案 2 :(得分:0)
您是否尝试过http://social.msdn.microsoft.com/Forums/en-US/vsx/threads上的VS Extensibility论坛?