问题标签 [msbuild-14.0]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
9308 浏览

msbuild - 在 AppVeyor 中使用 MSBuild 14.0/C# 6.0 构建

我正在尝试在 AppVeyor 中使用 C# 6.0 代码构建一个库。我已经在AppVeyor 的本次更新本次讨论本篇博文中尝试过配置。

这是我所做的:

  • 从 AppVeyor Web 界面选择 Visual Studio 2015 作为操作系统
  • 将 MSBuild 14.0 文件夹添加到路径(从 Web 界面和 appveyor.yml 都尝试过)

    /li>
  • 在解决方案文件中更改了这些行

    /li>
  • 尝试使用自定义构建脚本调用 MSBuild

这些都不起作用。它仍然选择 MSBuild 12.0 并失败。我还能尝试什么?有些人让它工作,我看不出我错过了什么。

0 投票
2 回答
34010 浏览

c++ - MSBuild 构建 Visual Studio 2015 C++ 项目 (v140) 失败 - 找不到 v140

我并排安装了 Visual Studio 2013 和 2015。我刚刚将组合解决方案(C#、C++、C++/CLI)升级到 2015 并将 Platform Toolset 设置为 v140。

Visual Studio 的构建工作正常,但不能从 MSBuild 编译。我用的是MSBuild 14,MSBuild抱怨找不到v140,但这是无稽之谈,因为v140安装在计算机上的“c:\Program Files (x86)\MSBuild\Microsoft.Cpp\v4.0\V140”中。

关于升级解决方案的建议无法完成,因为解决方案已经升级并且解决方案上下文菜单中没有此类项目。

如果我将项目的平台工具切换到 v120,它就可以工作。

细节:

更新:

  • 从 Debug X86 中跳过了一些项目。这是故意的。
  • 该项目最初是在VS2008中创建的,然后升级到VS2013,然后升级到VS2015。
  • 这台计算机上安装了两个 Visual Studio(2013 Community 和 2015 Community)。先安装2013,后安装2015。

注册表设置如下所示: 在此处输入图像描述

MS Build 注册表设置

UPDATE2: 最小、完整和可验证的示例

我在 Visual Studio 2015 中创建了空的 C++ 控制台应用程序:

https://dl.dropboxusercontent.com/u/53387801/ConsoleApplication_v140.zip

我可以在 Visual Studio 中构建它,但我在 MSBuild 中遇到了同样的问题:

解决了:

环境变量 VisualStudioVersion 设置为 12.0 而不是 14.0将值更改为 14.0 解决了该问题。

简单的控制台应用程序在环境变量 VisualStudioVersion 更改和 Windows 注销后立即开始工作,登录。

更改环境变量 VisualStudioVersion 后仍无法构建原始项目。Visual Studio 2015 中出现了重定向解决方案上下文菜单。所以我重新定位解决方案。重新定位后,仍然无法编译解决方案(未找到 v140)。最后,我将平台工具集从v140 (not installed)更改为Visual Studio 2015 (v140)。现在该解决方案也可以从 Visual Studio 和 MSBuild 编译。

0 投票
4 回答
4208 浏览

jenkins - 从命令行构建时的 MSBuild 警告 MSB3884

在构建服务器(使用Jenkins)上构建我们的解决方案时,MSBuild会出现 14 个以下警告:

C:\Program Files (x86)\MSBuild\14.0\bin\Microsoft.VisualBasic.CurrentVersion.targets(133,9):警告 MSB3884:找不到规则集文件“ManagedMinimumRules.ruleset”。

在我的开发机器上执行相同的命令行调用,不会出现此警告。

任何想法为什么此警告出现在构建服务器上?

我已经为 MSBuild 打开了一个问题:https ://github.com/Microsoft/msbuild/issues/361

0 投票
1 回答
385 浏览

visual-studio-2015 - MSBUILD 14.0 Visual Studio 2015 CustomBuild 命令环境不包含 SetEnv 的结果,即使 Exec 包含

我使用 CoApp 创建了一个 nuget 包来打包一些代码生成器(二进制文件)。我希望能够在 msbuild custombuild 步骤中使用这些代码生成器来生成代码

我有一个定义以下内容的目标文件(使用 CoApp)

包含此代码段的目标文件像这样导入项目(vcxproj 文件)

项目内

返回期望的结果,即采取形式的结果 ../..//build/native/bin/x64\v100\Release;C:\

所以我可以调用我想从项目中运行的可执行文件。(除了与 custombuild 命令步骤不同,没有 . 的概念outputs。因此增量构建将不起作用)

然而

不包含通过 SetEnv 设置的我想要的路径。

我想这样做,以便可以在自定义构建步骤中调用通过 nuget 打包的代码生成器。

我了解command内部custombuild运行/在新 cmd 中运行,并且环境是通过设置的用户或系统环境继承的。此外,我可以使用 启动 Msbuild /p:useenv ,从而泵出我想要的任何环境。在我看来,这/p:useenv相当于硬编码路径 - 提前知道它。

我希望能够更新我的包并运行,即我希望项目管理路径,因为它是在导入的目标文件中定义的。

0 投票
0 回答
356 浏览

msbuild - 构建没有在解决方案中定义的依赖项的 MSBuild 目标

我想调用 MSBuild 在解决方案中构建单个项目。因此我使用

因为我有一些复杂的部署过程并且我想节省时间,所以我只需要构建一个项目,而不需要其他任何东西。就像这里提到的我试过

它适用于项目到项目的引用,但不适用于解决方案定义的项目引用(通过ProjectSection(ProjectDependencies)sln 文件)。

有谁知道也忽略解决方案项目引用的方法?

0 投票
1 回答
13273 浏览

c# - 如果没有完整的 .net 框架安装,msbuild 14 将无法工作

我有一台带有 Visual Studio 2010 和多个构建目标的构建机器。我使用的所有其他目标都按预期工作,出于某种原因,.net 4.6.1 的版本 14 的新版本不起作用。

当我从命令行执行构建时,出现以下错误:

C:\Program Files (x86)\MSBuild\14.0\bin\Microsoft.Common.CurrentVersion.targets(1097,5):警告 MSB3644:未找到框架“.NETFramework,Version=v4.6.1”的参考程序集。要解决此问题,请为此框架版本安装 SDK 或 Targeting Pack,或者将您的应用程序重新定位到已安装 SDK 或 Targeting Pack 的框架版本。请注意,程序集将从全局程序集缓存 (GAC) 中解析,并将用于代替引用程序集。因此,您的程序集可能无法正确定位于您想要的框架。

有人可以向我解释如何解决吗?

0 投票
0 回答
120 浏览

c# - 在 Clickonce 安装中包含 Microsoft.Build.dll

我制作了一个使用 VS 2015 构建工具的非常简单的应用程序。但是,当我尝试通过 Clickonce 将其安装到客户端计算机时,Microsoft.Build.dll 未分发,因此应用程序失败。

我检查了“发布”选项卡上的“应用程序文件”对话框 - 但它没有显示 dll,因此我无法将其包含在内。但是 dll 存在于 bin 文件夹中。对 dll 的引用是在 CopyLocal 设置为 true 的情况下添加的。

0 投票
3 回答
7702 浏览

c# - 使用 MSBuild 14 时禁用代码分析

我有一个包含多个 C# 6.0 项目的 .NET 解决方案。每个项目都通过 NuGet 引用 StyleCop 分析器。在 Visual Studio 中,我可以区分构建代码和分析代码,但我不知道如何在命令行(例如,在 CI 服务器上)使用 MSBuild v14.0 执行此操作。我正在msbuild mySolution.sln /t:Rebuild使用以下选项进行调用,但它们都不起作用:

  • /p:RunCodeAnalysis=False
  • /p:RunCodeAnalysisOnThisProject=False
  • /p:RunCodeAnalysis=False,RunCodeAnalysisOnThisProject=False

无论我做什么,警告 SAxxxx 都会保留在输出中。有谁知道在使用 MSBuild 时如何禁用代码分析?

背景:在我们的 CI 服务器上,我想区分“基本 MSBuild 警告”和来自静态代码分析的警告。

问候

0 投票
1 回答
431 浏览

c# - msbuild C# 14 编译器不会忽略警告 3021

我在生成的 C# 类之一中有以下编译指示,它用于忽略CLSCompliant 警告

这在使用 msbuild 12 编译时非常有效。升级我的项目以使用 msbuild 14 后,再次启用此警告。

这似乎发生在部分课程中。这就是我重现的方式:

  1. 在 Visual Studio 2013 中创建空项目(ToolsVersion=12.0)

  2. 添加具有以下内容的新文件 TestPragmaFile1.cs:

    /li>
  3. 添加具有以下内容的新文件 TestPragmaFile2.cs:

    /li>

4.在项目目录(包含csproj文件的目录)执行此命令进行编译:

"C:\Program Files (x86)\MSBuild\14.0\Bin\msbuild" /T:Clean;Build

结果:

“C:\Users\me\Documents\Visual Studio 2013\Projects\TestPragma\TestPragma\TestPragma.csproj”(清理;构建目标)(1)->(CoreCompile 目标)-> TestPragmaFile1.cs(5,26): 警告 CS3021:“TestPragma”不需要 CLSCompliant 属性 ,因为程序集没有 CLSCompliant 属性 [C:\Users\me\Documents\Visual Studio 2013\Projects\TestPragma\TestPragma\TestPrag ma.csproj]

你能帮助理解为什么会发生这种情况吗?正常吗?如何解决?

0 投票
1 回答
1015 浏览

c# - 具有项目依赖项的解决方案的 MSBuild 失败

我的解决方案的构建包含多个项目,突然出现故障,问题的原因尚不清楚。解决方案中的所有项目都针对相同的框架 (4.5.1),但是,某些项目的依赖项可能针对框架的早期版本。截至上周,我们能够成功构建属于这种情况的解决方案。从上周四开始,构建似乎被破坏,而构建服务器或解决方案没有任何更改。

为了说明和消除我们的生产设置的一些复杂性,我创建了一个模拟行为的示例解决方案。

项目结构:

  • CBI 解决方案
    • CBI 网站
    • CBI 实现库
    • CBI Core 库,定义接口

网站和类库的目标框架版本是 4.5.1

复制步骤

解决方案 1

Github 仓库:https ://github.com/NikitaGolovko/Solution1.git

使用 MSBuild 14 构建。我的命令是:

输出

完整输出位于此处:https ://github.com/NikitaGolovko/Solution1/blob/master/MSBuild_Output.txt

解决方案 2

Github 回购:https ://github.com/NikitaGolovko/Solution2.git

该解决方案与解决方案 1 几乎相同,唯一的例外是 CBI 实现库中的 Unity 依赖项。为了简化过程并消除 nuget 还原步骤,我在解决方案中包含了 nuget 包。

使用 MSBuild 14 构建。我的命令是:

输出

完整输出位于此处:https ://github.com/NikitaGolovko/Solution2/blob/master/MSBuild_Output.txt

观察

文件夹

在查看网站的 bin 文件夹时,我注意到 CBILite.dll 在为解决方案 2 构建后丢失,但存在于解决方案 1 中。

目标框架版本

在 MSBuild 参数中传递TargetFrameworkVersion似乎不会影响构建。我试图通过 4.5、4.5.1 无济于事。但是通过 3.5 会导致成功构建。这非常奇怪。

元项目

在比较为这两种解决方案生成的 Metaproj 文件时,唯一可观察到且看似重要的区别是缺少TargetFrameworkVersion元素。解决方案 1(无依赖项),包含v.4.0元素。解决方案2(具有依赖项)没有。我没有在 repo 中包含 metaproj 文件,但如果需要可以共享它们。

视觉工作室

在 Visual Studio 中构建解决方案效果很好。

额外的想法

这个问题表现得相当突然,似乎影响了我们大多数具有混合项目的解决方案(C#/VB + 网站)。Web 项目继续正常运行。

我尝试使用 MSBuild 15,但它导致了相同的行为。

有一些解决方法

  1. 使用解决方案保留 metaproj 文件并通过添加 v4.5.1 元素手动修改它。
  2. 添加额外的构建步骤以手动将 CBILib.dll 复制到网站项目中(通过批处理文件或其他方式)。
  3. 为指向 CBILib/bin/Release 文件夹的网站添加刷新文件

虽然所有这些解决方案都可能有效,但它们肯定是黑客行为,并且将来会出现问题。

我希望其他人对如何处理这个问题有更好的建议。