“System.Object”类型在未引用的程序集中定义 - Windows应用商店应用程序

时间:2013-06-28 17:54:57

标签: windows-store-apps t4 portable-class-library

我有一个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应用商店应用的新手,因此可能会出现一些微不足道的错误,但我无法找到任何解决方案。

2 个答案:

答案 0 :(得分:4)

<强>要点:

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

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

答案很长:

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

相反,你应该做的是通过模板本身告诉T4关于引用。这通常是针对使用MSBuild的工具自动处理的,但是,T4基本上直接调用编译器,因此需要手动告知每个便携式参考组件。

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

答案 1 :(得分:1)

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