0

我正在尝试在我正在编写的项目中简化 T4 生成的使用,不幸的是,该项目必须针对客户的 .NET 2.0,但我似乎无法避免使用 FCL 4.0 库或找到 VS 将让我从一个针对 2.0 的程序集中访问针对 4.0 的程序集中的类型。

这个想法是声明一个T4Attribute可用于装饰消费项目中的部分类型。然后 T4 将根据属性的详细信息生成该类型的额外代码。例如,标准 dispose 模式的大部分样板部分都可以通过使用单行属性装饰添加到类型中。

我正在派生自己的自定义TextTransformation来支持这一点,但由于我有 VS2010,我无法安装 VS2005/8 SDK,只有 VS2010 一个,这意味着TextTransformation我使用的是 .NET 4.0 DLL(Microsoft.VisualStudio .TextTemplating.10.0)。因此,该属性位于同一个 DLL 中,当我尝试从使用项目中引用该 DLL 时,它只能看到两者都针对相同框架版本的类型。一旦项目是 2.0 并且库是 4.0,VS 就不再找到引用的类型或命名空间。

我猜它认为由于应用程序将启动 CLRv2 以运行,它无法在 v4 DLL 中运行代码(可能使用dynamic等)。很公平,但实际上库中的类型只会在开发 PC 上通过 T4 模板扫描项目以查找那些T4Attribute告诉它生成代码的人 - 我假设 VS2010 中的 T4 引擎在 CLRv4 下运行。这些属性甚至不会被编译到发布版本中。

我仍然处于学习曲线的底部。我做错了吗,有没有更简单的方法,如果没有,有没有办法解决我的问题?尽管 VS 版本错误,我能否以某种方式获得较旧的 VisualStudio DLL?

4

1 回答 1

2

创建两个装配体。首先,以 .NET 2.0 为目标来定义您描述的 T4Attribute,其次,以 .NET 4.0 为目标来定义自定义 TextTransformation。这样,您可以从产品代码和第二个程序集中引用第一个程序集以进行代码生成。

于 2013-01-04T02:28:29.453 回答