10

我有一个 Windows 应用商店应用程序,它使用带有 T4 模板的可移植类库。当我运行转换时,它失败并出现以下错误:

Compiling transformation: The type 'System.Object' is defined in an assembly 
that is not referenced. You must add a reference to assembly 'System.Runtime,
Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a'.

我尝试手动添加对 System.Runtime 库的引用,但收到消息“组件已被构建系统自动引用”

同一个库可以在 Silverlight 项目和 Windows Phone 项目中使用。

有谁知道问题出在哪里?

我是开发 Windows Store 应用程序的新手,所以这可能是一些微不足道的错误,但我找不到任何解决方案。

4

2 回答 2

4

概括:

要解决这个确切的问题,只需将以下内容添加到 T4 模板的顶部:

<#@ assembly name="System.Runtime" #>

长答案:

T4 模板是一个编译时概念,因此在构建堆栈(即 .NET Framework 4.5)的上下文和框架中运行,而不是在宿主项目的上下文中,因此修改 Store 项目以添加对 System.运行时不会有帮助。

相反,您应该做的是通过模板本身告诉 T4 引用。对于使用 MSBuild 的工具,这通常会自动处理,但是,T4 基本上直接调用编译器,因此需要手动告知每个可移植参考程序集。

当您开始在可移植库中编写真正的代码时,您会很快发现需要添加更多引用;基本上,%PROGRAMFILES(x86)%\Reference Assemblies\Microsoft\Framework.NETFramework\v4.5\Facades 下的每个程序集。如果您在很多模板中执行此操作,我建议创建一个包含上述文件夹中每个文件的汇编指令的包含模板。

于 2013-07-30T20:50:02.477 回答
1

就我而言(Xamarin Studio),解决方案是进行干净的构建。

于 2014-03-11T03:00:15.997 回答