2013-05-15 34 views
4

我有一個可移植的庫,用於Windows Phone 7.1及Windows Store應用程序(用於WinRT),它使用.net 4.5框架。在便攜式庫中使用CallerMemberName屬性

我想使用新的[CallerMemberName]屬性。然而,VS2012告訴我,這個屬性在我的便攜庫中不可用(這看起來很正常,因爲它在WP7.1項目中不可用)。

然而,我發現,我可以創建自己的屬性和編譯器會明白它像真正的一個,使用此片段:

namespace System.Runtime.CompilerServices 
{ 
    [AttributeUsage(AttributeTargets.Parameter, Inherited = false)] 
    public sealed class CallerMemberNameAttribute : Attribute { } 
} 

然而,一旦嘗試編譯它,我收到錯誤The type 'System.Runtime.CompilerServices.CallerMemberNameAttribute' exists in both 'Portable.dll' and 'mscorlib.dll'

我瞭解該消息,但我想知道在我的便攜庫中是否有一種方法可以使用[CallerMemberName]?我可能錯過了一些東西。

回答

5

使用爲舊版本提供這些屬性的BCL Portability Pack

此包使針對.NET Framework 4中,Silverlight的4和5,和Windows Phone 7.5(包括任何移植的庫組合)使用來自更高版本的.NET的新類型,包括項目:

  • CallerMemberNameAttribute

  • CallerLineNumberAttribute

  • CallerFilePathAttribute

  • ...

+0

我寧可不使用外部庫(尤其是剛爲)。如果他們設法做到這一點,我想我也可以。我無法找到源代碼,所以我想這不是一個開源項目...:/無論如何。 –

+0

@Ashen:你可以自己聲明屬性 - 但是你需要考慮類型重定向的所有方面。微軟已經專門提供這個軟件包來解決這類問題。這感覺對我來說是一個相當合理的依賴... –

+0

確實。它也增加了任務,這很好:) –