【问题标题】:Create Portable Class Library that targets all platforms (and publishing to nuget)创建面向所有平台的可移植类库(并发布到 nuget)
【发布时间】:2016-07-11 10:31:47
【问题描述】:

我创建了库 Staty,我想通过 nuget 发布它以供其他开发人员使用。

我明确地将它创建为可移植类库,并将自己限制在非常基本的编程结构上。现在我想以一种其他人可以轻松使用我的库的方式发布它。我已经将我的库设置为具有以下目标的 PCL,这在我看来是最宽松的平台组合:

完成第一个版本后,我想发布它,使用 Nuget GUI 和以下 nuget 配置文件。我将release-build文件包含在portable-net4-sl4-wp7-win8文件夹下的包中(我也试过portable-net45-sl5-wp8-win8,没有任何效果)

为了验证我的库是否真正可移植,我想将它包含到另一个 PCL 项目中,但不幸的是,我只收到以下错误:无法安装包“Staty 1.0.0”。您正在尝试将此包安装到以“.NETPortable, Version=v4.5, Profile=Profile259”为目标的项目中,但该包不包含任何与该框架兼容的程序集引用或内容文件。

将其添加到常规控制台应用程序时,一切正常。当通过 References -> Add Reference ... -> Browse 直接将 dll 包含到同一个 PCL 项目中时,它也可以正常工作。

那么我发布包的方式有什么问题?

此外,我尝试将文件夹 dotnetnet45 添加到具有相同 dll 的 nuget 包中 - 没有任何成功。

【问题讨论】:

  • 检查目标列表,PCL 不在那里。您必须创建一个以列表中的其中一个为目标的测试项目。
  • 拥抱 .NET Platform Standard 和 .NET Core,blog.lextudio.com/2016/03/how-to-port-snmp-library-to-net-core PCL 不再是正确的选择。
  • @Lex 一旦正式发布,我将立即更改为新的项目构建系统,并让我清楚如何使用它。无论如何感谢您的提示。
  • @AlexanderPacha 我宁愿说所有的构建块都准备好了(NuGet 3.x 和 .NET Core RC)。如果您的库的依赖项已经包含在 RC1 或即将推出的 RC2 中,您可以立即使用它,无需等待 RTM。 #SNMP 库可能需要进一步等待,因为它缺少所需的 API。

标签: c# .net nuget nuget-package portable-class-library


【解决方案1】:

Change Targets 对话框中,您指定的是 .NET Framework 4.5,而在 NuGet 设置中,您指定的是 net4 。此外,在 NuGet 设置中,您还针对 sl4wp7。总而言之,这意味着当 NuGet 管理器 尝试将您的 NuGet 包中的库路径与您的其他 PCL 项目的配置文件匹配时,它必然会失败,因为不兼容。

请查看this 列表以确定您应该将Staty.dll PCL 放置在哪个lib 子文件夹中。 (该列表没有明确指定 ASP.NET CoreXamarin 目标,它们通常是隐含的。)从列表中您可以看到您在Change Targets 对话框匹配 Profile 259,并且该配置文件的 NuGet 目标最好是 portable-net45+netcore45+wpa81+ wp8.

(如果在文本编辑器中打开Staty.csproj项目文件,可以确认<targetFrameworkProfile>确实是Profile259。)

请将您的 NuGet 文件中的 lib 子文件夹名称更改为 portable-net45+netcore45+wpa81+wp8,您应该然后能够从您的其他 PCL 项目中引用 Staty NuGet 包,只要该其他项目针对的是 Staty NuGet 包所在的相同平台或平台的子集定位。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-10-18
    • 2012-09-20
    • 2016-02-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多