dotnet test --collect:"Code Coverage"を実行すると、既定で動的ネイティブ インストルメンテーションが無効になりました。 この変更は、ネイティブ コードからコード カバレッジを収集する方法に影響します。 マネージド コードからコード カバレッジを収集する方法には影響しません。
導入されたバージョン
.NET 10 GA
以前の動作
以前は、動的ネイティブ インストルメンテーションが既定で有効になっており、静的ネイティブ インストルメンテーションを使用できない場合にネイティブ モジュールのフォールバックを使用していました。 この動作については、 静的および動的ネイティブ インストルメンテーションで説明されています。
dotnet test --collect:"Code Coverage"
# Dynamic native instrumentation was enabled by default
新しい動作
.NET 10 以降では、動的ネイティブ インストルメンテーションは既定で無効になっています。
<EnableDynamicNativeInstrumentation>false</EnableDynamicNativeInstrumentation> オプションは、既定で dotnet test および vstest から設定されます。
runsettings ファイルでオプションを明示的に設定した場合、そのオプションはオーバーライドされません。
dotnet test --collect:"Code Coverage"
# Dynamic native instrumentation is now disabled by default
<EnableDynamicNativeInstrumentation>true</EnableDynamicNativeInstrumentation> ファイルでを設定することで、動的ネイティブ インストルメンテーションを再度有効にすることができます。 ただし、これを行うと、"covrun64.dll が見つからなかったため、コードの実行を続行できません" というエラーが発生する可能性があります。このエラーは、32 ビット プロセスの covrun32.dll でも発生する可能性があります。
破壊的変更の種類
この変更は 動作の変更です。
変更の理由
dotnet testでの下位互換性を維持するために、動的ネイティブ インストルメンテーションが既定で有効になりました。 ただし、プロセスに DLL を挿入する方法は標準的ではありません。 .NET 10 ランタイムの セキュリティ強化の変更 により、リンクされた DLL が見つからないため、プロセスが エラーでクラッシュします。 非対話型セッションやコマンド ラインではエラーが表示されない場合がありますが、プロセスはクラッシュします。
動的ネイティブ インストルメンテーションは、 dotnet-coverageによって既定で既に無効になっています。これは、同じ基になるツールを使用してコード カバレッジを収集する別の方法です。 また、ネイティブ プロジェクトがない Visual Studio のソリューションでは、既定で無効になっています。
推奨されるアクション
ネイティブ コンポーネントがないソリューションに対するカバレッジを収集する場合、影響を受けることはないはずです。 ただし、カバレッジ情報を収集するときにパフォーマンスが向上することがあります。
C++ プロジェクトなどのネイティブ コンポーネントを含むソリューションのカバレッジを収集する場合は、次のオプションがあります。
静的ネイティブ インストルメンテーションを使用するようにプロジェクトを構成する
OR
Microsoft.CodeCoverage 18.0.1 に更新し、動的ネイティブ インストルメンテーションを有効にします。
-
<EnableDynamicNativeInstrumentation>true</EnableDynamicNativeInstrumentation>ファイルに設定を追加します。 -
VSTEST_DISABLE_DYNAMICNATIVE_CODECOVERAGE_DEFAULT_SETTING=1環境変数を設定することで、この新しい既定値からグローバルにオプトアウトします。
同様に、
vstest.consoleを使用してコード カバレッジを収集する場合、.NET 10 SDK がインストールされているシステムで動的ネイティブ カバレッジを正常に収集するには、VSTest バージョン 18.0.1 以降が必要です。-
影響を受ける API
なし。
.NET