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