1

我正在考虑在 .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”的定义,并且找不到接受“System.CodeDom.Compiler.CompilerErrorCollection”类型的第一个参数的扩展方法“Add”(是您缺少 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" #>
4

1 回答 1

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

希望这可以帮助

于 2010-01-12T06:11:55.707 回答