我正在开发我的第一个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);
...
在基于docker的应用程序中尝试执行此代码时,最后一行生成PlatformNotSupportedException
。
编译器(实际上是intellisense(在IOControlCode.KeepAliveValues
部分生成一个警告CA1416
,并提到Windows支持这段代码。现在我确实在Windows机器上工作,但我相信基于Docker的环境会把这件事搞砸。
第1版:我添加了;属性";[SupportedOSPlatform("windows")]
之前刚刚声明了函数,但这并没有解决问题。
Edit2
我查看了我的项目文件,在其中我发现了以下条目:
<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机器时。
有解决方案吗?
在WSL2中,Linux docker容器在虚拟化Linux内核上运行,而不是像在WSL1中那样在Windows内核上运行。因此,这就像在Hyper-V虚拟机中安装Linux并在Linux虚拟机上运行Docker一样。