【发布时间】:2016-11-16 12:25:48
【问题描述】:
我正在创建一个面向多个平台(.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);
}
}
对于给定的配置和类,我的观察是:
- Visual Studio 中的语法高亮显示两个
public const string定义。 - 仍然代码似乎在 net45 框架下编译,因为编译 C# 编译器错误仅抱怨
Bar在.NETStandard,Version=1.3下不可用。 - 查看bin\debug文件夹时,有一个\net45文件夹,里面有编译好的.dll,但是\netstandard1.3文件夹是空的。
以我有限的知识和经验,我希望上述设置能够工作,但不幸的是它没有。为什么会这样,应该怎么做才能让它发挥作用?
【问题讨论】:
标签: c# .net visual-studio visual-studio-2015 project.json