我们刚刚将我们的主要项目从Visual Studio 2008切换到2010年。我希望一切顺利,就像我之前转换过的所有其他东西一样,但不是这个的情况......
该项目有一个T4模板,它读取带有正则表达式的xml文件,并将它们编译为我们的解决方案中包含的dll(使用Regex.CompileToAssembly)。转换解决方案后,生成的dll将4.0作为目标,因此无法从我们的3.5(2.0运行时)项目中引用它。
我试过这个没有成功:
<#@ template language="C#v3.5" hostspecific="true" #>
<#@ assembly name="System.Core, Version=3.5.0.0" #>
有什么想法吗?
答案 0 :(得分:2)
听起来你真的使用T4作为一种脚本运行器,而不是从模板系统本身生成输出。相反,您将显式生成输出作为程序集。
VS2010中的T4总是使用4.0运行时/ clr进行编译,似乎没有办法让RegEx.Compile方法吐出2.0程序集。
即使您将RegEx.Compile移动到为目标2.0构建的帮助程序库中,然后在加载到4.0 CLR时,它也会统一到4.0版本。
相反,你需要一种方法将2.0 CLR放入内存,到目前为止最简单的方法是将模板代码移动到自己的exe中。
然后,您可以从自定义项目预构建规则中调用此exe。