マルチターゲティング
単一のプロジェクトから、複数のターゲットフレームワーク向けに1つのライブラリをビルドします。条件付きコンパイルと、APIの違いを吸収するフォールバックshimを使います。
「マルチターゲティング」はCoddyKit上の無料C# Academyレッスンです。 これはレッスン3/3です。 下記で完全なレッスンを無料で読むことができます。その後、ブラウザ内の組み込みコードエディタと24時間対応のAIチューターでハンズオン演習できます。 これはC# Academy学習パスの一部であり、ウェブとCoddyKitアプリ全体で進捗が同期されます。 C# Academyコースには全3レッスンが含まれています。
概念とメリット
目標: 複数のプラットフォームで動作する1つのパッケージを提供します。
- 1つのプロジェクトから複数のバイナリを生成します
- 利用者は最適なアセンブリを自動的に取得できます
- APIが異なる場合は、小さな#ifガードを使用します
アセット選択の基本
- パッケージにはターゲットごとのフォルダーが含まれます(例: lib/net45、lib/netstandard2.0)
- NuGetは最も近い互換性のあるアセットを選択します
- 公開APIは一貫性を保ち、差異は内部コードだけにとどめます
条件付きコンパイルのデモ
小さな#ifブロックを使用して実装を変えます。公開メソッドのシグネチャは同一に保ってください。
#define NET45 // simulate building for different targets
// #define NETSTANDARD2_0
using System;
public class Program
{
public static void Main(string[] args)
{
Console.WriteLine("Target: " + TargetName());
}
// Public API: stays the same across targets
public static string TargetName()
{
#if NET45
return "net45 build";
#elif NETSTANDARD2_0
return "netstandard2.0 build";
#else
return "unknown target";
#endif
}
}
安定したAPIと内部シム
同じ公開APIを維持し、差異は小さなシムの背後に隠して、どのターゲットが使われているかを呼び出し側が意識しなくて済むようにします。
#define NET45
using System;
using System.IO;
public class Program
{
// Public API is stable; internal implementation differs.
public static string ReadAllTextCompat(string path)
{
#if NET45
// net45 has File.ReadAllText; use it directly.
return File.ReadAllText(path);
#else
// Example shim path (for an older TF that lacks some helper API)
using (var fs = new FileStream(path, FileMode.Open, FileAccess.Read, FileShare.Read))
using (var sr = new StreamReader(fs))
{
return sr.ReadToEnd();
}
#endif
}
public static void Main(string[] args)
{
// For demo, write then read
string p = "demo.txt";
File.WriteAllText(p, "hello");
Console.WriteLine(ReadAllTextCompat(p));
}
}
セットアップのヒント
- プロジェクトではTargetFrameworks(複数形)を使用してターゲットを列挙します
- #ifは小さなヘルパーに限定し、コードの大部分を共有します
- 各ターゲットをテストし、TFMごとに単体テストを実行します
- すべてのターゲットアセットを含む1つのパッケージを公開します
よくある落とし穴
- ターゲットごとに異なる公開APIを公開しないでください
- 深い#ifの入れ子を避け、小さなシムを使用します
- 暗黙的な動作の違い(パス、エンコーディングなど)に注意します
- ターゲット固有の制限があれば文書化します
マルチターゲットにする理由
まとめ
まとめ: マルチターゲット化すると、1つのプロジェクトから複数のバイナリを提供できます。公開APIの一貫性を保ち、差異を小さな#ifシムの背後に隠し、すべてのターゲットをまとめてパッケージ化します。
よくある質問
「マルチターゲティング」レッスンは無料ですか?
はい。「マルチターゲティング」の完全なテキストはこのウェブで無料で読めます。インタラクティブに演習し(組み込みコードエディタと24時間対応のAIチューター)、C# Academyコースの残りをアンロックするには、CoddyKit PROにアップグレードしてください。 C# Academyコースには全3レッスンが含まれています。
「マルチターゲティング」で何を学びますか?
単一のプロジェクトから、複数のターゲットフレームワーク向けに1つのライブラリをビルドします。条件付きコンパイルと、APIの違いを吸収するフォールバックshimを使います。 ブラウザで直接実行するハンズオンコードでC# Academyを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。
C# Academyを始めるのに経験は必要ですか?
事前経験は必要ありません。CoddyKitのC# Academyは初級者から上級者向けに構成されているため、ここから始めるか最初から始めて、自分のペースで進むことができます。 これはレッスン3/3です。
「マルチターゲティング」レッスンにはどのくらい時間がかかりますか?
ほとんどのCoddyKitレッスンは約5~10分かかります。各レッスンはコンパクトでインタラクティブなので、着実に進歩し、ウェブとアプリ全体で正確に前回の場所から再開できます。
このC# Academyレッスンでコードを書いて実行できますか?
はい。すべてのC# Academyレッスンに組み込みコードエディタが含まれているため、ブラウザでリアルコードを書いて実行し、即座のAIフィードバックを取得できます。ローカル設定は不要です。