visual studio 中未检测到添加的引用

Added reference not detected in visual studio

尝试安装 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 源代码并使用 .Net 4.5 在本地构建它。

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

理论上,NetMQ应该能用nuget安装成功。因为我添加了对 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 检测到我在我的项目中添加了这个引用?

尝试在项目上单击右键 -> 属性。在 "Application" 菜单中选中 "Target Framework"。应设置为 .NET Framework 4.5

看这里:

.NET Portable profiles

Profile111 是以下内容的组合:

  • .NET Framework 4.5
  • Windows 8.0
  • Windows Phone 8.1

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

因此,您尝试将 NuGet 目标附加到的项目 Windows Phone 8.1 和其他 2 个平台,我提到这个是最严格的。

现在让我们来看看命名的 NuGet 包的 source:

 <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 代码(只需 link 原始 AsyncIO 源文件 (*.cs) 到这个新的 AsyncIO_PCL 项目中)。如果你足够幸运并且 AsyncIO 的代码真的兼容,你将能够使用那个库。

这是您的步骤:

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

您使用所需的受支持平台集将 AsyncIO 构建为 PCL 的能力取决于 AsyncIO 代码,即内部使用了哪个 API 以及 API 是否受支持您定位的所有三个平台。