如何让 Visual Studio 2015 xproject (project.json) 引用依赖项目的最高框架

2023-11-22

我正在创建一个针对多个平台(.NET 4.0、.NET 4.5、.NETStandard 1.0 和 .NETStandard 1.3)的可重用库。该项目的 .NET 4.5 版本包含一些 .NET 4.0 版本下不可用的功能。

引用该库项目的单元测试项目只有一个目标平台,即 NET 4.5.1。该测试项目显然包含一些测试核心库的 .NET 4.5 特定功能的代码。

但不幸的是,测试项目无法编译,因为 Visual Studio 似乎引用了 .NETStandard 1.0 版本,该版本显然不包含此功能。

为了演示我的问题,我将其简化为以下两个项目:

核心库:

{
  "version": "1.0.0-*",

  "frameworks": {
    "netstandard1.0": {
      "dependencies": {
        "NETStandard.Library": "1.6.0"
      }
    },
    "net40": {},
    "net45": {}
  }
}

代码文件:

namespace CoreLibrary
{
#if NETSTANDARD1_0
    public class ClassNetStandard { }
#endif

#if NET40
    public class ClassNet40 { }
#endif

#if NET45
    public class ClassNet45 { }
#endif
}

测试库:

{
  "version": "1.0.0-*",

  "dependencies": {
    "CoreLibrary": { "target": "project" }
  },
  "frameworks": {
    "net451": {}
  }
}

Code:

// This compiles
new CoreLibrary.ClassNetStandard();

// This doesn't.
// error: Type or namespace 'ClassNet40' does not exist in namespace 'CoreLibrary'
new CoreLibrary.ClassNet40();
// error: Type or namespace 'ClassNet45' does not exist in namespace 'CoreLibrary'
new CoreLibrary.ClassNet45();

我应该更改什么才能允许我的单元测试项目编译和测试特定的 .NET 4.5 功能?


用于 .NET Core 的 Visual Studio 工具似乎存在错误。当您从另一个框架引用多框架项目时,Visual Studio 仅从列表中获取第一个列出的框架(在您的情况下为“netstandard1.0”),并将该引用的项目视为该框架的单个目标。然而,编译器正确地处理了这个问题,并且虽然它seems该项目构建正确 - 但实际上并非如此。另一方面,当您使用ClassNet45定义-它seems它无法编译(Visual Studio 显示错误) - 它确实编译成功。

看来用于 .NET Core 的 Visual Studio 工具还不够完善,但这个错误可能会在不久的将来得到解决。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何让 Visual Studio 2015 xproject (project.json) 引用依赖项目的最高框架 的相关文章

