我正试图在我正在编写的一个项目中使用T4代产品,但不幸的是它必须针对客户的.NET 2.0,但我似乎无法避免使用FCL 4.0库或找到一种方法VS会允许我从一个目标2.0访问4.0中的类型,目标是4.0。如何从.NET 2.0程序集间接使用FCL 4.0代码?
这个想法是声明一个T4Attribute
,它可以用来装饰消耗项目中的部分类型。然后T4根据属性的细节生成该类型的额外代码。例如,标准配置模式的大多数样板部分都可以通过使用单行属性修饰添加到某个类型。
我得出自己的自定义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
等)。但是实际上,图书馆中的类型只能在开发人员的电脑上才能看到,并通过T4模板扫描项目中的T4Attribute
来告诉它生成代码 - 我假设VS2010中的T4引擎运行在CLRv4下。这些属性甚至不会编译到发布版本中。
我仍然处于学习曲线的底部。我做错了吗,有没有更简单的方法,如果没有,是否有解决我的问题的方法?尽管有错误的VS版本,我能以某种方式获得较旧的VisualStudio DLL吗?
更新一个*八年以前的版本的框架是一个简单易行的解决方案。在一家陷入困境的公司中努力创新是困难的,因为在这里你无法获得帮助。看看事业。 –
修改以澄清对v2.0的需求是由于客户端的限制。我猜测问题不在于我的目标是_obsolete_.NET版本,而是我的目标版本早于安装的VS SDK的版本。 –
一个想法;它有助于指定在模板指令中使用的C#版本吗? http://www.olegsych.com/2008/02/t4-template-directive/ – FuleSnabel