2012-04-17 20 views
1

すべてのプロジェクトにリンクされたグローバルファイルを持つソリューションにポータブルクラスライブラリを追加しました。このグローバルファイルには、バージョン、カルチャ、およびCOM可視性などのアセンブリレベル属性が含まれています。私が解決したい問題は、ComVisibleのようないくつかの属性がPCLのコンテキストでは有効でないため、ビルド時にその属性が含まれないように#ifで使用されていたシンボルはありますか?プリプロセッサディレクティブで使用できる移植可能なクラスライブラリをコンパイルするときに記号があります

答えて

1

私は彼らのFCLの対応を模倣する、コンパクトなフレームワークプロジェクトにスタブ/ダミー属性クラスを追加することによって、この問題を克服:今すぐ共有ソースコードファイルがコードにそのまま両方のプロジェクトでコンパイルします

// Shared source file 
[ComVisible(true)] 
public class Foo 
{ 
} 

// Dummy class in portable project -- exists only to facilitate compilation of the shared source file 
namespace System 
{ 
    [AttributeUsage(AttributeTarget.Class)] 
    public class ComVisibleAttribute : Attribute 
    { 
     public ComVisibleAttribue(bool visible) 
     { 
      // Dummy implementation 
     } 
    } 
} 

プリプロセッサディレクティブは一切使用しないでください。

+0

箱の外で考えてくれてありがとう!これも実行可能な解決策です。 – Tedford

+0

@MattDaveyパーティーに遅れて申し訳ありませんが、これはお勧めの解決策ではないと思います(私が間違っている場合は修正してください)。 'ComVisibleAttribute'はPCLでは利用できませんが、ほとんどのターゲットで利用可能です*。したがって、特定のターゲット(たとえば.NETアプリケーション)内でPCLを使用する場合はいつでも、名前の衝突が発生します。私はあなたが 'TypeForwardedToAttribute'を使ってこの問題を回避することができると思いますが、私はこれを自分でやっている経験はありません。 –

3

ビルドプロパティ内に独自のプリプロセッサシンボルを設定できます。携帯用のクラスライブラリの場合、デフォルトので特定のものがあるかどうかはわかりませんが、プロジェクトの各設定で1つを指定することは難しくありません。

+0

ありがとうございましたJon、私は組み込みを探していましたが、これは意味があり、時間を節約します! – Tedford