我正在学习C#。 (对不起,我不是英语母语的人。)
我正在dotnet核心中创建多平台库。
我想用一种方法切换平台。
我尝试了RuntimeInformation.IsOSPlatform()
,然后成功了。
我听说可以通过project.csproj
的属性来更改每个操作系统要执行的代码。
但是我做不到。
我想这样做。
project.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>
Program.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的东西,但是与此有什么关系呢?
谢谢。
答案 0 :(得分:2)
您要与csproj一起使用的功能通常用于.NET中的不同框架,而不是不同的OS。看到这个:https://docs.microsoft.com/en-us/dotnet/standard/frameworks
您要尝试执行的操作可以通过接口实现。有一个接口INativeMemoryinfo
并将其初始化为基于if (RuntimeInformation.IsOSPlatform() == "")
的Windows或linux版本。
旁注:由于您正在使用库,因此我建议使用.net标准而不是.net核心。
答案 1 :(得分:-1)
if(RuntimeInformation.IsOSPlatform()==“”)。