Visual Studioで突然「アプリケーション制御ポリシーによってブロックされました」が表示されたときの対処法

広告

Visual StudioでC#のプログラムを作成していると、生徒さんのPCだけ次のようなエラーが発生することがあります。

型 'System.IO.FileLoadException' のハンドルされていない例外が発生しました。

Could not load file or assembly
BinaryConverter.dll

アプリケーション制御ポリシーによってこのファイルがブロックされました。
(0x800711C7)

初めて見ると、

  • C#のコードがおかしい?
  • .NETのインストールに失敗した?
  • Visual Studioが壊れた?

と思ってしまいます。

しかし、多くの場合はプログラムではなくWindowsのセキュリティ機能が原因です。


エラーの意味

今回のエラーは

Visual Studioが作成したDLLをWindowsが実行させなかった

という意味です。

つまり、

Visual Studio
        │
ビルド成功
        │
BinaryConverter.dll 作成
        │
        ▼
Windows が
「このDLLは実行を許可しません」
        │
        ▼
FileLoadException

ビルドは成功しています。

失敗しているのは実行です。


原因はSmart App Control

Windows 11には

Smart App Control(スマート アプリ コントロール)

というセキュリティ機能があります。

この機能は、

  • 信頼できるアプリ
  • 未知のアプリ
  • 怪しいアプリ

を判定し、安全性が確認できないプログラムをブロックします。

Visual Studioで自分で作成したプログラムは、

まだ署名されていない未知のアプリ

として扱われることがあります。

その結果、

Visual Studio
    ↓
自分で作ったDLL
    ↓
Smart App Control
    ↓
実行をブロック

という流れになります。


確認方法

Windows 11では

設定

プライバシーとセキュリティ

Windows セキュリティ

アプリとブラウザー コントロール

を開きます。

すると、次のような画面になります。

その中の

スマート アプリ コントロール

を確認します。

さらに

スマート アプリ コントロールの設定

をクリックすると、

  • オン
  • 評価
  • オフ

のいずれかを確認できます。


状態ごとの意味

状態意味
オン未知のアプリを積極的にブロックする
評価Windowsが利用状況を見ながら判断する
オフSmart App Controlは動作していない

Visual Studioで影響を受けるケース

例えば授業で

Console.WriteLine()

程度のプログラムなら問題なく動くこともあります。

しかし、

WinFormsやWPFなど

DLLを読み込みながら実行するアプリでは

○ ビルド成功

×

DLL読み込み失敗

となることがあります。


学校や職業訓練校では注意

授業用PCでは、

Smart App Control以外にも

  • AppLocker
  • Windows Defender Application Control(WDAC)
  • 組織のセキュリティポリシー

が設定されている場合があります。

そのため、

生徒自身の判断でSmart App Controlをオフにすることはおすすめできません。

環境によっては、一度オフにすると簡単には再度オンに戻せない場合があります。


授業中の切り分け方法

まずは次の順番で確認しましょう。

  1. 他の生徒PCで同じプロジェクトが動くか確認する
  2. bin と obj フォルダーを削除してリビルドする
  3. Smart App Controlの状態を確認する
  4. それでも同じエラーなら、管理者へ相談する

今回のポイント

今回のエラーは、

C#のコードが間違っているわけではありません。

また、

Visual Studioが壊れているわけでもありません。

Windows 11のセキュリティ機能が、

Visual Studioで作成した未署名のDLLを実行前にブロックした

ことが原因でした。

授業中に同様のエラーが発生した場合は、コードを修正する前に、まずWindowsのセキュリティ設定を確認することをおすすめします。

訪問数 3 回, 今日の訪問数 3回

広告

C#

Posted by hidepon