2013-06-28 100 views
10

我有一個使用可移植類庫和T4模板的Windows應用商店應用程序。當我運行轉換失敗,出現以下錯誤:類型'System.Object'在未引用的程序集中定義 - Windows Store應用程序

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

不幸的是,我無法重現您的錯誤。也許你可以共享至少T4模板的標題部分?您是否已嘗試在模板內添加對System.Runtime程序集的引用(通過<#@ assembly#>指令),因爲模板使用的引用與其包含的項目使用的引用無關。 – Nico

回答

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

在我的情況下(Xamarin Studio),解決方案是做一個乾淨的構建。

相關問題