【问题标题】:Nuget support across projects being built with different .NET Platform (i.e. .NET 2, .NET 4, etc.)跨使用不同 .NET 平台(即 .NET 2、.NET 4 等)构建的项目的 Nuget 支持
【发布时间】:2013-05-29 21:46:38
【问题描述】:
问题:
我会尽量保持简单。
- 我们有两种相同的解决方案,但一种在 .NET 2.0 中构建,另一种在 .NET 4.0 中构建
- 这两个解决方案都包含一个项目,每个项目都是相同的,但一个是在 .NET 2.0 和 .NET 4.0 中构建的。
- 两个项目引用相同的文件
- 该方法的目的是我们需要构建一个辅助库但需要支持多个平台(.NET 2.0..NET 4.0 等)
- 解决方案、项目和源文件都位于同一个文件夹中。
我们的目标:
我们希望将 Nuget 用于 NLog。但是,我们要确保 .NET 2.0 项目仅绑定到 Nuget NLog 2.0 库,而 .NET 4.0 项目仅绑定到 Nuget NLog 4.0 库。
Nuget 有没有支持这一点?即配置等。
谢谢。
【问题讨论】:
标签:
.net
nuget
multiplatform
【解决方案1】:
NLog 包包含适用于 .NET 2.0 和 .NET 4.0 平台的程序集。您应该像这样将程序集放在同一个包中,并将 NLog 声明为依赖项。当您将包添加到项目时,NuGet 将为 NLog 和您的包获取正确的程序集。
【解决方案2】:
正如 Ufuk 所说,NLog 包已经包含 .NET 2.0 和 4.0 的程序集。
如果您只有一种解决方案:
- 安装 NLog。将自动引用正确的框架。
- 运行 NuGet Spec 命令。
- 编辑创建的 nuspec(可能使用 NuGet 包资源管理器)。
- 运行 NuGet 包。对已安装包的依赖会自动添加,包括 NLog。
但是,您有两个解决方案,并且您想创建一个包。在这种情况下:
-
创建具有以下结构的文件夹(不得包含 NLog 程序集):
PACKAGE_NAME
| lib
| | net40
| | | (insert here your .NET 4.0 assemblies)
| | net45
| | | (insert here your .NET 4.5 assemblies)
转到此文件夹的根目录。
- 运行 NuGet Spec 命令。
- 将 Package.nuspec 重命名为 PACKAGE_NAME.nuspec。
-
使用您的包数据编辑 PACKAGE_NAME.nuspec(可能通过使用 NuGet 包资源管理器)并在元数据中包含以下行:
<dependencies>
<dependency id="NLog" version="REPLACE_WITH_VERSION" />
</dependencies>
运行 NuGet Pack 命令。将创建您的包(您可以使用 NuGet 包资源管理器检查它是否正常)。
现在,安装您的包的每个人都会正确引用您的程序集。
如果您需要更多详细信息,请查看此link。