ページの作成
親となるページを選択してください。
親ページに紐づくページを子ページといいます。
例: 親=スポーツ, 子1=サッカー, 子2=野球
子ページを親ページとして更に子ページを作成することも可能です。
例: 親=サッカー, 子=サッカーのルール
親ページはいつでも変更することが可能なのでとりあえず作ってみましょう!
| この記事の要点 |
|
DLL 参照の 4 つの方法
| 方法 | 用途 | 追加先 | 解決タイミング |
|---|---|---|---|
| プロジェクト参照 | 同じ .sln 内の別プロジェクト | | ビルド時 |
| アセンブリ参照 | ローカル DLL ファイル | | ビルド時 |
| NuGet パッケージ | 公開ライブラリ | | 復元時 |
| 動的ロード | プラグイン機構 | 不要 | 実行時 |
| PInvoke (ネイティブ) | Win32 API 等 | 属性で指定 | 初回呼出時 |
方法1: Visual Studio で参照追加
- ソリューションエクスプローラで対象プロジェクトを開く
- 依存関係 / 参照 を右クリック → 参照の追加 (Add Reference)
- 左ペインで アセンブリ / プロジェクト / 参照 (Browse) を選択
- DLL を選んで OK
結果として .csproj には次のような行が追加されます:
net8.0
x64
..\libs\MyLibrary.dll
true
方法2: NuGet で参照(推奨)
# パッケージマネージャコンソール
Install-Package Newtonsoft.Json -Version 13.0.3
# .NET CLI
dotnet add package Newtonsoft.Json --version 13.0.3
# 復元
dotnet restore
# 一覧確認
dotnet list package
方法3: Assembly.LoadFrom で動的ロード
プラグイン機構や、ビルド時に存在しない DLL を実行時に読み込むとき:
using System;
using System.Reflection;
class Program {
static void Main() {
// DLL を実行時に読み込む
Assembly asm = Assembly.LoadFrom(@"C:\plugins\MyPlugin.dll");
// クラスを取得
Type t = asm.GetType("MyPlugin.Greeter");
if (t == null) {
Console.WriteLine("型が見つかりません");
return;
}
// インスタンス生成
object instance = Activator.CreateInstance(t);
// メソッド呼出
MethodInfo method = t.GetMethod("SayHello");
string result = (string)method.Invoke(instance, new object[] { "World" });
Console.WriteLine(result);
// 全ての public 型を列挙
foreach (Type type in asm.GetExportedTypes()) {
Console.WriteLine(type.FullName);
}
}
}
LoadFrom は依存 DLL も同じディレクトリから自動解決します。完全に分離したいなら AssemblyLoadContext(.NET Core+)を使います。
方法4: PInvoke でネイティブ DLL を呼ぶ
Win32 API や C++ 製の DLL を呼ぶ場合は [DllImport] 属性:
using System;
using System.Runtime.InteropServices;
class Program {
// user32.dll の MessageBox を宣言
[DllImport("user32.dll", CharSet = CharSet.Unicode, SetLastError = true)]
static extern int MessageBox(IntPtr hWnd, string text, string caption, uint type);
// kernel32.dll の GetTickCount
[DllImport("kernel32.dll")]
static extern uint GetTickCount();
// 自作 C++ DLL の関数
[DllImport("MyNative.dll", CallingConvention = CallingConvention.Cdecl)]
static extern int Add(int a, int b);
static void Main() {
MessageBox(IntPtr.Zero, "Hello", "Title", 0);
Console.WriteLine($"起動からの経過: {GetTickCount()} ms");
Console.WriteLine($"Add(3, 4) = {Add(3, 4)}");
}
}
よくあるエラーと対処
| エラー | 原因 | 対処 |
|---|---|---|
FileNotFoundException | DLL がランタイムから見えない | 出力ディレクトリ / GAC / プロセスの PATH を確認 |
BadImageFormatException | x86/x64 ビット数不一致 | PlatformTarget を DLL に揃える |
FileLoadException (Strong name) | 署名違い・バージョン違い | app.config の bindingRedirect で吸収 |
EntryPointNotFoundException | PInvoke で関数名が違う | EntryPoint や CharSet を確認、dumpbin /exports で実関数名確認 |
DllNotFoundException | ネイティブ DLL が見つからない | 実行ディレクトリ / System32 / PATH に配置 |
GAC(グローバルアセンブリキャッシュ)
.NET Framework のみ。複数アプリで共有する DLL を登録します:
# 開発者コマンドプロンプトで
gacutil /i MyLibrary.dll
gacutil /l MyLibrary
gacutil /u MyLibrary
# 物理パス
# C:\Windows\Microsoft.NET\assembly\GAC_MSIL\
.NET Core / .NET 5+ は GAC を廃止。アプリ単位の自己完結配置が推奨です。
FAQ
Q: DLL を入れ替えたが古いまま
A: ビルド出力ディレクトリ (bin/Debug/...) に古い DLL がコピーされている可能性。dotnet clean → 再ビルド。
Q: NuGet と直接参照のどちらを使うべき
A: 公開済みなら NuGet 一択。バージョン管理・依存解決・チーム共有が楽。社内 DLL は社内 NuGet サーバ(Azure Artifacts / Nexus / ProGet)に登録。
Q: AnyCPU プロジェクトで PInvoke すると落ちる
A: 実行時のプロセスビット数(OS が 64bit なら 64bit)と DLL のビット数が違うため。PlatformTarget を明示してください。
ページの作成
親となるページを選択してください。
親ページに紐づくページを子ページといいます。
例: 親=スポーツ, 子1=サッカー, 子2=野球
子ページを親ページとして更に子ページを作成することも可能です。
例: 親=サッカー, 子=サッカーのルール
親ページはいつでも変更することが可能なのでとりあえず作ってみましょう!
子ページはありません
人気ページ
- 1 Eclipseで「サーバーに追加または除去できるリソースがありません。」の原因と対処法
- 2 tomcat の起動 / 停止ログと catalina.log・catalina.out の違い
- 3 JavaScript base URL 取得方法|window.location.origin と SSR/Node.js 対応
- 4 YouTube Data API v3 エラー一覧|403/400/404 の主要原因と切り分け
- 5 Spring Frameworkのアノテーション一覧
- 6 Laravel エラー一覧|500/Blade/DB 接続/ルーティングの代表エラー
- 7 3Dグラフィックスとは|モデリング/レンダリング/主要ソフトウェア (Blender / Maya)
- 8 【Spring】@Valueアノテーションとは
- 9 CATALINA_HOME の確認方法 (Linux / Mac)
- 10 【Spring】@Autowiredアノテーションとは
最近更新/作成されたページ
- Laravel キャッシュクリア完全ガイド(cache:clear / config:clear / 2026-05-18 07:42:07
- プロジェクトの作成と削除 2026-05-18 07:42:07
- インストール直後にNetbeansが反応しない 2026-05-18 07:42:07
- 動画やチャンネルの検索 2026-05-18 07:42:07
- APIキー取得方法 2026-05-18 07:42:07
- チャンネル情報の取得 2026-05-18 07:42:07
- API 入門 — Web API(REST / GraphQL / gRPC / 2026-05-18 07:42:07
- インストール(eclipseプラグイン) 2026-05-18 07:42:07
- Laravel「Dotenv values containing spaces must be surrounded 2026-05-18 07:42:07
- エラー一覧 2026-05-18 07:42:07
- curl: (51) SSL: certificate subject name '~' does not match 2026-05-18 07:42:07
- インストール方法(Windows版) 2026-05-18 07:42:07
- JSONから配列に変換 2026-05-18 07:42:07
- 処理を一定時間待つ 2026-05-18 07:42:07
- A non well formed numeric value encountered 2026-05-18 07:42:07
コメントを削除してもよろしいでしょうか?