2009-07-03 12 views
12

すでに.NET 3.5アセンブリを構築しているプロジェクトがあるとしましょう。今度はSilverlight用にこのアセンブリを作成し、最小限の努力でSilverlightバージョンを維持したいと考えています。.NET 3.5とSilverlightの両方をターゲットにする

許容何ではありません:私はSilverlightのいずれかをターゲットにすることができ、カスタムディレクティブを追加

  • :Silverlightの別のプロジェクトを作成

    • は許容何ですか

    を構築または。 MSBuildプロパティ。

  • Silverlightの特別なビルド構成の追加
  • #ifdef Silverlight/#endifセクションをソースコードに追加します。
  • 一般に、.csproj/.csの他の変更。

基本的に1つのプロジェクトを維持したいと思いますが、2つのフレームワークを対象にしています。 2つの別々のプロジェクトを維持したくないのです。これは、新しいファイルを含めるのを忘れるなどの間違いにつながる可能性があるからです。プロジェクトやビッグチームが多い場合は、そのような間違いを排除することが非常に重要です。

これが完全に不可能な場合は、同様の利点を提供する解決策はすべて許容されます。

+0

質問は不明です。アセンブリを作成し、そのアセンブリのメソッドなどをSilverlightアプリケーションで使用したいですか? Silverlightでのあなたの実際の作業のほとんどは、Webサービスとの通信を介して行われるため、問題があるかどうかはわかりません。おそらく階層化の問題がありますか?つまり、それらの間に明確な定義がない層があることを意味します。 – jcollum

+1

Silverlightは.NET 3.5です。私はあなたがSilverlightとWPFを意味すると信じています。また、この質問に非常に似ています:http://stackoverflow.com/questions/208123/what-is-the-best-practice-for-compiling-silverlight-and-wpf-in-one-project –

+1

Silverlightはです。 NET 3.5?あなたが今言ったように、そのプロジェクトは異なるmscorlibを参照しているので、不可能と思われます。さらに、それは完全に異なる実行プラットフォームです。 –

答えて

8

また、Silverlightプロジェクトからプロジェクト内のファイルへのリンクを排除しましたか? Silverlightと完全なCLRの間で実装を共有するのは、かなり一般的なアプローチです。 Sharing Code Between .NET and Silverlight Platforms

また、Justin Angelによれば、完全なCLRからSilverlightクラスライブラリを参照して使用することができます。私はこれを自分で試したことはありませんが、それは未解決の問題を残していますが、シナリオを単純にしています:http://silverlight.net/blogs/justinangel/archive/2008/12/29/using-silverlight-dlls-on-the-desktop.aspx

+0

元のプロジェクトとSilverlightプロジェクトのリンク(または少なくともそこにあるリンク)を自動的に同期させるためのツールはありますか? –

+1

プリズム(http://compositewpf.codeplex.com/Release/ProjectReleases.aspx?ReleaseId=19170)には、プロジェクトリンカーがあります。概要:http://www.global-webnet.net/blogengine/post/2009/01/10/Project-Linker-sharing-single-code-base-between-Silverlight-and-Desktop-applications.aspx – OdeToCode

+0

素晴らしい - もしあれば、私は他の答えを待つでしょう。今のところそれは私が持っている最高の選択肢だと思われます... –

0

mscorlibの参照が2つのプラットフォームで異なるため、2つのプロジェクトが必要です。

この質問チェックアウト:あなたがしたいすべてが、私は二つのプロジェクト(Silverlightの1、定期的に1つ)を作成する提案、両者の間で共有定期的に古い.NETライブラリを持っている場合はhttp://www.google.ca/search?hl=en&q=targetting+silverlight+and+wpf&meta=&aq=f&oq=

をし、両方のプロジェクトに同じファイルが含まれています。他の開発者にとってこれははるかに理解しやすくなります。

+0

必要なオプションを無効にすることはできますか?条件= "'$(SilverlightBuild)'!= ''"? –

+1

できます。しかし、それらは2つのプロジェクトファイルに組み込まれているため、必要はありません。 各.csproj#はSLまたはWPFまたはNET35を定義します。各csprojには、必要なファイル/ libが含まれています。また、ファイルをリンクしないで、csprojを同じディレクトリに置き、単に "Add - > Existing Item"とします。 – Ray

+0

「私は無効にできますか?」ということは、「MSBuild Condition属性を使用して1つのプロジェクトを維持できますか? –

1

私はScottと同意します。自分自身に苦痛をたくわえます。同じコードベースを共有している2つのプロジェクトが進められています。両方の環境でVStudioを使用したり、さまざまなライブラリを使用したり、ファイルを組み込んだりするなど、多くのことを簡単に行うために必要です。

2つのプロジェクトを持つ理由遠くは1つの理由があります。

+0

私のコメントをScottの投稿に読んでください。 –

0

これは適切に階層化されていると思います。 Silverlightコードは、UIおよびバックエンドWCFサービスとの通信にのみ使用する必要があります。これらのサービスは、.NET 3.5コード(共有したいコード)を実行します。そうすれば、あなたは共有とn層も持っています。

Silverlightコードのクライアント側で重い計算を行い、それをサーバー(おそらくdb)に送信すると、セキュリティホールが開けてしまうと思います。

別のプロジェクトでSilverlightプロジェクトのコードにアクセスする必要がある理由はありません。

+0

私はSilverlight \ RIAアプリケーションのアーキテクチャについて知っています。私は必要なものを正確に知っているので、質問しています。アドバイスは一般的には良いですが、ここではそれはまったく合っていません。 –

+0

クライアントで重い計算を行う理由はたくさんあります。私はいくつかのデータ(1MBと言う)をローカルに並べ替えたいと考えています。私はすでにそれをクライアントに渡しました。ソートのコストはソートされたデータをサーバーから直接取得するコストよりもずっと小さいです。 –

+0

これは単なる例です。もう1つは、Paint.NETのようなプログラムです。この場合、多くのフィルタリング効果をローカルで処理する必要があります。 P.S. Silverlight 3.0ビットマップとGPUアクセラレーションについて教えてください。私はこれについて知っています。要するに、私は正確な答えが必要です。 –

1

MSDNマルチターゲットプラットフォームに関する詳細な情報が含まれています Multi-targeting on MSDN

関連する問題