dot net core 构建 platform/os 个特定代码或 class 个文件
dot net core build platform/os specific code or class files
我想构建一个 .net 核心库,它将具有执行 win32 和 osx 调用的平台特定代码,并且在为每个目标 os 编译库时,我想包括正确的 os 代码。
我查看了 corefx 和大量文档,经过多次谷歌搜索后,我发现唯一的方法是在运行时执行 OS 检测,但这既低效又乏味。就 corefx 而言,他们有一个复杂的构建系统,该系统似乎可以自动引入特定于平台的文件,但它依赖于 msbuild 等。我错过了什么吗?
如何在文件级别或代码级别为 OS 有条件地定位代码,例如:
#if osx
// come code
#endif
或者,按照 golang 的方式,将 os 名称放在文件名中,例如 MyClass.osx.cs 用于 osx 代码, 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
我想构建一个 .net 核心库,它将具有执行 win32 和 osx 调用的平台特定代码,并且在为每个目标 os 编译库时,我想包括正确的 os 代码。
我查看了 corefx 和大量文档,经过多次谷歌搜索后,我发现唯一的方法是在运行时执行 OS 检测,但这既低效又乏味。就 corefx 而言,他们有一个复杂的构建系统,该系统似乎可以自动引入特定于平台的文件,但它依赖于 msbuild 等。我错过了什么吗?
如何在文件级别或代码级别为 OS 有条件地定位代码,例如:
#if osx
// come code
#endif
或者,按照 golang 的方式,将 os 名称放在文件名中,例如 MyClass.osx.cs 用于 osx 代码, 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