【问题标题】:Added reference not detected in visual studio在 Visual Studio 中未检测到添加的参考
【发布时间】:2016-05-12 12:24:14
【问题描述】:

在尝试安装 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 作为我项目的参考。

理论上,使用 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 检测到我在项目中添加了此引用?

【问题讨论】:

  • 您是使用 .Net Framework 4.5 还是 .Net Portable 4.5 来构建 AsyncIO?
  • 我正在使用 .Net Framework 4.5 来构建它。
  • @ThePower:有 .Net Portable 4.5 吗?如何安装。

标签: c# visual-studio nuget zeromq netmq


【解决方案1】:

看看这里:

.NET Portable profiles

Profile111 是以下各项的组合:

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

这是您的步骤:

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

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

【讨论】:

  • 我重建 AsyncIO 并将目标更改为 4.5。它已成功构建到 dll 中。之后,我在我的项目中添加了 dll 作为参考。问题是 nuget 没有检测到我在本地安装了它。
  • @ProEns08 再次阅读最后一段。您可以附加对 AsyncIO 的引用,但此引用不起作用。
  • 是的,你是对的:如何成功地将它作为参考添加到我的项目中。
  • 你的回答很有用,+1。但是,直到现在我还没有解决这个问题。
  • @ProEns08 我附加了一种解决方法。试试看。
【解决方案2】:

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

【讨论】:

  • 是的,我这样做是为了构建 AsyncIO。问题是添加AsyncIO的dll时,并没有检测到。
  • 希望你能理解我的问题。
  • 为什么通过Nuget安装DLL后还要添加呢?在包管理器控制台中创建“PM> Install-Package AsyncIO”后,您的所有引用都已设置好,您可以开始使用了。你能描述一下你正在采取的步骤吗?
  • 我重新提出了这个问题。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-11-15
  • 2017-12-13
  • 1970-01-01
  • 2011-09-19
  • 2017-12-25
相关资源
最近更新 更多