14

いくつかの標準型 (最初は文字列) の拡張メソッドを実装する小さな Windows クラス ライブラリを作成しました。これをライブラリに配置したので、これを参照して XXX.Extensions を使用して追加するだけで、どのプロジェクトでも使用できるようになりました。

これらのメソッドのいくつかを Silverlight で使用しようとしたときに、問題が発生しました。すべてのコードは互換性がありましたが、Silverlight では Windows ライブラリを参照できないため、同じクラス ファイルへのリンクを持つ Silverlight ライブラリを作成し、コンパイラ ディレクティブをクラスに配置して、さまざまな using 宣言と名前空間を許可しました。Windows 拡張機能ライブラリに新しいクラスを追加した今日まで、これは問題なく機能していましたが、クラスを Silverlight ライブラリにもリンクすることを覚えておく必要があることに気付きました。

これは理想的ではなく、Windows プロジェクトと Silverlight プロジェクトの間で拡張メソッドやその他のヘルパー コードを共有するためのより良い方法について誰かアイデアを持っているのではないかと思いました。

4

6 に答える 6

14

Silverlight アセンブリから通常の .NET アセンブリへの参照を設定することはできませんが、その逆は可能です。

そのため、共有 Silverlight アセンブリを作成し、そのアセンブリにコードを追加します。これで、通常の .NET アセンブリと他の Silverlight アセンブリの両方から共有 Silverlight アセンブリへの参照を設定できるようになりました。

制限は、.NET と Silverlight CLR の両方で動作するコードのみをそこに入れることができるということですが、それはコードを共有することと同じです。

于 2009-01-21T16:01:30.923 に答える
8

この質問への回答が得られたため、Microsoft の新しいソリューションであるPortable Class Librariesがあります。これが彼らがそれを発表したブログ投稿です。

Silverlight と私が書いているいくつかのサーバー側コードの間でコードを共有するために、彼らと一緒にいじり始めようとしているので、現時点ではリンクを超えて多くを追加することはできません.

于 2011-07-13T10:35:19.543 に答える
3

Silverlightランタイムは、通常の.NETランタイムとは異なります。したがって、複数のプラットフォーム間でコードを共有するには、プロジェクトレベルでトリックを実行する必要があります。

AutofacIoCコンテナに対してこれを行った方法は次のとおりです。

このアプローチでは、対象となるプラットフォームごとに異なるプロジェクトを作成する必要はありません

PS: SilverlightプロジェクトとWPFプロジェクトをリンクできる(複数のプロジェクトを作成する)CompositeWPFのプロジェクトリンカーツールもあります。しかし、それは厄介に見えます。

于 2009-01-21T14:18:43.783 に答える
2

これを試してくださいhttp://buildassilverlight.codeplex.com/

于 2010-07-13T19:37:04.937 に答える
2

XNAプロジェクトにも同様の問題があります。複数の異なるプラットフォームをターゲットにできるため、異なるプロジェクトが必要です。これは、プロジェクトが参照する基本クラス ライブラリがプラットフォーム固有であるため、プロジェクトを 1 つだけにすることはできないためです。

興味がある場合は、このブログから少しの洞察を得ることができます。

ソースを別のプラットフォーム用に再コンパイルするには、別のプロジェクトが必要です。この理由は、プロジェクトが XNA Framework と基盤となる .NET Framework の両方で異なるアセンブリを参照する必要があり (Xbox 360 と Zune は .NET Compact Framework を使用します)、C# プロジェクトは、XNA Framework の異なるアセンブリの参照をサポートしていないためです。異なるプラットフォーム。

于 2009-01-21T14:14:14.153 に答える
0

.Net で Silveright クラス ライブラリを参照するときに、依存関係の問題がいくつかありました。

Visual Studio 2010 と WCF RIA 1.0 を使用する場合の別の方法:

  • 通常の .Net ライブラリ アセンブリを作成します。
  • Silverlight クラス ライブラリを作成します。アセンブリの構成で、最初の .NET ライブラリを「WCF RIA サービス リンク」として指定します。
  • コードを "ClassName.shared.cs" ファイルとして .NET ライブラリに入れます。
  • WCF RIA は、Silverlight アセンブリへのファイルのコピーを処理します。
于 2010-08-16T11:35:51.940 に答える