Process.GetCurrentProcess() 的 Process.StartInfo 在 .NET 6 单元测试中抛出 InvalidOperationException

问题描述 投票:0回答:1

我有一个针对不同目标框架编译的 .NET C# 项目。

<?xml version="1.0" encoding="utf-8"?>
<Project Sdk="Microsoft.NET.Sdk">
    <PropertyGroup>
        <TargetFrameworks>net461;net6.0-windows</TargetFrameworks>
        ...

VS 2022 中的单元测试(通过 Resharper 单元测试会话完成)访问当前进程的 StartInfo 在 4.6.1 上运行良好,但失败并出现 net.6.0 异常。

 using (Process process = Process.GetCurrentProcess())
         {
            Assert.IsTrue(process.StartInfo != null);
         }

异常文本:

*Test method HSBC.Diagnostics.Test.ProcessProxyTest.TestProcessProxy threw exception: 
System.InvalidOperationException: Process was not started by this object, so requested information cannot be determined.
    at System.Diagnostics.Process.get_StartInfo()
    ...

这是什么原因?

我看到对于两个平台,使用的主模块是 ...JetBrains\Installations\ReSharperPlatformVs17_95e6680d\TestRunner et461\ReSharperTestRunner.exe.

更新:这也发生在一个非常简单的控制台应用程序中:

// 有关详细信息,请参阅 https://aka.ms/new-console-template

using System.Diagnostics;

Console.WriteLine("Hello, World!");
using (Process process = Process.GetCurrentProcess())
{
   if (process.StartInfo != null)
   {
      Console.WriteLine("Process.StartInfo found.");
   }
}
c# process resharper system.diagnostics
1个回答
0
投票

OK,似乎从 Start() 未返回的进程中访问 StartInfo 是永远无效的...

https://learn.microsoft.com/en-us/dotnet/api/system.diagnostics.process.startinfo?view=net-6.0

您应该只访问 Start 方法返回的 Process 对象的 StartInfo 属性。例如,您不应访问 GetProcesses 返回的 Process 对象的 StartInfo 属性。 否则,在 .NET Core 上,StartInfo 属性将抛出 InvalidOperationException,而在 .NET Framework 上,它将返回一个虚拟的 ProcessStartInfo 对象.

© www.soinside.com 2019 - 2024. All rights reserved.