2

尝试安装 netmq vis nuget 时,出现以下错误:

Could not install package 'AsyncIO 0.1.18'. You are trying to install this package
 into a project that targets '.NETPortable,Version=v4.5,Profile=Profile111',
 but the package does not contain any assembly references or content files that
 are compatible with that framework. For more information, contact the package author.

问题是 netmq 依赖于 AsyncIO。安装时,nuget 发现该程序集与.Net 4.5 不兼容。

所以nuget安装AsyncIO失败,然后安装netmq失败。

所以我从 Github 下载了 AsyncIO Source 并使用 .Net 4.5 在本地构建它。

之后,添加了本地构建的 AsyncIO 的 dll 作为我项目的参考。

理论上,使用 nuget 应该可以成功安装 NetMQ。因为我添加了对 AsyncIO 的所需引用。

但是在尝试重新安装 NetMQ 时,我得到了同样的错误:

Could not install package 'AsyncIO 0.1.18'. You are trying to install this package
 into a project that targets '.NETPortable,Version=v4.5,Profile=Profile111',
 but the package does not contain any assembly references or content files that
 are compatible with that framework. For more information, contact the package author.

并且 nuget 没有检测到我在项目中添加了“AsyncIO 0.1.18”。

如何让 nuget 检测到我在项目中添加了这个引用?

4

2 回答 2

2

看看这里:

.NET 便携式配置文件

Profile111是以下各项的组合:

  • .NET 框架 4.5
  • 视窗 8.0
  • 视窗电话 8.1

或者换句话说:portable-net45+netcore45+wpa81

因此,您尝试将 NuGet 附加到 Windows Phone 8.1 和其他 2 个平台的项目中,我提到这个是最具限制性的。

现在让我们看看命名的 NuGet 包的源代码

 <ProjectGuid>{3830B7A3-0225-4FDA-B155-E085E183650C}</ProjectGuid> 
 <OutputType>Library</OutputType> 
 <TargetFrameworkVersion>v4.0</TargetFrameworkVersion> 
 <TargetFrameworkProfile> 
 </TargetFrameworkProfile> 

我们有什么在这里?我们可以看到该项目不是 PCL。它的目标是完整的 .NET 4.0 框架,这在Windows Phone 8.1上不可用。而且您的库确实以 Windows Phone 8.1 为目标。看到问题了吗?

您说如果您编译面向 .NET 4.5 的 AsyncIO,那么您可以成功地将其附加到您的项目中作为参考?这并不完全正确。我的意思是你可以附加对它的引用,但你不能使用它。当您尝试从该引用中调用某些内容时,您会看到这一点。

为了使用您的 AsyncIO,PCL 必须将 AsyncIO 构建为针对相同或更多限制性平台集的 PCL。尝试创建一个针对 Profile111 的 PCL 项目并尝试使用它编译 AsyncIO 代码(只需将原始 AsyncIO 源文件 (*.cs) 链接到这个新的 AsyncIO_PCL 项目中)。如果你足够幸运并且 AsyncIO 的代码真的兼容,你将能够使用该库。

以下是您的步骤:

  1. 创建一个类型为 PCL 类库的新项目(名为 AsyncIO_PCL)。
  2. 选择 Profile111 平台集,即
    • .NET 框架 4.5
    • 视窗 8.0
    • 视窗电话 8.1
  3. 将原始 AsyncIO 项目中的所有 .cs 文件保存一个 (AssemblyInfo.cs) 链接到新的 AsyncIO_PCL 项目中。
  4. 将输出程序集名称设置为与原始 AsyncIO 项目中的相同。
  5. 尝试构建项目。

您将 AsyncIO 构建为具有所需支持平台集的 PCL 的能力取决于 AsyncIO 代码,即内部使用的 API 以及您所针对的所有三个平台是否都支持该 API。

于 2016-05-12T13:16:58.767 回答
-1

尝试在项目上单击右键-> 属性。在“应用程序”菜单中选中“目标框架”。它应该设置为 .NET Framework 4.5

于 2016-05-12T12:41:03.997 回答