强制 Microsoft Build Tools 2015 包含框架目标版本的 mscorlib,而不是 4.6

2024-03-30

我在 Visual Studio 2015 中编写了一个应用程序,它使用 C# 6.0 功能并面向 .NET 4.5.2。当我使用 Microsoft Build Tools 2015 构建它时(这是由我们的 TeamCity 服务器完成的),生成的 bin 文件夹还包含以下副本mscorlib.dll。这里的问题是mscorlib.dll被复制的是.NET 4.6 DLL,它会在运行时导致问题。

我已将呼叫替换为string.Format()使用新的字符串插值语法来解决该问题。然而,这掩盖了根本问题,而不是解决它:为什么 .NET 4.6 DLL 包含在我的构建中,以及如何强制 4.5.2 DLL 包含在它的位置中?

如果您对这给我造成的运行时问题感兴趣,它导致了我的:

string.Format(CultureInfo.InvariantCulture, "{0}='{1}'", "key", "value")

被解释为(link https://msdn.microsoft.com/en-us/library/dn906223(v=vs.110).aspx-- 仅存在于 .NET 4.6 中):

System.String System.String.Format(System.IFormatProvider, System.String, System.Object, System.Object)

代替 (link https://msdn.microsoft.com/library/1ksz8yb7(v=vs.110).aspx):

System.String System.String.Format(System.IFormatProvider, System.String, params System.Object[])

当您在 TeamCity 生成代理上生成解决方案时,TeamCity 使用您在代理上安装的 MSBuild 版本。每个版本的 MSBuild 都是为了构建针对特定版本的 .NET 的 DLL 而创建的。例如,我认为 MSBuild 2015 的目标是 .NET 4.6。

为了使用 MSBuild 2015 构建面向 .NET 4.5.2 的 DLL,您还需要安装所谓的 .NET 4.5.2 目标包(在某些地方也称为开发包):

  • https://www.microsoft.com/net/download/visual-studio-sdks https://www.microsoft.com/net/download/visual-studio-sdks
  • .NET Framework SDK 和 Targeting pack 之间有什么区别 https://stackoverflow.com/questions/48147609/whats-the-difference-between-the-net-framework-sdk-and-the-targeting-pack

如果您不安装目标包并尝试使用错误的构建工具针对旧版本的 .NET 进行构建(就像我的情况一样),那么 MSBuild 2015 会尝试通过构建它知道的唯一方式来进行补偿:通过遵循.NET 4.6(无论如何应该向后兼容 4.5.2)并放入 .NET DLL(mscorlib.dll)在构建文件夹中。

在大多数情况下,这仍然可以正常工作,除非我的代码使用了String.Format()它在 4.5.2 和 4.6 之间发生了非常微妙的重大变化。

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

强制 Microsoft Build Tools 2015 包含框架目标版本的 mscorlib,而不是 4.6 的相关文章

随机推荐

  • 如何让 XML 注释出现在不同的项目 (dll) 中?

  • ClusterManager 重新绘制 Google 地图 v2 实用程序的标记

    我正在发出服务器请求 当我收到服务器的响应时 我正在 UI 线程上执行ClusterManager addItem 但这个项目没有在地图上绘制 只有当我进行缩放更新 时 新添加的项目才开始出现 我也尝试调试渲染器 但是onBeforeClu
  • 从 Android 中的 DatePickerDialog 中删除标题

    我想将 DatePickerDialog 限制为明天的最小值 当我输入下面显示的代码时 限制就起作用了 但是 包含日期的标题文本看起来像标题 我怎样才能解决这个问题 这是我的代码 Calendar tempDate Calendar get
  • WASAPI:选择专用输出的波形格式

    我正在尝试使用 WASAPI 打开带有输出设备的独占流 我在选择可接受的格式时遇到了困难 因为似乎没有关于给定设备接受哪些格式的提示 就我而言 IAudioClient GetMixFormat 否则会返回设备的一种默认格式 返回一种不能在
  • 排序错误

    我正在使用 Microsoft SQL Server Management Studio 我有两个数据库 一个是系统数据库 其中包含 master 数据库 另一个是我的数据库 名为CCTNS CAS DE DB 当我尝试通过使用以下工具的工
  • Android 在等待位置时显示进度对话框

    我正在使用以下示例开发基于位置的应用程序 http www androidhive info 2012 07 android gps location manager tutorial http www androidhive info 2
  • C# 中的高质量图形/波形显示组件

    我正在寻找一种使用 C 编写的快速 专业外观且可定制的波形显示组件 我想在时域和频域中主要显示实时音频波形 快 我希望能够缩放 更改轴设置 显示多个通道 自定义感觉和颜色等 有人知道任何事情吗 无论是商业的还是非商业的 谢谢你 Diego
  • 在 Git 中切换分支不会删除目录

    我在 Git 中创建了两个分支 git branch F1 git branch F2 接下来 我切换到 F1 git checkout F1 I rename my UnitTests目录到Tests git mv UnitTests T
  • 使用 LimitedConcurrencyLevelTask​​Scheduler 时延续任务挂起

    我正在研究在 C NET 4 0 中使用 TPL 我创建了一个自定义 API 来简化 Web 请求的创建和下载内容 异步 使用延续任务 那部分工作正常 当我尝试使用时出现的问题LimitedConcurrencyLevelTaskSched
  • 使用 Mocks 测试 Jest 和 Typescript

    我正在使用 Typescript 和 Jest 尝试测试我的 Angular 和 Ionic 应用程序的一些组件 但问题不仅限于 Angular 或 Ionic 因此 我正在尝试让 Jest 的模拟功能发挥作用 我只是创建一个虚拟类 我想尝
  • Visual Studio 2013 - 未安装 Visual Basic/Visual C# Web 模板

    我已在我的计算机上安装了 Visual Studio 2013 Premium MSDN 许可证 然而 ASP NET Web 应用程序模板不存在 除了 Version2012 它为我提供了 MVC 4 请参见下面的屏幕截图 我已经卸载并重
  • Flask Restful:如何使用 fields.Dict() 记录响应主体?

    In flask restplus 我想对具有嵌套列表结构的响应体进行建模 因此每当进行 api 调用时 响应体都会返回我期望的内容 在响应主体中 它有一个嵌套结构 我不知道如何记录它 我要使用吗fields Dict 谁能告诉我如何实现这
  • python 波形符一元运算符作为否定 numpy bool 数组

    应该是一个简单的问题 但我无法在任何地方找到答案 这 python 中的运算符被记录为按位反转运算符 美好的 不过 我注意到看似精神分裂的行为 即 True gt 2 1 gt 2 False gt 1 0 gt 1 numpy array
  • 有没有办法增加 IntelliSense 的字体大小?

    我无法在 Visual Studio 2017 中找到该选项 我知道您可以更改正在编写的代码的字体 但没有看到 IntelliSense 选项让我认为这是不可能的 工具 选项 环境 字体和颜色 gt 语句完成 除了 编辑器工具提示 选项更改
  • @ionic/angular 4.0.0-beta.13:不允许加载本地资源:使用 webview 2.2.3 - Ionic CLI 4.3.1

    从相机拍完照片后 这些路径就出现了 file data data xxx xxx xxx xxx files 1542782360167 jpg 我使用的是Ionic 4 其中WebView是2 2 3 通过应用观察到所有类型的回复 但没有
  • Bootstrap 将容器置于页面中间[重复]

    这个问题在这里已经有答案了 I am brand new to front end and am practising by building a fake e commerce website I ve had a few issues
  • 如何在C#中有效地在桌面上绘图?

    我想用C 直接在桌面上画图 经过一番搜索 我最终使用了桌面 HDC 中的 Graphics 对象 空 然后 我使用这个 Graphics 对象正常绘画 问题是 当屏幕的任何部分被重绘时 我的形状就会丢失 我尝试了一个 While 循环 但它
  • 扫描网站内容(快速)

    我的数据库中有数千个网站 我想在所有网站中搜索特定字符串 最快的方法是什么 我认为我应该首先获取每个网站的内容 这就是我这样做的方式 import urllib2 re string search string source urllib2
  • 在透明像素之上使用 DrawString 进行错误的文本渲染

    将文本渲染到位图时 我发现在具有非不透明 Alpha 的区域顶部渲染时 文本看起来非常糟糕 随着底层像素变得更加透明 问题变得越来越严重 如果我不得不猜测 我会说当底层像素是透明的时 文本渲染器将任何抗锯齿 灰色 像素绘制为纯黑色 以下是一
  • 强制 Microsoft Build Tools 2015 包含框架目标版本的 mscorlib,而不是 4.6

    我在 Visual Studio 2015 中编写了一个应用程序 它使用 C 6 0 功能并面向 NET 4 5 2 当我使用 Microsoft Build Tools 2015 构建它时 这是由我们的 TeamCity 服务器完成的 生