2010-01-11 124 views
1
T4模板

我期待在共享.NET 3.5和Silverlight 3共享Silverlight和.NET之间

之间我的类库代码,因为我主要是开发.NET,我在看Silverlight项目文件来自相应的.NET项目文件。

因此,我有一个T4文件,它抱怨在Silverlight与以下错误消息:

错误1个编译变换:类型或命名空间名称CompilerError'不命名空间中的“系统存在。 CodeDom.Compiler'(你是否缺少程序集引用?)

错误2编译转换:类型'System.CodeDom.Compiler.CompilerErrorCollection'是在未引用的程序集中定义的。 您必须添加对程序集“System,Version = 2.0.0.0,Culture = neutral,PublicKeyToken = b77a5c561934e089”的引用。

错误3编译变换:“System.CodeDom.Compiler.CompilerErrorCollection”不包含对“添加”的定义和没有扩展方法“添加”接受类型“System.CodeDom.Compiler.CompilerErrorCollection”的第一个参数可以找到(您是否缺少使用指令或程序集引用?)

我的重点显示我缺少对System.dll的引用。

如果我添加下列行:

<#@ assembly name="System" #> 

然后,.NET项目抱怨有:

错误1编译变换:具有相同标识“系统的组件,版本= 2.0。 0.0,Culture = neutral,PublicKeyToken = b77a5c561934e089'已被导入。尝试删除其中一个重复的参考。

看起来我只需更改构建Silverlight项目的代码,以便它只添加生成的.cs文件并将.tt文件保留。

还是有什么我可以做,这将使编译器都快乐?

这是我.TT文件的开头:

<#@ template language="C#v3.5" #> 
<#@ assembly name="System.Core" #> 
<#@ assembly name="System" #> 
<#@ output extension=".Designer.cs" #> 
<#@ import namespace="System.Linq" #> 
<#@ import namespace="System.Collections.Generic" #> 

回答

2

如果你需要的是确保你的T4从Silverlight项目工作,你可以很容易地通过添加以下行来问T4做到这一点主机加载正确System.dll中

<#@ assembly name="C:\Windows\Microsoft.NET\Framework\v2.0.50727\System.dll" #> 

在这里看到这些详细后

http://msmvps.com/blogs/theproblemsolver/archive/2009/03/24/getting-t4-templates-to-work-with-silverlight.aspx

希望这会有所帮助

+0

谢谢,这似乎比“系统”更好地工作。 – 2010-01-12 07:23:36

相关问题