gpt4 book ai didi

c# - .csproj 能否按平台切换原生代码?

转载 作者:太空宇宙 更新时间:2023-11-03 12:03:25 26 4
gpt4 key购买 nike

我正在学习 C#。 (对不起,我不是英语母语者。)
我正在 dotnet 核心中创建多平台库。
我想用一种方法切换平台。
我尝试了 RuntimeInformation.IsOSPlatform() 然后成功了我想做的事。

我听说我可以通过project.csproj的属性改变每个操作系统要执行的代码。
但我不能那样做。

我想做这个。

项目.csproj

<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<OutputType>library</OutputType>
<TargetFramework>netstandard2.0</TargetFramework>
<PackageId>MemoryInfo</PackageId>
<Version>1.0.0</Version>
<Authors>foobar</Authors>
<Company>foobar</Company>
<EnableDefaultCompileItems>false</EnableDefaultCompileItems>
</PropertyGroup>
<ItemGroup>
<Compile Include="Program.cs" />
</ItemGroup>

//(add comment) Switch Native Code
<ItemGroup Condition="'$(TargetsWindows)' == 'true'">
<Compile Include="Linux/native.cs" />
</ItemGroup>
<ItemGroup Condition="'$(TargetsLinux)' == 'true'">
<Compile Include="Windows/native.cs" />
</ItemGroup>
</Project>

程序.cs

~~
public long GetMemorySize() //library method
{
NativeMemoryinfo mem = new NativeMemoryinfo();
return mem.GetMemorySize(); //access to each platform code
}
~~

Linux/native.cs

~~
class NativeMemoryinfo
{
public long GetMemorySize()
{
Code for Linux(/proc/meminfo...)
}
}
~~

Windows/native.cs

~~
class NativeMemoryinfo
{
public long GetMemorySize()
{
Code for Windows(Kernel32....)
}
}
~~

也许,我觉得我被误解了或者方式不对。我可以这样做吗?
在我的研究中,我发现了一种叫做“互操作”的东西 this ,但这又有什么关系呢?

谢谢。

最佳答案

您尝试与 csproj 一起使用的功能通常用于针对 .NET 中的不同框架,而不是针对不同的操作系统。看到这个:https://learn.microsoft.com/en-us/dotnet/standard/frameworks

你想做的事情可以通过接口(interface)来实现。有一个接口(interface)INativeMemoryinfo 并根据if (RuntimeInformation.IsOSPlatform() == "") 将其初始化为windows 或linux 版本。

旁注:由于您在图书馆工作,我建议使用 .net standard 而不是 .net core。

关于c# - .csproj 能否按平台切换原生代码?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56101165/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com