質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

Visual Studio

Microsoft Visual StudioはMicrosoftによる統合開発環境(IDE)です。多種多様なプログラミング言語に対応しています。

Q&A

解決済

1回答

4460閲覧

System.TypeLoadExceptionが起きて止まる

kmsnmrn

総合スコア1

C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

Visual Studio

Microsoft Visual StudioはMicrosoftによる統合開発環境(IDE)です。多種多様なプログラミング言語に対応しています。

0グッド

0クリップ

投稿2022/06/15 02:47

編集2022/06/17 00:27

下記の環境でC#Windows フォームアプリを作っています。

Visual Studio Professional 2022(64ビット) Version 17.2.4
Microsoft .NET Framework Version 4.8.04084
C#ツール 4.2.0-4.22281.5

次のコードをDebugで実行している際、System.TypeLoadExceptionが発生し
実行途中で終了しました。


using System;
using System.Data;
using Oracle.ManagedDataAccess.Client;

public partial class BItoolUserList : Form
{
public BItoolUserList()
{
InitializeComponent();
}

private void searchBtn_Click(object sender, EventArgs e) { string sql = "SELECT account, password, name, yuko_kubun_code FROM R_ACCOUNT WHERE ROWNUM <= 5"; try { using (OracleConnection conn = new OracleConnection()) { conn.ConnectionString = "User Id=xxxxx; Password=rrrrrr; Data Source=OORRAACCLLEE"; conn.Open(); Console.WriteLine("DB接続開始"); using (OracleCommand cmd = new OracleCommand(sql)) { cmd.Connection = conn; cmd.CommandType = CommandType.Text; using (OracleDataReader reader = cmd.ExecuteReader()) { while(reader.Read()) { Console.WriteLine(reader["account"]); Console.WriteLine(reader["password"]); Console.WriteLine(reader["name"]); Console.WriteLine(reader["yuko_kubun_code"]); } } } } } catch(Exception ex) { Console.WriteLine(ex.Message.ToString()); } }

}


エラーメッセージは次の通りです。
例外がスローされました: 'System.TypeLoadException' (System.Private.CoreLib.dll の中)
型 'System.TypeLoadException' のハンドルされていない例外が System.Private.CoreLib.dll で発生しました
Could not load type 'System.Security.Principal.WindowsImpersonationContext' from assembly 'mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089'.
System.TypeLoadException
HResult=0x80131522
Message=Could not load type 'System.Security.Principal.WindowsImpersonationContext' from assembly 'mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089'.
Source=Oracle.ManagedDataAccess

エラーの詳細を確認すると次の通りになっています。
スタック トレース:
場所 OracleInternal.ConnectionPool.PoolManager`3.CreateNewPRThreadFunc(Object state)
場所 System.Threading.QueueUserWorkItemCallbackDefaultContext.Execute() (//src/libraries/System.Private.CoreLib/src/System/Threading/ThreadPoolWorkQueue.cs):行 979
場所 System.Threading.ThreadPoolWorkQueue.Dispatch() (/
/src/libraries/System.Private.CoreLib/src/System/Threading/ThreadPoolWorkQueue.cs):行 790
場所 System.Threading.PortableThreadPool.WorkerThread.WorkerThreadStart() (//src/libraries/System.Private.CoreLib/src/System/Threading/PortableThreadPool.WorkerThread.cs):行 63
場所 System.Threading.Thread.StartCallback() (/
/src/coreclr/System.Private.CoreLib/src/System/Threading/Thread.CoreCLR.cs):行 106

ODP.NETを入れたときの手順について
(VSの)ツール->NuGetパッケージマネージャー->ソリューションのNuGetパッケージの管理
[参照]タブでOracle.ManagedDataAccess.Coreをインストール

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

ozwk

2022/06/15 02:54

teratailの不具合かなにかで多重投稿になっているので1つだけ残して他は削除依頼を出してください
KOZ6.0

2022/06/15 07:54

Microsoft .NET Framework Version 4.8.04084 これは正しいですか?
kmsnmrn

2022/06/15 07:59

正しい情報です。
KOZ6.0

2022/06/15 08:07

ということは、ODP.NET Core を使ってないですか? .NET Framework なら ODP.NET を使ってください。
KOZ6.0

2022/06/16 06:49

解決したなら、その旨を自己回答し、クローズしてください。 そうでない場合は、質問を編集し、追加の質問を書き込んでください。
kmsnmrn

2022/06/16 06:57

まだ解決しておりません。 ODP.NETで調べてみて、入れられたと思いますがExceptionが起きてしまってます。 --- 例外がスローされました: 'System.TypeLoadException' (System.Private.CoreLib.dll の中) Could not load type 'System.Security.Principal.WindowsImpersonationContext' from assembly 'mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089'.
KOZ6.0

2022/06/16 07:42

System.Private.CoreLib.dll は NET Core 系のライブラリだったかと思います。 正しいアセンブリを参照できていない気がします。 ODP.NET を入れたときの手順を質問を編集し、追記してください。
kmsnmrn

2022/06/16 08:02

コメントありがとうございます。 まとめてから追記します。
KOZ6.0

2022/06/16 09:27

エラーメッセージを見る限りでは、NET6 から ODP.NET を使おうとしているように見えるんですけどねー
kmsnmrn

2022/06/16 23:22

ODP.NETを入れたときの手順について (VSの)ツール->NuGetパッケージマネージャー->ソリューションのNuGetパッケージの管理 [参照]タブでOracle.ManagedDataAccess.Coreをインストール 以上となります。
guest

回答1

0

ベストアンサー

NuGet でインストールできる ODP.NET は2種類あります。

(1) Oracle.ManagedDataAccess
.NET Framework 用

(2) Oracle.ManagedDataAccess.Core
NET Core/NET5/NET6 用

System.TypeLoadException が発生するのは、正しいライブラリが選択されていないときです。
エラーメッセージを見ると、NET Core/NET5/NET6 のアプリケーションから、(1) を呼び出しているように見えます。
実際、NET6 のアプリケーションを作成し、(1) を NuGet でインストールすると、同じエラーが起きました。
また、.NET Framework のアプリケーションからは、(2) をインストールしようとしてもエラーになってインストールできません。

アプリケーションのフレームワークを確認し、正しい組み合わせで使ってください。

投稿2022/06/17 01:14

編集2022/06/17 01:20
KOZ6.0

総合スコア2626

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

kmsnmrn

2022/06/17 01:38

回答ありがとうございます。 アドバイス頂いた通り、『Oracle.ManagedDataAccess.Core』だけインストールされている状態で 実行しました。 エラー内容が変わり次の通りになりました。 例外がスローされました: 'Oracle.ManagedDataAccess.Client.OracleException' (Oracle.ManagedDataAccess.dll の中) 'WinFormsApp1.exe' (CoreCLR: clrhost): 'C:\Program Files\dotnet\shared\Microsoft.NETCore.App\6.0.6\System.Text.Encoding.Extensions.dll' が読み込まれました。
kmsnmrn

2022/06/17 02:22

回答ありがとうございました。 Oracle.ManagedDataAccess.Client.OracleExceptionは教えて頂いた記事から 学んでみます。
Zuishin

2022/06/17 12:14

質問に .NET Framework と書いてあるのが謎ですね。 > Microsoft .NET Framework Version 4.8.04084
KOZ6.0

2022/06/17 13:50

おそらく OS にインストールされた Framework のバージョンではないかと。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問