创建面向所有平台(并发布到 nuget)的便携式 Class 库

Create Portable Class Library that targets all platforms (and publishing to nuget)

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

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

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

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

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

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

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

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

请查看 this 列表以确定您应该将 Staty.dll[= 放置在哪个 lib 子文件夹中44=] PCL。 (该列表未明确指定 ASP.NET CoreXamarin 目标,它们通常被隐式说明。)从列表中您可以查看您在 Change Targets 对话框中选择的目标平台是否匹配 Profile 259,以及 NuGet 目标对于此配置文件,最好是 portable-net45+netcore45+wpa81+wp8.

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

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