共用方式為


使用 .runsettings 檔案設定單元測試

.runsettings 檔案可用來設定單元測試的執行方式。 例如,它可以用來變更測試執行所在的 .NET 版本、測試結果的目錄,或測試回合期間收集的數據。 .runsettings 檔案的常見用法是自定義 程式代碼涵蓋範圍分析

Runsettings 檔案可用來設定從 命令行、IDE 或使用 Azure Test Plans 或 Azure DevOps Server 在組建工作流程中執行的測試(先前稱為 Team Foundation Server (TFS))。

Runsettings 檔案是選擇性的。 如果您不需要任何特殊設定,則不需要 .runsettings 檔案。

建立執行配置檔並加以自定義

  1. 將執行設定檔新增至您的解決方案。 在 [方案總管]的快捷方式功能表上,選擇 [新增 >新專案],然後選取 [XML 檔案]。 以 test.runsettings等名稱儲存檔案。

    如果您沒有看到所有項目範本,請選擇 [顯示所有範本],然後選擇項目範本。

    提示

    檔名並不重要,只要您使用擴展名 .runsettings即可。

  2. 範例 *.runsettings 檔案新增內容,然後依照下列各節所述,根據您的需求加以自定義。

  3. 請使用下列其中一種方法指定您想要的 *.runsettings 檔案:

  4. 執行單元測試以使用自定義回合設定。

如果您想要在 IDE 中開啟或關閉自訂設定,請在 [測試] 選單上選或取消選取檔案。

提示

您可以在方案中建立多個 .runsettings 檔案,並視需要選取一個作為使用中測試配置檔。

在 IDE 中指定執行設定檔

可用的方法取決於您的 Visual Studio 版本。

Visual Studio 2019 16.4 版和更新版本

在 Visual Studio 2019 16.4 版和更新版本中指定執行配置檔有三種方式。

自動偵測執行設定檔案

注意

這隻適用於名為 .runsettings的檔案。

若要自動偵測執行配置檔案,請將它放在解決方案的根目錄。

如果啟用自動偵測執行設定檔,此檔案中的設定會套用到所有測試執行中。 您可以使用兩種方法來開啟 Runsettings 檔案的自動偵測:

  • 選取 [工具] [] [>] [] [選項] [] [>] [] [測試] [] [>] [] [自動偵測 runsettings 檔案]

    Visual Studio 中的「自動偵測 'runsettings' 檔案」選項

  • 選取 測試>配置執行設定>自動偵測 runsettings 檔案

    Visual Studio 中的 [自動偵測 runsettings 檔案] 功能表

手動選取執行設定檔案

在 IDE 中,選擇 [測試]>[設定執行設定]>選擇 [方案全域 runsettings 檔案],然後選擇 [.runsettings 檔案]。

  • 此檔案會覆寫解決方案根目錄的 .runsettings 檔案(如果存在),並會套用到所有測試運行。
  • 此檔案選取範圍只會保存在本機。

在 Visual Studio 中選取全測試解決方案 Runsettings 檔案功能表

設定組建屬性

透過項目檔或 Directory.Build.props 檔案,將建置屬性新增至專案。 項目的執行配置檔是由 RunSettingsFilePath 屬性所指定。

  • C#、VB、C++ 和 F# 專案中目前支援專案層級執行設定。
  • 為專案指定的檔案會覆寫方案中指定的任何其他執行配置檔。
  • 這些 MSBuild 屬性 可用來指定 runsettings 檔案的路徑。

為專案指定 .runsettings 檔案的範例:

<Project Sdk="Microsoft.NET.Sdk">
  <PropertyGroup>
    <RunSettingsFilePath>$(MSBuildProjectDirectory)\example.runsettings</RunSettingsFilePath>
  </PropertyGroup>
  ...
</Project>

Visual Studio 2019 16.3 版和更早版本

若要在 IDE 中指定執行設定檔,請選擇 [測試]>選取 [設定檔]。 流覽至 .runsettings 檔案。

Visual Studio 2019 中選取測試設定檔選單

檔案會出現在 [測試] 功能表上,您可以選取或取消選取它。 當選擇執行設定檔時,每當您選擇 [分析程式碼涵蓋]時,該設定檔就會被套用。

從命令行指定執行設定檔

