![](/img/trans.png)
[英]How to let a Visual Studio 2015 xproject (project.json) reference the highest framework of a depending project
[英]How do compiler directives work with project.json in Visual Studio 2015
我正在创建一个可重用的库,它针对几个平台(.NET 4.0,.NET 4.5,.NETStandard1.0和.NETStandard1.3)。 我曾经在两个独立的项目中维护这个库; 一个针对.NET 4.0和.NET 4.5编译的项目以及另一个编译.NETStandard1.0的项目。 然而,这种做法非常不方便,因为它迫使我维护两个项目并将项目文件从一个项目链接到另一个项目。
我现在正在尝试将它集成到一个单独的项目中,这应该很容易,因为新的project.json结构允许我们使用buildOptions
指定frameworks
。 不幸的是我卡住了,我的项目不再编译了。 这让我相信我对这个构建系统的工作原理有不正确的看法。
为了演示我的问题,我把它减少到以下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
定义变灰。 .NETStandard,Version=1.3
下Bar
不可用。 凭借我有限的知识和经验,我希望上述设置能够正常运行,但不幸的是,它没有。 为什么会如此,以及如何使其发挥作用?
被命名为选项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”。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.