ページの作成
親となるページを選択してください。
親ページに紐づくページを子ページといいます。
例: 親=スポーツ, 子1=サッカー, 子2=野球
子ページを親ページとして更に子ページを作成することも可能です。
例: 親=サッカー, 子=サッカーのルール
親ページはいつでも変更することが可能なのでとりあえず作ってみましょう!
| この記事の要点 |
|
DLL 参照の 4 つの方法
| 方法 | 用途 | 追加先 | 解決タイミング |
|---|---|---|---|
| プロジェクト参照 | 同じ .sln 内の別プロジェクト | <ProjectReference /> | ビルド時 |
| アセンブリ参照 | ローカル DLL ファイル | <Reference HintPath="..." /> | ビルド時 |
| NuGet パッケージ | 公開ライブラリ | <PackageReference /> | 復元時 |
| 動的ロード | プラグイン機構 | 不要 | 実行時 |
| PInvoke (ネイティブ) | Win32 API 等 | 属性で指定 | 初回呼出時 |
方法1: Visual Studio で参照追加
- ソリューションエクスプローラで対象プロジェクトを開く
- 依存関係 / 参照 を右クリック → 参照の追加 (Add Reference)
- 左ペインで アセンブリ / プロジェクト / 参照 (Browse) を選択
- DLL を選んで OK
結果として .csproj には次のような行が追加されます:
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<TargetFramework>net8.0</TargetFramework>
<PlatformTarget>x64</PlatformTarget>
</PropertyGroup>
<!-- ローカル DLL を直接参照 -->
<ItemGroup>
<Reference Include="MyLibrary">
<HintPath>..\libs\MyLibrary.dll</HintPath>
<Private>true</Private> <!-- 出力に DLL をコピー -->
</Reference>
</ItemGroup>
<!-- 同じソリューション内の別プロジェクト -->
<ItemGroup>
<ProjectReference Include="..\Common\Common.csproj" />
</ItemGroup>
<!-- NuGet パッケージ -->
<ItemGroup>
<PackageReference Include="Newtonsoft.Json" Version="13.0.3" />
</ItemGroup>
</Project>
方法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アノテーションとは
最近更新/作成されたページ
- IPv6とは|128bitアドレス・コロン16進表記/::省略・リンクローカル・SLAAC・デュアルスタック NEW 2026-06-22 12:34:44
- VPNとは|暗号トンネル・サイト間/リモートアクセス・IPsec/SSL-VPN/WireGuardを解説 NEW 2026-06-22 12:19:10
- MAC アドレスフィルタリングの仕組みと限界 | ネットワーク入門 NEW 2026-06-22 12:19:10
- gRPC とは HTTP/2 + Protocol Buffers の高速 RPC | ネットワーク入門 NEW 2026-06-22 12:17:25
- HTTP/3 (QUIC) とは UDP ベースの低遅延 Web 通信 | ネットワーク入門 NEW 2026-06-22 12:17:25
- HTTP/2 とは 多重化・HPACK・バイナリフレーム | ネットワーク入門 NEW 2026-06-22 12:17:25
- Web通信プロトコル入門 HTTP/2・HTTP/3・WebSocket・gRPC・WebRTC | ネットワーク入門 NEW 2026-06-22 12:17:25
- WebSocket とは 全二重リアルタイム通信 ws/wss | ネットワーク入門 NEW 2026-06-22 12:17:25
- WebRTC とは ブラウザ間 P2P の音声・映像・データ通信 | ネットワーク入門 NEW 2026-06-22 12:17:25
- ファイアウォールとは|パケットフィルタ・ステートフル・DMZ・次世代FW(L4/L7)を解説 NEW 2026-06-22 12:17:24
- iptables/nftablesとは|テーブル・チェーン・ルール例・永続化をLinux視点で解説 NEW 2026-06-22 12:17:24
- HAProxy とは frontend/backend と設定例 | ネットワーク入門 NEW 2026-06-22 12:17:24
- 証明書と認証局(CA)とは|X.509・信頼チェーン・DV/OV/EV・失効(CRL/OCSP)を解説 NEW 2026-06-22 12:17:24
- CDN とは エッジキャッシュ・TTL・Cloudflare/CloudFront | ネットワーク入門 NEW 2026-06-22 12:17:24
- TLS/SSLの仕組み|ハンドシェイク・暗号スイート・前方秘匿性・証明書検証をわかりやすく解説 NEW 2026-06-22 12:17:24
コメントを削除してもよろしいでしょうか?