【问题标题】:The type 'System.Object' is defined in an assembly that is not referenced - Windows Store Application“System.Object”类型是在未引用的程序集中定义的 - Windows 应用商店应用程序
【发布时间】:2013-06-28 17:54:57
【问题描述】:

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

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 应用商店应用程序的新手,所以可能是一些小错误,但我找不到任何解决方案。

【问题讨论】:

  • 很遗憾,我无法重现您的错误。也许您至少可以分享您的 T4 模板的标题部分?您是否尝试过在模板中添加对 System.Runtime 程序集的引用(通过 指令),因为模板使用的引用独立于其包含项目使用的引用。

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


【解决方案1】:

总结:

要解决这个确切的问题,只需将以下内容添加到 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,其中包含上述文件夹中每个文件的汇编指令。

【讨论】:

    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 2014-08-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-12-22
      • 1970-01-01
      • 2013-07-21
      相关资源
      最近更新 更多