SharePoint Online に CSOM で接続しようとして SharePointOnlineCredentials を使うと、The type or namespace 'SharePointOnlineCredentials' could not be found で止まることがあります。原因の多くは「プロジェクトのターゲットが .NET Standard/.NET Core 系」な点。直し方と、参照に黄色い警告が出るケースの対処、.NET 6+ での代替案までまとめます。
症状の整理:何が起きているのか
このエラーは「コードは SharePointOnlineCredentials を参照しているのに、参照している CSOM のアセンブリにはその型が存在しない」状態で発生します。多くのケースでは、NuGet の追加や using Microsoft.SharePoint.Client; の有無ではなく、プロジェクトのターゲットフレームワークが原因です。
| 現象 | よくある勘違い | 実際に確認すべきポイント |
|---|---|---|
| コンパイル時に「型/名前空間が存在しない」 | NuGet が足りない、using が足りない | Target Framework が .NET Standard / .NET (Core) になっていないか |
| 参照に黄色い三角(警告)が付く | Visual Studio の不具合 | 参照 DLL の解決失敗(パス、バージョン不一致、復元失敗) |
| ビルドは通るが実行時に例外 | 資格情報が間違い | アセンブリ競合、Binding Redirect、認証方式(MFA/モダン認証) |
原因の本命:プロジェクトが .NET Standard / .NET Core 系になっている
SharePointOnlineCredentials は、SharePoint Online 向けの CSOM(Client Side Object Model)で長く使われてきた「ユーザー名+パスワード」での認証クラスです。一方で、CSOM には歴史的事情があり、.NET Framework 前提の API が混ざりやすいため、プロジェクトが .NET Standard / .NET(Core)だと「型が見つからない」状態になりがちです。
ポイントは次のとおりです。
- 同じ NuGet 名でも、ターゲットフレームワークによって参照される中身(TFM別のアセンブリ)が変わる
- .NET Standard 用に用意されたアセンブリでは、フル .NET Framework で提供される型が省かれていることがある
- 結果として「インストールはできたのに、型が出てこない」現象が起きる
| ターゲットフレームワーク | SharePointOnlineCredentials | 現実的な対応 | おすすめ度 |
|---|---|---|---|
| .NET Framework(例:4.7.2 / 4.8) | 参照できるケースが多い | CSOM を NuGet で入れ直して利用 | 短期で解決したいなら高 |
| .NET Standard / .NET(Core/5+/6+/7+/8+) | 見つからない/提供されないことがある | OAuth(Entra ID)前提の方式へ寄せる | 長期運用なら高 |
最短で直す:.NET Framework ターゲットに切り替えて CSOM を入れ直す
「いま動くものを作りたい」「既存の CSOM コードを最小変更で通したい」場合は、まず .NET Framework へ寄せるのが一番早いです。特にコンソールアプリやバッチ用途なら、この判断が最短距離になりやすいです。
手順:ターゲットフレームワークを確認する
Visual Studio で次を確認します。
- プロジェクトを右クリック →「プロパティ」→「アプリケーション」
- 「ターゲット フレームワーク」が .NET Framework になっているか
- もし .NET Core や .NET、.NET Standard なら、
SharePointOnlineCredentialsが出ない原因候補が濃厚
既存プロジェクトを変更できない場合は、別で .NET Framework の新規プロジェクトを作成して、CSOM 関連コードを移植する方がスムーズなこともあります(依存関係が複雑な場合に特に有効です)。
手順:NuGet を「入れ直す」ことが重要
ターゲット変更後は、参照が中途半端に残っていると警告の温床になります。次の流れが安定します。
- いったん CSOM 関連パッケージをアンインストール
bin/objフォルダを削除(可能なら)- NuGet の復元を実行(ソリューションをクリーン→リビルドでも可)
- CSOM パッケージを再インストール
導入パッケージの例としては、SharePoint Online 向け CSOM をまとめて含むパッケージ(例:Microsoft.SharePointOnline.CSOM 系)を選ぶと「片方だけ足りない」を避けやすくなります。既に Microsoft.SharePoint.Client / Microsoft.SharePoint.Client.Runtime を個別に入れている場合も、ターゲットが合っていれば型が見えるようになることがあります。
確認:最小コードでコンパイルできるか試す
まずは「コンパイルできる」状態を作るのが先です。以下は動作確認用の最小例です(パスワードの直書きは避け、実運用では安全な保管方法に置き換えてください)。
using System;
using System.Security;
using Microsoft.SharePoint.Client;
class Program
{
static void Main()
{
var siteUrl = "https://<tenant>.sharepoint.com/sites/<site>";
var userName = "user@<tenant>.onmicrosoft.com";
var plainPassword = "********"; // 直書きは避ける
var securePassword = new SecureString();
foreach (var c in plainPassword) securePassword.AppendChar(c);
using (var ctx = new ClientContext(siteUrl))
{
ctx.Credentials = new SharePointOnlineCredentials(userName, securePassword);
var web = ctx.Web;
ctx.Load(web, w => w.Title, w => w.Url);
ctx.ExecuteQuery();
Console.WriteLine(web.Title);
Console.WriteLine(web.Url);
}
}
}
このコードで SharePointOnlineCredentials に赤線が付かず、コンパイルが通るなら「型が見つからない」問題は解消に向かっています。次に実行時の認証エラーが出た場合は、資格情報の誤りだけでなく MFA(多要素認証)やモダン認証の影響も疑ってください。
参照に黄色い三角(警告)が付く理由と、現場で効く対処
Visual Studio の参照ツリーで DLL に黄色い三角が付くのは、端的に言うと「参照先のアセンブリを解決できていない」状態です。見た目は軽微でも、ビルドや実行時に別のトラブルへつながります。
| よくある原因 | 症状 | 優先度の高い対処 |
|---|---|---|
| ターゲットフレームワーク不一致 | 参照は追加できるが型が出ない/警告が消えない | .NET Framework に合わせる(本記事の主題) |
| NuGet 復元失敗・パッケージ破損 | 再起動やクリーンで直ったり直らなかったり | 一度アンインストール→再インストール、NuGet キャッシュ削除 |
| 手動で DLL を参照追加してしまった | HintPath がズレて移動や CI で壊れやすい | 手動参照を外して NuGet 管理に寄せる |
| 同名 DLL のバージョン競合(別フォルダや GAC) | ビルドは通るが実行時に FileLoadException など | 参照を整理し、必要なら Binding Redirect を追加 |
まずやるべき定番セット
- ソリューションを「クリーン」→「リビルド」
- NuGet の「パッケージの復元」
- 参照の重複(同じ DLL を NuGet と手動で二重に参照)をなくす
それでも消えないときの実務的な切り分け
黄色い警告が頑固なときは、「どの DLL を、どこから掴みに行って失敗しているか」を見るのが近道です。
- 警告の付いた参照をクリック → プロパティで Path / Version / Copy Local を確認
- 期待している場所(NuGet の packages フォルダや obj 配下)に DLL があるか
- 別プロジェクトや別 NuGet が同じ名前の DLL を持ち込んでいないか
スレッド等で報告される「別ディレクトリに DLL を置き直して参照し直したら警告が消えた」という回避策は、根本原因(復元やパス解決の失敗)をマスクしているだけのこともあります。ただし、納期優先で一時回避が必要な現場では役立つこともあります。実施する場合は、最終的に NuGet 管理へ戻すことを前提にしてください(将来の更新やチーム開発で破綻しやすくなります)。
「.NET Framework を使いたくない」場合の現実解:OAuth(Entra ID)へ寄せる
SharePointOnlineCredentials はユーザー名+パスワード前提で、モダン認証(OAuth)や MFA と相性が悪くなりやすい領域です。いまから .NET 6/7/8 を前提に進めるなら、最初から OAuth 方式へ設計を寄せる方が、後で詰まりにくくなります。
| 選択肢 | 向いている用途 | .NET 6+ との相性 | ひとこと |
|---|---|---|---|
| Microsoft Graph API | ファイル操作、ユーザー/グループ、Teams/OneDrive と横断した処理 | 良い | 将来性が高く、トークン取得(MSAL)と組み合わせやすい |
| SharePoint REST API | SharePoint 固有の操作(リスト/ライブラリ)を細かく叩きたい | 良い | Graph で足りない部分を補える |
| PnP 系 SDK(PnP.Core SDK など) | SharePoint 操作を SDK で楽に書きたい | 良い | 現場の “やりたいこと” に対して記述量が減りやすい |
OAuth 化のざっくり手順(全体像)
実装レベルの詳細は環境で変わりますが、流れはほぼ共通です。
- Entra ID(旧 Azure AD)でアプリ登録
- 必要な API 権限(例:Sites.Read.All など)を付与
- クライアントシークレットまたは証明書でトークン取得
- 取得したアクセストークンで Graph / REST を呼ぶ
「ユーザーのパスワードをアプリに持たせない」設計に寄せられるため、セキュリティ面・運用面の両方でメリットがあります。特にバッチやサーバーサイド処理では、クライアント資格情報フロー(アプリ専用)を選べるのが強みです。
よくある追加のつまずきとチェックリスト
原因が .NET Standard 以外だった場合でも、次のチェックで詰まりどころを潰せます。
| チェック項目 | 見る場所 | 意図 |
|---|---|---|
| プロジェクトの Target Framework | プロジェクト プロパティ | CSOM が想定する API を参照できる土台か確認 |
| CSOM パッケージの入れ方 | NuGet(packages.config / PackageReference) | 手動参照を混ぜない、復元できる形に統一 |
| 参照の競合 | 参照一覧、出力ログ | 同名 DLL を複数バージョン参照していないか |
| MFA / 条件付きアクセス | テナントの認証ポリシー | ユーザー名+パスワード方式が通らない構成になっていないか |
| 実行環境差(CI / サーバー) | ビルドエージェントの SDK / 参照 | ローカルだけ動く状態を避ける |
30秒診断:プロジェクト種別を見分けるコツ
「自分のプロジェクトが .NET Framework なのか .NET(Core)なのか分からない」という場合は、次のどれかで判断できます。
Visual Studio のテンプレート名で見る
| 作成したテンプレート例 | ありがちなターゲット | この問題の起きやすさ |
|---|---|---|
| Console App(.NET Framework) | .NET Framework 4.x | 低い(CSOM が想定しやすい) |
| Console App(.NET / .NET Core) | net6.0 / net8.0 など | 高い(型が提供されないことがある) |
| Class Library(.NET Standard) | netstandard2.0 など | 高い(コンパイルで止まりやすい) |
.csproj を開いて直接見る(いちばん確実)
プロジェクトファイル(.csproj)を開き、次のような記述があれば .NET Standard/.NET(Core)です。
<PropertyGroup>
<TargetFramework>netstandard2.0</TargetFramework>
</PropertyGroup>
.NET Framework の場合は、SDK スタイルなら次のようになります。
<PropertyGroup>
<TargetFramework>net48</TargetFramework>
</PropertyGroup>
古い形式のプロジェクトだと、次のような行で判別できます。
<TargetFrameworkVersion>v4.8</TargetFrameworkVersion>
なぜ「NuGet を入れたのに型が出ない」ことが起きるのか
最近の NuGet パッケージは、1つのパッケージに複数のターゲット(例:net48、netstandard2.0 など)向けの成果物を同梱していることがあります。ビルド時には、あなたのプロジェクトの Target Framework に合わせて「適合する DLL」が自動的に選ばれます。
ここで .NET Standard 側の DLL が「互換性のために一部 API を省いている」設計だと、インストール自体は成功しても、目的の型が含まれず could not be found になります。つまり、パッケージの追加=必ずしも目的の型が入るとは限らない、という落とし穴です。
コンパイル後に詰まる:認証が通らない場合の考え方
SharePointOnlineCredentials が参照できるようになった後、実行時にサインインできないケースもよくあります。ここは「パスワード違い」だけで片付けず、テナントの認証ポリシーを疑うのがポイントです。
| 状況 | 起きやすいこと | 現実的な対処 |
|---|---|---|
| MFA が必須 | ユーザー名+パスワード方式が通らない | OAuth 方式(Graph/REST/PnP)へ移行 |
| 条件付きアクセス(場所/デバイス制限) | ローカルは通るがサーバーは失敗、またはその逆 | 実行環境をポリシーに合わせる/アプリ専用認証に寄せる |
| アカウントが外部/ゲスト | 同じ手順でも他ユーザーと挙動が違う | 権限とサインイン方式を確認(必要ならアプリ登録) |
「今だけ通せればいい」場面で安易に資格情報を埋め込むと、運用・監査のタイミングで詰みやすいです。最終的に継続運用するなら、最初から OAuth へ寄せる判断が結果的にコストを下げることが多いです。
現場で迷ったときのおすすめルート
| あなたの状況 | おすすめ | 理由 |
|---|---|---|
| 既存の CSOM 資産を最小変更で動かしたい | .NET Framework + CSOM(SharePointOnlineCredentials) | 移植コストが低く、コンパイル問題を最短で消せる |
| 新規開発で .NET 8 まで見据えたい | OAuth(Graph/REST)または PnP 系 SDK | 認証・運用・セキュリティ面で長期に安定しやすい |
| 社内ポリシーでパスワード保存が禁止 | アプリ登録 + 証明書(アプリ専用) | 秘密情報の取り扱いが整理しやすい |
まとめ:結局どこを直せばいいのか
SharePointOnlineCredentialsが見つからない最大要因は.NET Standard / .NET Core 系ターゲットであることが多い- 最短解は .NET Framework ターゲットにして CSOM を NuGet で入れ直す
- 参照の黄色い警告は「解決失敗」なので、まずは NuGet 管理へ寄せて復元・競合を整理する
- .NET 6+ を前提にするなら、SharePointOnlineCredentials を捨てて OAuth(Graph/REST/PnP)へ寄せる方が長期的に安全
まずはターゲットフレームワークを確認し、必要なら .NET Framework プロジェクトで最小コードがコンパイルできるかを試してください。そこが通れば、残りの課題(認証ポリシーや API 設計)は段階的に整理できます。

コメント