创建面向所有平台的可移植类库(并发布到nuget)

时间:2016-03-23 22:30:21

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

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

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

Targets of my PCL library

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

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

Error when including package

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

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

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

1 个答案:

答案 0 :(得分:2)

更改目标对话框中,您指定 .NET Framework 4.5 ,而在 NuGet 设置中,您的目标是 net4 。此外,在 NuGet 设置中,您还定位 sl4 wp7 。总而言之,这意味着当 NuGet Manager 尝试将 NuGet 包中的库路径与您的其他PCL项目的配置文件相匹配时,它必然会失败到期不兼容。

请查看this列表,确定您应将 lib 子文件夹放在 Staty.dll PCL中。 (该列表未明确指定 ASP.NET Core Xamarin 目标,它们通常是隐含的。)从列表中可以看到您选择的目标平台更改目标对话框与配置文件259 相匹配,此配置文件的 NuGet 目标最好为 portable-net45 + netcore45 + wpa81 + WP8

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

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