c# - 如何在不更改 app.config(.NET 框架)的情况下让 VSTest 使用 ServerGC?
问题描述
我有一个 .NET 4.7.1 C# 类库,在一个单独的项目中有一些相关的测试。
我希望能够在 ServerGC 模式下运行测试,以复制消费者对类库的标准使用(对于普通测试和与性能相关的测试)。
根据此处的 Microsoft 文档,可以通过多种方式配置 ServerGC。
runtimeconfig.json 不是一个选项,因为这是一个 .NET Framework 项目。
在玩了一些常规项目和测试项目之后。似乎必须为任何父进程设置 ServerGC 才能使其生效。对于常规应用程序,这很好,并且可以轻松使用 MSBuild 属性ServerGarbageCollection
或 app.config 文件。在通过 VSTest 运行项目的情况下,这会使测试运行程序 (vstest.console.exe) 成为父进程,因此意味着该ServerGarbageCollection
属性无效。我宁愿不必更改 vstest.console.exe 的 app.config,因为该计算机上的所有测试运行都使用它,因此可能会干扰其他解决方案。
Microsoft 文档建议可以设置环境变量:COMPlus_gcServer
值为 1 以启用 ServerGC。可以在 runsettings 文件中为 VSTest 设置环境变量,如下面的示例和此处文档的底部所示。该文档还指出,指定环境变量将强制执行该/InIsolation
标志以确保设置环境变量,然后启动测试运行过程。但是,这似乎不起作用。
<RunSettings>
<RunConfiguration>
<EnvironmentVariables>
<COMPlus_gcServer>1</COMPlus_gcServer>
</EnvironmentVariables>
</RunConfiguration>
</RunSettings>
我添加了一个简单的测试用例,它检查GCSettings.IsServerGC
属性,尽管环境变量在同一测试中被成功读取为值为 1,但仍然给出 false。
编辑:经过更多阅读,看起来 runtimeconfig.json 属性、MSBuild 属性和环境变量都只是 .NETCore。这留下了唯一的选择,即以某种方式为 VSTest 提供包含该GCServer
属性的 app.config。有没有办法通过运行设置或 VSTest 的命令行参数来做到这一点?
解决方案
推荐阅读
- android - android studio的lib版本出错
- mongodb - 如何从 Mongo Shell 添加模式验证以要求 MongoDB 中的字符串数组?
- hangouts-chat - 是否可以在 Hangouts Chat 中通过 webhook 发送的消息中 @提及机器人?
- awk - 列增量条件
- python - Python http.client 在完全有效的 HTTP 上抛出 BadStatusLine,仅在 1 个系统上。Wireshark 验证
- youtube - youtube-dl 下载各种格式
- selenium - Selenium 无法通过标签定位元素
- scala - 从 Array[List[String]] 中列出唯一 List[String] 的有效方法是什么?
- vaadin - 如何在 Vaadin Flow 版本 12 中构建菜单栏
- python - 当我放大窗口时,框架的旧背景颜色出现在 Tkinter