我正在考虑在.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" #>
答案 0 :(得分:2)
如果您需要确保您的T4可以从Silverlight项目中运行,您可以通过添加以下行来轻松地执行此操作,以请求T4主机加载正确的System.dll
<#@ assembly name="C:\Windows\Microsoft.NET\Framework\v2.0.50727\System.dll" #>
请在此处查看此详细信息
希望这有帮助