若要從命令行執行測試,請使用 vstest.console.exe,並使用 /Settings 參數來指定配置檔。

  1. 開啟 Visual Studio的開發人員命令提示字元。

  2. 輸入類似下列命令:

    vstest.console.exe MyTestAssembly.dll /EnableCodeCoverage /Settings:CodeCoverage.runsettings
    

    vstest.console.exe --settings:test.runsettings test.dll
    

如需詳細資訊,請參閱 VSTest.Console.exe 命令行選項。

*.runsettings 檔案

*.runsettings 檔案是 XML 檔案,其中包含在 RunSettings 元素中的不同配置元素。 後續各節會詳細說明不同的元素。 如需完整的範例,請參閱 範例 *.runsettings 檔案

<?xml version="1.0" encoding="utf-8"?>
<RunSettings>
  <!-- configuration elements -->
</RunSettings>

每個組態元素都是選擇性的,因為它具有預設值。

RunConfiguration 元素

<RunConfiguration>
    <MaxCpuCount>1</MaxCpuCount>
    <ResultsDirectory>.\TestResults</ResultsDirectory>
    <TargetPlatform>x86</TargetPlatform>
    <TargetFrameworkVersion>net6.0</TargetFrameworkVersion>
    <TestAdaptersPaths>%SystemDrive%\Temp\foo;%SystemDrive%\Temp\bar</TestAdaptersPaths>
    <TestCaseFilter>(TestCategory != Integration) &amp; (TestCategory != UnfinishedFeature)</TestCaseFilter>
    <TestSessionTimeout>10000</TestSessionTimeout>
    <TreatNoTestsAsError>true</TreatNoTestsAsError>
</RunConfiguration>

RunConfiguration 元素可以包含下列元素:

節點 預設 價值觀
MaxCpuCount 1 選項名稱會區分大小寫,而且很容易拼錯為 MaxCPUCount

此設定可控制處理程序層級的平行度。 使用 0 啟用最大進程層級平行處理原則。

此設定決定可以平行執行的測試 DLL 或其他測試容器數目上限。 每個 DLL 都會在自己的 testhost 進程中執行,而且會在進程層級與其他測試 DLL 中的測試隔離。 此設定不會強制每個測試 DLL 中的測試平行執行。 控制 DLL 內的平行執行(在線程層級上)取決於測試架構,例如 MSTest、XUnit 或 NUnit。

默認值為 1,這表示只會同時執行一個testhost。 特殊值 0 可讓您擁有與邏輯處理器數目相等的 testhost(例如 6,適用於具備 6 個實體核心且未使用多執行緒的電腦,或 12 個適用於具備六個實體核心且使用多執行緒的電腦)。

執行中的相異 DLL 數目決定啟動的testhost實際數目。
結果目錄 放置測試結果的目錄。 路徑相對於包含 .runsettings 檔案的目錄。
TargetFrameworkVersion net40 或 netcoreapp1.0 省略此整個標籤以自動偵測。

此設定會定義用來執行測試的架構版本或架構系列。

接受的值是任何架構標識,例如 net48net472net6.0net5.0netcoreapp3.1uap10.0 或任何有效的完整架構名稱,例如.NETFramework,Version=v4.7.2.NETCoreApp,Version=v6.0.0。 為了向後相容性,接受 Framework35Framework40Framework45FrameworkCore10FrameworkUap10,分別對應於net35net40net45netcoreapp1.0uap10.0 的意義。 所有值都不區分大小寫。

所提供的值是用來判斷要使用的測試運行時間提供者。 每個測試運行時間提供者都必須遵守要使用的架構系列,但可能不會遵守確切的架構版本:

針對 .NET Framework 4.5.1 - 4.8,會使用以指定的確切版本建置的 testhost。 針對超出該範圍的值,會使用 .NET Framework 4.5.1 testhost。

針對 .NET,測試專案的 <TargetFramework>(或更精確地 runtimeconfig.json)會決定實際版本。

針對 UWP,測試專案應用程式本身就是一個測試主機(testhost),並決定所使用的 UWP 實際版本。

省略 .runsettings 檔案中的 TargetFrameworkVersion 元素,以便自動從建置的二進位檔判定框架版本。

自動偵測時,所有目標架構都會整合成單一通用架構。 找到與相同目標 Framework 系列不同的版本時,會選擇較新版本(例如 net452、net472、net48 = net48)。

針對 .NET Framework 執行器(在 Visual Studio 中,或開發人員命令行中的 vstest.console.exe),通用目標架構為 net40。 針對 .NET 執行器 (dotnet test + DLL),通用目標架構會設定為 netcoreapp1.0。
目標平台 x86 省略此整個標籤以自動偵測。

