在Silverlight和.NET之间共享T4模板

时间:2010-01-11 09:58:47

标签: c# .net silverlight sharing

我正在考虑在.NET 3.5和Silverlight 3之间共享我的类库代码。

由于我主要是为.NET开发,所以我正在考虑从相应的.NET项目文件中自动生成Silverlight项目文件。

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

  

错误1编译转换:名称空间'System.CodeDom.Compiler'中不存在类型或命名空间名称'CompilerError'(您是否缺少程序集引用?)

     

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

     

错误3编译转换:'System.CodeDom.Compiler.CompilerErrorCollection'不包含'Add'的定义,也没有扩展方法'Add'接受'System.CodeDom.Compiler.CompilerErrorCollection'类型的第一个参数可能是发现(您是否缺少using指令或程序集引用?)

我强调的是我错过了对System.dll的引用。

如果我添加以下行:

<#@ assembly name="System" #>

然后.NET项目抱怨:

  

错误1编译转换:已导入具有相同标识“System,Version = 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" #>

1 个答案:

答案 0 :(得分: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

希望这有帮助