0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Azure PipelinesでデバイスドライバをビルドするとApiValidatorがエラーを出す問題の解決方法

Last updated at Posted at 2025-09-19

概要

WDK 10.0.26100.1はNuGet経由でも取得できるようになり、WDK未インストールなビルドマシンでもCI/CDでドライバをビルドできます。いわゆるHosted Agentでもビルドできそうです。これは便利!

ところが、Azure PipelinesのVSBuildタスクでビルドすると、ApiValidatorがエラーを出すという罠に遭遇しました。それを解決した話です。

最初に結論まとめ

  • 原因: VSBuildタスク既定のx86版MSBuildが、存在しないx86\ApiValidator.exeを探してコケる
  • 対策: VSBuildタスクにmsbuildArchitecture: 'x64'を明示して、x64版MSBuildを使う

これで解決します。結果からいうと、WDKのNuGet版は、x86版のMSBuildでは動作しないようです。(少なくとも2025/9/18時点では)

YAMLのポイント部分

- task: VSBuild@1
  inputs:
    msbuildArchitecture: 'x64'

VSBuildのドキュメントはこちらです。

説明

さっそくNuGet版のWDKを入れて、ローカル(オンプレPC)でmsbuildでのビルドに成功しました。しかし、Azure PipelinesのVSBuildタスクで同じソリューションをビルドすると、ビルド自体は成功しているようですがその後のチェックでエラーが出ています。

ログはこんな感じでした。

[error] packages\Microsoft.Windows.WDK.x64.10.0.26100.4204\c\build\10.0.26100.0\WindowsDriver.common.targets(1996,5):
  Error MSB3721: The command
    "D:\a\1\s\packages\Microsoft.Windows.WDK.x64.10.0.26100.4204\c\bin\10.0.26100.0\x86\ApiValidator.exe"
    -DriverPackagePath:D:\a\1\s\x64\Debug\MyDriver.sys
    -SupportedApiXmlFiles:D:\a\1\s\packages\Microsoft.Windows.WDK.x64.10.0.26100.4204\c\build\10.0.26100.0\universalDDIs\x64\UniversalDDIs.xml
    -ModuleWhiteListXmlFiles:D:\a\1\s\packages\Microsoft.Windows.WDK.x64.10.0.26100.4204\c\build\10.0.26100.0\universalDDIs\x64\ModuleWhiteList.xml
    -ApiExtractorExePath:D:\a\1\s\packages\Microsoft.Windows.WDK.x64.10.0.26100.4204\c\bin\10.0.26100.0\x86
  " exited with code 1.

これだけだとアプリケーション終了コード1を返してエラーで終わったことしか分かりませんが、成功しているローカル環境と比べるなどして切り分けていったところ、原因が見えてきました。

切り分け結果

  • WDK 10.0.26100.1のNuGetパッケージ構成を見ると、x64\ApiValidator.exeはあるがx86\ApiValidator.exeは無い
  • ローカル成功ケース:
    • x64\ApiValidator.exeが使用される → 成功
  • Pipelines失敗ケース:
    • x86\ApiValidator.exeを使用される → 見つからず失敗(リターンコード1)

解決方法

VSBuildタスクのドキュメントをよく確認したところ、デフォルトでx86版を使うと書かれています。msbuildがx86版なのでツールもx86版を使っているというのはありそうです。

試しにx64版を使うようにしたところ、これだけでx64\ApiValidator.exeが選ばれ、エラーは解消しました。

こちらは成功したYAMLの一例です。

pool:
  vmImage: 'windows-2022'

steps:

- task: VSBuild@1
  displayName: 'Build solution'
  inputs:
    solution: '$(Build.SourcesDirectory)\Target.sln'
    vsVersion: '17.0'
    platform: 'x64'
    configuration: 'Debug'
    maximumCpuCount: true
    msbuildArchitecture: 'x64'  # ここがポイント:x64版MSBuildを使う
    msbuildArgs: '/restore /p:RestorePackagesConfig=true'
    

デフォルトがx86版なのはたぶん過去との互換のためで、x64版が使える環境であえてx86版のツールを使うメリットは薄いと思います。x86依存があるプロジェクトでなければ、x64版を使う方向で良いと思います。

まとめ

最新のWDKのNuGet版を使えば、WDKのないマネージドホストでもCI/CDビルドができます。しかしAzure Pipelinesには注意点があり、引っかかりましたが解決できました。

定義済みタスクは自分で一から組まなくていいので便利ですが、それだけに暗黙の動作に注意です。落とし穴に気をつけつつ、マネージドなCI/CD環境のメリット(メンテ不要)を活かしていきましょう!

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?