随机推荐

  • 解析注释行

    鉴于以下基本语法 我想了解如何处理注释行 缺少的是处理
  • 重定向后从 XHR 对象获取最终 url

    假设我使用 ajax 例如通过 jQuery 对实现 PRG 模式的 API 执行 POST 请求 因此它会重定向我 POST some api HTTP 1 1 303 See Other Location some other loca
  • 关于 stun 服务器的困惑

    我的要求是 我将打开一个UDP服务器监听X端口 本地机器 和machine public IP 可以发送UDP包给我 我的机器没有public IP 基本上我需要stun 我正在测试stuntman服务器 客户端项目 我在服务器 公共IP
  • x86_64 寄存器 rax/eax/ax/al 覆盖完整寄存器内容[重复]

    这个问题在这里已经有答案了 正如广泛宣传的那样 现代 x86 64 处理器具有 64 位寄存器 可以以向后兼容的方式用作 32 位寄存器 16 位寄存器甚至 8 位寄存器 例如 0x1122334455667788 rax 64 bits
  • 字符串不可变有什么好处?

    有一次我研究了字符串不可变的优点 因为它可以提高内存性能 有人可以向我解释一下吗 我在互联网上找不到它 不变性 对于字符串或其他类型 可以有很多优点 它使推理代码变得更加容易 因为您可以对变量和参数做出否则无法做出的假设 它简化了多线程编程
  • 使用 IDataReader 作为 IEnumerable 的最佳方法?

    我需要使用Linq on any 数据读取器像这样的实现 var c sqlDataReader AsEnumerable Count Example public abstract class Test public abstract S
  • 将数组拆分为唯一的对

    假设我从一个简单的数组开始 理论上可以是任意长度 ids array 1 2 3 4 将这个数组拆分为一组唯一对的数组的最佳解决方案是什么 例如 pair 0 array 1 2 pair 1 array 1 3 pair 2 array
  • 使用 Laravel Eloquent 直接增加或减少列中的数字更新

    我有一个查询 我在哪里使用 Eloquent 来查找 ID 但我需要的是直接在 eloquent 查询中减去 与查询生成器中相同 文档代码 flight App Flight find 1 flight gt name New Flight
  • FirebaseMLVisionTextModel 已被弃用,取而代之的是 MLKitTextRecognition

    我正在使用 Firebase MLKit TextRecognition API 尝试更新时出现警告 pod Firebase MLVisionTextModel 如何更新 Firebase MLKit 库 FirebaseMLVision
  • 如何按嵌套值对 JSON 对象进行排序?

    我有一个 ajax 调用 它返回一个非常复杂的 JSON 对象 并且我很难对其进行排序 My call post reports ajax arguments function data 响应 10001 unitname Fort Wor
  • 为什么 Rust 中的 const 函数不能调用关联函数?

    This const fn pow2 exp u32 gt u32 u32 pow exp 2 导致编译器错误 error E0015 calls in constant functions are limited to constant
  • 隐藏 ListBox 控件中的垂直滚动条

    我正在开发一个应用程序 需要ListBox控制 不幸的是 当我在中添加太多项目时ListBox 显示垂直滚动条 我可以做些什么来隐藏显示的垂直滚动条ListBox 我可以看到有一个隐藏水平滚动条的属性 但没有垂直滚动条的属性 问题解决了 我
  • 如何在 .NET 类库中创建“抽象”枚举?

    我正在制作一个服务器库 其中数据包关联是通过枚举完成的 public enum ServerOperationCode byte LoginResponse 0x00 SelectionResponse 0x01 BlahBlahRespo
  • Python:数据与文本?

    Guido van Rossum 的演讲蟒蛇3000提到了一些最终可以让从 Python 2 过渡到 Python 3 更容易的事情 他专门讨论了文本处理 因为将 Unicode 作为 Python 3 中字符串的唯一表示形式是主要变化之一
  • UPDATE 锁如何防止常见形式的死锁?

    The SQL Server 在线书籍比如说UPDATE锁可以防止常见形式的死锁 更新锁 更新 U 锁可防止常见形式的死锁 他们如何防止常见形式的僵局 我这么说是什么意思 死锁的一种常见形式是两个进程尝试从共享 S 锁升级 即读锁 到独占
  • 将边框应用于 Chrome 中的复选框

    我的网站上有很多表格 当然 其中的许多字段都是必需的 如果必填字段留空 则会为其分配一个 错误 类 并且我尝试用红色圈出该字段 无论它是文本字段 下拉菜单还是复选框 我的 css 文件中有以下代码 error input error sel
  • 从 SQL 查询到应用程序代码的回溯?

    有没有办法在 Rails 开发日志中找到哪一行代码生成了 MySQL 语句 为了进行一些性能优化 我想找到我的应用程序的哪个部分正在创建哪些 MySQL 查询 当我查看日志时 我看到我所做的每个网络请求上都会闪烁数百个查询 我需要找出它们来
  • CoffeeScript 中的命名空间

    我想像在 javascript 中那样使用关键字 with 来使用命名空间 但是 CoffeeScript 将此报告为保留关键字并拒绝编译 有什么方法可以在 cs 中使用命名空间吗 特别是 我想动态包含 CoffeeScript 文件 受信
  • Angular 2:在注入 Router 之前引导至少一个组件

    我在 RC5 应用程序中收到此错误 Promise 拒绝 在注入 Router 之前引导至少一个组件 main ts import platformBrowserDynamic from angular platform browser d
  • 如何让 Visual Studio 2015 xproject (project.json) 引用依赖项目的最高框架

    我正在创建一个针对多个平台 NET 4 0 NET 4 5 NETStandard 1 0 和 NETStandard 1 3 的可重用库 该项目的 NET 4 5 版本包含一些 NET 4 0 版本下不可用的功能 引用该库项目的单元测试项