2013-06-28 37 views
10

Tôi có một Ứng dụng Windows Store sử dụng thư viện lớp di động với mẫu T4. Khi tôi chạy việc chuyển đổi nó không thành công với các lỗi sau:Loại 'System.Object' được định nghĩa trong một assembly không được tham chiếu - Ứng dụng 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'. 

Tôi cố gắng thêm tham chiếu đến thư viện System.Runtime bằng tay, nhưng tôi đã nhận thông báo "Các thành phần đã được tự động tham chiếu bằng cách xây dựng hệ thống"

Cùng một thư viện hoạt động trong một dự án Silverlight cũng như trong một dự án Windows Phone.

Có ai có ý tưởng về vấn đề ở đâu không?

Tôi mới trong việc phát triển các ứng dụng Windows Store, vì vậy nó có thể là một số lỗi nhỏ, nhưng tôi không thể tìm thấy giải pháp nào.

+0

Rất tiếc, tôi không thể tạo lại lỗi của bạn. Có lẽ bạn có thể chia sẻ ít nhất phần tiêu đề của mẫu T4 của bạn? Bạn đã thử thêm tham chiếu vào assembly System.Runtime bên trong khuôn mẫu (thông qua chỉ thị <# @ assembly #>), bởi vì các tham chiếu được sử dụng bởi một khuôn mẫu độc lập với các tham chiếu được sử dụng bởi dự án chứa của nó. – Nico

Trả lời

4

Tóm tắt:

Để giải quyết vấn đề này chính xác, chỉ cần thêm dòng sau vào phía trên cùng của T4 mẫu:

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

dài câu trả lời:

T4 mẫu là một khái niệm biên dịch-thời gian, và do đó chạy trong bối cảnh & khuôn khổ của ngăn xếp xây dựng (tức là .NET Framework 4.5), không phải trong bối cảnh của dự án máy chủ, do đó, sửa đổi dự án Store để thêm tham chiếu vào System.Runtime sẽ không giúp ích gì.

Thay vào đó, những gì bạn nên làm là cho T4 biết về tham chiếu thông qua chính khuôn mẫu đó. Điều này thường được xử lý tự động cho các công cụ sử dụng MSBuild, tuy nhiên, T4 về cơ bản gọi các trình biên dịch một cách trực tiếp và do đó cần được thông báo bằng tay về từng assembly tham chiếu di động.

Khi bạn bắt đầu viết mã thực trong thư viện di động, bạn sẽ nhanh chóng thấy rằng bạn cần thêm nhiều tham chiếu hơn; về cơ bản, mỗi assembly dưới% PROGRAMFILES (x86)% \ Tham chiếu Assemblies \ Microsoft \ Framework.NETFramework \ v4.5 \ Facades. Nếu bạn làm điều này trong rất nhiều mẫu, tôi khuyên bạn nên tạo một include template duy nhất có chứa chỉ thị lắp ráp cho mọi tệp trong thư mục ở trên.

1

Trong trường hợp của tôi (Xamarin Studio), giải pháp là thực hiện xây dựng sạch sẽ.

Các vấn đề liên quan