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

Luk*_*brt 10 t4 portable-class-library windows-store-apps

我有一个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'.
Run Code Online (Sandbox Code Playgroud)

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

同一个库可以在Silverlight项目以及Windows Phone项目中使用.

有谁知道问题出在哪里?

我是开发Windows应用商店应用程序的新手,所以它可能是一些微不足道的错误,但我无法找到任何解决方案.

Dav*_*ean 4

概括:

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

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

长答案:

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

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

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