gpt4 book ai didi

.net - dot net core 构建平台/操作系统特定的代码或类文件

转载 作者:行者123 更新时间:2023-12-04 21:08:48 26 4
gpt4 key购买 nike

我想构建一个 .net 核心库,它将具有用于执行 win32 和 osx 调用的平台特定代码,并且在为每个目标操作系统编译库时,我想包含正确的操作系统代码。

我查看了 corefx 和大量文档,经过多次谷歌搜索后,我发现唯一的方法是在运行时执行操作系统检测,但这既低效又乏味。在 corefx 的情况下,他们有一个复杂的构建系统,它似乎自动地拉入特定于平台的文件,但依赖于 msbuild 等。我错过了什么吗?

我如何有条件地在文件级别或代码级别为操作系统定位代码,例如:

#if osx
// come code
#endif

或者,按照 golangs 的方式,通过将 os 名称放在文件名中,例如用于 osx 代码的 MyClass.osx.cs 和用于非平台内容的 MyClass.cs,构建过程将包含正确的文件本身。

我正在使用 Visual Studio 代码和 project.json。

(我想在 Visual Studio 中我可以定义每个平台目标并包含我自己的定义,但我在 osx 上)

提前致谢。

最佳答案

您可以在 project.json 中定义构建定义

"buildOptions": {
"define": [ "PORTABLE328" ]
}

例如:
{
"frameworks":{
"netstandard1.6":{
"dependencies":{
"NETStandard.Library":"1.6.0",
}
},
".NETPortable,Version=v4.0,Profile=Profile328":{
"buildOptions": {
"define": [ "PORTABLE328" ]
},
"frameworkAssemblies":{
"mscorlib":"",
"System":"",
"System.Core":"",
"System.Net"
}
}
}
}

现在您可以有条件地针对该目标进行编译:
#if !PORTABLE328
using System.Net.Http;
using System.Threading.Tasks;
// Potentially other namespaces which aren't compatible with Profile 328
#endif

Source

关于.net - dot net core 构建平台/操作系统特定的代码或类文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39557327/

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