首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >有简单的方法让Visual 2015使用特定的ToolsVersion吗?

有简单的方法让Visual 2015使用特定的ToolsVersion吗?
EN

Stack Overflow用户
提问于 2015-12-03 04:04:21
回答 4查看 19.6K关注 0票数 49

当使用特定版本的msbuild构建项目或解决方案时,我可以使用/toolsversion/tv开关来选择早期的/toolsversion工具链:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
"C:\Program Files (x86)\MSBuild\14.0\bin\msbuild" /tv:12.0 amazing.sln

这只适用于所有版本的msbuild,而csc.exe等的版本是基于以下内容正确选择的:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
> "C:\Program Files (x86)\MSBuild\14.0\bin\msbuild" /tv:4.0 amazing.sln
...
CoreCompile:
  C:\Windows\Microsoft.NET\Framework\v4.0.30319\Csc.exe ...
...

> "C:\Program Files (x86)\MSBuild\14.0\bin\msbuild" /tv:12.0 amazing.sln
...
CoreCompile:
  C:\Program Files (x86)\MSBuild\12.0\bin\Csc.exe ...
...

如果我不指定/tv,那么取决于我使用的msbuild的哪个版本和一些环境变量,我可能会得到以下任何一个:

  • 在项目文件中的顶级元素中指定的ToolsVersion。
  • 与我正在使用的msbuild.exe版本相对应的msbuild.exe
  • 来自msbuild.exe.config的值
  • 注册表中的值。

(见 page on MSDN)。

因此,为了使构建服务器和本地机器上的构建结果一致,我在运行/tv时使用msbuild.exe (实际上,这是在psake脚本中强制执行的,这也确保它使用相应的msbuild.exe版本)。

但是,在使用Visual进行构建时不能使用/tv开关。相反,Visual 2013及以上将使用该版本的Visual附带的.net工具链,除非

  • 环境变量MSBUILDLEGACYDEFAULTTOOLSVERSION被设置并且..。
  • ...all项目文件将ToolsVersion属性设置为我希望使用的版本。

这是如此的巴洛克风格,我不敢相信有人真的在这样做。因此,我的问题是:

  • 有人在做MSBUILDLEGACYDEFAULTTOOLSVERSION的事吗?
  • 如果没有,是否有其他方法使Visual使用特定的ToolsVersion,而不是使用该ToolsVersion附带的Visual版本?可以存储在版本控制中的内容(因此可以存储在项目或其他设置文件中)将是理想的。

最后:

  • 我应该在乎吗?考虑到C#编译器的每个后续版本都应该能够处理以前版本的输入,而且我可以在项目文件中设置目标.net框架和C#语言级别,这是否足以确保可重复构建?

(我的偏见是,我应该关心,因为:

  • 我希望IDE和构建服务器中的构建是相同的(当然)
  • 我希望能够使用VS2015 (和未来的版本),因为它比以前的版本更好,但在我决定之前,我不想被迫使用新的工具链。

也许我想要太多.)

有关该问题的具体示例,请参阅我在github上的msbuild-vs-vs2015-toolsversion存储库。

一些背景:我这么问是因为最近我的一位同事提交了C# 6.0代码,这些代码在Visual 2015的副本上与.net一起编译,但是在CI中失败了,因为它使用了以前发布的.net工具链(他们使用了一个没有设置器的自动属性,这在罗斯林中很好,但在早期版本中不是这样)。我们将更新CI构建到罗斯林,但我想看看我们是否能够防止这种事情发生在未来。

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2016-08-11 06:00:33

我编写了一个Visual扩展来解决这个问题,它在构建过程中临时设置了环境变量MSBUILDDEFAULTTOOLSVERSION;要使用的值是从与.sln文件相同的目录中的文件.toolsversion中读取的。psake脚本读取相同的.toolsversion文件,并将值传递给/tv开关。

扩展的代码可以在这里找到:https://github.com/guyboltonking/set-toolsversion-extension。遗憾的是,我目前没有使用C++,也没有使用Visual,所以我不能为它提供任何支持(但我可以告诉您,我使用它时几个月没有任何问题)。

称赞@efaruk提醒我MSBUILDDEFAULTTOOLSVERSION的存在。

编辑:由于@mbadawi23,现在可以在VS2015和VS2017中使用扩展。

票数 6
EN

Stack Overflow用户

发布于 2016-01-26 06:09:26

注意:您可以通过使用msbuild文件或自行更改项目来创建msbuild文件,并且可以有条件地决定工具版本(https://msdn.microsoft.com/en-us/library/7z253716.aspx) (.csproj也是一个具有不同扩展的结构化msbuild脚本,它也将与VS兼容)。

问候..。

编辑:

https://msdn.microsoft.com/en-us/library/bb383985.aspx

通过在解决方案中的项目上设置$(ProjectToolsVersion)属性。这使您可以使用与其他项目不同的工具集版本在解决方案中构建项目。

因此,我认为你已经得到了答案;)