此設定會定義用來執行測試的架構。 可能的值為 x86x64ARMARM64S390x

自動偵測時,AnyCPU DLL 的架構可能會根據執行器而有所不同。 針對 .NET Framework 執行器(在 Visual Studio 或開發人員命令行中 vstest.console.exe),預設值為 x86。 針對 .NET 執行器 (dotnet test),預設值為目前的進程架構。

TreatTestAdapterErrorsAsWarnings 錯誤、正確
TestAdaptersPaths TestAdapters 所在目錄的路徑之一或多個
TestCaseFilter 格式 <屬性的篩選表達式><運算符><值>[|&<Expression>]。 布爾運算子 & 應該由 HTML 實體表示 &。 表達式可以括在括弧中。 如需表達式結構的詳細語法,請參閱 vstest/docs/filter.md
TestSessionTimeout 允許使用者在超過指定的逾時時終止測試會話,以毫秒為單位。 設定逾時可確保資源耗用良好,且測試會話受限於設定的時間。 此設定 可在 Visual Studio 2017 15.5版 及更新版本中取得。
DotnetHostPath 指定用來執行 testhost 之 dotnet 主機的自訂路徑。 當您建置自己的 dotnet 時,例如建置 dotnet/runtime 存放庫時,會很有用。 指定這個選項會略過尋找 testhost.exe,並強制使用 testhost.dll。
TreatNoTestsAsError 真或假
指定布爾值,這個值會在未探索任何測試時定義結束代碼。 如果值是 true 且未探索到任何測試,則會傳回非零結束代碼。 否則會傳回零。

DataCollectors 元素 (診斷資料配接器)

DataCollectors 元素會指定診斷數據配接器的設定。 診斷數據配接器會收集環境與受測應用程式的其他資訊。 每個配接器都有預設設定,而且如果您不想使用預設值,您只需要提供設定。

<DataCollectionRunSettings>
  <DataCollectors>
    <!-- data collectors -->
  </DataCollectors>
</DataCollectionRunSettings>

CodeCoverage 數據收集器

程式代碼涵蓋範圍數據收集器會建立測試中已執行應用程式程式代碼部分的記錄。 如需自訂程式代碼涵蓋範圍設定的詳細資訊,請參閱 自訂程式代碼涵蓋範圍分析

<DataCollector friendlyName="Code Coverage" uri="datacollector://Microsoft/CodeCoverage/2.0" assemblyQualifiedName="Microsoft.VisualStudio.Coverage.DynamicCoverageDataCollector, Microsoft.VisualStudio.TraceCollector, Version=11.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
  <Configuration>
    <CodeCoverage>
      <ModulePaths>
        <Exclude>
          <ModulePath>.*CPPUnitTestFramework.*</ModulePath>
        </Exclude>
      </ModulePaths>

      <UseVerifiableInstrumentation>True</UseVerifiableInstrumentation>
      <AllowLowIntegrityProcesses>True</AllowLowIntegrityProcesses>
      <CollectFromChildProcesses>True</CollectFromChildProcesses>
      <CollectAspDotNet>False</CollectAspDotNet>
    </CodeCoverage>
  </Configuration>
</DataCollector>

VideoRecorder 數據收集器

執行測試時,影片數據收集器會擷取螢幕錄製。 此錄製適用於針對UI測試進行疑難解答。 影片數據收集器可在 Visual Studio 2017 15.5版 及更新版本中取得。 如需設定此資料收集器的範例,請參閱 範例 *.runsettings 檔案

若要自訂任何其他類型的診斷資料配接器,請使用 測試設定檔

歸咎於數據收集器

此選項可協助您找出造成測試主機當機的問題測試。 執行收集器會在 testResults 中建立輸出檔案 (Sequence.xml),這會擷取當機前的測試執行順序。

您可以在三種不同的模式中執行責任:

  • 循序檔案模式:建立一個檔案,列出測試清單直到出現停滯為止。
  • 崩潰傾印模式:在測試主機當機時建立傾印
  • 傾印模式開啟:若測試於指定逾時之前未完成,將建立傾印。

XML 組態應該直接放在 <RunSettings> 節點:

