【发布时间】:2015-06-02 08:28:33
【问题描述】:
我在新的 ASP.NET 5 (vnext) 项目中的一个现有项目中引用库时遇到问题。
我在网上没有找到关于转换现有库或更改编译目标的参考。
我创建了一个新的 ASP.NET 5 库,它具有不同的项目结构,所以我猜这就是为什么似乎没有办法从 VS 移植它们的原因。
除了复制文件还有其他方法吗?这将创建 2 个代码库,每个代码库都需要维护。
【问题讨论】:
标签: c# asp.net-core
我在新的 ASP.NET 5 (vnext) 项目中的一个现有项目中引用库时遇到问题。
我在网上没有找到关于转换现有库或更改编译目标的参考。
我创建了一个新的 ASP.NET 5 库,它具有不同的项目结构,所以我猜这就是为什么似乎没有办法从 VS 移植它们的原因。
除了复制文件还有其他方法吗?这将创建 2 个代码库,每个代码库都需要维护。
【问题讨论】:
标签: c# asp.net-core
有两种解决方案:
使用共享代码
您可以创建一个 ASP.Net 类库并要求它从您的其他类库编译 .cs。为此,请在您的 project.json 添加编译选项:
{
...
"compile": [ "**\\*.cs", "..\\Shared\\*.cs" ],
...
}
在此示例中,..\Shared 文件夹中的代码将与项目代码一起编译。
为 net 4.5 编译您的 ASP.Net 类库
您可以创建一个 ASP.Net 类库并要求它以 4.5 框架为目标。为此,请在您的 project.json 添加框架中的 net45 选项
{
...
"frameworks": {
"net45": { },
"dnx451": { },
"dnxcore50": { }
},
...
}
在此示例中,项目针对 3 个框架:4.5、ASP.Net full 和 ASP.Net Core
【讨论】:
新的项目系统支持编译到各种构建目标,包括“经典”.NET 项目类型(类库、控制台等)。但是你确实需要使用新的项目系统来使用它,将文件复制到新项目中。
这可能非常有用的原因是您可以维护单个代码库,如果您可以使用#if <framework-target> 块通过平台分隔代码以阻止任何平台不支持的代码运行。 framework-target 在这种情况下是 project.json 中框架条目的大写版本(即 NET45、DNX451、DNXCORE50)。
在我看来,新项目系统允许使用单个代码库来服务多个目标。如果您的代码使这成为可能,那么从单个项目文件同时生成多个输出是一个不错的选择。这并不适用于所有情况,但我认为它对于小型且非常集中的模块化选择来说是一个不错的选择。
如果您的项目需要更多的项目级处理(特殊的 ms-build 任务、预处理和后处理等),那么新的单个项目可能不会工作得那么好,您最好为每个目标使用单独的项目。随着更多选项被添加到新项目类型中,这种情况可能会在未来发生变化。
【讨论】: