我正在尝试在我正在编写的项目中简化 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?