<RunSettings>
  <RunConfiguration>
  </RunConfiguration>
  <LoggerRunSettings>
    <Loggers>
      <Logger friendlyName="blame" enabled="True" />
    </Loggers>
  </LoggerRunSettings>
  <DataCollectionRunSettings>
    <DataCollectors>
      <!-- Enables blame -->
      <DataCollector friendlyName="blame" enabled="True">
        <Configuration>
          <!-- Enables crash dump, with dump type "Full" or "Mini".
          Requires ProcDump in PATH for .NET Framework. -->
          <CollectDump DumpType="Full" />
          <!-- Enables hang dump or testhost and its child processes 
          when a test hangs for more than 10 minutes. 
          Dump type "Full", "Mini" or "None" (just kill the processes). -->
          <CollectDumpOnTestSessionHang TestTimeout="10min" HangDumpType="Full" />
        </Configuration>
      </DataCollector>
    </DataCollectors>
  </DataCollectionRunSettings>
</RunSettings>

TestRunParameters

<TestRunParameters>
    <Parameter name="webAppUrl" value="http://localhost" />
    <Parameter name="docsUrl" value="https://learn.microsoft.com" />
</TestRunParameters>

測試回合參數提供一種方式,以定義運行時間可供測試使用的變數和值。 使用 MSTest TestContext.Properties 屬性存取參數(或 NUnit TestContext):

public TestContext TestContext { get; set; }

[TestMethod] // [Test] for NUnit
public void HomePageTest()
{
    string appUrl = TestContext.Properties["webAppUrl"];
}

若要使用測試回合參數,請將公用 TestContext 屬性新增至您的測試類別。

LoggerRunSettings 元素

LoggerRunSettings 區段會定義一或多個記錄器,以用於測試回合。 最常見的記錄器是控制台、Visual Studio 測試結果檔案 (trx) 和 html。

<LoggerRunSettings>
    <Loggers>
      <Logger friendlyName="console" enabled="True">
        <Configuration>
            <Verbosity>quiet</Verbosity>
        </Configuration>
      </Logger>
      <Logger friendlyName="trx" enabled="True">
        <Configuration>
          <LogFileName>foo.trx</LogFileName>
        </Configuration>
      </Logger>
      <Logger friendlyName="html" enabled="True">
        <Configuration>
          <LogFileName>foo.html</LogFileName>
        </Configuration>
      </Logger>
    </Loggers>
  </LoggerRunSettings>

MSTest 元素

這些設定專屬於執行具有 TestMethodAttribute 屬性的測試方法的測試配接器。

<MSTest>
    <MapInconclusiveToFailed>True</MapInconclusiveToFailed>
    <CaptureTraceOutput>false</CaptureTraceOutput>
    <DeleteDeploymentDirectoryAfterTestRunIsComplete>False</DeleteDeploymentDirectoryAfterTestRunIsComplete>
    <DeploymentEnabled>False</DeploymentEnabled>
    <ConsiderFixturesAsSpecialTests>False</ConsiderFixturesAsSpecialTests>
    <AssemblyResolution>
      <Directory path="D:\myfolder\bin\" includeSubDirectories="false"/>
    </AssemblyResolution>
</MSTest>
配置 預設 價值觀
ForcedLegacyMode 在舊版 Visual Studio 中,MSTest 配接器已優化,使其更快速且更具擴充性。 某些行為,例如執行測試的順序,可能與舊版的Visual Studio不同。 將值設定為 true 以使用較舊的測試配接器。

例如,如果您有針對單元測試指定的 app.config 檔案,您可以使用此設定。

我們建議您考慮重構測試,以允許您使用較新的配接器。
SettingsFile 您可以在這裡指定要與 MSTest 配接器搭配使用的測試設定檔。 您也可以從 [設定] 選單 指定測試設定檔

如果您指定此值,也必須將 ForcedLegacyMode 設定為「true」

<ForcedLegacyMode>true</ForcedLegacyMode>
DeploymentEnabled 正確 如果您將值設定為 false,則測試方法中指定的部署專案不會複製到部署目錄。
CaptureTraceOutput 擷取來自 Console.Write*Trace.Write*Debug.Write* API 的文字訊息,這些訊息將與目前執行中的測試相關聯。
啟用來自其他程序集的基類測試方法 用於指示是否啟用從繼承測試類別所屬的不同程式集中的基類中發現測試方法的值。
ClassCleanupLifecycle EndOfClass 如果您要在元件結尾進行類別清除,請將它設定為 EndOfAssembly。 從 MSTest v4 開始不再支援,因為 EndOfClass 是預設值,且唯一的 ClassCleanup 行為。
MapNotRunnableToFailed 值,指出無法執行的結果是否對應至失敗的測試。
平行化 用來設定平行處理設定:

