Visual Studio 2010升级后生成(通过T4模板)DLL运行时不兼容

时间:2011-03-10 11:02:08

标签: c# t4

我们刚刚将我们的主要项目从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" #>

有什么想法吗?

1 个答案:

答案 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。