我正在开发我的第一个Docker应用程序,我想配置KeepAlive设置。在旧的Windows环境中,这是这样工作的:
[SupportedOSPlatform("windows")]
public static void ... (...)
{
Socket socket = ...;
bool useKeepAlive = ...;
int keepAliveInterval = ...;
int retryInterval = ...;
byte[] KAValues = new byte[size * 3];
Array.Copy(BitConverter.GetBytes(on), 0, KAValues, 0, size);
Array.Copy(BitConverter.GetBytes(keepAliveInterval), 0, KAValues, size, size);
Array.Copy(BitConverter.GetBytes(retryInterval), 0, KAValues, size * 2, size);
socket.IOControl(IOControlCode.KeepAliveValues, KAValues, null);
...
当尝试在基于停靠的应用程序中执行此代码时,最后一行将生成PlatformNotSupportedException
。
编译器(实际上是intellisense)在IOControlCode.KeepAliveValues
部分生成了一个警告CA1416
,指出这段代码在Windows上是受支持的。现在我确实在Windows机器上工作,但我相信基于Docker的环境会把这件事搞砸。
Edit1:我已经在函数声明之前添加了“属性”[SupportedOSPlatform("windows")]
,但这并没有解决问题。
编辑2
我看了一下我的项目文件,在那里我发现了以下条目:
<PropertyGroup>
<TargetFramework>net5.0</TargetFramework>
<UserSecretsId>7505f631-669c-4db7-ay10-4fc92e9b4b79</UserSecretsId>
<DockerDefaultTargetOS>Linux</DockerDefaultTargetOS>
<DockerfileContext>..\..\..</DockerfileContext>
<DockerComposeProjectPath>..\..\docker-compose.dcproj</DockerComposeProjectPath>
</PropertyGroup>
正如您所看到的,“DockerDefaultTargetOS”似乎是“Linux”,而我使用的是Windows机器。
有没有解决的办法?
1条答案
按热度按时间kgsdhlau1#
在WSL 2中,Linux Docker容器运行在虚拟化的Linux内核之上,而不是像在WSL 1中那样运行在Windows内核之上。因此,这就像在Hyper-V虚拟机中安装Linux并在Linux虚拟机上运行Docker一样。