我正在创建针对多个平台(.NET 4.0,.NET 4.5,.NETStandard1.0和.NETStandard1.3)的可重用库。我曾经在2个独立的项目中维护此库;一个针对.NET 4.0和.NET 4.5编译的项目,另一个针对.NETStandard1.0编译的项目。但是,这种做法非常不方便,因为它迫使我维护两个项目并将项目文件从一个项目链接到另一个项目。
现在我想这个集成到一个单一的项目,这应该是容易的,因为新的project.json结构允许我们指定frameworks
用buildOptions
。不幸的是,我被卡住了,我的项目不再编译了。这使我相信我对此构建系统的工作方式有错误的看法。
为了演示我的问题,我将其简化为以下project.json:
{
"version": "1.0.0-*",
"frameworks": {
"net45": {
"buildOptions": {
"defines": [ "NET45" ]
}
},
"netstandard1.3": {
"buildOptions": {
"defines": [ "NETSTANDARD" ]
},
"dependencies": {
"NETStandard.Library": "1.6.0"
}
}
}
}
该项目包含两个框架:.NET 4.5和.NETStandard 1.3,它们都有各自的编译器指令NET45
和NETSTANDARD
。到目前为止,一切都很好,但是一旦我开始在代码中使用那些编译器指令,一切就停止了:
using System;
public class Foo
{
#if NET45
public const string Bar = "NET45";
#endif
#if NETSTANDARD
public const string Bar = "NETSTANDARD";
#endif
public Foo()
{
System.Console.WriteLine(Bar);
}
}
使用给定的配置和类,我的观察结果是:
public const string
定义都显示为灰色。Bar
是不可下.NETStandard,Version=1.3
。以我有限的知识和经验,我希望上面的设置能够正常工作,但是不幸的是,它并没有成功。为什么会这样,应该怎么做才能使其起作用?
该选项被命名define
,不defines
。因此,要解决您的问题,只是做:
{
"version": "1.0.0-*",
"frameworks": {
"net45": {
"buildOptions": {
"define": [ "NET45" ]
}
},
"netstandard1.3": {
"buildOptions": {
"define": [ "NETSTANDARD" ]
},
"dependencies": {
"NETStandard.Library": "1.6.0"
}
}
}
}
但是,实际上您根本不需要定义这些指令,因为它们已经为您定义了(请参阅此处以获取列表)。对于NET 4.5,您已经具有名为“ NET45”的指令,对于另一个框架,其名为“ NETSTANDARD1_3”。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句