-
Notifications
You must be signed in to change notification settings - Fork 0
MS_MSBuildMarkOfTheWeb
ビルド時に「due to its being in the Internet or Restricted zone or having the mark of the web on the file.」が発生
- 戻る(MSBuild)
PowerShell 3.0 以上の Unblock-File コマンドレットでブロックを解除できる。
# 指定のフォルダ配下のブロックを解除
ls "C:\Work\Download Files" -r | unblock-file
# カレント配下のブロックを解除
ls . -r | unblock-file移行メモ(誤記): 原文の 1 行目
ls "C:\Work\Download Files" -r unblock-fileは
パイプ(|)の脱字と判断し、2 行目と同じ形に修正した
(このままでは-rの引数として解釈され、動作しない)。
補足(Mark of the Web とは): MotW は、
インターネットから取得したファイルに Windows が付ける印である。ファイルの NTFS 代替データ ストリーム(ADS)に Zone.Identifier という名前で記録される [ZoneTransfer] ZoneId=3 ← 3 = インターネット ゾーン ReferrerUrl=... HostUrl=...
ZoneId ゾーン 0 ローカル コンピューター 1 イントラネット 2 信頼済みサイト 3 インターネット(これが付くとブロックされる) 4 制限付きサイト ビルドで問題になるのは、主に次の場面である。
場面 症状 zip をダウンロードして展開 中のファイル全部に MotW が付く NuGet パッケージを手動配置 DLL が読み込めない ビルド スクリプト( .ps1/.targets)実行・インポートが拒否される ヘルプ ファイル( .chm)内容が表示されない 最も多いのは 1 つ目で、
「GitHub から zip でソースを落として展開したらビルドできない」
というのが典型的な遭遇の仕方である。
git cloneした場合は MotW が付かないため、
可能なら zip ではなく clone するのが根本的な予防策になる。
補足(確認と解除の方法): 状況の確認方法も挙げておく。
# MotW が付いているか確認する Get-Item .\Foo.dll -Stream Zone.Identifier -ErrorAction SilentlyContinue Get-Content .\Foo.dll -Stream Zone.Identifier # 配下で MotW が付いているファイルを列挙する Get-ChildItem -Recurse -File | Where-Object { Get-Item $_.FullName -Stream Zone.Identifier -ErrorAction SilentlyContinue } # 解除(原文の方法) Get-ChildItem -Recurse | Unblock-File # ストリームを直接削除しても同じ Get-ChildItem -Recurse | Remove-Item -Stream Zone.Identifier -ErrorAction SilentlyContinueGUI からの解除: ファイルのプロパティを開き、
下部の [ブロックの解除] チェック ボックスをオンにする。
ただし、zip の中身に対しては個別に解除が必要なため、**「展開する前に zip 自体のブロックを解除する」**方が効率的である
(展開後のファイルに MotW が伝播しなくなる)。Unblock-File .\downloaded.zip Expand-Archive .\downloaded.zip -DestinationPath .\src
補足(解除してよいかの判断): MotW はセキュリティ機構であり、
一括解除は本来「信頼できる取得元である」と確認した上で行う。
状況 判断 社内・自組織のリポジトリから取得した zip 解除してよい 公式サイトから取得し、ハッシュ/署名を検証済み 解除してよい 出所不明のファイル 解除しない(そもそも使わない) CI での回避策としては、
git cloneを使う(MotW が付かない。最善)- アーティファクトの取得に信頼できる内部フィードを使う
- どうしても zip を扱うなら、取得直後に
Unblock-Fileを挟むという順で検討する。
なお、Windows 11 では Office ファイルの MotW 保護が強化され、
ネットワーク共有経由でも MotW が付くようになった。
ファイル サーバー経由で成果物を配っている場合、
以前は起きなかった環境でも発生し得る点に注意する。
-
Unblock-File
https://learn.microsoft.com/ja-jp/powershell/module/microsoft.powershell.utility/unblock-file -
PowerShellメモ 一括でブロックの解除(ZoneId)
https://qiita.com/Kosen-amai/items/ae82fb61490d912e739c -
PowerShell フォルダー配下のファイルを再帰的にブロックを解除したい
~Unblock-File コマンドレット - 元「なんでもエンジニ屋」のダメ日記
https://nasunoblog.blogspot.com/2015/03/powershell-all-files-unblock-file.html
- Mark of the Web と Office
https://learn.microsoft.com/ja-jp/deployoffice/security/internet-macros-blocked - 代替データ ストリーム(Zone.Identifier)
https://learn.microsoft.com/ja-jp/windows/win32/secauthz/persistent-zone-identifier-object
Tags: 移行, テスト, デバッグ, デプロイ, .NET開発
このWikiは「Open棟梁Project」,「OSSコンソーシアム 開発基盤部会」によって運営されています。