工作線程:要用於平行處理的線程/工作者數目,預設值為 目前機器上的處理器數目

SCOPE:平行處理的範圍。 您可以設定為 MethodLevel。 根據預設,為 ClassLevel

<Parallelize><Workers>32</Workers><Scope>MethodLevel</Scope></Parallelize>
TestTimeout 0 取得指定的全域的測試案例超時。
TreatDiscoveryWarningsAsErrors 若要將測試探索警告回報為錯誤,請將此值設定為 true
TreatClassAndAssemblyCleanupWarningsAsErrors 若要將類別清除中的失敗視為錯誤,請將此值設定為 true
DeployTestSourceDependencies 值,指出是否要部署測試來源參考。
DeleteDeploymentDirectoryAfterTestRunIsComplete 正確 若要在測試執行之後保留部署目錄,請將此值設定為 false
MapInconclusiveToFailed 如果測試以不確定的狀態完成,則會對應至 [測試總管]中略過的狀態。 如果您要將不確定的測試顯示為失敗,請將值設定為 true
將Fixture視為特殊測試 若要在 Visual Studio 和 Visual Studio Code Test Explorer.trx 記錄檔中將 AssemblyInitializeAssemblyCleanupClassInitializeClassCleanup 顯示為個別專案,請將此值設定為 true
大會決議 您可以在尋找和執行單元測試時指定額外元件的路徑。 例如,針對與測試元件不在相同目錄中的相依性元件使用這些路徑。 若要指定路徑,請使用 Directory Path 元素。 路徑可以包含環境變數。

<AssemblyResolution> <Directory path="D:\myfolder\bin\" includeSubDirectories="false"/> </AssemblyResolution>

請注意,這項功能只會在使用 .NET Framework 目標時套用。

範例 .runsettings 檔案

下列 XML 顯示一般 .runsettings 檔案的內容。 複製此程式碼並加以編輯,以符合您的需求。

檔案的每個元素都是選擇性的,因為它有預設值。