票数 2
EN

Stack Overflow用户

发布于 2016-12-09 02:28:58

若要强制Visual 2015中的特定C#版本,您可以进入项目属性-> Build ->高级->语言版本。

如果将其设置为5,编译器将抱怨C# 6的特性有: Feature‘.’在C# 5中不可用。请使用语言版本6或更高版本。

Alternativly ReSharper也有一些这样的工具。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/34065614

复制
相关文章
是什么让量子计算如此难以解释?
作者 | Scott Aaronson 译者 | Sambodhi 策划 | 刘燕 直到我们开始讨论这些计算机的潜在应用,才需要理解它们背后的物理原理。 你也许听说过,量子计算机是一台神奇的超级机器,它通过尝试不同平行宇宙中所有可能的答案,将很快治愈癌症,遏制全球变暖。15 年来,在我的博客(https://www.scottaaronson.com/blog/)和其他地方,我一直在抨击这种“卡通化”的观点,试图解释我所看到的更为微妙而又具有讽刺意味的真相。作为一名量子计算研究者,我将此视为一项公共服务,几
深度学习与Python
2023/04/01
3280
是什么让量子计算如此难以解释?
是什么原因让比特币如此诱人拥有它?
比特币是创造者中本聪(Satoshi Nakamoto)对华尔街和中央机构表达不信任和愤世嫉俗的项目,这个问题在比特币诞生之初就突显出来。
用户1251214
2019/04/20
4690
是什么原因让比特币如此诱人拥有它?
全世界的TikTok:揭秘它背后强大的算法系统
「病毒式传播」让我们开诚布公地说吧,有谁会不喜欢滑稽小狗或者小奶猫的视频呢?尤其是在全球因疫情陷入困境的今天,这样的小视频多多少少能让人逃离现实。
后端码匠
2020/08/04
1.4K0
全世界的TikTok:揭秘它背后强大的算法系统
是什么让测试工作如此辛苦?
大家好,我是测试君,下面来分享一篇文章《是什么让测试工作如此辛苦?》,希望此文能够让你有所收获,当然也希望能够结识一些在测试路上能够一起前行的朋友。
软件测试君
2019/12/05
4990
是什么让测试工作如此辛苦?
用了10年Postman,没想到它的Mock功能也如此强大
在整个开发过程中,前端或后端的延迟可能会阻碍相关团队有效地完成工作。一些后端的API工程师已经开始使用Postman去测试后端endpoint,而不依赖于前端UI来模拟API请求。
吾非同
2021/06/01
2.2K0
用了10年Postman,没想到它的Mock功能也如此强大
善待你遇到的bug,它只会让你更强大!
在速运快递项目前端页面用户注册的时候,点击注册之后总是报空指针异常,我当时一直想的是我前端页面封装model失败了吗?但是根本没有想到是CustomerService是null. 针对这个问题,我的解
神秘的寇先森
2018/05/30
3890
MyBatis流式查询,如此强大!
流式查询指的是查询成功后不是返回一个集合而是返回一个迭代器,应用每次从迭代器取一条查询结果。
架构师修炼
2022/03/31
1.1K0
Spring Boot + Vue 如此强大?
虽然 B/S 是目前开发的主流,但是 C/S 仍然有很大的市场需求。受限于浏览器的沙盒限制,网页应用无法满足某些场景下的使用需求,而桌面应用可以读写本地文件、调用更多系统资源,再加上 Web 开发的低成本、高效率的优势,这种跨平台方式越来越受到开发者的喜爱。
Leetcode名企之路
2021/09/14
6090
[译] 是什么让 Golang 如此受欢迎?语言创造者的回顾
自从 2009 年开源以来,Go 语言的人气一直在增长。其最初创建时背后的五位谷歌软件工程师回顾了是什么推动了这种增长。
pseudoyu
2023/04/11
2050
这就是深度学习如此强大的原因
来源:数学中国本文约2200字,建议阅读9分钟当有适当的神经网络架构以及足够大的数据,深度学习网络可以学习从一个向量空间到另一个向量空间的任何映射。 据报道称,由于采用基于云的技术和在大数据中使用深度学习系统,深度学习的使用在过去十年中迅速增长,预计到 2028 年,深度学习的市场规模将达到 930 亿美元。 但究竟什么是深度学习,它是如何工作的? 深度学习是机器学习的一个子集,它使用神经网络来执行学习和预测。深度学习在各种任务中都表现出了惊人的表现,无论是文本、时间序列还是计算机视觉。深度学习的成功主要
数据派THU
2022/04/22
6620
这就是深度学习如此强大的原因
这就是深度学习如此强大的原因
据报道称,由于采用基于云的技术和在大数据中使用深度学习系统,深度学习的使用在过去十年中迅速增长,预计到 2028 年,深度学习的市场规模将达到 930 亿美元。
气象学家
2022/04/18
4020
这就是深度学习如此强大的原因
惊呆!原来 markdown 的画图功能如此强大!
Markdown 是一种轻量级标记语言,相比于 xml、html 等超文本标记语言,Markdown 的语法更简单,结构更清晰,更加易读易用。
用户3147702
2022/06/27
9.4K0
惊呆!原来 markdown 的画图功能如此强大!
罗永浩直播摔“坚果”,是什么让他如此不顺心?
此外,网络上还有用户爆料称锤子坚果Pro玻璃后盖莫名开裂。 昨晚,锤子手机CEO罗永浩与产品总监朱萧木做客某直播平台,与网友们展开互动。讲究情怀的锤子科技一直深受粉丝们的喜爱,但是不知道是出于什么原因
镁客网
2018/05/29
4290
边缘计算是什么以及为什么需要它
联合航空公司在登机口、跑道和飞机上的工作人员都掌握着重要的航班信息。医疗专业人员可以使用虚拟现实耳机和平板电脑来评估和监测运动员和士兵的大脑损伤,利用SyncThink公司生产的EyeSync设备可以评估和监测运动员和士兵的脑损伤。很快,一个自动车队将能够共享道路和交通状况的数据,并相应地更新他们的行程。
边缘计算
2019/07/03
5260
边缘计算是什么以及为什么需要它
什么是DDOS攻击?它的原理是什么?它的目的是什么?
网站最头痛的就是被攻击,常见的服务器攻击方式主要有这几种:端口渗透、端口渗透、密码破解、DDOS攻击。其中,DDOS是目前最强大,也是最难防御的攻击方式之一。
拾光博客
2023/05/16
9810
Java8 中的 Stream 那么强大,那你知道它的原理是什么吗?
和迭代器又不同的是,Stream 可以并行化操作,迭代器只能命令式地、串行化操作。顾名思义,当使用串行方式去遍历时,每个 item 读完后再读下一个 item。而使用并行去遍历时,数据会被分成多个段,其中每一个都在不同的线程中处理,然后将结果一起输出。
逆锋起笔
2021/11/12
9090
jsp的10年是谁让它如此落幕?
随着容器技术(docker、k8s)以及微服务架构逐步成熟和发展,这种强调后端分离思想让jsp这个陪伴我近10年的页面渲染技术宣告落幕了,有点伤感。。。
猿芯
2020/07/06
9750
DARPA:BCI技术强大的背后推手
世界著名的BCI公司Neuralink的"缝纫机 "手术机器人可以追溯到5年7000万美元的SUBNETs计划,Stentrode的最初概念是由RE-NET计划资助的,早期Braingate试验使用的假肢是由 "Revolutionizing Prosthetics "项目计划资助,而这些重大项目资助的背后推手都来自美国国防部高级研究计划局(DARPA)每年对BCI项目数百万的投资,几十年来,DARPA一直保持对BCI项目持续的资助。在美国,该领域的几乎每一项进展或主要技术都可以追溯到DARPA对研究人员的资助,项目资助采用公开竞标的方式,且往往背后承载了远大的目标,所有项目都以在未来几年内影响整个领域未来为目标。
脑机接口社区
2022/09/22
3990
DARPA:BCI技术强大的背后推手
万能的Python背后:这6大原因让它爆火
大数据文摘作品,转载要求见文末 作者 | Kayla Matthews 编译 | 赵倩南,康璐,宁云州 Python现在已经成为了一种非常通用的语言了,尤其是在数据科学盛行的今天,因为其易于阅读和编写的特点,更是越来越受到编程者的追捧。在IEEE发布的2017年编程语言排行榜中Python也高居首位。然而事实上,Python的第一个公开版本在1991年就已经发布了,那么Python究竟为什么在近年爆火呢?我们这就带你来一探究竟。 Python大起底 像我们之前所说,Python已不是一种年轻的编程语言。虽然
大数据文摘
2018/05/24
8150
万能的Python背后:这6大原因让它爆火
分享一篇python的文章 Python现在已经成为一种非常常见的语言,特别是在今天的数据科学中,由于其易读易写的特点,它越来越受到程序员的欢迎。在IEEE发布的2017年编程语言排名中,Python
用户9925864
2023/03/01
1.1K0
万能的Python背后:这6大原因让它爆火

相似问题

如何从一个列表中找到数字,结果是基于给定数字的序列?

23

如何在excel中找到给定数字的最大序列?

12

从给定的字符串中找到给定长度的子序列?

24

给定数字的总和

226

序列给出了已经给定的数字

14
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文