ページの作成
親となるページを選択してください。
親ページに紐づくページを子ページといいます。
例: 親=スポーツ, 子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
- 4 YouTube Data API v3 エラー一覧|403・400・404 の原因と対処
- 5 Laravel エラー一覧|500/Blade/DB 接続/ルーティングの代表エラー
- 6 3Dグラフィックスとは|モデリング/レンダリング/主要ソフトウェア (Blender / Maya)
- 7 Spring Frameworkのアノテーション一覧
- 8 【Spring】@Valueアノテーションとは
- 9 CATALINA_HOME の確認方法 (Linux / Mac)
- 10 【Spring】@Autowiredアノテーションとは
最近更新/作成されたページ
- 【django】ログイン 認証機能 2026-09-08 03:22:09
- MySQL ERROR 1063 Incorrect column specifier for column|原因と直し方 2026-09-08 03:11:09
- 【PHPエラー】Object of class stdClass could not be converted to string 2026-09-07 07:46:04
- Julia Genie ローカル開発サーバ起動完全ガイド 2026-09-07 07:46:04
- Wi-Fi とは|規格と世代(Wi-Fi 4〜7)・周波数帯・CSMA/CA・WPA3 NEW 2026-09-07 07:45:13
- set コマンドでシェルオプションと位置パラメータを操作 | bash 2026-09-07 07:45:13
- JPEG(.jpg/.jpeg)画像形式の完全ガイド — 仕様・マジックナンバー・他形式との比較・EXIF 2026-09-07 07:45:13
- UE5 Get Overlapping Actorsで特定クラスだけ処理|Class Filter・Cast To 2026-09-07 07:45:13
- Linuxで特定拡張子のファイルを再帰削除|find -deleteの安全手順 2026-09-07 07:45:13
- Django CBVでテンプレートに値を渡す|get_context_data・extra_context 2026-09-07 07:45:13
- Linuxで複数ファイルの文字列を一括置換|find・sed・xargsの安全手順 2026-09-07 07:45:13
- Laravelルートグループ|prefix・middleware・nameで一括管理 2026-09-07 07:45:13
- Linux whichコマンドの使い方|絶対パス取得とtype・command -vの違い 2026-09-07 07:45:13
- Linux catコマンドの使い方|行番号表示・複数ファイル連結 2026-09-07 07:45:13
- unable to execute 'gcc': No such file or directory 2026-09-07 07:45:13
コメントを削除してもよろしいでしょうか?