1

我有一个定义类的库

namespace ClassLibrary1
{
    public class Class1
    {
        public static readonly int Rate = 5;
    }
}

在同一个库中,我添加了一个 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 上]

4

3 回答 3

1

我不确定这是否可能。

我认为我可能遇到的问题是:您的模板正在生成将更改它所引用的 dll 的代码!

您可以做的一件事是让一个模板引用另一个模板,使用:

<#@ include file="Helper.tt" #>

通过这种方式,您可以Rate = 5在一个中央模板中定义并让其他所有内容都引用该模板。您甚至可以构建一个模板来生成您的Class1类,以便将所有内容都保存在一个中心位置。

我知道这并不能直接回答您的问题,但我希望它对您有所帮助。

于 2009-10-29T10:37:55.367 回答
1

您可以这样做,但这种“递归”的工作方式存在一些需要小心的问题。

在 VS2010 中,您可以在 <#@ assembly #> 指令中使用 VS 宏变量、$(SolutionDir)、$(ProjectDir) 和朋友,例如

<#@ 程序集名称="$(ProjectDir)$(OutDir)ClassLibrary.dll" #>

如果您随后让开发人员从源代码​​控制中进行干净的获取,则他们必须先进行构建,然后才能进行有效的转换。

如果他们先转换,转换将失败,然后他们的构建将失败,他们将被卡住并不得不恢复文件。这没什么大不了的,但它可能会绊倒人们。

于 2011-04-27T01:21:41.407 回答
0

您是否尝试过在http://social.msdn.microsoft.com/Forums/en-US/vsx/threads的 VS 可扩展性论坛上发帖?

于 2010-02-18T22:16:49.730 回答