<?xml version="1.0" encoding="utf-8"?>
<RunSettings>
  <!-- Configurations that affect the Test Framework -->
  <RunConfiguration>
    <!-- Use 0 for maximum process-level parallelization. This does not force parallelization within the test DLL (on the thread-level). You can also change it from the Test menu; choose "Run tests in parallel". Unchecked = 1 (only 1), checked = 0 (max). -->
    <MaxCpuCount>1</MaxCpuCount>
    <!-- Path relative to directory that contains .runsettings file-->
    <ResultsDirectory>.\TestResults</ResultsDirectory>

    <!-- Omit the whole tag for auto-detection. -->
    <!-- [x86] or x64, ARM, ARM64, s390x  -->
    <!-- You can also change it from the Test menu; choose "Processor Architecture for AnyCPU Projects" -->
    <TargetPlatform>x86</TargetPlatform>

    <!-- Any TargetFramework moniker or omit the whole tag for auto-detection. -->
    <!-- net48, [net40], net6.0, net5.0, netcoreapp3.1, uap10.0 etc. -->
    <TargetFrameworkVersion>net40</TargetFrameworkVersion>

    <!-- Path to Test Adapters -->
    <TestAdaptersPaths>%SystemDrive%\Temp\foo;%SystemDrive%\Temp\bar</TestAdaptersPaths>

    <!-- TestCaseFilter expression -->
    <TestCaseFilter>(TestCategory != Integration) &amp; (TestCategory != UnfinishedFeature)</TestCaseFilter>

    <!-- TestSessionTimeout was introduced in Visual Studio 2017 version 15.5 -->
    <!-- Specify timeout in milliseconds. A valid value should be greater than 0 -->
    <TestSessionTimeout>10000</TestSessionTimeout>

    <!-- true or false -->
    <!-- Value that specifies the exit code when no tests are discovered -->
    <TreatNoTestsAsError>true</TreatNoTestsAsError>
  </RunConfiguration>

  <!-- Configurations for data collectors -->
  <DataCollectionRunSettings>
    <DataCollectors>
      <DataCollector friendlyName="Code Coverage" uri="datacollector://Microsoft/CodeCoverage/2.0" assemblyQualifiedName="Microsoft.VisualStudio.Coverage.DynamicCoverageDataCollector, Microsoft.VisualStudio.TraceCollector, Version=11.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
        <Configuration>
          <CodeCoverage>
            <ModulePaths>
              <Exclude>
                <ModulePath>.*CPPUnitTestFramework.*</ModulePath>
              </Exclude>
            </ModulePaths>

            <!-- We recommend you do not change the following values: -->
            <UseVerifiableInstrumentation>True</UseVerifiableInstrumentation>
            <AllowLowIntegrityProcesses>True</AllowLowIntegrityProcesses>
            <CollectFromChildProcesses>True</CollectFromChildProcesses>
            <CollectAspDotNet>False</CollectAspDotNet>

          </CodeCoverage>
        </Configuration>
      </DataCollector>

      <DataCollector uri="datacollector://microsoft/VideoRecorder/1.0" assemblyQualifiedName="Microsoft.VisualStudio.TestTools.DataCollection.VideoRecorder.VideoRecorderDataCollector, Microsoft.VisualStudio.TestTools.DataCollection.VideoRecorder, Version=15.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" friendlyName="Screen and Voice Recorder">
        <!--Video data collector was introduced in Visual Studio 2017 version 15.5 -->
        <Configuration>
          <!-- Set "sendRecordedMediaForPassedTestCase" to "false" to add video attachments to failed tests only -->
          <MediaRecorder sendRecordedMediaForPassedTestCase="true"  xmlns="">           ​
            <ScreenCaptureVideo bitRate="512" frameRate="2" quality="20" />​
          </MediaRecorder>​
        </Configuration>
      </DataCollector>

      <!-- Configuration for blame data collector -->
      <DataCollector friendlyName="blame" enabled="True">
      </DataCollector>

    </DataCollectors>
  </DataCollectionRunSettings>

  <!-- Parameters used by tests at run time -->
  <TestRunParameters>
    <Parameter name="webAppUrl" value="http://localhost" />
    <Parameter name="webAppUserName" value="Admin" />
    <Parameter name="webAppPassword" value="Password" />
  </TestRunParameters>

  <!-- Configuration for loggers -->
  <LoggerRunSettings>
    <Loggers>
      <Logger friendlyName="console" enabled="True">
        <Configuration>
            <Verbosity>quiet</Verbosity>
        </Configuration>
      </Logger>
      <Logger friendlyName="trx" enabled="True">
        <Configuration>
          <LogFileName>foo.trx</LogFileName>
        </Configuration>
      </Logger>
      <Logger friendlyName="html" enabled="True">
        <Configuration>
          <LogFileName>foo.html</LogFileName>
        </Configuration>
      </Logger>
      <Logger friendlyName="blame" enabled="True" />
    </Loggers>
  </LoggerRunSettings>

  <!-- Adapter Specific sections -->

  <!-- MSTest adapter -->
  <MSTest>
    <MapInconclusiveToFailed>True</MapInconclusiveToFailed>
    <CaptureTraceOutput>false</CaptureTraceOutput>
    <DeleteDeploymentDirectoryAfterTestRunIsComplete>False</DeleteDeploymentDirectoryAfterTestRunIsComplete>
    <DeploymentEnabled>False</DeploymentEnabled>
    <AssemblyResolution>
      <Directory path="D:\myfolder\bin\" includeSubDirectories="false"/>
    </AssemblyResolution>
  </MSTest>

</RunSettings>

.runsettings 檔案中指定環境變數

環境變數可以在 .runsettings 檔案中設定,而檔案可以直接與測試主機互動。 您必須在 .runsettings 檔案中指定環境變數,以支援需要設定環境變數的非trivial 專案,例如 DOTNET_ROOT。 這些變數是在繁衍測試主機進程時設定的,而且可在主機中使用。

下列程式代碼是傳遞環境變數 .runsettings 檔案的範例:

<?xml version="1.0" encoding="utf-8"?>
<!-- File name extension must be .runsettings -->
<RunSettings>
  <RunConfiguration>
    <EnvironmentVariables>
      <!-- List of environment variables we want to set-->
      <DOTNET_ROOT>C:\ProgramFiles\dotnet</DOTNET_ROOT>
      <SDK_PATH>C:\Codebase\Sdk</SDK_PATH>
    </EnvironmentVariables>
  </RunConfiguration>
</RunSettings>

RunConfiguration 節點應包含 EnvironmentVariables 節點。 環境變數可以指定為項目名稱和其值。

注意

由於啟動測試主機時應該一律設定這些環境變數,因此測試應該一律在不同的進程中執行。 為此,當有環境變數時,將會設定 /InIsolation 旗標,以便一律叫用測試主機。